コード例 #1
0
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;
}