rtspprotocol.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:12k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _RTSPPROTOCOL_H_
  36. #define _RTSPPROTOCOL_H_
  37. #include "hxathsp.h"
  38. #include "hxpktsp.h"
  39. #include "hxsmbw.h"
  40. struct IHXPacket;
  41. struct IHXValues;
  42. class CHXEvent;
  43. class DataRevertController;
  44. class RTSPClientProtocol;
  45. class RTSPProtocol : public HXProtocol, 
  46.      public IHXRTSPClientProtocolResponse,
  47.      public IHXASMSource,
  48.      public IHXBackChannel,
  49. #if defined(HELIX_FEATURE_AUTHENTICATION)
  50.      public IHXClientAuthResponse,
  51.      public IHXAuthenticationManagerResponse,
  52. #endif /* HELIX_FEATURE_AUTHENTICATION */
  53.      public IHXAtomicRuleChange,
  54.      public IHXPreferredTransportSink,
  55.      public DataRevertControllerResponse
  56. {
  57. public:
  58. RTSPProtocol  (HXNetSource *owner, 
  59.        ULONG32 ulPlatformSpecific = 0 );
  60. ~RTSPProtocol ();
  61.     /*
  62.      * IUnknown methods
  63.      */
  64.     STDMETHOD(QueryInterface) (THIS_
  65. REFIID riid,
  66. void** ppvObj);
  67.     
  68.     STDMETHOD_(ULONG32,AddRef) (THIS);
  69.     STDMETHOD_(ULONG32,Release) (THIS);
  70.     // IHXPendingStatus methods
  71.     /************************************************************************
  72.      * Method:
  73.      *     IHXPendingStatus::GetStatus
  74.      * Purpose:
  75.      *     Called by the user to get the current pending status from an object
  76.      */
  77.     STDMETHOD(GetStatus) (THIS_
  78. REF(UINT16) uStatusCode, 
  79. REF(IHXBuffer*) pStatusDesc, 
  80. REF(UINT16) ulPercentDone);
  81. #if defined(HELIX_FEATURE_STATS)
  82.     /*
  83.      * IHXStatistics methods
  84.      */
  85.     /************************************************************************
  86.      *  Method:
  87.      *      IHXStatistics::InitializeStatistics
  88.      *  Purpose:
  89.      *      Pass registry ID to the caller
  90.      */
  91.     STDMETHOD (InitializeStatistics) (THIS_
  92. UINT32 /*IN*/ ulRegistryID);
  93.     /************************************************************************
  94.      *  Method:
  95.      *      IHXStatistics::UpdateStatistics
  96.      *  Purpose:
  97.      *      Notify the client to update its statistics stored in the registry
  98.      */
  99.     STDMETHOD (UpdateStatistics) (THIS);
  100. #endif /* HELIX_FEATURE_STATS */
  101.     
  102.     virtual HX_RESULT GetStreamStatistics (ULONG32 ulStreamNumber,
  103.  STREAM_STATS** ppStreamStats);
  104.     virtual HX_RESULT UpdateRegistry (UINT32 ulStreamNumber,
  105.  UINT32 ulRegistryID);
  106.     /*
  107.      * IHXRTSPClientProtocolResponse methods
  108.      */
  109.     STDMETHOD(InitDone) (THIS_
  110.      HX_RESULT status);
  111.     STDMETHOD(HandleOptionsResponse)
  112.     (
  113. THIS_
  114. HX_RESULT status,
  115. IHXValues* pHeader
  116.     );
  117.     STDMETHOD(HandleWWWAuthentication) (THIS_
  118. HX_RESULT status,
  119. IHXValues* AuthInfo);
  120. #if defined(HELIX_FEATURE_AUTHENTICATION)
  121.     /*
  122.      * IHXAuthenticationManagerResponse methods
  123.      */
  124.     STDMETHOD(AuthenticationRequestDone) (THIS_ HX_RESULT,
  125.   const char*,
  126.   const char*);
  127.     // IHXClientAuthResponse
  128.     STDMETHOD(ResponseReady)
  129.     (
  130. HX_RESULT   HX_RESULTStatus,
  131. IHXRequest* pIHXRequestResponse
  132.     );
  133. #endif /* HELIX_FEATURE_AUTHENTICATION */
  134.     STDMETHOD(HandleStreamDescriptionResponse)
  135.     (
  136. THIS_
  137. HX_RESULT status,
  138. IHXValues* pFileHeader,
  139. CHXSimpleList* pHeaderList,
  140. IHXValues* pResponseHeaders
  141.     );
  142.     STDMETHOD(HandleStreamRecordDescriptionResponse)
  143. (THIS_
  144. HX_RESULT status,
  145. IHXValues* pResponseHeaders);
  146.     STDMETHOD(HandleSetupResponse) (THIS_
  147. HX_RESULT status);
  148.     STDMETHOD(HandlePlayResponse) (THIS_
  149. HX_RESULT status);
  150.     STDMETHOD(HandleRecordResponse) (THIS_
  151. HX_RESULT status);
  152.     STDMETHOD(HandleTeardownResponse) (THIS_
  153. HX_RESULT status);
  154.     STDMETHOD(HandleSetParameterRequest)
  155. (THIS_
  156. UINT32 lParamType,
  157. const char* pParamName,
  158. IHXBuffer* pParamValue);
  159.     
  160.     STDMETHOD(HandleSetParameterRequest) (THIS_
  161.       const char* pParamName,
  162.  const char* pParamValue,
  163.  const char* pContent);
  164.     STDMETHOD(HandleSetParameterResponse)
  165. (THIS_
  166.      HX_RESULT status);
  167.     STDMETHOD(HandleSetParameterResponseWithValues) (THIS_
  168.      HX_RESULT status,
  169. IHXValues* pValues
  170. );
  171.     STDMETHOD(HandleGetParameterRequest)
  172. (THIS_
  173. UINT32 lParamType,
  174. const char* pParamName,
  175. IHXBuffer** pParamValue);
  176.     STDMETHOD(HandleGetParameterResponse)
  177. (THIS_
  178. HX_RESULT status,
  179. IHXBuffer* pParamValue);
  180.     STDMETHOD(HandleAlertRequest) (THIS_
  181. HX_RESULT status,
  182. INT32 lAlertNumber,
  183. const char* pAlertText);
  184.     STDMETHOD(HandleRedirectRequest) (THIS_
  185.      const char* pURL,
  186. UINT32 msFromNow);
  187.     STDMETHOD(HandleUseProxyRequest) (THIS_
  188. const char* pProxyURL);
  189.     STDMETHOD(HandlePacket) (THIS_
  190.      HX_RESULT status,
  191. const char* pSessionID,
  192. IHXPacket* pPacket);
  193.     STDMETHOD(HandleProtocolError) (THIS_
  194.      HX_RESULT status);
  195.     STDMETHOD(HandleRTTResponse) (THIS_
  196.      HX_RESULT status,
  197. const char* pSessionID,
  198. UINT32 ulSecs,
  199. UINT32 ulUSecs);
  200.     STDMETHOD(HandleCongestion) (THIS_
  201.      HX_RESULT status,
  202. const char* pSessionID,
  203. INT32 xmitMultiplier,
  204. INT32 recvMultiplier);
  205.     STDMETHOD(HandleStreamDone) (THIS_
  206.      HX_RESULT status,
  207. UINT16 uStreamNumber);
  208.     /* This only indicates that all packets have been received from the
  209.      * server. We still need to read packets from the transport buffer
  210.      * StreamDone will indicate when there are no more packets to be
  211.      * read from Transport buffer
  212.      */
  213.     STDMETHOD(HandleSourceDone) (THIS);
  214.     STDMETHOD(HandlePrerollChange) (THIS_ 
  215.  RTSPPrerollTypeEnum prerollType,
  216.  UINT32 ulPreroll
  217.                                 ); 
  218.     /*
  219.      *  IHXASMSource methods
  220.      */
  221.     STDMETHOD(Subscribe) (THIS_
  222.      UINT16 streamNumber,
  223. UINT16 ruleNumber);
  224.     STDMETHOD(Unsubscribe) (THIS_
  225.      UINT16 streamNumber,
  226. UINT16 ruleNumber);
  227.     /*
  228.      *  IHXAtomicRuleChange method
  229.      */
  230.     STDMETHOD(RuleChange) (THIS_
  231.      REF(CHXSimpleList) RuleChanges);
  232.     /*
  233.      * IHXBackChannel methods
  234.      */
  235.     
  236.     STDMETHOD(PacketReady) (THIS_
  237.      IHXPacket* pPacket);
  238.     /*
  239.      * IHXPreferredTransportSink methods
  240.      */
  241.     STDMETHOD(TransportSucceeded)   (TransportMode /* IN */   prefTransportType,
  242.      UINT16 /* IN */   uCloakPort);
  243.     STDMETHOD(TransportFailed)     (THIS);
  244.     /*
  245.      * HXProtocol methods
  246.      */
  247.     virtual HX_RESULT server_hello (void);
  248.     virtual HX_RESULT proxy_hello (void);
  249.     virtual HX_RESULT process (void);
  250.     virtual HX_RESULT abort (void);
  251.     virtual HX_RESULT   GetEvent (UINT16 uStreamNumber,
  252.  CHXEvent*& pEvent);
  253.     virtual HX_RESULT GetCurrentBuffering(UINT16  uStreamNumber,
  254.     INT64&  llLowestTimestamp, 
  255.     INT64&  llHighestTimestamp,
  256.     UINT32& ulNumBytes,
  257.     BOOL&   bDone);
  258.     virtual HX_RESULT setup (const char* host,
  259.  const char* path,
  260.  UINT16 port,
  261.  BOOL LossCorrection,
  262.  BOOL bHTTPCloak,
  263.                                                  BOOL   bSDPInitiated,
  264.  UINT16 cloakPort);
  265.     virtual void initialize_members (void);
  266.     virtual HX_RESULT seek (ULONG32 posArg,
  267.  ULONG32 posArg2 = 0,
  268.  UINT16  seekFrom = 0);
  269.     virtual HX_RESULT pause (void);
  270.     virtual HX_RESULT resume (UINT32 ulEndTime = 0);
  271.     virtual HX_RESULT reset (void) { return HXR_OK; };
  272.     virtual HX_RESULT stop  (void);
  273. #if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)
  274.     virtual void send_statistics (UINT32 ulStatsMask);
  275.     HX_RESULT prepare_stats4 (char*& pszOutput, UINT32& ulOutput);    
  276.     STREAM_STATS* create_statistics (UINT16 uStreamNumber);
  277. #endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */
  278.     virtual HX_RESULT send_setup_request ();
  279.     BOOL IsSourceDone(void);
  280.     
  281.     const char* get_protocol_name (void)
  282. {return "RTSP";}
  283. #if defined(HELIX_FEATURE_AUTHENTICATION)
  284.     HX_RESULT handlePendingWWWAuthentication(
  285.     HX_RESULT HX_RESULTStatus, 
  286.     IHXValues* pIHXValuesHeaders);
  287. #endif /* HELIX_FEATURE_AUTHENTICATION */
  288.     HX_RESULT handle_multicast (void);
  289.     void RevertHeadersDone(IHXValues* pFileHeader,
  290.    CHXSimpleList* pStreamHeaders, 
  291.    IHXValues* pResponseHeaders,
  292.    BOOL bUseReverter);
  293.     void SendControlBuffer(IHXBuffer* pBuffer);
  294.     virtual UINT16 GetRDTFeatureLevel (void);
  295.     virtual void LeavePrefetch (void);
  296.     virtual void EnterFastStart (void);
  297.     virtual void LeaveFastStart (void);
  298. protected:
  299.     LONG32 m_lRefCount;
  300.     DECLARE_SMART_POINTER
  301.     (
  302. IHXClientAuthConversation
  303.     ) m_spIHXClientAuthConversationAuthenticator;
  304.     IHXRTSPClientProtocol* m_pProtocolLib;
  305.     ULONG32 m_uSecurityKey;
  306.     ULONG32 m_uStreamCount;
  307.     ULONG32 m_uCurrentStreamCount;
  308.     CHXMapLongToObj* m_pStreamInfoList;
  309.     IHXPendingStatus* m_pPendingStatus;
  310.     IHXStatistics* m_pStatistics;
  311.     IHXRequest*         m_pRequest;
  312.     HX_BITFIELD m_bPlaying : 1;
  313.     HX_BITFIELD m_bIsASMSource : 1;
  314.     BOOL m_bUseRTP;
  315.     HX_BITFIELD m_bFirstAuthAttempt : 1;
  316.     HX_BITFIELD m_bPendingSeek : 1;
  317.     HX_BITFIELD m_bHandleWWWAuthentication : 1;
  318.     HX_BITFIELD mReceivedControl : 1;
  319.     // Smart Networking  
  320.     HX_BITFIELD m_bReceivedData : 1;
  321.     HX_BITFIELD                 m_bMulticastOnly : 1;
  322.     // ID info
  323.     IHXValues* m_pIDInfo;
  324.     UINT32 m_ulSeekPos1;
  325.     UINT32 m_ulSeekPos2;
  326.     HX_RESULT m_WWWResult;
  327.     IHXValues* m_pWWWValues;
  328.     DECLARE_SMART_POINTER(IHXValues) m_spIHXValuesStoredHeaders;
  329.     enum
  330.     {
  331. NULL_STATE,
  332. INIT_SOCKETS_STATE,
  333. SEND_SETUP_REQUEST_STATE,
  334. ALERT_STATE
  335.     } m_idleState;
  336. #if defined(HELIX_FEATURE_REVERTER)
  337.     DataRevertController*   m_pDataRevert;
  338. #endif /* HELIX_FEATURE_REVERTER */
  339. private:
  340.     void     hackCookie(IHXBuffer* pCookie);
  341.     HX_RESULT       SwitchToUnicast(void);
  342. };
  343. #endif /*_RTSPPROTOCOL__*/