You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
247 lines
6.5 KiB
247 lines
6.5 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
autoprox.cxx
|
|
|
|
Abstract:
|
|
|
|
Contains class implementation for auto-proxy DLLs which can extent WININET's
|
|
abilities (logic) for deciding what proxies to use.
|
|
|
|
How auto-proxy works:
|
|
By offloading requests to a specialized Win32 Thread which picks
|
|
up queued up message requests for Queries, Shutdown, and Initialization
|
|
|
|
|
|
Contents:
|
|
AUTO_PROXY_ASYNC_MSG
|
|
|
|
Author:
|
|
|
|
Arthur L Bierer (arthurbi) 17-Dec-1996
|
|
|
|
Revision History:
|
|
|
|
17-Dec-1996 arthurbi
|
|
Created
|
|
|
|
--*/
|
|
|
|
#include <wininetp.h>
|
|
|
|
|
|
|
|
AUTO_PROXY_ASYNC_MSG::AUTO_PROXY_ASYNC_MSG(
|
|
IN INTERNET_SCHEME isUrlScheme,
|
|
IN LPSTR lpszUrl,
|
|
IN LPSTR lpszUrlHostName,
|
|
IN DWORD dwUrlHostNameLength
|
|
)
|
|
{
|
|
URL_COMPONENTS urlComponents;
|
|
|
|
Initalize();
|
|
|
|
if ( lpszUrl )
|
|
{
|
|
_lpszUrl = lpszUrl;
|
|
_dwUrlLength = lstrlen(lpszUrl);
|
|
_tUrlProtocol = isUrlScheme;
|
|
_pmProxyQuery = PROXY_MSG_GET_PROXY_INFO;
|
|
_pmaAllocMode = MSG_ALLOC_STACK_ONLY;
|
|
|
|
memset(&urlComponents, 0, sizeof(urlComponents));
|
|
urlComponents.dwStructSize = sizeof(urlComponents);
|
|
urlComponents.lpszHostName = lpszUrlHostName;
|
|
urlComponents.dwHostNameLength = dwUrlHostNameLength;
|
|
|
|
//
|
|
// parse out the host name and port. The host name will be decoded; the
|
|
// original URL will not be modified
|
|
//
|
|
|
|
if (WinHttpCrackUrlA(lpszUrl, 0, ICU_DECODE, &urlComponents))
|
|
{
|
|
_nUrlPort = urlComponents.nPort;
|
|
_lpszUrlHostName = urlComponents.lpszHostName;
|
|
_dwUrlHostNameLength = urlComponents.dwHostNameLength;
|
|
|
|
if ( _tUrlProtocol == INTERNET_SCHEME_UNKNOWN )
|
|
{
|
|
_tUrlProtocol = urlComponents.nScheme;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
_Error = GetLastError();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_Error = ERROR_NOT_ENOUGH_MEMORY;
|
|
}
|
|
}
|
|
|
|
AUTO_PROXY_ASYNC_MSG::AUTO_PROXY_ASYNC_MSG(
|
|
IN INTERNET_SCHEME isUrlScheme,
|
|
IN LPSTR lpszUrlHostName,
|
|
IN DWORD dwUrlHostNameLength
|
|
)
|
|
{
|
|
|
|
Initalize();
|
|
|
|
_tUrlProtocol = isUrlScheme;
|
|
_pmProxyQuery = PROXY_MSG_GET_PROXY_INFO;
|
|
_pmaAllocMode = MSG_ALLOC_STACK_ONLY;
|
|
_lpszUrlHostName = lpszUrlHostName;
|
|
_dwUrlHostNameLength = dwUrlHostNameLength;
|
|
}
|
|
|
|
AUTO_PROXY_ASYNC_MSG::AUTO_PROXY_ASYNC_MSG(
|
|
IN INTERNET_SCHEME isUrlScheme,
|
|
IN LPSTR lpszUrl,
|
|
IN DWORD dwUrlLength,
|
|
IN LPSTR lpszUrlHostName,
|
|
IN DWORD dwUrlHostNameLength,
|
|
IN INTERNET_PORT nUrlPort
|
|
)
|
|
{
|
|
Initalize();
|
|
|
|
_tUrlProtocol = isUrlScheme;
|
|
_pmProxyQuery = PROXY_MSG_GET_PROXY_INFO;
|
|
_pmaAllocMode = MSG_ALLOC_STACK_ONLY;
|
|
_nUrlPort = nUrlPort;
|
|
_lpszUrlHostName = lpszUrlHostName;
|
|
_dwUrlHostNameLength = dwUrlHostNameLength;
|
|
_lpszUrl = lpszUrl;
|
|
_dwUrlLength = dwUrlLength;
|
|
|
|
}
|
|
|
|
VOID
|
|
AUTO_PROXY_ASYNC_MSG::SetProxyMsg(
|
|
IN INTERNET_SCHEME isUrlScheme,
|
|
IN LPSTR lpszUrl,
|
|
IN DWORD dwUrlLength,
|
|
IN LPSTR lpszUrlHostName,
|
|
IN DWORD dwUrlHostNameLength,
|
|
IN INTERNET_PORT nUrlPort
|
|
)
|
|
{
|
|
_tUrlProtocol = isUrlScheme;
|
|
_pmProxyQuery = PROXY_MSG_GET_PROXY_INFO;
|
|
_pmaAllocMode = MSG_ALLOC_STACK_ONLY;
|
|
_nUrlPort = nUrlPort;
|
|
_lpszUrlHostName = lpszUrlHostName;
|
|
_dwUrlHostNameLength = dwUrlHostNameLength;
|
|
_lpszUrl = lpszUrl;
|
|
_dwUrlLength = dwUrlLength;
|
|
}
|
|
|
|
|
|
AUTO_PROXY_ASYNC_MSG::AUTO_PROXY_ASYNC_MSG(
|
|
IN PROXY_MESSAGE_TYPE pmProxyQuery
|
|
)
|
|
{
|
|
Initalize();
|
|
|
|
_pmaAllocMode = MSG_ALLOC_HEAP_MSG_OBJ_OWNS;
|
|
_pmProxyQuery = pmProxyQuery;
|
|
}
|
|
|
|
AUTO_PROXY_ASYNC_MSG::AUTO_PROXY_ASYNC_MSG(
|
|
IN AUTO_PROXY_ASYNC_MSG *pStaticAutoProxy
|
|
)
|
|
{
|
|
Initalize();
|
|
|
|
_tUrlProtocol = pStaticAutoProxy->_tUrlProtocol;
|
|
_lpszUrl = (pStaticAutoProxy->_lpszUrl) ? NewString(pStaticAutoProxy->_lpszUrl) : NULL;
|
|
_dwUrlLength = pStaticAutoProxy->_dwUrlLength;
|
|
_lpszUrlHostName =
|
|
(pStaticAutoProxy->_lpszUrlHostName ) ?
|
|
NewString(pStaticAutoProxy->_lpszUrlHostName, pStaticAutoProxy->_dwUrlHostNameLength) :
|
|
NULL;
|
|
_dwUrlHostNameLength = pStaticAutoProxy->_dwUrlHostNameLength;
|
|
_nUrlPort = pStaticAutoProxy->_nUrlPort;
|
|
_tProxyScheme = pStaticAutoProxy->_tProxyScheme;
|
|
|
|
//
|
|
// ProxyHostName is something that is generated by the request,
|
|
// therefore it should not be copied OR freed.
|
|
//
|
|
|
|
INET_ASSERT( pStaticAutoProxy->_lpszProxyHostName == NULL );
|
|
//_lpszProxyHostName = (pStaticAutoProxy->_lpszProxyHostName ) ? NewString(pStaticAutoProxy->_lpszProxyHostName) : NULL;
|
|
|
|
|
|
_dwProxyHostNameLength = pStaticAutoProxy->_dwProxyHostNameLength;
|
|
_nProxyHostPort = pStaticAutoProxy->_nProxyHostPort;
|
|
_pmProxyQuery = pStaticAutoProxy->_pmProxyQuery;
|
|
_pmaAllocMode = MSG_ALLOC_HEAP_MSG_OBJ_OWNS;
|
|
_pProxyState = pStaticAutoProxy->_pProxyState;
|
|
|
|
INET_ASSERT(_pProxyState == NULL);
|
|
|
|
_dwQueryResult = pStaticAutoProxy->_dwQueryResult;
|
|
_Error = pStaticAutoProxy->_Error;
|
|
_MessageFlags.Dword = pStaticAutoProxy->_MessageFlags.Dword;
|
|
_dwProxyVersion = pStaticAutoProxy->_dwProxyVersion;
|
|
}
|
|
|
|
AUTO_PROXY_ASYNC_MSG::~AUTO_PROXY_ASYNC_MSG(
|
|
VOID
|
|
)
|
|
{
|
|
DEBUG_ENTER((DBG_OBJECTS,
|
|
None,
|
|
"~AUTO_PROXY_ASYNC_MSG",
|
|
NULL
|
|
));
|
|
|
|
if ( IsAlloced() )
|
|
{
|
|
DEBUG_PRINT(OBJECTS,
|
|
INFO,
|
|
("Freeing Allocated MSG ptr=%x\n",
|
|
this
|
|
));
|
|
|
|
|
|
if ( _lpszUrl )
|
|
{
|
|
//DEBUG_PRINT(OBJECTS,
|
|
// INFO,
|
|
// ("Url ptr=%x, %q\n",
|
|
// _lpszUrl,
|
|
// _lpszUrl
|
|
// ));
|
|
|
|
FREE_MEMORY(_lpszUrl);
|
|
}
|
|
|
|
if ( _lpszUrlHostName )
|
|
{
|
|
FREE_MEMORY(_lpszUrlHostName);
|
|
}
|
|
|
|
|
|
if ( _pProxyState )
|
|
{
|
|
delete _pProxyState;
|
|
}
|
|
}
|
|
if (_bFreeProxyHostName && (_lpszProxyHostName != NULL)) {
|
|
FREE_MEMORY(_lpszProxyHostName);
|
|
}
|
|
|
|
DEBUG_LEAVE(0);
|
|
}
|
|
|
|
|