hxcloakedtcp.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:11k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxcloakedtcp.h,v 1.1.36.1 2004/07/09 02:08:59 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef HXCLOAKEDTCP_H
  50. #define HXCLOAKEDTCP_H
  51. #include "hxtypes.h"
  52. #include "hxcom.h"
  53. #include "hxengin.h"
  54. #include "hxpnets.h"
  55. #include "hxauthn.h"
  56. #include "hxpreftr.h"
  57. #include "hxstring.h"
  58. #include "hxslist.h"
  59. #include "growingq.h"
  60. #include "smartptr.h"
  61. #include "hxathsp.h"
  62. #include "hxsockcallback.h"
  63. class  HTTPResponseMessage;
  64. class HXMutex;
  65. class HXClientCloakedTCPSocket : public IHXTCPSocket, 
  66.  public IHXCloakedTCPSocket,
  67.  public IHXHTTPProxy, 
  68.  public SocketCallbackInterface,
  69.  public IHXClientAuthResponse
  70. {
  71. public:
  72. HXClientCloakedTCPSocket(IUnknown* pContext);
  73. ~HXClientCloakedTCPSocket();
  74.     
  75.     /* IUnknown interface */
  76.     STDMETHOD(QueryInterface)   (THIS_ 
  77. REFIID riid, void** ppvObj);
  78.     STDMETHOD_(ULONG32,AddRef)  (THIS);
  79.     STDMETHOD_(ULONG32,Release) (THIS);
  80.    /* SocketCallbackInterface interface */
  81.   enum {
  82. CLOAKED_TCP_READ_COMMAND,
  83. CLOAKED_TCP_GETWRITE_COMMAND,
  84. CLOAKED_TCP_PUTWRITE_COMMAND,
  85. CLOAKED_TCP_PUTRESPONSE_TIMEOUT_COMMAND
  86. };
  87. STDMETHODIMP HandleCallback(INT32 theCommand, HX_RESULT theError);
  88.     /*
  89.      *  IHXTCPSocket methods
  90.      */
  91.     STDMETHOD(Init) (THIS_
  92. IHXTCPResponse*    /*IN*/  pTCPResponse);
  93.     STDMETHOD(SetResponse) (THIS_
  94. IHXTCPResponse*    /*IN*/  pTCPResponse);
  95.     STDMETHOD(Bind) (THIS_
  96. UINT32     ulLocalAddr,
  97. UINT16      nPort);
  98.     STDMETHOD(Connect) (THIS_
  99. const char*     pDestination,
  100. UINT16     nPort);
  101.     STDMETHOD(Read) (THIS_
  102. UINT16     uSize);
  103.     STDMETHOD(Write) (THIS_
  104. IHXBuffer*     pBuffer);
  105.     STDMETHOD(WantWrite) (THIS);
  106.     STDMETHOD(GetLocalAddress) (THIS_
  107. UINT32&     lAddress);
  108.     STDMETHOD(GetForeignAddress)(THIS_
  109. UINT32&     lAddress);
  110.     STDMETHOD(GetLocalPort) (THIS_
  111.      UINT16&     nPort);
  112.     STDMETHOD(GetForeignPort) (THIS_
  113.      UINT16&     nPort);
  114.     // IHXClientAuthResponse
  115.     
  116.     STDMETHOD(ResponseReady) (THIS_
  117.      HX_RESULT   HX_RESULTStatus,
  118. IHXRequest* pIHXRequestResponse);
  119.     
  120.     /*
  121.      * IHXHTTPProxy methods
  122.      *
  123.      *  Network addresses and ports are in native byte order
  124.      *  
  125.      */
  126.     STDMETHOD(SetProxy) (THIS_
  127. const char* /*IN*/  pProxyHostName,
  128. UINT16     /*IN*/  nPort);
  129.     /************************************************************************
  130.      * Method:
  131.      *     IHXCloakedTCPSocket::InitCloak
  132.      */
  133.     STDMETHOD(InitCloak) (THIS_
  134. IHXValues* /*IN*/  pValues,
  135. IUnknown* pUnknown);
  136.     class HTTPCloakTCPResponse : public IHXTCPResponse,
  137.  public IHXInterruptSafe
  138.     {
  139.     public:
  140. HTTPCloakTCPResponse(HXClientCloakedTCPSocket* pOwner, BOOL bIsRead);
  141. ~HTTPCloakTCPResponse();
  142. /*
  143.  *  IUnknown methods
  144.  */
  145. STDMETHOD(QueryInterface) (THIS_
  146.     REFIID riid,
  147.     void** ppvObj);
  148. STDMETHOD_(ULONG32,AddRef) (THIS);
  149. STDMETHOD_(ULONG32,Release) (THIS);
  150. /*
  151.  * IHXTCPResponse methods
  152.  */
  153. STDMETHOD(ConnectDone) (THIS_
  154. HX_RESULT status);
  155. STDMETHOD(ReadDone) (THIS_
  156.  HX_RESULT status,
  157.  IHXBuffer* pBuffer);
  158. STDMETHOD(WriteReady) (THIS_
  159.      HX_RESULT status);
  160. STDMETHOD(Closed) (THIS_
  161.  HX_RESULT status);
  162.      /*
  163.        * IHXInterruptSafe methods
  164.        */
  165. STDMETHOD_(BOOL,IsInterruptSafe) (THIS) {return TRUE;};
  166.     private:
  167. LONG32     m_lRefCount;
  168. HXClientCloakedTCPSocket*  m_pOwner;
  169. BOOL     m_bIsRead;
  170.     };
  171.     friend class HTTPCloakTCPResponse;
  172. private:
  173.     void TransferBuffers();
  174.     HX_RESULT DoRead();
  175.     HX_RESULT DoGetReadDone(HX_RESULT status, IHXBuffer* pBuffer);
  176.     HX_RESULT DoPutReadDone(HX_RESULT status, IHXBuffer* pBuffer);
  177.     HX_RESULT DoGetWrite();
  178.     void GetConnectDone(BOOL bResult);
  179.     
  180.     HX_RESULT DoPutWrite(); /* only used by m_pWriteCtrl*/
  181.     void PutConnectDone(BOOL bResult);
  182.     HX_RESULT PreparePostMessage(const UCHAR *inData, UINT16 inLength);
  183.     HX_RESULT EncodeBase64(const UCHAR* inData, UINT16 inLength, UCHAR* outData, UINT16& outLength);
  184.     HX_RESULT PrepareGetMessage(void);
  185.     void CreateGuid(void);
  186.     HX_RESULT HandleHTTPResponse(UCHAR response);
  187.     BOOL IsSafe();
  188.     void FlushQueues(void);
  189.     void SendHTTPDone(void);
  190.     HX_RESULT ActualConnect(void);
  191.     HX_RESULT GetServerIPFromResponse(BOOL bGetResponse, const char* pszInBuffer);    
  192.     HX_RESULT CleanUpAndReInitializeStuff(void);
  193.     HX_RESULT ReconnectToSameServerIP(void);
  194.     BOOL AuthenticationRequired(HX_RESULT   status, IHXBuffer* pInBuffer);
  195.     void ObtainAuthenticationInformation(CHXString& strAuth);
  196.     HX_RESULT HandleAuthentication(IHXRequest* pRequest, HTTPResponseMessage* pMessage,
  197.      const char* pHost, const char* pProxyHost);
  198.     LONG32                      m_lRefCount;
  199.     IUnknown* m_pContext;
  200.     IHXScheduler* m_pScheduler;
  201.     IHXTCPResponse* m_pTCPResponse;
  202.     IHXNetworkServices* m_pNetworkServices;    
  203.     IHXTCPSocket* m_pGetCtrl;
  204.     IHXTCPSocket* m_pPutCtrl;
  205.     HTTPCloakTCPResponse* m_pGetCtrlResponse;
  206.     HTTPCloakTCPResponse* m_pPutCtrlResponse;
  207.     char* m_pForiegnHost;
  208.     UINT32 m_lForeignAddress;
  209.     UINT16 m_nForeignPort : 16;
  210.     UINT16 m_nRequired : 16;
  211.     CByteGrowingQueue* m_pSendTCP;
  212.     CByteGrowingQueue* m_pReceiveGetTCP;
  213.     CByteGrowingQueue* m_pReceivePutTCP;
  214.     CByteGrowingQueue* m_pPreEncodedSendHTTP;
  215.     CByteGrowingQueue* m_pPostEncodedSendHTTP;
  216.     CHXSimpleList m_PendingWriteBuffers;
  217.     char* m_pOutBuf;
  218.     char* m_pOutEncodedBuf;
  219.     char* m_pInBuf;
  220.     char* m_pGuid;
  221.     HX_BITFIELD m_bGetReadPending : 1;
  222.     HX_BITFIELD m_bPutReadPending : 1;
  223.     HX_BITFIELD m_bPutWantWritePending : 1;
  224.     HX_BITFIELD m_bReadPending : 1;
  225.     HX_BITFIELD m_bConnected : 1;
  226.     HX_BITFIELD m_bGetConnectDone : 1;
  227.     HX_BITFIELD m_bPutConnectDone : 1;
  228.     HX_BITFIELD m_bGetConnectSuccessful : 1;
  229.     HX_BITFIELD m_bPutConnectSuccessful : 1;
  230.     HX_BITFIELD m_bConnectResponsePending : 1;
  231.     HX_BITFIELD m_bOptionsReceived : 1;
  232.     HX_BITFIELD m_bUseExactContentLength : 1;
  233.     /* == 1, close connection after write completes */
  234.     HX_BITFIELD m_bCloseHttpAfterWrite : 1;
  235.     /* == 1 we must close the HTTP POST connection */
  236.     HX_BITFIELD m_bMustCloseHTTP : 1;
  237.     HX_BITFIELD m_bHttpInitialized : 1;
  238.     HX_BITFIELD m_bInitComplete : 1;
  239.     HX_BITFIELD m_bInDestructor : 1;
  240.     HX_BITFIELD m_bInDoRead: 1;
  241.     HX_BITFIELD m_bInDoGetWrite : 1;
  242.     HX_BITFIELD m_bInDoPutWrite : 1;
  243.     HX_BITFIELD m_bInTransferBuffers : 1;
  244.     HX_BITFIELD m_bDeletePadding : 1;
  245.     
  246.     HX_BITFIELD m_bGetResponsed : 1;
  247.     HX_BITFIELD m_bPutResponsed : 1;
  248.     char* m_pszGetServerIP;
  249.     char* m_pszPutServerIP;
  250.     HX_BITFIELD m_bReconnectToSameServerIP : 1;
  251.     HX_BITFIELD m_bConnectToSameServerIP : 1;
  252.     HX_BITFIELD m_bHTTPGetHeaderReadDone : 1;
  253.     HX_BITFIELD m_bHTTPPutHeaderReadDone : 1;
  254.     HX_RESULT m_LastError;
  255.     char* m_pHTTPHeaderBuffer;
  256.     UINT16 m_nHTTPHeaderBufferLength;
  257.     UINT16 m_nProxyPortNumber;
  258.     char* m_pProxyHostName;
  259.     UINT16 m_uPadLength;
  260.     ScheduledSocketCallback* m_pSchedulerCallback;
  261.     ScheduledSocketCallback* m_pNonInterruptCallback;
  262.     IHXInterruptState* m_pInterruptState;
  263.     IHXInterruptSafe* m_pResponseInterruptSafe;
  264.     HXMutex* m_pMutex;
  265.     IHXValues* m_pCloakValues;
  266.     IUnknown* m_pCloakContext;
  267.     IHXPreferredTransport* m_pPreferredTransport;
  268.     IHXPreferredTransportManager* m_pPreferredTransportManager;
  269. #ifdef _MACINTOSH
  270.     class MacCloakedTCPSocketAuthenticationCallback : public IHXCallback
  271.     {
  272.     private:
  273. LONG32 m_lRefCount;
  274. ~MacCloakedTCPSocketAuthenticationCallback();
  275. PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  276.     public:
  277. MacCloakedTCPSocketAuthenticationCallback(
  278. HXClientCloakedTCPSocket* pSocket);
  279. // IUnknown methods
  280. STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  281. STDMETHOD_(ULONG32, AddRef) (THIS);
  282. STDMETHOD_(ULONG32, Release) (THIS);
  283. // IHXCallback methods
  284. STDMETHOD(Func) (THIS);
  285. // callback specific stuff
  286. CallbackHandle m_ulPendingCallbackID;
  287. HXClientCloakedTCPSocket* m_pSocket;
  288. HX_RESULT m_Status;
  289. IHXBuffer* m_pInBuffer;
  290.     };
  291.     
  292.     friend class MacCloakedTCPSocketAuthenticationCallback;
  293.     
  294.     MacCloakedTCPSocketAuthenticationCallback* m_pAuthenticationCallback;
  295. #endif
  296.     BOOL m_bInAuthenticationKludge;
  297.     DECLARE_SMART_POINTER
  298.     (
  299. IHXClientAuthConversation
  300.     ) spClientAuthConversationAuthenticator;
  301. };
  302. #endif /* HXCLOAKEDTCP_H */