int TransferHTTPS(RecorderProperties* ws, wstring dest, wstring sdrid, wstring dbid, wstring delta, int hport, wstring hproxy = L"", int hproxyport = 0) { BOOL bResults = FALSE; HINTERNET hSession = NULL, hConnect = NULL, hRequest = NULL; // connect if (!hproxy.empty()) { wchar_t proxybuf[255] = L""; _snwprintf(proxybuf, 225, L"%s:%d", hproxy.data(), hport); hSession = WinHttpOpen(L"SDR windows sender", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, proxybuf, NULL, 0); WriteFileLogf(L"Connected without proxy."); } else { hSession = WinHttpOpen(L"SDR windows sender", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); WriteFileLogf(L"Connected with proxy."); } if (!hSession) { wchar_t errorbuf[1024] = L""; _snwprintf(errorbuf, 1024, L"Error Open %d has occurred.", GetLastError()); WriteFileLogf(errorbuf); } //sha256 delta.shrink_to_fit(); wstring tdelta = delta + L":73:79:73:74:65:6d:64:61:74:61:72:65:63:6f:72:64:65:72"; tdelta = RemoveWstringSymbol(tdelta, L':'); wstring payload = umtl::sha256(tdelta).c_str(); if (hSession) hConnect = WinHttpConnect(hSession, dest.c_str(), hport, 0); LPCWSTR types[2]; types[0] = L"application/x-www-form-urlencoded"; types[1] = 0; if (hConnect) hRequest = WinHttpOpenRequest(hConnect, L"POST", L"/api/ps", NULL, WINHTTP_NO_REFERER, types, WINHTTP_FLAG_SECURE); DWORD dwTmp = SECURITY_FLAG_IGNORE_CERT_CN_INVALID | SECURITY_FLAG_IGNORE_UNKNOWN_CA; WinHttpSetOption(hRequest, WINHTTP_OPTION_SECURITY_FLAGS, (LPVOID) & dwTmp, sizeof(dwTmp)); //params wchar_t valuewBuf[2048 * 20] = L""; _snwprintf(valuewBuf, 2048 * 10, L"value=%s&h=%s&db=%s&hash=%s&data=%s", sdrid.data(), scfg.hostname.data(), dbid.data(), payload.data(), delta.data()); if (!hConnect) { wchar_t errorbuf[1024] = L""; _snwprintf(errorbuf, 1024, L"Error Request %d has occurred.", GetLastError()); WriteFileLogf(errorbuf); } #ifdef SEND_CHAR //sending char char valueBuf[2048 * 10]; char DefChar = ' '; WideCharToMultiByte(CP_ACP, 0, valuewBuf, -1, valueBuf, 2048 * 10, &DefChar, NULL); if (hRequest) bResults = WinHttpSendRequest(hRequest, 0, 0, (LPVOID) valueBuf, strlen(valueBuf), strlen(valueBuf), 0); #endif #ifndef SEND_CHAR //sending wchar_t if(hRequest) bResults = WinHttpSendRequest( hRequest, 0, 0, (LPVOID)valuewBuf, wcslen(valuewBuf), wcslen(valuewBuf),0); #endif if (!bResults) { wchar_t errorbuf[1024] = L""; _snwprintf(errorbuf, 1024, L"Error Write %d has occurred.", GetLastError()); WriteFileLogf(errorbuf); } // receive if (bResults) bResults = WinHttpReceiveResponse(hRequest, NULL); if (bResults) { wchar_t errorbuf[1024] = L""; #ifdef SEND_CHAR _snwprintf(errorbuf, 1024, L"Sucessfuly send POST of %d size.", strlen(valueBuf)); #endif #ifndef SEND_CHAR _snwprintf(errorbuf,1024,L"Sucessfuly send POST of %d size.",wcslen(valuewBuf)); #endif WriteFileLogf(errorbuf); } else { wchar_t errorbuf[1024] = L""; _snwprintf(errorbuf, 1024, L"Error Receive %d has occurred.", GetLastError()); WriteFileLogf(errorbuf); } LPSTR pszOutBuffer; DWORD dwSize = 0; DWORD dwDownloaded = 0; if (bResults) { do { dwSize = 0; if (!WinHttpQueryDataAvailable(hRequest, &dwSize)) { wchar_t errorbuf[1024] = L""; _snwprintf(errorbuf, 1024, L"Error Receive data %d has occurred.", GetLastError()); WriteFileLogf(errorbuf); break; } if (!dwSize) break; pszOutBuffer = new char[dwSize]; ZeroMemory(pszOutBuffer, dwSize); if (!WinHttpReadData(hRequest, (LPVOID) pszOutBuffer, dwSize, &dwDownloaded)) { wchar_t errorbuf[1024] = L""; _snwprintf(errorbuf, 1024, L"Error Read data %d has occurred.", GetLastError()); WriteFileLogf(errorbuf); } else { wchar_t errorbuf[1024] = L""; _snwprintf(errorbuf, 1024, L"Sucessfuly read response."); WriteFileLogf(errorbuf); } delete[] pszOutBuffer; } while (dwSize > 0); } else { wchar_t errorbuf[1024] = L""; _snwprintf(errorbuf, 1024, L"Error %d has occurred.", GetLastError()); WriteFileLogf(errorbuf); } // Close open handles. if (hRequest) WinHttpCloseHandle(hRequest); if (hConnect) WinHttpCloseHandle(hConnect); if (hSession) WinHttpCloseHandle(hSession); return 0; }