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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxcomm.h,v 1.1.1.1.50.3 2004/07/09 01:45:08 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 _HXCOMM_H_
  50. #define _HXCOMM_H_
  51. #include "hxengin.h" /* For HXTimeval */
  52. #include "hxccf.h" /* For IHXCommonClassFactory. Formerly declared in this file. */
  53. /*
  54.  * Forward declarations of some interfaces defined here-in.
  55.  */
  56. typedef _INTERFACE IHXStatistics IHXStatistics;
  57. typedef _INTERFACE IHXRegistryID IHXRegistryID;
  58. typedef _INTERFACE IHXServerFork IHXServerFork;
  59. typedef _INTERFACE IHXServerControl IHXServerControl;
  60. typedef _INTERFACE IHXReconfigServerResponse IHXReconfigServerResponse;
  61. typedef _INTERFACE IHXBuffer IHXBuffer;
  62. typedef _INTERFACE IHXWantServerReconfigNotification
  63. IHXWantServerReconfigNotification;  
  64. typedef _INTERFACE IHXFastAlloc IHXFastAlloc;
  65. /****************************************************************************
  66.  * 
  67.  *  Interface:
  68.  * 
  69.  * IHXStatistics
  70.  * 
  71.  *  Purpose:
  72.  * 
  73.  * This interface allows update of the client statistics.
  74.  * 
  75.  *  IID_IHXStatistics:
  76.  * 
  77.  * {00000001-0901-11d1-8B06-00A024406D59}
  78.  * 
  79.  */
  80. DEFINE_GUID(IID_IHXStatistics, 0x00000001, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  81.     0xa0, 0x24, 0x40, 0x6d, 0x59);
  82. #undef  INTERFACE
  83. #define INTERFACE   IHXStatistics
  84. DECLARE_INTERFACE_(IHXStatistics, IUnknown)
  85. {
  86.     /*
  87.      * IUnknown methods
  88.      */
  89.     STDMETHOD(QueryInterface) (THIS_
  90. REFIID riid,
  91. void** ppvObj) PURE;
  92.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  93.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  94.     /*
  95.      * IHXStatistics methods
  96.      */
  97.     /************************************************************************
  98.      * Method:
  99.      *     IHXStatistics::Init
  100.      * Purpose:
  101.      *     Pass registry ID to the caller
  102.      *
  103.      */
  104.     STDMETHOD(InitializeStatistics) (THIS_
  105. UINT32 /*IN*/  ulRegistryID) PURE;
  106.     /************************************************************************
  107.      * Method:
  108.      *     IHXStatistics::Update
  109.      * Purpose:
  110.      *     Notify the client to update its statistics stored in the registry
  111.      *
  112.      */
  113.     STDMETHOD(UpdateStatistics) (THIS) PURE;
  114. };
  115. /****************************************************************************
  116.  * 
  117.  *  Interface:
  118.  * 
  119.  * IHXRegistryID
  120.  * 
  121.  *  Purpose:
  122.  * 
  123.  * This interface is implemented by IHXPlayer, IHXStreamSource,
  124.  * and IHXStream.  It allows the user to get the registry Base ID,
  125.  * for an object that you have a pointer to.
  126.  * 
  127.  *  IID_IHXRegistryID:
  128.  * 
  129.  * {00000002-0901-11d1-8B06-00A024406D59}
  130.  * 
  131.  */
  132. DEFINE_GUID(IID_IHXRegistryID, 0x00000002, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  133.     0xa0, 0x24, 0x40, 0x6d, 0x59);
  134. #undef  INTERFACE
  135. #define INTERFACE   IHXRegistryID
  136. DECLARE_INTERFACE_(IHXRegistryID, IUnknown)
  137. {
  138.     /*
  139.      * IUnknown methods
  140.      */
  141.     STDMETHOD(QueryInterface) (THIS_
  142. REFIID riid,
  143. void** ppvObj) PURE;
  144.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  145.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  146.     /*
  147.      * IHXRegistryID methods
  148.      */
  149.     /************************************************************************
  150.      * Method:
  151.      *     IHXRegistryID::GetID
  152.      * Purpose:
  153.      *     Get the registry ID of the object.
  154.      *
  155.      */
  156.     STDMETHOD(GetID) (THIS_
  157. REF(UINT32) /*OUT*/  ulRegistryID) PURE;
  158. };
  159. /****************************************************************************
  160.  * 
  161.  *  Interface:
  162.  * 
  163.  * IHXServerFork
  164.  * 
  165.  *  Purpose:
  166.  * 
  167.  * This interface is implemented by the server context on Unix
  168.  * platforms.  This interface allows your plugin to fork off a
  169.  * process.  Note that the process that is forked off cannot use
  170.  * any RMA APIs.  The fork() system call is prohibited from within
  171.  * a RMA plugin.
  172.  *
  173.  *  IID_IHXServerFork:
  174.  * 
  175.  * {00000003-0901-11d1-8B06-00A024406D59}
  176.  * 
  177.  */
  178. DEFINE_GUID(IID_IHXServerFork, 0x00000003, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  179.     0xa0, 0x24, 0x40, 0x6d, 0x59);
  180. #undef  INTERFACE
  181. #define INTERFACE   IHXServerFork
  182. DECLARE_INTERFACE_(IHXServerFork, IUnknown)
  183. {
  184.     /*
  185.      * IUnknown methods
  186.      */
  187.     STDMETHOD(QueryInterface) (THIS_
  188. REFIID riid,
  189. void** ppvObj) PURE;
  190.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  191.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  192.     /*
  193.      * IHXServerFork methods
  194.      */
  195.     /************************************************************************
  196.      * Method:
  197.      *     IHXServerFork::Fork
  198.      * Purpose:
  199.      *     Fork off a child process.  The child process cannot use any RMA
  200.      *     APIs.  Upon successful completion, Fork returns 0 to the child
  201.      *     process and the PID of the child to the parent.  A return value
  202.      *     of -1 indicates an error.
  203.      *
  204.      *     Note:  The child process should *NOT* Release any interfaces.
  205.      * The cleanup of the IHXServerFork() interface and other
  206.      * RMA interfaces is done by the parent.
  207.      *
  208.      */
  209.     STDMETHOD_(INT32, Fork) (THIS) PURE;
  210. };
  211. /*
  212.  * 
  213.  *  Interface:
  214.  *
  215.  * IHXServerControl
  216.  *
  217.  *  Purpose:
  218.  *
  219.  * This inteface provides access to the RealMedia server's controls
  220.  *      for shutting down (for now).
  221.  *
  222.  * Note:  This registry is not related to the Windows system registry.
  223.  *
  224.  *  IID_IHXServerControl:
  225.  *
  226.  * {00000004-0901-11d1-8B06-00A024406D59}
  227.  *
  228.  */
  229. DEFINE_GUID(IID_IHXServerControl, 0x00000004, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  230.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  231. #define CLSID_IHXServerControl IID_IHXServerControl
  232. #undef  INTERFACE
  233. #define INTERFACE   IHXServerControl
  234. DECLARE_INTERFACE_(IHXServerControl, IUnknown)
  235. {
  236.     /*
  237.      * IUnknown methods
  238.      */
  239.     STDMETHOD(QueryInterface) (THIS_
  240. REFIID riid,
  241. void** ppvObj) PURE;
  242.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  243.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  244.     /*
  245.      * IHXServerControl methods
  246.      */
  247.     /************************************************************************
  248.      *  Method:
  249.      *      IHXServerControl::ShutdownServer
  250.      *  Purpose:
  251.      *      Shutdown the server.
  252.      */
  253.     STDMETHOD(ShutdownServer) (THIS_
  254. UINT32 status) PURE;
  255. };
  256. /*
  257.  * 
  258.  *  Interface:
  259.  *
  260.  * IHXServerControl2
  261.  *
  262.  *  Purpose:
  263.  *
  264.  * Interface for extended server control methods.
  265.  *
  266.  *
  267.  *  IID_IHXServerControl2:
  268.  *
  269.  * {00000005-0901-11d1-8B06-00A024406D59}
  270.  *
  271.  */
  272. DEFINE_GUID(IID_IHXServerControl2, 0x00000005, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  273.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  274. #undef  INTERFACE
  275. #define INTERFACE   IHXServerControl2
  276. DECLARE_INTERFACE_(IHXServerControl2, IUnknown)
  277. {
  278.     /*
  279.      * IUnknown methods
  280.      */
  281.     STDMETHOD(QueryInterface) (THIS_
  282. REFIID riid,
  283. void** ppvObj) PURE;
  284.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  285.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  286.     /*
  287.      * IHXServerControl2 methods
  288.      */
  289.     /************************************************************************
  290.      * IHXServerControl2::RestartServer
  291.      *
  292.      * Purpose:
  293.      *
  294.      *     Completely shutdown the server, then restart.  Mainly used to
  295.      * cause not hot setting config var changes to take effect.
  296.      */
  297.     STDMETHOD(RestartServer) (THIS) PURE;
  298.     /************************************************************************
  299.      * IHXServerControl2::ReconfigServer
  300.      *
  301.      * Purpose:
  302.      *
  303.      *     Used to cause the server to re-read in config from file or registry
  304.      * (however it was started) and attempt to use the values.
  305.      */
  306.     STDMETHOD(ReconfigServer) (THIS_ IHXReconfigServerResponse* pResp) PURE;
  307. };
  308. /*
  309.  * 
  310.  *  Interface:
  311.  *
  312.  * IHXReconfigServerResponse
  313.  *
  314.  *  Purpose:
  315.  *
  316.  * Response interface for IHXServerControl2::ReconfigServer
  317.  *
  318.  *
  319.  *  IID_IHXReconfigServerResponse:
  320.  *
  321.  * {00000006-0901-11d1-8B06-00A024406D59}
  322.  *
  323.  */
  324. DEFINE_GUID(IID_IHXReconfigServerResponse, 0x00000006, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  325.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  326. #undef  INTERFACE
  327. #define INTERFACE   IHXReconfigServerResponse
  328. DECLARE_INTERFACE_(IHXReconfigServerResponse, IUnknown)
  329. {
  330.     /*
  331.      * IUnknown methods
  332.      */
  333.     STDMETHOD(QueryInterface) (THIS_
  334. REFIID riid,
  335. void** ppvObj) PURE;
  336.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  337.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  338.     /************************************************************************
  339.      * IHXReconfigServerResponse::ReconfigServerDone
  340.      *
  341.      * Purpose:
  342.      *
  343.      *     Notification that reconfiguring the server is done.
  344.      */
  345.     STDMETHOD(ReconfigServerDone)   (THIS_
  346.     HX_RESULT res,
  347.     IHXBuffer** pInfo,
  348.     UINT32 ulNumInfo) PURE;
  349. };
  350. /*
  351.  * 
  352.  *  Interface:
  353.  *
  354.  * IHXServerReconfigNotification
  355.  *
  356.  *  Purpose:
  357.  *
  358.  * Register with the server that you want notification when a reconfig
  359.  *  request comes in and want/need to take part in the reconfiguration.  This
  360.  *  is used when you have configuration info outside the server config file
  361.  *  which needs to be re-initialized.
  362.  *
  363.  *
  364.  *  IID_IHXServerReconfigNotification:
  365.  *
  366.  * {00000007-0901-11d1-8B06-00A024406D59}
  367.  *
  368.  */
  369. DEFINE_GUID(IID_IHXServerReconfigNotification, 0x00000007, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  370.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  371. #undef  INTERFACE
  372. #define INTERFACE   IHXServerReconfigNotification
  373. DECLARE_INTERFACE_(IHXServerReconfigNotification, IUnknown)
  374. {
  375.     /*
  376.      * IUnknown methods
  377.      */
  378.     STDMETHOD(QueryInterface) (THIS_
  379. REFIID riid,
  380. void** ppvObj) PURE;
  381.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  382.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  383.     /************************************************************************
  384.      * IHXServerReconfigNotification::WantReconfigNotification
  385.      *
  386.      * Purpose:
  387.      *
  388.      *     Tell the server that you want reconfig notification.
  389.      */
  390.     STDMETHOD(WantReconfigNotification) (THIS_
  391. IHXWantServerReconfigNotification* pResponse) PURE;
  392.     
  393.     /************************************************************************
  394.      * IHXServerReconfigNotification::CancelReconfigNotification
  395.      *
  396.      * Purpose:
  397.      *
  398.      *     Tell the server that you no longer want reconfig notification.
  399.      */
  400.     STDMETHOD(CancelReconfigNotification)   (THIS_
  401. IHXWantServerReconfigNotification* pResponse) PURE;
  402. };
  403. /*
  404.  * 
  405.  *  Interface:
  406.  *
  407.  * IHXWantServerReconfigNotification
  408.  *
  409.  *  Purpose:
  410.  *
  411.  * Tell user that the server got a reconfig request and it is time to
  412.  *  do your reconfiguration.  NOTE: You should not need this if all of your
  413.  *  configuration is stored in the config file; that is taken care of through
  414.  *  IHXActiveRegistry.
  415.  *
  416.  *  IID_IHXWantServerReconfigNotification:
  417.  *
  418.  * {00000008-0901-11d1-8B06-00A024406D59}
  419.  *
  420.  */
  421. DEFINE_GUID(IID_IHXWantServerReconfigNotification, 0x00000008, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  422.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  423. #undef  INTERFACE
  424. #define INTERFACE   IHXWantServerReconfigNotification
  425. DECLARE_INTERFACE_(IHXWantServerReconfigNotification, IUnknown)
  426. {
  427.     /*
  428.      * IUnknown methods
  429.      */
  430.     STDMETHOD(QueryInterface) (THIS_
  431. REFIID riid,
  432. void** ppvObj) PURE;
  433.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  434.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  435.     /************************************************************************
  436.      * IHXWantServerReconfigNotification::ServerReconfig
  437.      *
  438.      * Purpose:
  439.      *
  440.      *     Notify user that a server reconfig request had come in and it
  441.      * is now your turn to do external (not server config) reconfiguration.*
  442.      */
  443.     STDMETHOD(ServerReconfig) (THIS_
  444. IHXReconfigServerResponse* pResponse) PURE;
  445. };
  446. // $Private:
  447. DEFINE_GUID(IID_IHXResolverExec, 0x00000009, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  448.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  449. #undef  INTERFACE
  450. #define INTERFACE   IHXResolverExec
  451. DECLARE_INTERFACE_(IHXResolverExec, IUnknown)
  452. {
  453.     /*
  454.      * IUnknown methods
  455.      */
  456.     STDMETHOD(QueryInterface) (THIS_
  457. REFIID riid,
  458. void** ppvObj) PURE;
  459.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  460.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  461.     STDMETHOD(ResolverExec) (THIS_ int readfd, int writefd) PURE;
  462. };
  463. /****************************************************************************
  464.  * 
  465.  *  Interface:
  466.  *
  467.  * IHXFastAlloc
  468.  *
  469.  *  Purpose:
  470.  *
  471.  * Basic memory management interface.
  472.  *
  473.  *  IID_IHXFastAlloc:
  474.  *
  475.  * {0000000a-0901-11d1-8B06-00A024406D59}
  476.  *
  477.  */
  478. DEFINE_GUID(IID_IHXFastAlloc, 0x0000000a, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  479.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  480. #undef  INTERFACE
  481. #define INTERFACE   IHXFastAlloc
  482. DECLARE_INTERFACE_(IHXFastAlloc, IUnknown)
  483. {
  484.     /*
  485.      * IUnknown methods
  486.      */
  487.     STDMETHOD(QueryInterface) (THIS_
  488. REFIID riid,
  489. void** ppvObj) PURE;
  490.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  491.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  492.     /*
  493.      * IHXFastAlloc methods
  494.      */
  495.     STDMETHOD_(void*,FastAlloc)     (THIS_
  496.     UINT32  /*IN*/ count) PURE;
  497.     STDMETHOD_(void,FastFree)     (THIS_
  498.     void*   /*IN*/ pMem) PURE;
  499. };
  500. #define FAST_CACHE_MEM
  501.     void* operator new(size_t size, IHXFastAlloc* pMalloc = NULL)
  502.     {
  503.         void* pMem;
  504.         if (pMalloc)
  505.         {
  506.             pMem = pMalloc->FastAlloc(size + sizeof(IHXFastAlloc*));
  507.         }
  508.         else
  509.         {
  510.             pMem = (void *)::new char [size + sizeof(IHXFastAlloc*)];
  511.         }
  512.         *(IHXFastAlloc**)pMem = pMalloc;
  513.         return ((unsigned char*)pMem + sizeof(IHXFastAlloc*));
  514.     }
  515.     void operator delete(void* pMem)
  516.     {
  517.         pMem = (unsigned char*)pMem - sizeof(IHXFastAlloc*);
  518.         IHXFastAlloc* pMalloc = *(IHXFastAlloc**)pMem;
  519.         if (pMalloc)
  520.         {
  521.             pMalloc->FastFree((char *)pMem);
  522.         }
  523.         else
  524.         {
  525.             delete[] (char *)pMem;
  526.         }
  527.     }
  528. /****************************************************************************
  529.  * 
  530.  *  Interface:
  531.  *
  532.  * IHXAccurateClock
  533.  *
  534.  *  Purpose:
  535.  *
  536.  * High Accuracy, Cheap (no system-call) gettimeofday()
  537.  *      [ Only available on some Unix platforms, except QI can fail!! ]
  538.  *
  539.  *  IID_IHXAccurateClock:
  540.  *
  541.  * {0000000b-0901-11d1-8B06-00A024406D59}
  542.  *
  543.  */
  544. DEFINE_GUID(IID_IHXAccurateClock, 0x0000000b, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  545.             0xa0, 0x24, 0x40, 0x6d, 0x59);
  546. #undef  INTERFACE
  547. #define INTERFACE   IHXAccurateClock
  548. DECLARE_INTERFACE_(IHXAccurateClock, IUnknown)
  549. {
  550.     /*
  551.      * IUnknown methods
  552.      */
  553.     STDMETHOD(QueryInterface) (THIS_
  554. REFIID riid,
  555. void** ppvObj) PURE;
  556.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  557.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  558.     /*
  559.      * IHXAccurateClock methods
  560.      */
  561.     STDMETHOD_(HXTimeval,GetTimeOfDay)      (THIS) PURE;
  562. };
  563. // $EndPrivate.
  564. #endif /*_HXCOMM_H_*/