//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: N C I N E T . C P P // // Contents: Wrappers for the WinInet APIs so they return HRESULTs // // Notes: // // Author: danielwe 11 Oct 1999 // //---------------------------------------------------------------------------- #include #pragma hdrstop #include "ncinet.h" #include "ncbase.h" #include "ncdebug.h" HINTERNET g_hInetSess = NULL; BOOL g_fInited = FALSE; HRESULT HrInternetSetOptionA( IN HINTERNET hInternet OPTIONAL, IN DWORD dwOption, IN LPVOID lpBuffer, IN DWORD dwBufferLength ) { HRESULT hr = S_OK; if (!InternetSetOptionA(hInternet, dwOption, lpBuffer, dwBufferLength)) { hr = HrFromLastWin32Error(); } TraceErrorSkip1("HrInternetSetOptionA", hr, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)); return hr; } HRESULT HrInternetQueryOptionA( IN HINTERNET hInternet OPTIONAL, IN DWORD dwOption, OUT LPVOID lpBuffer OPTIONAL, IN OUT LPDWORD lpdwBufferLength ) { HRESULT hr = S_OK; if (!InternetQueryOptionA(hInternet, dwOption, lpBuffer,lpdwBufferLength)) { hr = HrFromLastWin32Error(); } TraceErrorSkip1("HrInternetQueryOption", hr, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)); return hr; } INTERNET_STATUS_CALLBACK HinInternetSetStatusCallback(IN HINTERNET hInternet, IN INTERNET_STATUS_CALLBACK lpfnInternetCallback) { HRESULT hr = S_OK; return InternetSetStatusCallback(hInternet, lpfnInternetCallback); } HINTERNET HinInternetOpenA(IN LPCSTR lpszAgent, IN DWORD dwAccessType, IN LPCSTR lpszProxyName, IN LPCSTR lpszProxyBypass, IN DWORD dwFlags) { HRESULT hr = S_OK; DWORD dwTimeout = 5000; // 5 second HINTERNET hInet = InternetOpenA(lpszAgent, dwAccessType, lpszProxyName, lpszProxyBypass, dwFlags); if (hInet) { hr = HrInternetSetOptionA( hInet, INTERNET_OPTION_CONNECT_TIMEOUT, (LPVOID)&dwTimeout, sizeof(dwTimeout)); if (SUCCEEDED(hr)) { hr = HrInternetSetOptionA( hInet, INTERNET_OPTION_RECEIVE_TIMEOUT, (LPVOID)&dwTimeout, sizeof(dwTimeout)); } } TraceError("HinInternetOpenA", hr); return hInet; } HRESULT HrInternetCloseHandle(HINTERNET hInternet) { AssertSz(g_hInetSess, "Must have internet session already!"); if (!InternetCloseHandle(hInternet)) { HRESULT hr = HrFromLastWin32Error(); TraceError("HrInternetCloseHandle", hr); return hr; } return S_OK; } HRESULT HrInternetCrackUrlA(IN LPCSTR lpszUrl, IN DWORD dwUrlLength, IN DWORD dwFlags, IN OUT LPURL_COMPONENTSA lpUrlComponents) { HRESULT hr = S_OK; if (!InternetCrackUrlA(lpszUrl, dwUrlLength, dwUrlLength, lpUrlComponents)) { hr = HrFromLastWin32Error(); } TraceError("HrInternetCrackUrl", hr); return hr; } HINTERNET HinInternetConnectA(IN HINTERNET hInternet, IN LPCSTR lpszServerName, IN INTERNET_PORT nServerPort, IN LPCSTR lpszUserName OPTIONAL, IN LPCSTR lpszPassword OPTIONAL, IN DWORD dwService, IN DWORD dwFlags, IN DWORD_PTR dwContext) { HRESULT hr = S_OK; return InternetConnectA(hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, dwService, dwFlags, dwContext); } HINTERNET HinHttpOpenRequestA(IN HINTERNET hConnect, IN LPCSTR lpszVerb, IN LPCSTR lpszObjectName, IN LPCSTR lpszVersion, IN LPCSTR lpszReferrer OPTIONAL, IN LPCSTR FAR * lplpszAcceptTypes OPTIONAL, IN DWORD dwFlags, IN DWORD_PTR dwContext) { HRESULT hr = S_OK; return HttpOpenRequestA(hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferrer, lplpszAcceptTypes, dwFlags, dwContext); } HRESULT HrHttpAddRequestHeadersA(IN HINTERNET hRequest, IN LPCSTR lpszHeaders, IN DWORD dwHeadersLength, IN DWORD dwModifiers) { HRESULT hr = S_OK; if (!HttpAddRequestHeadersA(hRequest, lpszHeaders, dwHeadersLength, dwModifiers)) { hr = HrFromLastWin32Error(); } TraceError("HrHttpAddRequestHeaders", hr); return hr; } HRESULT HrHttpSendRequestExA(IN HINTERNET hRequest, IN LPINTERNET_BUFFERSA lpBuffersIn OPTIONAL, OUT LPINTERNET_BUFFERSA lpBuffersOut OPTIONAL, IN DWORD dwFlags, IN DWORD_PTR dwContext) { HRESULT hr = S_OK; if (!HttpSendRequestExA(hRequest, lpBuffersIn, lpBuffersOut, dwFlags, dwContext)) { hr = HrFromLastWin32Error(); } TraceError("HrHttpSendRequestEx", hr); return hr; } HRESULT HrHttpSendRequestA(IN HINTERNET hRequest, IN LPCSTR lpszHeaders OPTIONAL, IN DWORD dwHeadersLength, IN LPVOID lpOptional OPTIONAL, IN DWORD dwOptionalLength) { HRESULT hr = S_OK; if (!HttpSendRequestA(hRequest, lpszHeaders, dwHeadersLength, lpOptional, dwOptionalLength)) { hr = HrFromLastWin32Error(); } TraceError("HrHttpSendRequest", hr); return hr; } HRESULT HrInternetWriteFile(IN HINTERNET hFile, IN LPCVOID lpBuffer, IN DWORD dwNumberOfBytesToWrite, OUT LPDWORD lpdwNumberOfBytesWritten) { HRESULT hr = S_OK; if (!InternetWriteFile(hFile, lpBuffer, dwNumberOfBytesToWrite, lpdwNumberOfBytesWritten)) { hr = HrFromLastWin32Error(); } TraceError("HrInternetWriteFile", hr); return hr; } HRESULT HrHttpEndRequest(IN HINTERNET hRequest, OUT LPINTERNET_BUFFERSA lpBuffersOut OPTIONAL, IN DWORD dwFlags, IN DWORD_PTR dwContext) { HRESULT hr = S_OK; if (!HttpEndRequestA(hRequest, lpBuffersOut, dwFlags, dwContext)) { hr = HrFromLastWin32Error(); } TraceError("HrHttpEndRequest", hr); return hr; } HRESULT HrHttpQueryInfo(IN HINTERNET hRequest, IN DWORD dwInfoLevel, IN OUT LPVOID lpBuffer OPTIONAL, IN OUT LPDWORD lpdwBufferLength, IN OUT LPDWORD lpdwIndex OPTIONAL) { HRESULT hr = S_OK; if (!HttpQueryInfoA(hRequest, dwInfoLevel, lpBuffer, lpdwBufferLength, lpdwIndex)) { hr = HrFromLastWin32Error(); } TraceErrorSkip1("HrHttpQueryInfo", hr, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)); return hr; } HRESULT HrGetRequestUriA(LPCSTR szUrl, DWORD cbUri, LPSTR szUri) { URL_COMPONENTSA urlComp = {0}; HRESULT hr = S_OK; // Parse the server name out of the URL // urlComp.dwStructSize = sizeof(URL_COMPONENTS); urlComp.lpszUrlPath = szUri; urlComp.dwUrlPathLength = cbUri; hr = HrInternetCrackUrlA(szUrl, 0, 0, &urlComp); TraceError("HrGetRequestUri", hr); return hr; }