193 lines
6 KiB
C++
193 lines
6 KiB
C++
#ifndef _ANYCON_HXX
|
|
#define _ANYCON_HXX
|
|
|
|
class CStream;
|
|
|
|
class CAnyConnection {
|
|
public:
|
|
CAnyConnection (
|
|
BOOL bSecure,
|
|
INTERNET_PORT nServerPort,
|
|
BOOL bIgnoreSecurityDlg,
|
|
DWORD dwAuthMethod);
|
|
|
|
virtual ~CAnyConnection ();
|
|
virtual HINTERNET OpenSession ();
|
|
virtual BOOL CloseSession ();
|
|
|
|
virtual HINTERNET Connect(
|
|
LPTSTR lpszServerName);
|
|
virtual BOOL Disconnect ();
|
|
|
|
virtual HINTERNET OpenRequest (
|
|
LPTSTR lpszUrl);
|
|
virtual BOOL CloseRequest (HINTERNET hReq);
|
|
|
|
virtual BOOL SendRequest(
|
|
HINTERNET hReq,
|
|
LPCTSTR lpszHdr,
|
|
DWORD cbData,
|
|
LPBYTE pidi);
|
|
|
|
virtual BOOL SendRequest(
|
|
HINTERNET hReq,
|
|
LPCTSTR lpszHdr,
|
|
CStream *pStream);
|
|
|
|
virtual BOOL ReadFile (
|
|
HINTERNET hReq,
|
|
LPVOID lpvBuffer,
|
|
DWORD cbBuffer,
|
|
LPDWORD lpcbRd);
|
|
|
|
BOOL IsValid () {return m_bValid;}
|
|
|
|
BOOL SetPassword (
|
|
HINTERNET hReq,
|
|
LPTSTR lpszUserName,
|
|
LPTSTR lpszPassword);
|
|
|
|
BOOL GetAuthSchem (
|
|
HINTERNET hReq,
|
|
LPSTR lpszScheme,
|
|
DWORD dwSize);
|
|
|
|
void SetShowSecurityDlg (
|
|
BOOL bShowSecDlg);
|
|
|
|
inline DWORD GetAuthMethod (VOID) const {
|
|
return m_dwAuthMethod;
|
|
}
|
|
|
|
protected:
|
|
|
|
#ifndef WINNT32 // This needs only to work on Win9X, we can use sync calls in NT
|
|
|
|
/********************************************************************************************
|
|
** Class - CAnyConnection::CAsyncContext
|
|
** Description - This class provides an abstract way for the asynchronous callback between
|
|
** the WinInet API and the Http connection to be expressed
|
|
********************************************************************************************/
|
|
class CAsyncContext {
|
|
public:
|
|
CAsyncContext(void); // Allocate the event and clear the return status
|
|
|
|
inline BOOL bValid(void); // Return true if there is a failure
|
|
|
|
BOOL TimeoutWait( IN OUT BOOL & bSuccess);
|
|
// Wait for a particular timeout, we use the
|
|
// passed in BOOL to see if the call was asynchronous
|
|
|
|
~CAsyncContext(); // Close the handle if it exists
|
|
|
|
static void CALLBACK InternetCallback( // This callback is used to send an event back to
|
|
IN HINTERNET hInternet, // the calling thread, this prevents the calling
|
|
IN DWORD_PTR dwContext, // thread from blocking indefinitely, it will
|
|
IN DWORD dwInternetStatus, // simply time out
|
|
IN LPVOID lpvStatusInformation,
|
|
IN DWORD dwStatusInformationLength);
|
|
|
|
|
|
private:
|
|
DWORD m_dwRet; // This is the return value for non-handle calls
|
|
DWORD m_dwError; // This is the last error code that was given to
|
|
// the function
|
|
HANDLE m_hEvent; // This is the event used for the synchronisation
|
|
};
|
|
#endif // #ifndef WINNT32
|
|
|
|
#ifndef WINNT32 // These are meaningless in sync code
|
|
|
|
static BOOL AsynchronousWait( IN HINTERNET hInternet, IN OUT BOOL & bSuccess);
|
|
// Wait for an asyncronous operation where we
|
|
// only know the internet handle and want a BOOL
|
|
static CAsyncContext *GetAsyncContext( IN HINTERNET hInternet);
|
|
// Get the context associated with this handle
|
|
#endif // #ifndef WINNT32
|
|
|
|
|
|
LPTSTR m_lpszPassword;
|
|
LPTSTR m_lpszUserName;
|
|
|
|
BOOL m_bValid;
|
|
BOOL m_bSecure;
|
|
HINTERNET m_hSession;
|
|
HINTERNET m_hConnect;
|
|
|
|
INTERNET_PORT m_nServerPort;
|
|
|
|
BOOL m_bIgnoreSecurityDlg;
|
|
|
|
private:
|
|
|
|
DWORD m_dwAccessFlag;
|
|
BOOL m_bShowSecDlg;
|
|
DWORD m_dwAuthMethod;
|
|
|
|
static const DWORD gm_dwConnectTimeout; // The connection timeout
|
|
static const DWORD gm_dwSendTimeout; // The send timeout
|
|
static const DWORD gm_dwReceiveTimeout; // The receive timeout
|
|
static const DWORD gm_dwSendSize; // The size of the blocks we send to the server
|
|
};
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// INLINE METHODS
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#ifndef WINNT32
|
|
inline BOOL CAnyConnection::CAsyncContext::bValid(void) {
|
|
return m_hEvent != INVALID_HANDLE_VALUE;
|
|
}
|
|
#endif // #ifndef WINNT32
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// MACROS FOR SYNCHRONOUS CODE
|
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
#ifdef WINNT32
|
|
|
|
#define WIN9X_OP_ASYNC(OpX)
|
|
#define WIN9X_NEW_ASYNC(NewX)
|
|
#define WIN9X_GET_ASYNC(GetX, HandleX)
|
|
#define WIN9X_IF_ASYNC(ExprX)
|
|
#define WIN9X_BREAK_ASYNC(RetX)
|
|
#define WIN9X_ELSE_ASYNC(ExprX)
|
|
#define WIN9X_WAIT_ASYNC(HandleX, BoolX) (BoolX)
|
|
#define WIN9X_TIMEOUT_ASYNC(ContextX, BoolX) (BoolX)
|
|
#define WIN9X_CONTEXT_ASYNC(acX) 0
|
|
|
|
#else // #ifndef WINNT32
|
|
|
|
#define WIN9X_OP_ASYNC(OpX) \
|
|
OpX
|
|
|
|
#define WIN9X_NEW_ASYNC(NewX) \
|
|
CAsyncContext *(NewX) = new CAsyncContext
|
|
|
|
#define WIN9X_GET_ASYNC(GetX, HandleX) \
|
|
CAsyncContext *(GetX) = GetAsyncContext(HandleX)
|
|
|
|
#define WIN9X_IF_ASYNC(ExprX) \
|
|
if (ExprX)
|
|
|
|
#define WIN9X_BREAK_ASYNC(RetX) \
|
|
break; bRet = (RetX)
|
|
|
|
#define WIN9X_ELSE_ASYNC(ExprX) \
|
|
else (ExprX)
|
|
|
|
#define WIN9X_WAIT_ASYNC(HandleX, BoolX) \
|
|
(AsynchronousWait( HandleX, BoolX))
|
|
|
|
#define WIN9X_TIMEOUT_ASYNC(ContextX, BoolX) \
|
|
(ContextX)->TimeoutWait(BoolX)
|
|
|
|
#define WIN9X_CONTEXT_ASYNC(acX) \
|
|
((DWORD_PTR)acX)
|
|
|
|
#endif // #ifdef WINNT32
|
|
|
|
|
|
#endif
|