⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtspprotocol.h

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 H
字号:
/* ***** BEGIN LICENSE BLOCK ***** 
 * Version: RCSL 1.0/RPSL 1.0 
 *  
 * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
 *      
 * The contents of this file, and the files included with this file, are 
 * subject to the current version of the RealNetworks Public Source License 
 * Version 1.0 (the "RPSL") available at 
 * http://www.helixcommunity.org/content/rpsl unless you have licensed 
 * the file under the RealNetworks Community Source License Version 1.0 
 * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
 * in which case the RCSL will apply. You may also obtain the license terms 
 * directly from RealNetworks.  You may not use this file except in 
 * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
 * applicable to this file, the RCSL.  Please see the applicable RPSL or 
 * RCSL for the rights, obligations and limitations governing use of the 
 * contents of the file.  
 *  
 * This file is part of the Helix DNA Technology. RealNetworks is the 
 * developer of the Original Code and owns the copyrights in the portions 
 * it created. 
 *  
 * This file, and the files included with this file, is distributed and made 
 * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
 * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
 * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
 * 
 * Technology Compatibility Kit Test Suite(s) Location: 
 *    http://www.helixcommunity.org/content/tck 
 * 
 * Contributor(s): 
 *  
 * ***** END LICENSE BLOCK ***** */ 


#ifndef _RTSPPROTOCOL_H_
#define _RTSPPROTOCOL_H_

#include "hxathsp.h"
#include "hxpktsp.h"
#include "hxsmbw.h"

struct	IHXPacket;
struct	IHXValues;
class	CHXEvent;
class	DataRevertController;
class	RTSPClientProtocol;

class RTSPProtocol : public HXProtocol, 
		     public IHXRTSPClientProtocolResponse,
		     public IHXASMSource,
		     public IHXBackChannel,
#if defined(HELIX_FEATURE_AUTHENTICATION)
		     public IHXClientAuthResponse,
		     public IHXAuthenticationManagerResponse,
#endif /* HELIX_FEATURE_AUTHENTICATION */
		     public IHXAtomicRuleChange,
		     public IHXPreferredTransportSink,
		     public DataRevertControllerResponse
{
public:
			RTSPProtocol  (HXNetSource *owner, 
				       ULONG32 ulPlatformSpecific = 0 );
			~RTSPProtocol ();
    /*
     *	IUnknown methods
     */

    STDMETHOD(QueryInterface)		(THIS_
					REFIID riid,
					void** ppvObj);
    
    STDMETHOD_(ULONG32,AddRef)	(THIS);

    STDMETHOD_(ULONG32,Release)	(THIS);

    // IHXPendingStatus methods

    /************************************************************************
     *	Method:
     *	    IHXPendingStatus::GetStatus
     *	Purpose:
     *	    Called by the user to get the current pending status from an object
     */
    STDMETHOD(GetStatus)	(THIS_
				REF(UINT16) uStatusCode, 
				REF(IHXBuffer*) pStatusDesc, 
				REF(UINT16) ulPercentDone);

#if defined(HELIX_FEATURE_STATS)
    /*
     *	IHXStatistics methods
     */

    /************************************************************************
     *  Method:
     *      IHXStatistics::InitializeStatistics
     *  Purpose:
     *      Pass registry ID to the caller
     */
    STDMETHOD (InitializeStatistics)	(THIS_
					UINT32	/*IN*/ ulRegistryID);

    /************************************************************************
     *  Method:
     *      IHXStatistics::UpdateStatistics
     *  Purpose:
     *      Notify the client to update its statistics stored in the registry
     */
    STDMETHOD (UpdateStatistics)		(THIS);
#endif /* HELIX_FEATURE_STATS */
    
    virtual HX_RESULT	GetStreamStatistics	(ULONG32 ulStreamNumber,
						 STREAM_STATS** ppStreamStats);

    virtual HX_RESULT	UpdateRegistry		(UINT32 ulStreamNumber,
						 UINT32 ulRegistryID);

    /*
     *	IHXRTSPClientProtocolResponse methods
     */

    STDMETHOD(InitDone)			(THIS_
    					HX_RESULT	status);

    STDMETHOD(HandleOptionsResponse)	
    (
	THIS_
	HX_RESULT	status,
	IHXValues*	pHeader
    );

    STDMETHOD(HandleWWWAuthentication)	(THIS_
					HX_RESULT	status,
					IHXValues*	AuthInfo);

#if defined(HELIX_FEATURE_AUTHENTICATION)
    /*
     * IHXAuthenticationManagerResponse methods
     */
    STDMETHOD(AuthenticationRequestDone) (THIS_ HX_RESULT,
					  const char*,
					  const char*);

    // IHXClientAuthResponse
    STDMETHOD(ResponseReady)
    (
	HX_RESULT   HX_RESULTStatus,
	IHXRequest* pIHXRequestResponse
    );
#endif /* HELIX_FEATURE_AUTHENTICATION */

    STDMETHOD(HandleStreamDescriptionResponse)	
    (
	THIS_
	HX_RESULT	status,
	IHXValues*	pFileHeader,
	CHXSimpleList*	pHeaderList,
	IHXValues*	pResponseHeaders
    );

    STDMETHOD(HandleStreamRecordDescriptionResponse)	
					(THIS_
					HX_RESULT	status,
					IHXValues*	pResponseHeaders);

    STDMETHOD(HandleSetupResponse)	(THIS_
					HX_RESULT	status);

    STDMETHOD(HandlePlayResponse)	(THIS_
					HX_RESULT	status);

    STDMETHOD(HandleRecordResponse)	(THIS_
					HX_RESULT	status);

    STDMETHOD(HandleTeardownResponse)	(THIS_
					HX_RESULT	status);

    STDMETHOD(HandleSetParameterRequest)
					(THIS_
					UINT32		lParamType,
					const char*	pParamName,
					IHXBuffer*	pParamValue);
    						
    STDMETHOD(HandleSetParameterRequest) (THIS_
	    				 const char* pParamName,
					 const char* pParamValue,
					 const char* pContent);

    STDMETHOD(HandleSetParameterResponse)
					(THIS_
    					HX_RESULT	status);

    STDMETHOD(HandleSetParameterResponseWithValues)	(THIS_
    						HX_RESULT status,
						IHXValues* pValues
						);

    STDMETHOD(HandleGetParameterRequest)
					(THIS_
					UINT32		lParamType,
					const char*	pParamName,
					IHXBuffer**	pParamValue);

    STDMETHOD(HandleGetParameterResponse)
					(THIS_
					HX_RESULT	status,
					IHXBuffer*	pParamValue);

    STDMETHOD(HandleAlertRequest)	(THIS_
					HX_RESULT	status,
					INT32		lAlertNumber,
					const char*	pAlertText);

    STDMETHOD(HandleRedirectRequest)	(THIS_
    					const char*	pURL,
					UINT32		msFromNow);

    STDMETHOD(HandleUseProxyRequest)	(THIS_
					const char*	pProxyURL);

    STDMETHOD(HandlePacket)		(THIS_
    					HX_RESULT	status,
					const char*	pSessionID,
					IHXPacket*	pPacket);

    STDMETHOD(HandleProtocolError)	(THIS_
    					HX_RESULT	status);

    STDMETHOD(HandleRTTResponse)	(THIS_
    					HX_RESULT	status,
					const char*	pSessionID,
					UINT32		ulSecs,
					UINT32		ulUSecs);

    STDMETHOD(HandleCongestion)		(THIS_
    					HX_RESULT	status,
					const char*	pSessionID,
					INT32		xmitMultiplier,
					INT32		recvMultiplier);

    STDMETHOD(HandleStreamDone)		(THIS_
    					HX_RESULT	status,
					UINT16		uStreamNumber);

    /* This only indicates that all packets have been received from the
     * server. We still need to read packets from the transport buffer
     * StreamDone will indicate when there are no more packets to be
     * read from Transport buffer
     */
    STDMETHOD(HandleSourceDone)		(THIS);

    STDMETHOD(HandlePrerollChange)	(THIS_ 
					 RTSPPrerollTypeEnum prerollType,
					 UINT32 ulPreroll
	                                ); 

    /*
     *  IHXASMSource methods
     */

    STDMETHOD(Subscribe)		(THIS_
    					UINT16		streamNumber,
					UINT16		ruleNumber);

    STDMETHOD(Unsubscribe)		(THIS_
    					UINT16		streamNumber,
					UINT16		ruleNumber);

    /*
     *  IHXAtomicRuleChange method
     */

    STDMETHOD(RuleChange)		(THIS_
    					REF(CHXSimpleList) RuleChanges);

    /*
     * IHXBackChannel methods
     */
    
    STDMETHOD(PacketReady)		(THIS_
    					IHXPacket*	pPacket);

    /*
     * IHXPreferredTransportSink methods
     */
    STDMETHOD(TransportSucceeded)   (TransportMode			/* IN */   prefTransportType,
				     UINT16				/* IN */   uCloakPort);

    STDMETHOD(TransportFailed)	    (THIS);

    /*
     *	HXProtocol methods
     */

    virtual HX_RESULT	server_hello		(void);

    virtual HX_RESULT	proxy_hello		(void);

    virtual HX_RESULT	process			(void);

    virtual HX_RESULT	abort			(void);

    virtual HX_RESULT   GetEvent		(UINT16 uStreamNumber,
						 CHXEvent*& pEvent);

    virtual HX_RESULT	GetCurrentBuffering(UINT16  uStreamNumber,
					    INT64&  llLowestTimestamp, 
					    INT64&  llHighestTimestamp,
					    UINT32& ulNumBytes,
					    BOOL&   bDone);

    virtual HX_RESULT	setup			(const char* host,
						 const char* path,
						 UINT16 port,
						 BOOL	LossCorrection,
						 BOOL	bHTTPCloak,
                                                 BOOL   bSDPInitiated,
						 UINT16	cloakPort);

    virtual void	initialize_members	(void);

    virtual HX_RESULT	seek			(ULONG32 posArg,
						 ULONG32 posArg2 = 0,
						 UINT16  seekFrom = 0);

    virtual HX_RESULT	pause			(void);

    virtual HX_RESULT	resume			(UINT32 ulEndTime = 0);

    virtual HX_RESULT	reset			(void) { return HXR_OK; };
						
    virtual HX_RESULT	stop 			(void);

#if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)
    virtual void	send_statistics		(UINT32	ulStatsMask);
    HX_RESULT		prepare_stats4		(char*& pszOutput, UINT32& ulOutput);    
    STREAM_STATS*	create_statistics	(UINT16 uStreamNumber);
#endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */

    virtual HX_RESULT	send_setup_request	();

    BOOL		IsSourceDone(void);
    
    const char*		get_protocol_name	(void)
						{return "RTSP";}

#if defined(HELIX_FEATURE_AUTHENTICATION)
    HX_RESULT		handlePendingWWWAuthentication(
				    HX_RESULT HX_RESULTStatus, 
				    IHXValues* pIHXValuesHeaders);
#endif /* HELIX_FEATURE_AUTHENTICATION */

    HX_RESULT		handle_multicast	(void);

    void RevertHeadersDone(IHXValues* pFileHeader,
			   CHXSimpleList* pStreamHeaders, 
			   IHXValues* pResponseHeaders,
			   BOOL bUseReverter);
    void SendControlBuffer(IHXBuffer* pBuffer);

    virtual UINT16	GetRDTFeatureLevel	(void);

    virtual void	LeavePrefetch		(void);

    virtual void	EnterFastStart		(void);
    virtual void	LeaveFastStart		(void);

protected:
    LONG32			m_lRefCount;
    DECLARE_SMART_POINTER
    (
	IHXClientAuthConversation
    )				m_spIHXClientAuthConversationAuthenticator;
    IHXRTSPClientProtocol*	m_pProtocolLib;
    ULONG32			m_uSecurityKey;
    ULONG32			m_uStreamCount;
    ULONG32			m_uCurrentStreamCount;
    CHXMapLongToObj*		m_pStreamInfoList;
    IHXPendingStatus*		m_pPendingStatus;
    IHXStatistics*		m_pStatistics;
    IHXRequest*		        m_pRequest;
    HX_BITFIELD			m_bPlaying : 1;
    HX_BITFIELD			m_bIsASMSource : 1;
    BOOL			m_bUseRTP;
    HX_BITFIELD			m_bFirstAuthAttempt : 1;
    HX_BITFIELD			m_bPendingSeek : 1;
    HX_BITFIELD			m_bHandleWWWAuthentication : 1;

    HX_BITFIELD			mReceivedControl : 1;

    // Smart Networking  
    HX_BITFIELD			m_bReceivedData : 1;
    HX_BITFIELD                 m_bMulticastOnly : 1;

    // ID info
    IHXValues*			m_pIDInfo;


    UINT32			m_ulSeekPos1;
    UINT32			m_ulSeekPos2;

    HX_RESULT			m_WWWResult;
    IHXValues*			m_pWWWValues;


    DECLARE_SMART_POINTER(IHXValues) m_spIHXValuesStoredHeaders;

    enum
    {
	NULL_STATE,
	INIT_SOCKETS_STATE,
	SEND_SETUP_REQUEST_STATE,
	ALERT_STATE
    } m_idleState;

#if defined(HELIX_FEATURE_REVERTER)
    DataRevertController*   m_pDataRevert;
#endif /* HELIX_FEATURE_REVERTER */

private:
    void	    hackCookie(IHXBuffer* pCookie);
    HX_RESULT       SwitchToUnicast(void);
};

#endif /*_RTSPPROTOCOL__*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -