Last active
June 8, 2024 10:53
-
-
Save rbmm/59419dcc3d559426a5fd8df12af96dd1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
inline ULONG BOOL_TO_ERROR(BOOL f) | |
{ | |
return f ? NOERROR : GetLastError(); | |
} | |
#define case_INTERNET_CALLBACK_STATUS(x) case INTERNET_STATUS_##x: return #x; | |
PCSTR GetStatusName(DWORD dwInternetStatus) | |
{ | |
switch (dwInternetStatus) | |
{ | |
case_INTERNET_CALLBACK_STATUS(RESOLVING_NAME) | |
case_INTERNET_CALLBACK_STATUS(NAME_RESOLVED) | |
case_INTERNET_CALLBACK_STATUS(CONNECTING_TO_SERVER) | |
case_INTERNET_CALLBACK_STATUS(CONNECTED_TO_SERVER) | |
case_INTERNET_CALLBACK_STATUS(SENDING_REQUEST) | |
case_INTERNET_CALLBACK_STATUS(REQUEST_SENT) | |
case_INTERNET_CALLBACK_STATUS(RECEIVING_RESPONSE) | |
case_INTERNET_CALLBACK_STATUS(RESPONSE_RECEIVED) | |
case_INTERNET_CALLBACK_STATUS(CLOSING_CONNECTION) | |
case_INTERNET_CALLBACK_STATUS(CONNECTION_CLOSED) | |
case_INTERNET_CALLBACK_STATUS(HANDLE_CREATED) | |
case_INTERNET_CALLBACK_STATUS(HANDLE_CLOSING) | |
case_INTERNET_CALLBACK_STATUS(DETECTING_PROXY) | |
case_INTERNET_CALLBACK_STATUS(REDIRECT) | |
case_INTERNET_CALLBACK_STATUS(INTERMEDIATE_RESPONSE) | |
case_INTERNET_CALLBACK_STATUS(REQUEST_COMPLETE) | |
case_INTERNET_CALLBACK_STATUS(COOKIE_SENT) | |
case_INTERNET_CALLBACK_STATUS(COOKIE_RECEIVED) | |
} | |
return "??"; | |
} | |
void PrintHeaders(HINTERNET hRequest) | |
{ | |
ULONG cb = 0x1000, dwError , len; | |
do | |
{ | |
dwError = NOERROR; | |
if (PVOID buf = LocalAlloc(LMEM_FIXED, cb)) | |
{ | |
if (HttpQueryInfoW(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, buf, &cb, 0)) | |
{ | |
if (cb) | |
{ | |
cb /= sizeof(WCHAR); | |
PWSTR phsz = (PWSTR)buf; | |
do | |
{ | |
len = min(cb, 0x100); | |
DbgPrint("%.*S", len, phsz); | |
} while (phsz += len, cb -= len); | |
} | |
} | |
else | |
{ | |
dwError = GetLastError(); | |
} | |
LocalFree(buf); | |
} | |
else | |
{ | |
dwError = ERROR_NO_SYSTEM_RESOURCES; | |
} | |
} while (dwError == ERROR_INSUFFICIENT_BUFFER); | |
} | |
class CInet | |
{ | |
HINTERNET _M_hInternet = 0; | |
LONG _M_dwRefCount = 1; | |
protected: | |
virtual ~CInet() | |
{ | |
DbgPrint("%x: %s<%p>\n", GetCurrentThreadId(), __FUNCTION__, this); | |
close(); | |
} | |
HINTERNET Assign(HINTERNET hInternet) | |
{ | |
_M_hInternet = hInternet; | |
return hInternet; | |
} | |
public: | |
CInet() | |
{ | |
DbgPrint("%x: %s<%p>\n", GetCurrentThreadId(), __FUNCTION__, this); | |
} | |
void AddRef() | |
{ | |
InterlockedIncrementNoFence(&_M_dwRefCount); | |
} | |
void Release() | |
{ | |
if (!InterlockedDecrement(&_M_dwRefCount)) delete this; | |
} | |
HINTERNET Open( | |
_In_opt_ PCWSTR lpszAgent, | |
_In_ DWORD dwAccessType = INTERNET_OPEN_TYPE_DIRECT, | |
_In_opt_ PCWSTR lpszProxy = 0, | |
_In_opt_ PCWSTR lpszProxyBypass = 0 | |
) | |
{ | |
return Assign(InternetOpenW(lpszAgent, dwAccessType, lpszProxy, lpszProxyBypass, INTERNET_FLAG_ASYNC)); | |
} | |
void close() | |
{ | |
if (HINTERNET hInternet = InterlockedExchangePointer(&_M_hInternet, 0)) | |
{ | |
InternetCloseHandle(hInternet); | |
} | |
} | |
}; | |
class CInetUI : public CInet | |
{ | |
ULONG _M_dwThreadId = GetCurrentThreadId(); | |
virtual ~CInetUI() | |
{ | |
PostThreadMessageW(_M_dwThreadId, WM_QUIT, 0, 0); | |
} | |
}; | |
class CCon : public CInet | |
{ | |
CInet* _M_pInet; | |
virtual ~CCon() | |
{ | |
_M_pInet->Release(); | |
} | |
public: | |
CCon(CInet* pInet) : _M_pInet(pInet) | |
{ | |
pInet->AddRef(); | |
} | |
HINTERNET Connect( | |
_In_ HINTERNET hInternet, | |
_In_ PCWSTR lpszServerName, | |
_In_ INTERNET_PORT nServerPort, | |
_In_opt_ PCWSTR lpszUserName, | |
_In_opt_ PCWSTR lpszPassword, | |
_In_ DWORD dwService, | |
_In_ DWORD dwFlags | |
) | |
{ | |
return Assign(InternetConnect(hInternet, lpszServerName, | |
nServerPort, lpszUserName, lpszPassword, dwService, dwFlags, 0)); | |
} | |
}; | |
class __declspec(novtable) CRequest : public CInet | |
{ | |
CCon* _M_pSrv; | |
enum { api_none, api_HttpSendRequestW, api_InternetReadFile } _api = api_none; | |
ULONG _M_dwNumberOfBytesRead = 0; | |
static void WINAPI _S_StatusCallback( | |
_In_ HINTERNET hRequest, | |
_In_ DWORD_PTR dwContext, | |
_In_ DWORD dwInternetStatus, | |
_In_ PVOID lpvStatusInformation, | |
_In_ DWORD dwStatusInformationLength | |
) | |
{ | |
reinterpret_cast<CRequest*>(dwContext)->StatusCallback( | |
hRequest, dwInternetStatus, lpvStatusInformation, dwStatusInformationLength); | |
} | |
void StatusCallback( | |
_In_ HINTERNET hRequest, | |
_In_ DWORD dwInternetStatus, | |
_In_ PVOID lpvStatusInformation, | |
_In_ DWORD dwStatusInformationLength | |
) | |
{ | |
DbgPrint("%x: %s<%p>(%08x(%s), %p, %x)\n", GetCurrentThreadId(), __FUNCTION__, this, | |
dwInternetStatus, GetStatusName(dwInternetStatus), lpvStatusInformation, dwStatusInformationLength); | |
switch (dwInternetStatus) | |
{ | |
case INTERNET_STATUS_HANDLE_CLOSING: | |
// will be no more callbacks | |
Release(); | |
break; | |
case INTERNET_STATUS_REQUEST_COMPLETE: | |
OnRequestComplete(hRequest, reinterpret_cast<INTERNET_ASYNC_RESULT*>(lpvStatusInformation)->dwError); | |
break; | |
} | |
} | |
static PCSTR GetApiName(int api) | |
{ | |
switch (api) | |
{ | |
case api_HttpSendRequestW: return "HttpSendRequest"; | |
case api_InternetReadFile: return "InternetReadFile"; | |
} | |
return "api_???"; | |
} | |
void OnRequestComplete(HINTERNET hRequest, ULONG dwError) | |
{ | |
DbgPrint("%x: %s<%p>: %s=%x\n", GetCurrentThreadId(), __FUNCTION__, this, GetApiName(_api), dwError); | |
if (dwError) | |
{ | |
close(); | |
return; | |
} | |
switch (_api) | |
{ | |
case api_HttpSendRequestW: | |
OnConnect(hRequest); | |
break; | |
case api_InternetReadFile: | |
OnRead(hRequest, _M_dwNumberOfBytesRead, TRUE); | |
break; | |
default: __debugbreak(); | |
} | |
} | |
virtual PVOID GetBuf(_Out_ PULONG lpdwNumberOfBytesToRead) = 0; | |
virtual BOOL OnRead(ULONG dwNumberOfBytesRead) = 0; | |
virtual void OnReadCompleted() = 0; | |
void OnRead(HINTERNET hRequest, ULONG dwNumberOfBytesRead, BOOL bRead) | |
{ | |
if (dwNumberOfBytesRead) | |
{ | |
if (OnRead(dwNumberOfBytesRead) && bRead) | |
{ | |
Read(hRequest); | |
} | |
} | |
else | |
{ | |
OnReadCompleted(); | |
close(); | |
} | |
} | |
protected: | |
virtual ~CRequest() | |
{ | |
_M_pSrv->Release(); | |
} | |
void Read(HINTERNET hRequest) | |
{ | |
_api = api_InternetReadFile; | |
__0: | |
DbgPrint("%x: InternetReadFile...\n", GetCurrentThreadId()); | |
_M_dwNumberOfBytesRead = 0; | |
ULONG dwNumberOfBytesToRead; | |
PVOID lpBuffer = GetBuf(&dwNumberOfBytesToRead); | |
ULONG dwError = BOOL_TO_ERROR(InternetReadFile(hRequest, lpBuffer, dwNumberOfBytesToRead, &_M_dwNumberOfBytesRead)); | |
DbgPrint("%x: InternetReadFile=%x, %x\n", GetCurrentThreadId(), dwError, _M_dwNumberOfBytesRead); | |
switch (dwError) | |
{ | |
case ERROR_IO_PENDING: | |
break; | |
case NOERROR: | |
//optimization, we can goto default: here but will be recurcive calls | |
OnRead(hRequest, _M_dwNumberOfBytesRead, FALSE); | |
if (_M_dwNumberOfBytesRead) | |
{ | |
goto __0; | |
} | |
break; | |
default: | |
OnRequestComplete(hRequest, dwError); | |
} | |
} | |
virtual void OnConnect(HINTERNET hRequest) = 0; | |
public: | |
CRequest(CCon* pSrv) : _M_pSrv(pSrv) | |
{ | |
pSrv->AddRef(); | |
} | |
HINTERNET OpenRequest( | |
_In_ HINTERNET hConnect, | |
_In_opt_ PCWSTR lpszVerb, | |
_In_opt_ PCWSTR lpszObjectName, | |
_In_opt_ PCWSTR lpszVersion, | |
_In_opt_ PCWSTR lpszReferrer, | |
_In_opt_z_ PCWSTR * lplpszAcceptTypes, | |
_In_ DWORD dwFlags | |
) | |
{ | |
if (HINTERNET hRequest = HttpOpenRequestW(hConnect, lpszVerb, lpszObjectName, lpszVersion, | |
lpszReferrer, lplpszAcceptTypes, dwFlags, (ULONG_PTR)this)) | |
{ | |
Assign(hRequest); | |
AddRef(); | |
if (INTERNET_INVALID_STATUS_CALLBACK == InternetSetStatusCallback(hRequest, _S_StatusCallback)) | |
{ | |
Release(); | |
close(); | |
return 0; | |
} | |
return hRequest; | |
} | |
return 0; | |
} | |
void SendRequest( | |
_In_ HINTERNET hRequest, | |
_In_reads_opt_(dwHeadersLength) PCWSTR lpszHeaders = 0, | |
_In_ DWORD dwHeadersLength = 0, | |
_In_reads_bytes_opt_(dwOptionalLength) PVOID lpOptional = 0, | |
_In_ DWORD dwOptionalLength = 0 | |
) | |
{ | |
_api = api_HttpSendRequestW; | |
switch (ULONG dwError = BOOL_TO_ERROR(HttpSendRequestW(hRequest, lpszHeaders, dwHeadersLength, lpOptional, dwOptionalLength))) | |
{ | |
case ERROR_IO_PENDING: | |
break; | |
default: | |
OnRequestComplete(hRequest, dwError); | |
} | |
} | |
}; | |
class CMyRequest : public CRequest | |
{ | |
PSTR _M_Buf = 0; | |
ULONG _M_dwTotalRead = 0; | |
ULONG _M_dwFreeSpace = 0; | |
virtual ~CMyRequest() | |
{ | |
if (_M_Buf) delete [] _M_Buf; | |
} | |
virtual void OnConnect(HINTERNET hRequest) | |
{ | |
PrintHeaders(hRequest); | |
if (_M_Buf = new CHAR[_M_dwFreeSpace = 0x100000]) | |
{ | |
Read(hRequest); | |
} | |
else | |
{ | |
close(); | |
} | |
} | |
virtual void OnReadCompleted() | |
{ | |
DbgPrint("%x: read completed !!\n", GetCurrentThreadId()); | |
} | |
virtual PVOID GetBuf(_Out_ PULONG lpdwNumberOfBytesToRead) | |
{ | |
*lpdwNumberOfBytesToRead = _M_dwFreeSpace; | |
return _M_Buf + _M_dwTotalRead; | |
} | |
virtual BOOL OnRead(ULONG dwNumberOfBytesRead) | |
{ | |
_M_dwTotalRead += dwNumberOfBytesRead, _M_dwFreeSpace -= dwNumberOfBytesRead; | |
DbgPrint("%x: OnRead(%x/%x)\n", GetCurrentThreadId(), dwNumberOfBytesRead, _M_dwTotalRead); | |
return TRUE; | |
} | |
public: | |
CMyRequest(CCon* pSrv) : CRequest(pSrv) | |
{ | |
} | |
}; | |
void InternetTest(PCWSTR lpszServerName, PCWSTR lpszObjectName) | |
{ | |
if (CInet* pInet = new CInetUI) | |
{ | |
if (HINTERNET hInternet = pInet->Open(L"Test Agent")) | |
{ | |
if (CCon* pSrv = new CCon(pInet)) | |
{ | |
if (HINTERNET hConnect = pSrv->Connect(hInternet, lpszServerName, | |
INTERNET_DEFAULT_HTTPS_PORT, 0, 0, INTERNET_SERVICE_HTTP, 0)) | |
{ | |
if (CRequest* pReq = new CMyRequest(pSrv)) | |
{ | |
if (HINTERNET hRequest = pReq->OpenRequest(hConnect, 0, lpszObjectName, 0, 0, 0, | |
INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_SECURE)) | |
{ | |
pReq->SendRequest(hRequest); | |
} | |
pReq->Release(); | |
} | |
} | |
pSrv->Release(); | |
} | |
} | |
pInet->Release(); | |
} | |
} | |
void InternetTest() | |
{ | |
InternetTest(L"www.linkedin.com", L"/feed/"); | |
MessageBoxW(0,0,0,0); | |
} | |
/* | |
7ac: CInet::CInet<000001BB7906DE50> | |
7ac: CInet::CInet<000001BB7906DEA0> | |
7ac: CInet::CInet<000001BB790AF630> | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000050(DETECTING_PROXY), 0000000000000000, 0) | |
c20: CRequest::StatusCallback<000001BB790AF630>(00000140(COOKIE_SENT), 0000008501FFED90, 10) | |
c20: CRequest::StatusCallback<000001BB790AF630>(0000000a(RESOLVING_NAME), 000001BB79108C20, 10) | |
c20: CRequest::StatusCallback<000001BB790AF630>(0000000b(NAME_RESOLVED), 0000008501FFD900, d) | |
c20: CRequest::StatusCallback<000001BB790AF630>(00000014(CONNECTING_TO_SERVER), 0000008501FFDCC0, d) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000015(CONNECTED_TO_SERVER), 00000085020FEE20, d) | |
1818: CRequest::StatusCallback<000001BB790AF630>(0000001e(SENDING_REQUEST), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(0000001f(REQUEST_SENT), 00000085020FE790, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEF20, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEC70, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEC70, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEC70, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEC70, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000141(COOKIE_RECEIVED), 00000085020FEBC0, 20) | |
1818: CRequest::StatusCallback<000001BB790AF630>(0000006e(REDIRECT), 000001BB79159980, 5c) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000050(DETECTING_PROXY), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000140(COOKIE_SENT), 00000085020FEDE0, 10) | |
1818: CRequest::StatusCallback<000001BB790AF630>(0000001e(SENDING_REQUEST), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(0000001f(REQUEST_SENT), 00000085020FE550, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEF20, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEC70, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEC70, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEC70, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEC70, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000064(REQUEST_COMPLETE), 00000085020FF140, 10) | |
1818: CRequest::OnRequestComplete<000001BB790AF630>: HttpSendRequest=0 | |
HTTP/1.1 200 OK | |
Date: Sat, 08 Jun 2024 08:57:24 GMT | |
Content-Type: text/html; charset=utf-8 | |
Transfer-Encoding: chunked | |
Connection: keep-alive | |
Vary: Accept-Encoding | |
Last-Modified: Thu, 06 Jun 2024 10:59:02 PDT | |
X-FS-UUID: 00061a5d1ac9cee40a7684e9387e8da0 | |
Strict-Transport-Security: max-age=31536000 | |
X-Content-Type-Options: nosniff | |
X-Frame-Options: sameorigin | |
Content-Security-Policy: default-src 'none'; connect-src 'self' *.licdn.com *.linkedin.com cdn.linkedin.oribi.io dpm.demdex.net/id lnkd.demdex.net blob: accounts.google.com/gsi/ linkedin.sc.omtrdc.net/b/ss/ v.clarity.ms/collect *.microsoft.com *.adnxs.com *.tealiumiq.com login.microsoftonline.com; script-src 'report-sample' 'sha256-th47JTnh6tX15SUn/I+GGmsOSXpa7dh5Skner77gxlY=' 'sha256-SSoodjUD3LGm2FfFCVHGqEb8D4UM3OOigidT2UKDcYg=' 'sha256-cKTgdnmO6+hXd85a9wKg1effVfVzenUAtUCyOKY9bQE=' 'sha256-DwtT8+ZZKpxH9pqZNAmJ3GdbLAh5SsYaXR3omTXPCns=' 'sha256-sV9jZa797T0QWBzcU/CNd4tpBhTnh+TFdLnfjlitl28=' 'sha256-aa/Q8CRBDSqTQbCIyioPhZaz+G+dbPyu7BzsjInEmiU=' 'sha256-THuVhwbXPeTR0HszASqMOnIyxqEgvGyBwSPBKBF/iMc=' 'sha256-zTIusdVJJeXz9+iox2a+pdDglzbpRpFVRzEwvW4AONk=' 'sha256-iC8MPqNLw0FDnsBf4DlSkFLNTwhkI85aouiAEB819ic=' 'sha256-2EqrEvcPzl8c6/TSGVvaVMEe7lg700MAz/te4/3kTYY=' 'sha256-y5uW69VItKj51mcc7UD9qfptDVUqicZL+bItEpvVNDw=' 'sha256-DatsFGoJ8gFkzzxo47Ou76WZ+3QBPOQHtBu9p9b3DhA=' 'sha256-k95cyM8gFgPziZe5VQ2IvJvBUVyd5zFt2CokIUwqdHE=' 'sha256-PyCXNcEkzRWqbiNr087fizmiBBrq9O6GGD8eV3P09Ik=' 'sha256-RFqsjmAF1N5LnfpaHFvPqFlVkeIS/DtTAFor+JjJJVc=' 'sha256-2SQ55Erm3CPCb+k03EpNxU9bdV3XL9TnVTriDs7INZ4=' 'sha256-S/KSPe186K/1B0JEjbIXcCdpB97krdzX05S+dHnQjUs=' 'sha256-9pXOIwF4N0gPltLd3AI69lkCjSC2H/Eb3sc5zdmUyYU=' 'sha256-jou6v/Nleyzoc+LXktAv1Fp8M807dVVxy7E/yzVljHc=' 'sha256-6E4e/3dSvj/8JZT2S2yR91mspqM6MyOpKl5lrhHsZa8=' 'sha256-3woF8BZ54TeXM+czaH3aXoaJsVpiamuAKFsXDykAR/Q=' 'sha256-vIfNcKb8ixJg1cfJIoNNYjWcm0lezj1/XpUNFiZyVsU=' 'sha256-cLsHUHFgT/VGX04cZrJ9xgm4HbzTR7ptutkxK+7BlMk=' 'sha256-BwU8jMnQYUhjOpsDVABpfddV/DlP1ZYrFcTumYw7x54=' 'sha256-wz6ika9i3WU3bpUPdhYDZeO/NrDQniDyiscN0LWnyaY=' static.licdn.com static-exp1.licdn.com static-exp2.licdn.com static-exp3.licdn.com platform.linkedin.com platform-akam.linkedin.com platform-ecst.linkedin.com platform-azur.linkedin.com snap.licdn.com www.googletagmanager.com/gtag/js; img-src data: blob: * android-webview-video-poster:; font-src data: *; style-src 'self' 'unsafe-inline' static.licdn.com static-exp1.licdn.com static-exp2.licdn.com static-exp3.licdn.com; media-src 'self' *.licdn.com *.lynda.com; worker-src 'self' blob: static.licdn.com static-exp1.licdn.com static-exp2.licdn.com static-exp3.licdn.com; frame-src 'self' www.youtube.com/embed/ www.youtube-nocookie.com/embed/ lnkd.demdex.net smartlock.google.com accounts.google.com player.vimeo.com *.linkedin.com www.slideshare.net *.megaphone.fm *.omny.fm *.sounder.fm msit.powerbi.com app.powerbi.com linkedin.github.io *.licdn.com *.adnxs.com acdn.adnxs-simple.com radar.cedexis.com edge-auth.microsoft.com; frame-ancestors 'self' *.www.linkedin.com:*; manifest-src 'self'; report-uri https://www.linkedin.com/security/csp?f=grl | |
X-Li-Fabric: prod-lva1 | |
Pragma: no-cache | |
Expires: Thu, 01 Jan 1970 00:00:00 GMT | |
Cache-Control: no-cache, no-store | |
X-Li-Pop: cf-prod-lva1-x | |
X-Li-Proto: http/1.1 | |
X-LI-UUID: AAYaXRrJzuQKdoTpOH6NoA== | |
CF-Cache-Status: DYNAMIC | |
Server: cloudflare | |
CF-RAY: 8907ac948b48a05b-FRA | |
1818: InternetReadFile... | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FE0E0, 4) | |
1818: InternetReadFile=0, 3574 | |
1818: OnRead(3574/3574) | |
1818: InternetReadFile... | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FE0E0, 4) | |
1818: InternetReadFile=0, 559 | |
1818: OnRead(559/3acd) | |
1818: InternetReadFile... | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FE0E0, 4) | |
1818: InternetReadFile=0, 26fb | |
1818: OnRead(26fb/61c8) | |
1818: InternetReadFile... | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: InternetReadFile=3e5, 0 | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FEF20, 4) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000064(REQUEST_COMPLETE), 00000085020FF140, 10) | |
1818: CRequest::OnRequestComplete<000001BB790AF630>: InternetReadFile=0 | |
1818: OnRead(553/671b) | |
1818: InternetReadFile... | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FE0E0, 4) | |
1818: InternetReadFile=0, 2016 | |
1818: OnRead(2016/8731) | |
1818: InternetReadFile... | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FE0E0, 4) | |
1818: InternetReadFile=0, 559 | |
1818: OnRead(559/8c8a) | |
1818: InternetReadFile... | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 00000085020FE0E0, 4) | |
1818: InternetReadFile=0, 1abd | |
1818: OnRead(1abd/a747) | |
1818: InternetReadFile... | |
1818: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
1818: InternetReadFile=3e5, 0 | |
c20: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 0000008501FFEED0, 4) | |
c20: CRequest::StatusCallback<000001BB790AF630>(00000064(REQUEST_COMPLETE), 0000008501FFF0F0, 10) | |
c20: CRequest::OnRequestComplete<000001BB790AF630>: InternetReadFile=0 | |
c20: OnRead(559/aca0) | |
c20: InternetReadFile... | |
c20: CRequest::StatusCallback<000001BB790AF630>(00000028(RECEIVING_RESPONSE), 0000000000000000, 0) | |
c20: CRequest::StatusCallback<000001BB790AF630>(00000029(RESPONSE_RECEIVED), 0000008501FFE090, 4) | |
c20: InternetReadFile=0, bbd | |
c20: OnRead(bbd/b85d) | |
c20: InternetReadFile... | |
c20: InternetReadFile=0, 0 | |
c20: OnRead(0/b85d) | |
c20: read completed !! | |
c20: CRequest::StatusCallback<000001BB790AF630>(00000046(HANDLE_CLOSING), 0000008501FFEF80, 8) | |
c20: CInet::~CInet<000001BB7906DE50> | |
c20: CInet::~CInet<000001BB7906DEA0> | |
c20: CInet::~CInet<000001BB790AF630> | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment