/*++ Copyright (c) 2000 Microsoft Corporation. All rights reserved. --*/ // SocksConnection.h : Declaration of the CSocksConnection #ifndef __SOCKSCONNECTION_H_ #define __SOCKSCONNECTION_H_ #include "resource.h" // main symbols #include "socksfilter.h" ///////////////////////////////////////////////////////////////////////////// // CSocksConnection class ATL_NO_VTABLE CSocksConnection : public CComObjectRootEx, public IFWXAcceptCompletion, public IFWXIOCompletion { private: enum IOType { eSendAnsToNegotiation,eSendAnsToProposal, eGetNegotiation , eGetProposal , eSendError, eSendSuccess, eGetCmd, eReadFromInet, eReadFromClient, eWriteToInet, eWriteToClient,eFirstSuccess }; CComPtr m_spClientSocket; CComPtr m_spExternalSocket; CComPtr m_spCmdBuffer; DWORD m_dwLastBufferSize; CComPtr m_spWspProxy; SOCKADDR m_ClientAddress; Csocksfilter *m_pSocksfilter; HANDLE m_token; char m_user[MAX_USR_LEN]; char m_domain[MAX_USR_LEN]; char m_pwd[MAX_PWD_LEN]; public: CSocksConnection() : m_dwLastBufferSize(0), m_pSocksfilter(NULL), m_token(NULL) { } ~CSocksConnection() { //Release pointer to socks filter object if (m_pSocksfilter!=NULL) { m_pSocksfilter->Release(); m_pSocksfilter = NULL; } CloseHandle(m_token); } DECLARE_NOT_AGGREGATABLE(CSocksConnection) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CSocksConnection) COM_INTERFACE_ENTRY(IFWXIOCompletion) END_COM_MAP() HRESULT STDMETHODCALLTYPE CompleteAsyncAccept( /* [in] */ BOOL fSuccess, /* [in] */ DWORD Win32ErrorCode, /* [in] */ IFWXNetworkSocket __RPC_FAR *pListeningSocket, /* [in] */ IFWXNetworkSocket __RPC_FAR *pAcceptSocket, /* [in] */ LPSOCKADDR RemoteAddress, /* [in] */ DWORD RemoteAddressLength, /* [in] */ LPSOCKADDR LocalAddress, /* [in] */ DWORD LocalAddressLength, /* [in] */ UserContextType UserData); void CloseSockets(BOOLEAN fAbovtive); void Abort() { CloseSockets(TRUE); } HRESULT CommandHandler(); HRESULT HandleProposal(); HRESULT HandleNegotiation(); HRESULT SendReply(BYTE ReplyCode); HRESULT SendFirstOrSecReply(BYTE ReplyCode,BOOL fFirst); HRESULT SendReplyB(BYTE ReplyCode, SOCKADDR ServAddr,BOOL fFirst); HRESULT Initialize( Csocksfilter *socksfilter, PSOCKADDR ClientAddress, IFWXNetworkSocket *pSocket, IFWXFirewall *WspProxy ); // IFWXIOCompletion public: HRESULT STDMETHODCALLTYPE CompleteAsyncIO( /* [in] */ BOOL fSuccess, /* [in] */ DWORD Win32ErrorCode, /* [in] */ IFWXIOBuffer __RPC_FAR *pIOBuffer, /* [in] */ UserContextType UserData, /* [in] */ LPSOCKADDR ExternalAddress, /* [in] */ INT ExternalAddressLength); }; #endif //__SOCKSCONNECTION_H_