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

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