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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxprotocol.h,v 1.3.28.1 2004/07/09 02:05:58 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 _HXPROTOCOL_H_
  50. #define _HXPROTOCOL_H_
  51. #include "hxcom.h"
  52. #include "hxresult.h"
  53. #include "hxmon.h"
  54. #include "statinfo.h"
  55. //#include "rmresend.h"
  56. #include "hxpreftr.h"
  57. #include "hxcredc.h"
  58. // forward decl.
  59. class HXNetSource;
  60. class CHXSimpleList;
  61. struct IHXPendingStatus;
  62. struct IHXStatistics;
  63. class  CHXEvent;
  64. typedef struct _HX_BANDWIDTH_REPORT
  65. {
  66.     UINT16  serverTimeInterval;
  67.     UINT16  playerTimeInterval;
  68.     ULONG32  numServerBytes;
  69.     ULONG32  numPlayerBytes;
  70.     ULONG32  totalServerBytes;
  71.     ULONG32  totalPlayerBytes;
  72.     ULONG32  totalServerTime;
  73.     ULONG32  totalPlayerTime;
  74. } HX_BANDWIDTH_REPORT;
  75. // these are the values passed in SetOption
  76. enum
  77. {
  78.     HX_PERFECTPLAY_SUPPORTED = 0
  79.    ,HX_RESEND_SUPPORTED
  80.    ,HX_STATS_MASK
  81.    ,HX_TRANSPORTSWITCHING_SUPPORTED
  82.    ,HX_FORCE_PERFECT_PLAY
  83.    ,HX_SELECTIVE_RECORD_SUPPORTED
  84.    ,HX_GENERIC_MESSAGE_SUPPORT
  85.    ,HX_INTERFRAME_CONTROL_SUPPORT
  86.    ,HX_BANDWIDTH_REPORT_SUPPORT
  87.    ,HX_FRAME_CONTROL_SUPPORT
  88.    ,HX_STATS_INTERVAL
  89.    ,HX_MAX_BANDWIDTH
  90.    ,HX_TURBO_PLAY
  91. };
  92. #define MIN_UDP_PORT 6970
  93. #define MAX_UDP_PORT 7170
  94. #define TEXT_BUF_SIZE 1024
  95. class HXProtocol : public IHXPendingStatus
  96. #if defined(HELIX_FEATURE_STATS)
  97.    , public IHXStatistics
  98. #endif /* HELIX_FEATURE_STATS */
  99. {
  100. public:
  101.     UINT32 m_ulRegistryID;
  102.     IHXRegistry* m_pRegistry;
  103.     
  104.     HXProtocol(HXNetSource *owner, ULONG32 ulPlatformSpecific = 0);
  105.     virtual ~HXProtocol();
  106.     LONG32 m_lRefCount;
  107.     // *** IUnknown methods ***
  108.     /* This is made PURE since PNA and RTSP may expose different interfaces...*/
  109.     STDMETHOD(QueryInterface) (THIS_
  110. REFIID riid,
  111. void** ppvObj) PURE;
  112.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  113.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  114.    
  115.     // functions that *MUST* be implemented by every protocol
  116.     
  117.     // IHXPendingStatus methods
  118.     /************************************************************************
  119.      * Method:
  120.      *     IHXPendingStatus::GetStatus
  121.      * Purpose:
  122.      *     Called by the user to get the current pending status from an object
  123.      */
  124.     STDMETHOD(GetStatus) (THIS_
  125. REF(UINT16) uStatusCode, 
  126. REF(IHXBuffer*) pStatusDesc, 
  127. REF(UINT16) ulPercentDone) PURE;
  128. #if defined(HELIX_FEATURE_STATS)
  129.     /*
  130.      * IHXStatistics methods
  131.      */
  132.     /************************************************************************
  133.      *  Method:
  134.      *      IHXStatistics::InitializeStatistics
  135.      *  Purpose:
  136.      *      Pass registry ID to the caller
  137.      */
  138.     STDMETHOD (InitializeStatistics) (THIS_
  139. UINT32 /*IN*/ ulRegistryID) PURE;
  140.     /************************************************************************
  141.      *  Method:
  142.      *      IHXStatistics::UpdateStatistics
  143.      *  Purpose:
  144.      *      Notify the client to update its statistics stored in the registry
  145.      */
  146.     STDMETHOD (UpdateStatistics) (THIS) PURE;
  147. #endif /* HELIX_FEATURE_STATS */
  148.     virtual HX_RESULT GetStreamStatistics (ULONG32 ulStreamNumber,
  149.  STREAM_STATS** ppStreamStats) = 0;
  150.     virtual HX_RESULT UpdateRegistry (UINT32 ulStreamNumber,
  151.  UINT32 ulRegistryID) = 0;
  152.     virtual HX_RESULT server_hello (void) = 0;
  153.     virtual HX_RESULT proxy_hello (void) = 0;
  154.     virtual HX_RESULT process  (void) = 0;
  155.     virtual HX_RESULT abort   (void) = 0;
  156.     virtual HX_RESULT   GetEvent (UINT16 usStreamNumber,
  157.  CHXEvent*& pEvent) = 0;
  158.     virtual HX_RESULT GetCurrentBuffering(UINT16  uStreamNumber,
  159.     INT64&  llLowestTimestamp, 
  160.     INT64&  llHighestTimestamp,
  161.     UINT32& ulNumBytes,
  162.     BOOL&   bDone) = 0;
  163.     // functions that should be overridden
  164.     // should be made abstract later on if we decide that these are must
  165.     // for every protocol to implement.
  166.     virtual HX_RESULT setup (const char* host,
  167.  const char* path,
  168.  UINT16 port,
  169.  BOOL LossCorrection,
  170.  BOOL bHTTPCloak,
  171.                                                  BOOL   bSDPInitiated,
  172.  UINT16 cloakPort);
  173.     virtual void initialize_members (void);
  174.     virtual HX_RESULT process_idle (BOOL atInterrupt);
  175.     virtual HX_RESULT seek (ULONG32 posArg,
  176.  ULONG32 posArg2 = 0,
  177.  UINT16 seekFrom = 0)
  178. {return HXR_OK;}
  179.     virtual HX_RESULT pause  (void)
  180. {return HXR_OK;}
  181.     virtual HX_RESULT resume (UINT32 ulEndTime = 0)
  182. {return HXR_OK;}
  183.     virtual HX_RESULT stop  (void);
  184.     virtual HX_RESULT set_proxy (const char* proxy,
  185.  UINT16 port);
  186.     virtual void send_statistics (UINT32 ulStatsMask) {};
  187.     virtual BOOL end_of_clip (void)
  188. {return mSourceEnd;}
  189.     virtual UINT16 get_protocol_version (void)
  190. {return mProtocolVersion;}
  191.     virtual const char* get_protocol_name (void)
  192. {return "";}
  193.     virtual HX_RESULT set_client_id  (char * clientID);
  194.     virtual void set_locale (UINT16 locale)
  195. {mLocale = locale;}
  196.     virtual void set_perfect_play (BOOL isPerfectPlay)
  197. {m_bPerfectPlay = isPerfectPlay;}
  198. // NOTE: set_UDP_port() now means, if in UDP mode,
  199. // use the specified port for UDP. It doesn't necessarily
  200. // mean to use UDP mode...
  201.     virtual void  set_UDP_port (void) 
  202. {mUseUDPPort = TRUE;}
  203.     virtual void set_server_timeout (ULONG32 secs)
  204. {mServerTimeout = secs;}
  205.     virtual BOOL IsPerfectPlayAllowed (void)
  206. {return m_bPerfectPlayAllowed;}
  207.     virtual BOOL IsSaveAllowed (void)
  208. {return mSaveAsAllowed;}
  209.     virtual BOOL IsLive (void)
  210. {return mLiveStream;}
  211.     virtual const char* GetLastAlertInfo (REF(UINT32) ulAlertNumber)
  212. {ulAlertNumber = m_ulLastAlert; return m_pTextBuf;}
  213.     virtual BOOL IsSourceDone(void) = 0;
  214.     virtual void EnterPrefetch (void) {m_bPrefetch = TRUE;};
  215.     virtual void LeavePrefetch (void);
  216.     virtual void EnterFastStart (void) {m_bFastStart = TRUE;};
  217.     virtual void LeaveFastStart (void) {m_bFastStart = FALSE;};
  218.     virtual void SetCloakPortAttempted (UINT16* pCloakPorts, UINT8 nCloakPorts);
  219.     virtual UINT16 GetRDTFeatureLevel (void) { return 0; };
  220. protected:
  221.     
  222.     UINT8 mProxyVersion : 8; // protocol version for proxy
  223.     // flags
  224.     HX_BITFIELD mLiveStream : 1;
  225.     HX_BITFIELD mSaveAsAllowed : 1;
  226.     HX_BITFIELD m_bPerfectPlayAllowed : 1;
  227.     HX_BITFIELD m_bPrefetch : 1;
  228.     HX_BITFIELD m_bFastStart : 1;
  229.     HX_BITFIELD m_bIsFirstResume : 1;
  230.     HX_BITFIELD mProtocolValid : 1; // does server support protocol
  231.     HX_BITFIELD m_bConnectDone : 1;
  232.     HX_BITFIELD mSourceEnd : 1; // == 1 no more data
  233.     HX_BITFIELD mUseUDPPort : 1; // user specified udp port
  234.     HX_BITFIELD mFlowControl : 1; // stop server sending data
  235.     HX_BITFIELD m_bPerfectPlay : 1; // == 1 perfect play mode
  236.     HX_BITFIELD mUseProxy : 1; // == 1 use proxy
  237.     HX_BITFIELD mUsingMulticast : 1;
  238.     HX_BITFIELD m_bHTTPOnly : 1;
  239.     HX_BITFIELD m_bPaused : 1; // == 1 pause state
  240.     HX_BITFIELD mLossCorrection : 1; // == 1 loss correction is on
  241.     HX_BITFIELD m_bAreResuming : 1;
  242.     HX_BITFIELD         m_bSDPInitiated : 1;
  243.     BOOL m_bHTTPvProxy;
  244.     UINT16 mProtocolVersion; // server/client protocol number
  245.     UINT16 mAtInterrupt; // == 1 at interrupt level
  246.     UINT16 mLocked; // semaphore for reentracy
  247.     UINT16 mLocale; // stores player id ??
  248.     UINT16 mPort; // server control port
  249.     ULONG32 mServerAddr; // server address from async dns
  250.     HXNetSource* mOwner; // ptr to HXNetSource object
  251.     char* mHost; // server host name
  252.     char* mPath; // remote file path to play
  253.     CHXSimpleList* m_pUDPPortList;
  254.     UINT16 m_uUDPPort;
  255.     ULONG32 mSendStatsMask; // stats level sent to server
  256.     char* mProxy; // proxy host name
  257.     UINT16 mProxyPort; // proxy port number
  258.     UINT16 mMulticastPort;
  259.     ULONG32 mMulticastAddr;
  260.     UINT16 mCloakPort;
  261.     INT16 mNumFlowControl; // flow control msgs from owner
  262.     ULONG32 mServerTimeout; // timeout value for server
  263.     HX_RESULT m_LastError;
  264.     IHXPreferences* m_pPreferences;
  265.     IHXCredentialsCache*    m_pCredentialsCache;
  266.     UINT32 m_ulLastAlert;
  267.     char* m_pTextBuf;
  268.     UINT16* m_pCloakPorts;
  269.     UINT8 m_nCloakPorts;
  270.     // ID info
  271.     char* m_pszClientID; // string to hold clientID
  272.     char* m_pszGUID; // string to hold GUID
  273.    
  274. //////////////////////////////////////////////
  275. // Automatic Transport Switching Support...
  276. protected:
  277.     TransportMode mCurrentTransport;
  278.     UINT32 m_ulTransportPrefMask;
  279. public:
  280.     virtual void set_transport(TransportMode mode, UINT32 ulTransportPrefMask)
  281.     {
  282. if (HTTPCloakMode == mode)
  283. {
  284.     mCurrentTransport = TCPMode;
  285. }
  286. else
  287. {
  288.     mCurrentTransport = mode;
  289. }
  290. m_ulTransportPrefMask = ulTransportPrefMask;
  291.     };
  292.     BOOL can_switch_transport()
  293.     {
  294. return FALSE;
  295.     };
  296.     HX_RESULT switch_transport(TransportMode mode)
  297.     {
  298. return HXR_INVALID_OPERATION;
  299.     };
  300. #if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)
  301.     void statistics_cat(char* pszStats, UINT32 ulBufLen, LONG32 lData);
  302.     void statistics_cat_ext(char* pszStats, UINT32 ulBufLen, LONG32 lData, char* pszSep, UINT32& ulCount);
  303.     HX_RESULT prepare_statistics(UINT32 ulStatsMask, char*& pszStats);
  304. #endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */
  305. };
  306. #endif //_HXPROTOCOL_H_