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

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 _HXRTSP2_H_
  36. #define _HXRTSP2_H_
  37. #include "hxcom.h"
  38. #include "hxtypes.h"
  39. class RTSPTransport;
  40. typedef _INTERFACE IHXTCPSocket IHXTCPSocket;
  41. typedef _INTERFACE IHXBuffer IHXBuffer;
  42. typedef _INTERFACE IHXList IHXList;
  43. typedef _INTERFACE IHXListIterator IHXListIterator;
  44. typedef _INTERFACE IHXMIMEParameter IHXMIMEParameter;
  45. typedef _INTERFACE IHXMIMEField IHXMIMEField;
  46. typedef _INTERFACE IHXMIMEHeader IHXMIMEHeader;
  47. typedef _INTERFACE IHXRTSPMessage IHXRTSPMessage;
  48. typedef _INTERFACE IHXRTSPRequestMessage IHXRTSPRequestMessage;
  49. typedef _INTERFACE IHXRTSPResponseMessage IHXRTSPResponseMessage;
  50. typedef _INTERFACE IHXRTSPInterleavedPacket IHXRTSPInterleavedPacket;
  51. typedef _INTERFACE IHXRTSPConsumer  IHXRTSPConsumer;
  52. typedef _INTERFACE IHXRTSPProtocolResponse IHXRTSPProtocolResponse;
  53. typedef _INTERFACE IHXRTSPProtocol IHXRTSPProtocol;
  54. /*
  55.  * RTSP message limits:
  56.  *
  57.  *   Max pending bytes: 64k
  58.  *     This is the upper bound on any portion of an RTSP message (command,
  59.  *     header, packet, entity).
  60.  *
  61.  *   Max header size: 64k
  62.  *   Max headers: 100
  63.  *     I thought about restricting header length to something smallor than
  64.  *     the default 64k but that isn't really practical.  Some headers such
  65.  *     as RTP-Info contain urls and so we must allow headers to be as long
  66.  *     as the command line.
  67.  *
  68.  *   Max entity size: 64k
  69.  *     Entities are only used in our system for SDP.  A typical SDP block is
  70.  *     around 4k, so this should leave plenty of room.
  71.  */
  72. #define RTSP_MAX_PENDING_BYTES  (64*1024)
  73. #define RTSP_MAX_COMMAND_SIZE   (64*1024)
  74. #define RTSP_MAX_HEADER_SIZE    (64*1024)
  75. #define RTSP_MAX_HEADER_COUNT   100
  76. #define RTSP_MAX_ENTITY_SIZE    (64*1024)
  77. // No packet limit needed, 64k is physical maximum
  78. enum RTSPMethod
  79. {
  80.       RTSP_UNKNOWN
  81.     , RTSP_ANNOUNCE
  82.     , RTSP_DESCRIBE
  83.     , RTSP_GET_PARAM
  84.     , RTSP_OPTIONS
  85.     , RTSP_PAUSE
  86.     , RTSP_PLAY
  87.     , RTSP_RECORD
  88.     , RTSP_REDIRECT
  89.     , RTSP_SETUP
  90.     , RTSP_SET_PARAM
  91.     , RTSP_TEARDOWN
  92.     , RTSP_EXTENSION
  93.     , RTSP_RESP
  94. };
  95. #define RTSP_VERB_NONE       0
  96. #define RTSP_VERB_ANNOUNCE   1
  97. #define RTSP_VERB_DESCRIBE   2
  98. #define RTSP_VERB_GETPARAM   3
  99. #define RTSP_VERB_OPTIONS    4
  100. #define RTSP_VERB_PAUSE      5
  101. #define RTSP_VERB_PLAY       6
  102. #define RTSP_VERB_RECORD     7
  103. #define RTSP_VERB_REDIRECT   8
  104. #define RTSP_VERB_SETUP      9
  105. #define RTSP_VERB_SETPARAM  10
  106. #define RTSP_VERB_TEARDOWN  11
  107. #define RTSP_VERB_EXTENSION 12
  108. #define RTSP_RES_AGAIN   1
  109. #define RTSP_RES_DONE    2
  110. #define RTSP_RES_PARTIAL 3
  111. #define RTSP_RES_INVALID 4
  112. #define RS_READY    1
  113. #define RS_HDR      2
  114. #define RS_DATA     3
  115. #define RS_FIN      4
  116. /*
  117.  * Simple MIME headers:
  118.  *   "CSeq: 5"
  119.  *   "Content-Type: application/sdp"
  120.  *
  121.  * Non-simple MIME headers:
  122.  *   "Foo:"
  123.  *   "Transport: rdt;cp=6970;mode=play,rtp;cp=6970;mode=play"
  124.  *
  125.  *   In the last example, the fields are "rdt;client_port=6970;mode=play"
  126.  *   and "rtp;client_port=6970;mode=play".  Each field is composed of a
  127.  *   list of parameters.  Each parameter is an attr/value pair.  The value
  128.  *   for any parameter may be NULL (non-existent).  Example:
  129.  *
  130.  *   attr  value
  131.  *   ----  -----
  132.  *   rdt   NULL
  133.  *   cp    6970
  134.  *   mode  play
  135.  */
  136. // IHXMIMEParameter: 8ae57afa-902c-4327-8c00-315785cdc243
  137. DEFINE_GUID(IID_IHXMIMEParameter, 0x8ae57afa, 0x902c, 0x4327,
  138.             0x8c, 0x00, 0x31, 0x57, 0x85, 0xcd, 0xc2, 0x43);
  139. #undef  INTERFACE
  140. #define INTERFACE   IHXMIMEParameter
  141. DECLARE_INTERFACE_(IHXMIMEParameter, IUnknown)
  142. {
  143.     // IUnknown
  144.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  145.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  146.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  147.     // IHXMIMEParameter
  148.     STDMETHOD_(UINT32,GetSize)      (THIS) PURE;
  149.     STDMETHOD_(UINT32,Write)        (THIS_ BYTE* pbuf) PURE;
  150.     STDMETHOD(Get)                  (THIS_ REF(IHXBuffer*) pbufAttr,
  151.                                            REF(IHXBuffer*) pbufVal) PURE;
  152.     STDMETHOD(Set)                  (THIS_ IHXBuffer* pbufAttr,
  153.                                            IHXBuffer* pbufVal) PURE;
  154. };
  155. /*
  156.  * A MIME field consists of zero or more parameters.  A parameter consists
  157.  * of exactly one attr/value pair.  The value may be NULL (not present) as
  158.  * in "rdt" above.  The parameters may be iterated with the GetFirstParam/
  159.  * GetNextParam methods.
  160.  *
  161.  * Lazy parsing is used for incoming fields.  The first call to
  162.  * GetFirstParam parses the parameters (but does no copying).  All calls to
  163.  * parameter-related methods for incoming fields will fail until
  164.  * GetFirstParam is called.
  165.  *
  166.  * A parameter may be added using InsertParam or AppendParam.  The
  167.  * InsertParam method takes three arguments.  The first is a position
  168.  * marker.  The second and third are the new parameter, which will be
  169.  * inserted after the marker.  If the marker is NULL, it denotes the head of
  170.  * the list.  The "current" parameter is reset to the first parameter.  This
  171.  * method is O(1) if the marker is NULL and O(n) if not.  The AppendParam
  172.  * method appends the new parameter at the tail of the list.  The "current"
  173.  * parameter remains the same.  This method is O(1).
  174.  *
  175.  * A parameter may be removed using RemoveParam or RemoveCurrentParam.  The
  176.  * RemoveParam method takes a pointer to the parameter attribute to be
  177.  * removed.  This method is O(n).  The RemoveCurrentParam method removes the
  178.  * parameter that was last returned in GetFirstParam/GetNextParam.  The new
  179.  * "current" parameter is the next parameter, if any.  This method is O(1).
  180.  *
  181.  * A parameter's value may be changed using SetValue or SetCurrentValue. 
  182.  * The SetValue method takes a pointer to the parameter attribute to be
  183.  * changed.  This method is O(n).  The SetCurrentValue method changes the
  184.  * parameter that was last returned in GetFirstParam/GetNextParam.  This
  185.  * method is O(1).
  186.  */
  187. // IHXMIMEField: 0946eed6-0501-4fc3-94bb-3023a0e523c7
  188. DEFINE_GUID(IID_IHXMIMEField, 0x946eed6, 0x0501, 0x4fc3,
  189.             0x94, 0xbb, 0x30, 0x23, 0xa0, 0xe5, 0x23, 0xc7);
  190. #undef  INTERFACE
  191. #define INTERFACE   IHXMIMEField
  192. DECLARE_INTERFACE_(IHXMIMEField, IUnknown)
  193. {
  194.     // IUnknown
  195.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  196.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  197.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  198.     // IHXMIMEField
  199.     STDMETHOD_(UINT32,GetSize)      (THIS) PURE;
  200.     STDMETHOD_(UINT32,Write)        (THIS_ BYTE* pbuf) PURE;
  201.     STDMETHOD(GetFirstParam)        (THIS_
  202.          REF(IHXMIMEParameter*) pParam) PURE;
  203.     STDMETHOD(GetParamList)         (THIS_ REF(IHXList*) plistParam) PURE;
  204.     STDMETHOD(GetParamListConst)    (THIS_ REF(IHXList*) plistParam) PURE;
  205. };
  206. /*
  207.  * A MIME header is a "key: val" pair, eg. "CSeq: 5".  The value consists of
  208.  * zero or more fields. For simple cases, the value is exactly one field
  209.  * with exactly one token and may be retrieved as a specified type with the
  210.  * GetValueAs methods.  For non-simple cases, the value is a list of fields
  211.  * which may be iterated with the GetFirstField/GetNextField methods.
  212.  *
  213.  * Lazy parsing is used for incoming headers.  The first call to
  214.  * GetFirstField parses the fields (but does no copying).  All calls to
  215.  * field-related methods for incoming headers will fail until GetFirstField
  216.  * is called.
  217.  *
  218.  * A field may be added using InsertField or AppendField.  The InsertField
  219.  * method takes two arguments.  The first is a position marker.  The second
  220.  * is the new field, which will be inserted after the marker.  If the marker
  221.  * is NULL, it denotes the head of the list.  The "current" field is reset
  222.  * to the first field.  This method is O(1) if the marker is NULL and O(n)
  223.  * if not.  The AppendField method appends the new field at the tail of the
  224.  * list.  The "current" field remains the same.  This method is O(1).
  225.  *
  226.  * A field may be removed using RemoveField or RemoveCurrentField.  The
  227.  * RemoveField method takes a pointer to the field to be removed.  This
  228.  * method is O(n).  The RemoveCurrentField method removes the field that was
  229.  * last returned in GetFirstField/GetNextField.  The new "current" field is
  230.  * the next field, if any.  This method is O(1).
  231.  */
  232. // IHXMIMEHeader: 97e681a3-bd71-4b81-8fa0-81199e799ae7
  233. DEFINE_GUID(IID_IHXMIMEHeader, 0x97e681a3, 0xbd71, 0x4b81,
  234.             0x8f, 0xa0, 0x81, 0x19, 0x9e, 0x79, 0x9a, 0xe7);
  235. #undef  INTERFACE
  236. #define INTERFACE   IHXMIMEHeader
  237. DECLARE_INTERFACE_(IHXMIMEHeader, IUnknown)
  238. {
  239.     // IUnknown
  240.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  241.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  242.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  243.     // IHXMIMEHeader
  244.     STDMETHOD_(void,ReplaceDelimiters)(THIS_ 
  245.          BOOL bReplaceDelimiters,
  246.     int nReplacementDelimiter) PURE;
  247.     STDMETHOD_(UINT32,GetSize)      (THIS) PURE;
  248.     STDMETHOD_(UINT32,Write)        (THIS_ BYTE* pbuf) PURE;
  249.     STDMETHOD(GetKey)               (THIS_ REF(IHXBuffer*)pbufKey) PURE;
  250.     STDMETHOD(SetKey)               (THIS_ IHXBuffer* pbufKey) PURE;
  251.     STDMETHOD(GetFirstField)        (THIS_ REF(IHXMIMEField*) pField) PURE;
  252.     STDMETHOD(GetFieldList)         (THIS_ REF(IHXList*) plistFields) PURE;
  253.     STDMETHOD(GetFieldListConst)    (THIS_ REF(IHXList*) plistFields) PURE;
  254.     STDMETHOD(GetValueAsInt)        (THIS_ REF(INT32) val) PURE;
  255.     STDMETHOD(SetValueFromInt)      (THIS_ INT32 val) PURE;
  256.     STDMETHOD(GetValueAsUint)       (THIS_ REF(UINT32) val) PURE;
  257.     STDMETHOD(SetValueFromUint)     (THIS_ UINT32 val) PURE;
  258.     STDMETHOD(GetValueAsBuffer)     (THIS_ REF(IHXBuffer*)pbufVal) PURE;
  259.     STDMETHOD(SetValueFromBuffer)   (THIS_ IHXBuffer* pbufVal) PURE;
  260.     //XXXTDM: added these for convenience when writing client code.
  261.     //        we should come up with a clean, standardized interface.
  262.     STDMETHOD(SetFromString)        (THIS_ const char* szKey,
  263.                                            const char* szVal) PURE;
  264.     STDMETHOD(SetFromBuffer)        (THIS_ const char* szKey,
  265.                                            IHXBuffer* pbufVal) PURE;
  266. };
  267. // IHXRTSPMessage: 1bff98ab-e5c9-459d-80ee-b80d20e4f30e
  268. DEFINE_GUID(IID_IHXRTSPMessage, 0x1bff98ab, 0xe5c9, 0x459d,
  269.             0x80, 0xee, 0xb8, 0x0d, 0x20, 0xe4, 0xf3, 0x0e);
  270. #undef  INTERFACE
  271. #define INTERFACE   IHXRTSPMessage
  272. DECLARE_INTERFACE_(IHXRTSPMessage, IUnknown)
  273. {
  274.     // IUnknown
  275.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  276.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  277.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  278.     // IHXRTSPMessage
  279.     STDMETHOD_(UINT16,GetVersion)   (THIS) PURE;
  280.     STDMETHOD(SetVersion)           (THIS_ UINT16 ver) PURE;
  281.     STDMETHOD_(int,GetMajorVersion) (THIS) PURE;
  282.     STDMETHOD(SetMajorVersion)      (THIS_ int uMajorVer) PURE;
  283.     STDMETHOD_(int,GetMinorVersion) (THIS) PURE;
  284.     STDMETHOD(SetMinorVersion)      (THIS_ int uMinorVer) PURE;
  285.     STDMETHOD_(UINT32,GetCSeq)      (THIS) PURE;
  286.     STDMETHOD(SetCSeq)              (THIS_ UINT32 cseq) PURE;
  287.     STDMETHOD(GetContent)           (THIS_ REF(IHXBuffer*) pbufContent) PURE;
  288.     STDMETHOD(SetContent)           (THIS_ IHXBuffer* pbuf) PURE;
  289.     STDMETHOD(GetHeader)            (THIS_ const char* key,
  290.                                            REF(IHXMIMEHeader*)pHeader) PURE;
  291.     STDMETHOD(AddHeader)            (THIS_ IHXMIMEHeader* pHeader) PURE;
  292.     STDMETHOD(SetHeader)            (THIS_ IHXMIMEHeader* pHeader) PURE;
  293.     STDMETHOD(RemoveHeader)         (THIS_ const char* key) PURE;
  294.     STDMETHOD(GetHeaderList)        (THIS_ REF(IHXList*) plistHeaders) PURE;
  295.     STDMETHOD(GetHeaderListConst)   (THIS_ REF(IHXList*) plistHeaders) PURE;
  296.     STDMETHOD_(void,ReplaceDelimiters)(THIS_ 
  297.          BOOL bReplaceDelimiters,
  298.     int nReplacementDelimiter) PURE;
  299. };
  300. // IHXRTSPRequestMessage: ddb0e73f-0d5a-4fd1-bdc8-957f0d872a33
  301. DEFINE_GUID(IID_IHXRTSPRequestMessage, 0xddb0e73f, 0x0d5a, 0x4fd1,
  302.             0xbd, 0xc8, 0x95, 0x7f, 0x0d, 0x87, 0x2a, 0x33);
  303. #undef  INTERFACE
  304. #define INTERFACE   IHXRTSPRequestMessage
  305. DECLARE_INTERFACE_(IHXRTSPRequestMessage, IUnknown)
  306. {
  307.     // IUnknown
  308.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  309.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  310.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  311.     // IHXRTSPRequestMessage
  312.     STDMETHOD_(UINT32,GetSize)      (THIS) PURE;
  313.     STDMETHOD_(UINT32,Write)        (THIS_
  314.                                     BYTE* pBuf) PURE;
  315.     STDMETHOD_(RTSPMethod,GetMethod)(THIS) PURE;
  316.     STDMETHOD_(UINT32,GetVerb)      (THIS) PURE;
  317.     STDMETHOD(SetVerb)              (THIS_
  318.                                     UINT32 verb) PURE;
  319.     STDMETHOD(GetVerbEx)            (THIS_
  320.                                     REF(IHXBuffer*) pBufVerb) PURE;
  321.     STDMETHOD(SetVerbEx)            (THIS_
  322.                                     IHXBuffer* pBufVerb) PURE;
  323.     STDMETHOD(GetUrl)               (THIS_
  324.                                     REF(IHXBuffer*) pBufUrl) PURE;
  325.     STDMETHOD(SetUrl)               (THIS_
  326.                                     IHXBuffer* pBufUrl) PURE;
  327. };
  328. // IHXRTSPResponseMessage: 876baec2-ec9e-41dc-8cb6-e874b60fbad6
  329. DEFINE_GUID(IID_IHXRTSPResponseMessage, 0x876baec2, 0xec9e, 0x41dc,
  330.             0x8c, 0xb6, 0xe8, 0x74, 0xb6, 0x0f, 0xba, 0xd6);
  331. #undef  INTERFACE
  332. #define INTERFACE   IHXRTSPResponseMessage
  333. DECLARE_INTERFACE_(IHXRTSPResponseMessage, IUnknown)
  334. {
  335.     // IUnknown
  336.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  337.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  338.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  339.     // IHXRTSPResponseMessage
  340.     STDMETHOD_(UINT32,GetSize)      (THIS) PURE;
  341.     STDMETHOD_(UINT32,Write)        (THIS_ BYTE* pbuf) PURE;
  342.     STDMETHOD(GetStatusCode)        (THIS_ REF(UINT32) status) PURE;
  343.     STDMETHOD(SetStatusCode)        (THIS_ UINT32 status) PURE;
  344. };
  345. // IHXRTSPInterleavedPacket: 4d737eff-8218-4762-ace3-fcf27c08f916
  346. DEFINE_GUID(IID_IHXRTSPInterleavedPacket, 0x4d737eff, 0x8218, 0x4762,
  347.             0xac, 0xe3, 0xfc, 0xf2, 0x7c, 0x08, 0xf9, 0x16);
  348. #undef  INTERFACE
  349. #define INTERFACE   IHXRTSPInterleavedPacket
  350. DECLARE_INTERFACE_(IHXRTSPInterleavedPacket, IUnknown)
  351. {
  352.     // IUnknown
  353.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  354.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  355.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  356.     // IHXRTSPInterleavedPacket
  357.     STDMETHOD(Get)                  (THIS_ REF(BYTE) byChan,
  358.                                            REF(IHXBuffer*) pbufData) PURE;
  359.     STDMETHOD(Set)                  (THIS_ BYTE byChan,
  360.                                            IHXBuffer* pbufData) PURE;
  361. };
  362. /*
  363.  * The consumer is an abstract object that the protocol pumps data into.
  364.  * It can be interleaved data, a request message, or a response message.
  365.  * The return value from ReadDone() is one of:
  366.  *   - RTSP_RES_AGAIN  : Data was processed, object is not complete.
  367.  *   - RTSP_RES_DONE   : Data was processed, object is complete.
  368.  *   - RTSP_RES_PARTIAL: Not enough data is available to process.
  369.  *   - RTSP_RES_INVALID: Data was processed, not a valid rtsp message.
  370.  *
  371.  * As the consumer receives data, it creates static buffers that AddRef()
  372.  * the protocol's buffer and refer to chunks within it.  When the consumer
  373.  * is destroyed, it Release()'s the static buffers which in turn Release()
  374.  * the protocol buffer. (see CHXStaticBuffer)
  375.  */
  376. // IHXRTSPConsumer: da62eb99-2120-410a-9866-90f7ec9cc15d
  377. DEFINE_GUID(IID_IHXRTSPConsumer, 0xda62eb99, 0x2120, 0x410a,
  378.             0x98, 0x66, 0x90, 0xf7, 0xec, 0x9c, 0xc1, 0x5d);
  379. #undef  INTERFACE
  380. #define INTERFACE   IHXRTSPConsumer
  381. DECLARE_INTERFACE_(IHXRTSPConsumer, IUnknown)
  382. {
  383.     // IUnknown
  384.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  385.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  386.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  387.     // IHXRTSPConsumer
  388.     STDMETHOD(ReadDone)             (THIS_ IHXBuffer* pbufPacket,
  389.                                            UINT32* ppos) PURE;
  390.     STDMETHOD_(UINT32,GetSize)      (THIS) PURE;
  391.     STDMETHOD_(UINT32,Write)        (THIS_ BYTE* pbuf) PURE;
  392.     STDMETHOD_(UINT32,AsBuffer)     (THIS_ REF(IHXBuffer*) pbuf) PURE;
  393. };
  394. // IHXRTSPProtocolResponse: bf646cd4-922c-4b9c-ac92-96e774de5639
  395. DEFINE_GUID(IID_IHXRTSPProtocolResponse, 0xbf646cd4, 0x922c, 0x4b9c,
  396.             0xac, 0x92, 0x96, 0xe7, 0x74, 0xde, 0x56, 0x39);
  397. #undef  INTERFACE
  398. #define INTERFACE   IHXRTSPProtocolResponse
  399. DECLARE_INTERFACE_(IHXRTSPProtocolResponse, IUnknown)
  400. {
  401.     // IUnknown
  402.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  403.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  404.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  405.     // IHXRTSPProtocolResponse
  406.     STDMETHOD(OnClosed)             (THIS_ HX_RESULT status) PURE;
  407.     STDMETHOD(OnError)              (THIS_ HX_RESULT status) PURE;
  408.     STDMETHOD(OnConnectDone)        (THIS_ HX_RESULT status) PURE;
  409.     STDMETHOD(OnPacket)             (THIS_ IHXRTSPInterleavedPacket* pPkt) PURE;
  410.     STDMETHOD(OnOptionsRequest)     (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  411.     STDMETHOD(OnDescribeRequest)    (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  412.     STDMETHOD(OnSetupRequest)       (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  413.     STDMETHOD(OnPlayRequest)        (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  414.     STDMETHOD(OnPauseRequest)       (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  415.     STDMETHOD(OnAnnounceRequest)    (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  416.     STDMETHOD(OnRecordRequest)      (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  417.     STDMETHOD(OnTeardownRequest)    (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  418.     STDMETHOD(OnGetParamRequest)    (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  419.     STDMETHOD(OnSetParamRequest)    (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  420.     STDMETHOD(OnRedirectRequest)    (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  421.     STDMETHOD(OnExtensionRequest)   (THIS_ IHXRTSPRequestMessage* pMsg) PURE;
  422.     STDMETHOD(OnOptionsResponse)    (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  423.     STDMETHOD(OnDescribeResponse)   (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  424.     STDMETHOD(OnSetupResponse)      (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  425.     STDMETHOD(OnPlayResponse)       (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  426.     STDMETHOD(OnPauseResponse)      (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  427.     STDMETHOD(OnAnnounceResponse)   (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  428.     STDMETHOD(OnRecordResponse)     (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  429.     STDMETHOD(OnTeardownResponse)   (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  430.     STDMETHOD(OnGetParamResponse)   (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  431.     STDMETHOD(OnSetParamResponse)   (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  432.     STDMETHOD(OnRedirectResponse)   (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  433.     STDMETHOD(OnExtensionResponse)  (THIS_ IHXRTSPResponseMessage* pMsg) PURE;
  434. };
  435. // IHXRTSPProtocol: 29d8eebf-5597-410b-a290-8181be1e2430
  436. DEFINE_GUID(IID_IHXRTSPProtocol, 0x29d8eebf, 0x5597, 0x410b,
  437.             0xa2, 0x90, 0x81, 0x81, 0xbe, 0x1e, 0x24, 0x30);
  438. #undef  INTERFACE
  439. #define INTERFACE   IHXRTSPProtocol
  440. DECLARE_INTERFACE_(IHXRTSPProtocol, IUnknown)
  441. {
  442.     // IUnknown
  443.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  444.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  445.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  446.     // IHXRTSPProtocol
  447.     STDMETHOD(Init)                 (THIS_ IHXRTSPProtocolResponse* presp,
  448.                                            IUnknown* punkContext) PURE;
  449.     //XXXTDM: The following two methods are for using an RTSPTransport object.
  450.     //        Note that RTSPTransport is not a public class!!!
  451.     STDMETHOD(GetSocket)            (THIS_ REF(IHXTCPSocket*) pSock) PURE;
  452.     STDMETHOD(SetTransport)         (THIS_ BYTE byChan, RTSPTransport* pTran)
  453.                                                                           PURE;
  454.     STDMETHOD(Connect)              (THIS_ const char* szHost,
  455.                                            UINT16 port) PURE;
  456.     STDMETHOD(Accept)               (THIS_ IHXTCPSocket* psock) PURE;
  457.     STDMETHOD(Close)                (THIS) PURE;
  458.     STDMETHOD(SendRequest)          (THIS_ IHXRTSPRequestMessage* pReq) PURE;
  459.     STDMETHOD(SendResponse)         (THIS_ IHXRTSPResponseMessage* pRsp) PURE;
  460.     STDMETHOD(SendPacket)           (THIS_ IHXRTSPInterleavedPacket* pPkt)
  461.                                                                           PURE;
  462. };
  463. #undef  INTERFACE
  464. #define INTERFACE   IHXRTSPAggregateEventStats
  465. DECLARE_INTERFACE_(IHXRTSPAggregateEventStats, IUnknown)
  466. {
  467.     /*
  468.      * IUknown methods
  469.      */
  470.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, void** ppvObj) PURE;
  471.     STDMETHOD_(ULONG32,AddRef)      (THIS) PURE;
  472.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  473.     /*
  474.      * IHXRTSPAggregateEventStats methods
  475.      */
  476.     STDMETHOD(Init)                         (THIS_ IUnknown* pContext) PURE;
  477.     STDMETHOD_(BOOL,IsInitDone)             (THIS) PURE;
  478.     STDMETHOD(UpdateClientRequestCount)     (THIS_ INT32 lCount, 
  479.                                                    RTSPMethod ulMethodId) PURE;
  480.     STDMETHOD(UpdateServerRequestCount)     (THIS_ INT32 lCount, 
  481.                                                    RTSPMethod ulMethodId) PURE;
  482.     STDMETHOD(UpdateClientResponseCount)    (THIS_ INT32 lCount, 
  483.                                                    RTSPMethod ulMethodId,
  484.                                                    UINT32 ulStatusCode) PURE;
  485.     STDMETHOD(UpdateServerResponseCount)    (THIS_ INT32 lCount, 
  486.                                                    RTSPMethod ulMethodId,
  487.                                                    UINT32 ulStatusCode) PURE;
  488.     STDMETHOD(GetLicense)                   (THIS_ REF(BOOL) bIsLicensed) PURE;
  489.     STDMETHOD(GetStatsEventMask)            (THIS_ REF(UINT32) ulEventMask) PURE;
  490. };
  491.         
  492. #endif /* _HXRTSP2_H_ */