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

Symbian

开发平台:

Visual C++

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