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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: rtspprotocol.h,v 1.7.2.3 2004/07/13 22:24:55 bobclark 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 _RTSPPROTOCOL_H_
  50. #define _RTSPPROTOCOL_H_
  51. #include "hxathsp.h"
  52. #include "hxpktsp.h"
  53. #include "hxsmbw.h"
  54. struct IHXPacket;
  55. struct IHXValues;
  56. class CHXEvent;
  57. class DataRevertController;
  58. class RTSPClientProtocol;
  59. class RTSPProtocol : public HXProtocol, 
  60.      public IHXRTSPClientProtocolResponse,
  61.      public IHXASMSource,
  62.      public IHXBackChannel,
  63. #if defined(HELIX_FEATURE_AUTHENTICATION)
  64.      public IHXClientAuthResponse,
  65.      public IHXAuthenticationManagerResponse,
  66. #endif /* HELIX_FEATURE_AUTHENTICATION */
  67.      public IHXAtomicRuleChange,
  68.      public IHXPreferredTransportSink,
  69.      public DataRevertControllerResponse
  70. {
  71. public:
  72. RTSPProtocol  (HXNetSource *owner, 
  73.        ULONG32 ulPlatformSpecific = 0 );
  74. ~RTSPProtocol ();
  75.     /*
  76.      * IUnknown methods
  77.      */
  78.     STDMETHOD(QueryInterface) (THIS_
  79. REFIID riid,
  80. void** ppvObj);
  81.     
  82.     STDMETHOD_(ULONG32,AddRef) (THIS);
  83.     STDMETHOD_(ULONG32,Release) (THIS);
  84.     // IHXPendingStatus methods
  85.     /************************************************************************
  86.      * Method:
  87.      *     IHXPendingStatus::GetStatus
  88.      * Purpose:
  89.      *     Called by the user to get the current pending status from an object
  90.      */
  91.     STDMETHOD(GetStatus) (THIS_
  92. REF(UINT16) uStatusCode, 
  93. REF(IHXBuffer*) pStatusDesc, 
  94. REF(UINT16) ulPercentDone);
  95. #if defined(HELIX_FEATURE_STATS)
  96.     /*
  97.      * IHXStatistics methods
  98.      */
  99.     /************************************************************************
  100.      *  Method:
  101.      *      IHXStatistics::InitializeStatistics
  102.      *  Purpose:
  103.      *      Pass registry ID to the caller
  104.      */
  105.     STDMETHOD (InitializeStatistics) (THIS_
  106. UINT32 /*IN*/ ulRegistryID);
  107.     /************************************************************************
  108.      *  Method:
  109.      *      IHXStatistics::UpdateStatistics
  110.      *  Purpose:
  111.      *      Notify the client to update its statistics stored in the registry
  112.      */
  113.     STDMETHOD (UpdateStatistics) (THIS);
  114. #endif /* HELIX_FEATURE_STATS */
  115.     
  116.     virtual HX_RESULT GetStreamStatistics (ULONG32 ulStreamNumber,
  117.  STREAM_STATS** ppStreamStats);
  118.     virtual HX_RESULT UpdateRegistry (UINT32 ulStreamNumber,
  119.  UINT32 ulRegistryID);
  120.     /*
  121.      * IHXRTSPClientProtocolResponse methods
  122.      */
  123.     STDMETHOD(InitDone) (THIS_
  124.      HX_RESULT status);
  125.     STDMETHOD(HandleOptionsResponse)
  126.     (
  127. THIS_
  128. HX_RESULT status,
  129. IHXValues* pHeader
  130.     );
  131.     STDMETHOD(HandleWWWAuthentication) (THIS_
  132. HX_RESULT status,
  133. IHXValues* AuthInfo);
  134. #if defined(HELIX_FEATURE_AUTHENTICATION)
  135.     /*
  136.      * IHXAuthenticationManagerResponse methods
  137.      */
  138.     STDMETHOD(AuthenticationRequestDone) (THIS_ HX_RESULT,
  139.   const char*,
  140.   const char*);
  141.     // IHXClientAuthResponse
  142.     STDMETHOD(ResponseReady)
  143.     (
  144. HX_RESULT   HX_RESULTStatus,
  145. IHXRequest* pIHXRequestResponse
  146.     );
  147. #endif /* HELIX_FEATURE_AUTHENTICATION */
  148.     STDMETHOD(HandleStreamDescriptionResponse)
  149.     (
  150. THIS_
  151. HX_RESULT status,
  152. IHXValues* pFileHeader,
  153. CHXSimpleList* pHeaderList,
  154. IHXValues* pResponseHeaders
  155.     );
  156.     STDMETHOD(HandleStreamRecordDescriptionResponse)
  157. (THIS_
  158. HX_RESULT status,
  159. IHXValues* pResponseHeaders);
  160.     STDMETHOD(HandleSetupResponse) (THIS_
  161. HX_RESULT status);
  162.     STDMETHOD(HandlePlayResponse) (THIS_
  163. HX_RESULT status);
  164.     STDMETHOD(HandleRecordResponse) (THIS_
  165. HX_RESULT status);
  166.     STDMETHOD(HandleTeardownResponse) (THIS_
  167. HX_RESULT status);
  168.     STDMETHOD(HandleSetParameterRequest)
  169. (THIS_
  170. UINT32 lParamType,
  171. const char* pParamName,
  172. IHXBuffer* pParamValue);
  173.     
  174.     STDMETHOD(HandleSetParameterRequest) (THIS_
  175.       const char* pParamName,
  176.  const char* pParamValue,
  177.  const char* pContent);
  178.     STDMETHOD(HandleSetParameterResponse)
  179. (THIS_
  180.      HX_RESULT status);
  181.     STDMETHOD(HandleSetParameterResponseWithValues) (THIS_
  182.      HX_RESULT status,
  183. IHXValues* pValues
  184. );
  185.     STDMETHOD(HandleGetParameterRequest)
  186. (THIS_
  187. UINT32 lParamType,
  188. const char* pParamName,
  189. IHXBuffer** pParamValue);
  190.     STDMETHOD(HandleGetParameterResponse)
  191. (THIS_
  192. HX_RESULT status,
  193. IHXBuffer* pParamValue);
  194.     STDMETHOD(HandleAlertRequest) (THIS_
  195. HX_RESULT status,
  196. INT32 lAlertNumber,
  197. const char* pAlertText);
  198.     STDMETHOD(HandleRedirectRequest) (THIS_
  199.      const char* pURL,
  200. UINT32 msFromNow);
  201.     STDMETHOD(HandleUseProxyRequest) (THIS_
  202. const char* pProxyURL);
  203.     STDMETHOD(HandlePacket) (THIS_
  204.      HX_RESULT status,
  205. const char* pSessionID,
  206. IHXPacket* pPacket);
  207.     STDMETHOD(HandleProtocolError) (THIS_
  208.      HX_RESULT status);
  209.     STDMETHOD(HandleRTTResponse) (THIS_
  210.      HX_RESULT status,
  211. const char* pSessionID,
  212. UINT32 ulSecs,
  213. UINT32 ulUSecs);
  214.     STDMETHOD(HandleCongestion) (THIS_
  215.      HX_RESULT status,
  216. const char* pSessionID,
  217. INT32 xmitMultiplier,
  218. INT32 recvMultiplier);
  219.     STDMETHOD(HandleStreamDone) (THIS_
  220.      HX_RESULT status,
  221. UINT16 uStreamNumber);
  222.     /* This only indicates that all packets have been received from the
  223.      * server. We still need to read packets from the transport buffer
  224.      * StreamDone will indicate when there are no more packets to be
  225.      * read from Transport buffer
  226.      */
  227.     STDMETHOD(HandleSourceDone) (THIS);
  228.     STDMETHOD(HandlePrerollChange) (THIS_ 
  229.  RTSPPrerollTypeEnum prerollType,
  230.  UINT32 ulPreroll
  231.                                 ); 
  232.     /*
  233.      *  IHXASMSource methods
  234.      */
  235.     STDMETHOD(Subscribe) (THIS_
  236.      UINT16 streamNumber,
  237. UINT16 ruleNumber);
  238.     STDMETHOD(Unsubscribe) (THIS_
  239.      UINT16 streamNumber,
  240. UINT16 ruleNumber);
  241.     /*
  242.      *  IHXAtomicRuleChange method
  243.      */
  244.     STDMETHOD(RuleChange) (THIS_
  245.      REF(CHXSimpleList) RuleChanges);
  246.     /*
  247.      * IHXBackChannel methods
  248.      */
  249.     
  250.     STDMETHOD(PacketReady) (THIS_
  251.      IHXPacket* pPacket);
  252.     /*
  253.      * IHXPreferredTransportSink methods
  254.      */
  255.     STDMETHOD(TransportSucceeded)   (TransportMode /* IN */   prefTransportType,
  256.      UINT16 /* IN */   uCloakPort);
  257.     STDMETHOD(TransportFailed)     (THIS);
  258.     /*
  259.      * HXProtocol methods
  260.      */
  261.     virtual HX_RESULT server_hello (void);
  262.     virtual HX_RESULT proxy_hello (void);
  263.     virtual HX_RESULT process (void);
  264.     virtual HX_RESULT abort (void);
  265.     virtual HX_RESULT   GetEvent (UINT16 uStreamNumber,
  266.  CHXEvent*& pEvent);
  267.     virtual HX_RESULT GetCurrentBuffering(UINT16  uStreamNumber,
  268.     INT64&  llLowestTimestamp, 
  269.     INT64&  llHighestTimestamp,
  270.     UINT32& ulNumBytes,
  271.     BOOL&   bDone);
  272.     virtual HX_RESULT setup (const char* host,
  273.  const char* path,
  274.  UINT16 port,
  275.  BOOL LossCorrection,
  276.  BOOL bHTTPCloak,
  277.                                                  BOOL   bSDPInitiated,
  278.  UINT16 cloakPort);
  279.     virtual void initialize_members (void);
  280.     virtual HX_RESULT seek (ULONG32 posArg,
  281.  ULONG32 posArg2 = 0,
  282.  UINT16  seekFrom = 0);
  283.     virtual HX_RESULT pause (void);
  284.     virtual HX_RESULT resume (UINT32 ulEndTime = 0);
  285.     virtual HX_RESULT reset (void) { return HXR_OK; };
  286.     virtual HX_RESULT stop  (void);
  287. #if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)
  288.     virtual void send_statistics (UINT32 ulStatsMask);
  289.     HX_RESULT prepare_stats4 (char*& pszOutput, UINT32& ulOutput);    
  290.     STREAM_STATS* create_statistics (UINT16 uStreamNumber);
  291. #endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */
  292.     virtual HX_RESULT send_setup_request ();
  293.     BOOL IsSourceDone(void);
  294.     
  295.     const char* get_protocol_name (void)
  296. {return "RTSP";}
  297. #if defined(HELIX_FEATURE_AUTHENTICATION)
  298.     HX_RESULT handlePendingWWWAuthentication(
  299.     HX_RESULT HX_RESULTStatus, 
  300.     IHXValues* pIHXValuesHeaders);
  301. #endif /* HELIX_FEATURE_AUTHENTICATION */
  302.     HX_RESULT handle_multicast (void);
  303.     void RevertHeadersDone(IHXValues* pFileHeader,
  304.    CHXSimpleList* pStreamHeaders, 
  305.    IHXValues* pResponseHeaders,
  306.    BOOL bUseReverter);
  307.     void SendControlBuffer(IHXBuffer* pBuffer);
  308.     virtual UINT16 GetRDTFeatureLevel (void);
  309.     virtual void LeavePrefetch (void);
  310.     virtual void EnterFastStart (void);
  311.     virtual void LeaveFastStart (void);
  312. protected:
  313.     LONG32 m_lRefCount;
  314.     DECLARE_SMART_POINTER
  315.     (
  316. IHXClientAuthConversation
  317.     ) m_spIHXClientAuthConversationAuthenticator;
  318.     IHXRTSPClientProtocol* m_pProtocolLib;
  319.     ULONG32 m_uSecurityKey;
  320.     ULONG32 m_uStreamCount;
  321.     ULONG32 m_uCurrentStreamCount;
  322.     CHXMapLongToObj* m_pStreamInfoList;
  323.     IHXPendingStatus* m_pPendingStatus;
  324.     IHXStatistics* m_pStatistics;
  325.     IHXRequest*         m_pRequest;
  326.     HX_BITFIELD m_bPlaying : 1;
  327.     HX_BITFIELD m_bIsASMSource : 1;
  328.     BOOL m_bUseRTP;
  329.     HX_BITFIELD m_bFirstAuthAttempt : 1;
  330.     HX_BITFIELD m_bPendingSeek : 1;
  331.     HX_BITFIELD m_bHandleWWWAuthentication : 1;
  332.     HX_BITFIELD mReceivedControl : 1;
  333.     // Smart Networking  
  334.     HX_BITFIELD m_bReceivedData : 1;
  335.     HX_BITFIELD                 m_bMulticastOnly : 1;
  336.     // ID info
  337.     IHXValues* m_pIDInfo;
  338.     UINT32 m_ulSeekPos1;
  339.     UINT32 m_ulSeekPos2;
  340.     UINT32                      m_ulLastPacketReceivedTime;
  341.     HX_RESULT m_WWWResult;
  342.     IHXValues* m_pWWWValues;
  343.     DECLARE_SMART_POINTER(IHXValues) m_spIHXValuesStoredHeaders;
  344.     enum
  345.     {
  346. NULL_STATE,
  347. INIT_SOCKETS_STATE,
  348. SEND_SETUP_REQUEST_STATE,
  349. ALERT_STATE
  350.     } m_idleState;
  351. #if defined(HELIX_FEATURE_REVERTER)
  352.     DataRevertController*   m_pDataRevert;
  353. #endif /* HELIX_FEATURE_REVERTER */
  354. private:
  355.     void     hackCookie(IHXBuffer* pCookie);
  356.     HX_RESULT       SwitchToUnicast(void);
  357. };
  358. #endif /*_RTSPPROTOCOL__*/