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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxfiles.h,v 1.4.8.4 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 _HXFILES_H_
  50. #define _HXFILES_H_
  51. /*
  52.  * Forward declarations of some interfaces defined here-in.
  53.  */
  54. typedef _INTERFACE IHXFileObject IHXFileObject;
  55. typedef _INTERFACE IHXFileObjectExt IHXFileObjectExt;
  56. typedef _INTERFACE IHXFileResponse IHXFileResponse;
  57. typedef _INTERFACE IHXFileSystemObject IHXFileSystemObject;
  58. typedef _INTERFACE IHXFileStat IHXFileStat;
  59. typedef _INTERFACE IHXFileStatResponse IHXFileStatResponse;
  60. typedef _INTERFACE IHXFileSystemManager IHXFileSystemManager;
  61. typedef _INTERFACE IHXFileSystemManagerResponse IHXFileSystemManagerResponse;
  62. typedef _INTERFACE IHXFileExists IHXFileExists;
  63. typedef _INTERFACE IHXFileExistsResponse IHXFileExistsResponse;
  64. typedef _INTERFACE IHXFileMimeMapper IHXFileMimeMapper;
  65. typedef _INTERFACE IHXFileMimeMapperResponse IHXFileMimeMapperResponse;
  66. typedef _INTERFACE IHXBroadcastMapper IHXBroadcastMapper;
  67. typedef _INTERFACE IHXBroadcastMapperResponse IHXBroadcastMapperResponse;
  68. typedef _INTERFACE IHXGetFileFromSamePoolResponse IHXGetFileFromSamePoolResponse;
  69. typedef _INTERFACE IHXBuffer IHXBuffer;
  70. typedef _INTERFACE IHXPacket IHXPacket;
  71. typedef _INTERFACE IHXValues IHXValues;
  72. typedef _INTERFACE IHXMetaCreation IHXMetaCreation;
  73. typedef _INTERFACE IHXAuthenticator               IHXAuthenticator;
  74. typedef _INTERFACE IHXRequest                     IHXRequest;
  75. typedef _INTERFACE IHXFileRename                  IHXFileRename;
  76. typedef _INTERFACE IHXFileMove IHXFileMove;
  77. typedef _INTERFACE IHXDirHandler IHXDirHandler;
  78. typedef _INTERFACE IHXDirHandlerResponse IHXDirHandlerResponse;
  79. typedef _INTERFACE IHXFileRemove                  IHXFileRemove;
  80. // $Private:
  81. typedef _INTERFACE IHXFastFileFactory             IHXFastFileFactory;
  82. typedef _INTERFACE IHXHTTPPostObject IHXHTTPPostObject;
  83. typedef _INTERFACE IHXHTTPPostResponse IHXHTTPPostResponse;
  84. typedef _INTERFACE IHXHTTPRedirect IHXHTTPRedirect;
  85. typedef _INTERFACE IHXHTTPRedirectResponse IHXHTTPRedirectResponse;
  86. typedef _INTERFACE IHXRM2Converter2               IHXRM2Converter2;
  87. typedef _INTERFACE IHXRM2Converter2Response       IHXRM2Converter2Response;
  88. typedef _INTERFACE IHXPoolPathAdjustment IHXPoolPathAdjustment;
  89. typedef _INTERFACE IHXPostDataHandler IHXPostDataHandler;
  90. // $EndPrivate.
  91. /****************************************************************************
  92.  *  Defines:
  93.  * HX_FILE_XXXX
  94.  *  Purpose:
  95.  * Flags for opening file objects
  96.  */
  97. #define HX_FILE_READ 1
  98. #define HX_FILE_WRITE 2
  99. #define HX_FILE_BINARY 4
  100. #define HX_FILE_NOTRUNC 8
  101. #define HX_FILE_NOPAC 16
  102. /****************************************************************************
  103.  *  Defines:
  104.  * HX_FILEADVISE_XXXX
  105.  *  Purpose:
  106.  * Flags for file object Advise method
  107.  */
  108. #define HX_FILEADVISE_RANDOMACCESS 1
  109. #define HX_FILEADVISE_SYNCACCESS 2
  110. #define HX_FILEADVISE_ASYNCACCESS 3
  111. #define HX_FILEADVISE_RANDOMACCESSONLY  4
  112. #define HX_FILEADVISE_ANYACCESS         5
  113. /****************************************************************************
  114.  *  Defines:
  115.  * HX_FILERESPONSEADVISE_XXXX
  116.  *  Purpose:
  117.  * Flags for file response Advise method
  118.  */
  119. #define HX_FILERESPONSEADVISE_REQUIREFULLREAD 1
  120. #if defined(_UNIX) || defined(_WINDOWS)
  121. #include "hlxclib/sys/stat.h"
  122. /*
  123.  * This is a subset of standard stat()/fstat() values that both Unix and
  124.  * Windows support (or at least define).
  125.  *
  126.  * These flags are returned from IHXFileStatResponse::StatDone() in the
  127.  * ulMode argument.
  128.  */
  129. #define HX_S_IFMT   S_IFMT
  130. #define HX_S_IFDIR  S_IFDIR
  131. #define HX_S_IFCHR  S_IFCHR
  132. #define HX_S_IFIFO  S_IFIFO
  133. #define HX_S_IFREG  S_IFREG
  134. #else
  135. /* Macintosh */
  136. #define HX_S_IFMT   0170000
  137. #define HX_S_IFDIR  0040000
  138. #define HX_S_IFCHR  0020000
  139. #define HX_S_IFIFO  0010000
  140. #define HX_S_IFREG  0100000
  141. #endif
  142. /****************************************************************************
  143.  * 
  144.  *  Interface:
  145.  * 
  146.  * IHXFileObject
  147.  * 
  148.  *  Purpose:
  149.  * 
  150.  * Object that exports file control API
  151.  * 
  152.  *  IID_IHXFileObject:
  153.  * 
  154.  * {00000200-0901-11d1-8B06-00A024406D59}
  155.  * 
  156.  */
  157. DEFINE_GUID(IID_IHXFileObject, 0x00000200, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  158. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  159. #undef  INTERFACE
  160. #define INTERFACE   IHXFileObject
  161. DECLARE_INTERFACE_(IHXFileObject, IUnknown)
  162. {
  163.     /*
  164.      * IUnknown methods
  165.      */
  166.     STDMETHOD(QueryInterface) (THIS_
  167. REFIID riid,
  168. void** ppvObj) PURE;
  169.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  170.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  171.     /*
  172.      * IHXFileObject methods
  173.      */
  174.     /************************************************************************
  175.      * Method:
  176.      *     IHXFileObject::Init
  177.      * Purpose:
  178.      *     Associates a file object with the file response object it should
  179.      *     notify of operation completness. This method should also check
  180.      *     for validity of the object (for example by opening it if it is
  181.      *     a local file).
  182.      */
  183.     STDMETHOD(Init) (THIS_
  184. ULONG32     /*IN*/  ulFlags,
  185. IHXFileResponse*   /*IN*/  pFileResponse) PURE;
  186.     /************************************************************************
  187.      * Method:
  188.      *     IHXFileObject::GetFilename
  189.      * Purpose:
  190.      *     Returns the filename (without any path information) associated
  191.      *     with a file object.
  192.      *
  193.      *     Note: The returned pointer's lifetime expires as soon as the
  194.      *     caller returns from a function which was called from the RMA
  195.      *     core (i.e. when you return control to the RMA core)
  196.      *
  197.      */
  198.     STDMETHOD(GetFilename) (THIS_
  199. REF(const char*)    /*OUT*/  pFilename) PURE;
  200.     /************************************************************************
  201.      * Method:
  202.      *     IHXFileObject::Close
  203.      * Purpose:
  204.      *     Closes the file resource and releases all resources associated
  205.      *     with the object.
  206.      */
  207.     STDMETHOD(Close) (THIS) PURE;
  208.     /************************************************************************
  209.      * Method:
  210.      *     IHXFileObject::Read
  211.      * Purpose:
  212.      *     Reads a buffer of data of the specified length from the file
  213.      *     and asynchronously returns it to the caller via the 
  214.      *     IHXFileResponse interface passed in to Init.
  215.      */
  216.     STDMETHOD(Read) (THIS_
  217. ULONG32 ulCount) PURE;
  218.     /************************************************************************
  219.      * Method:
  220.      *     IHXFileObject::Write
  221.      * Purpose:
  222.      *     Writes a buffer of data to the file and asynchronously notifies
  223.      *     the caller via the IHXFileResponse interface passed in to Init,
  224.      *     of the completeness of the operation.
  225.      */
  226.     STDMETHOD(Write) (THIS_
  227. IHXBuffer* pBuffer) PURE;
  228.     /************************************************************************
  229.      * Method:
  230.      *     IHXFileObject::Seek
  231.      * Purpose:
  232.      *     Seeks to an offset in the file and asynchronously notifies
  233.      *     the caller via the IHXFileResponse interface passed in to Init,
  234.      *     of the completeness of the operation.
  235.      *     If the bRelative flag is TRUE, it is a relative seek; else
  236.      *     an absolute seek.
  237.      */
  238.     STDMETHOD(Seek) (THIS_
  239. ULONG32 ulOffset,
  240. BOOL bRelative) PURE;    
  241.     /************************************************************************
  242.      * Method:
  243.      *     IHXFileObject::Advise
  244.      * Purpose:
  245.      *      To pass information to the File Object advising it about usage
  246.      *     heuristics.
  247.      */
  248.     STDMETHOD(Advise) (THIS_
  249. ULONG32 ulInfo) PURE;
  250. };
  251. /****************************************************************************
  252.  *
  253.  *  Interface:
  254.  *
  255.  *  IHXFileObjectExt
  256.  *
  257.  *  Purpose:
  258.  *
  259.  *  Object that exports file control API
  260.  *
  261.  *  IID_IHXFileObjectExt:
  262.  *
  263.  *  {96DD5EB5-7EFD-4084-95CD-4D192A9036AF}
  264.  *
  265.  */
  266.  DEFINE_GUID(IID_IHXFileObjectExt, 0x96dd5eb5, 0x7efd, 0x4084, 0x95, 0xcd, 0x4d,
  267.                        0x19, 0x2a, 0x90, 0x36, 0xaf);
  268. #undef  INTERFACE
  269. #define INTERFACE   IHXFileObjectExt
  270. DECLARE_INTERFACE_(IHXFileObjectExt, IUnknown)
  271. {
  272.     /*
  273.      *  IUnknown methods
  274.      */
  275.     STDMETHOD(QueryInterface)   (THIS_
  276.                 REFIID riid,
  277.                 void** ppvObj) PURE;
  278.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  279.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  280.     /************************************************************************
  281.      * Method:
  282.      *     IHXFileObjectExt::GetFullFilename
  283.      * Purpose:
  284.      *     Returns the filename, with path information, associated
  285.      *     with a file object.
  286.      *
  287.      *     Note: The returned pointer's lifetime expires as soon as the
  288.      *     caller returns from a function which was called from the RMA
  289.      *     core (i.e. when you return control to the RMA core)
  290.      *
  291.      */
  292.     STDMETHOD(GetFullFilename) (THIS_
  293.                                REF(IHXBuffer*)  /*OUT*/  pFullFilename) PURE;
  294. };
  295. /****************************************************************************
  296.  * 
  297.  *  Interface:
  298.  * 
  299.  * IHXFileResponse
  300.  * 
  301.  *  Purpose:
  302.  * 
  303.  * Object that exports file response API
  304.  * 
  305.  *  IID_IHXFileResponse:
  306.  * 
  307.  * {00000201-0901-11d1-8B06-00A024406D59}
  308.  * 
  309.  */
  310. DEFINE_GUID(IID_IHXFileResponse, 0x00000201, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  311. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  312. #undef  INTERFACE
  313. #define INTERFACE   IHXFileResponse
  314. DECLARE_INTERFACE_(IHXFileResponse, 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.      * IHXFileResponse methods
  326.      */
  327.     /************************************************************************
  328.      * Method:
  329.      *     IHXFileResponse::InitDone
  330.      * Purpose:
  331.      *     Notification interface provided by users of the IHXFileObject
  332.      *     interface. This method is called by the IHXFileObject when the
  333.      *     initialization of the file is complete. If the file is not valid 
  334.      *     for the file system, the status HXR_FAILED should be 
  335.      *     returned.
  336.      */
  337.     STDMETHOD(InitDone) (THIS_
  338. HX_RESULT     status) PURE;
  339.     /************************************************************************
  340.      * Method:
  341.      *     IHXFileResponse::CloseDone
  342.      * Purpose:
  343.      *     Notification interface provided by users of the IHXFileObject
  344.      *     interface. This method is called by the IHXFileObject when the
  345.      *     close of the file is complete.
  346.      */
  347.     STDMETHOD(CloseDone) (THIS_
  348. HX_RESULT     status) PURE;
  349.     /************************************************************************
  350.      * Method:
  351.      *     IHXFileResponse::ReadDone
  352.      * Purpose:
  353.      *     Notification interface provided by users of the IHXFileObject
  354.      *     interface. This method is called by the IHXFileObject when the
  355.      *     last read from the file is complete and a buffer is available.
  356.      */
  357.     STDMETHOD(ReadDone) (THIS_ 
  358. HX_RESULT     status,
  359. IHXBuffer*     pBuffer) PURE;
  360.     /************************************************************************
  361.      * Method:
  362.      *     IHXFileResponse::WriteDone
  363.      * Purpose:
  364.      *     Notification interface provided by users of the IHXFileObject
  365.      *     interface. This method is called by the IHXFileObject when the
  366.      *     last write to the file is complete.
  367.      */
  368.     STDMETHOD(WriteDone) (THIS_ 
  369. HX_RESULT     status) PURE;
  370.     /************************************************************************
  371.      * Method:
  372.      *     IHXFileResponse::SeekDone
  373.      * Purpose:
  374.      *     Notification interface provided by users of the IHXFileObject
  375.      *     interface. This method is called by the IHXFileObject when the
  376.      *     last seek in the file is complete.
  377.      */
  378.     STDMETHOD(SeekDone) (THIS_ 
  379. HX_RESULT     status) PURE;
  380. };
  381. /****************************************************************************
  382.  * 
  383.  *  Interface:
  384.  * 
  385.  *      IHXAdvise
  386.  * 
  387.  *  Purpose:
  388.  * 
  389.  *      Allow IHXFileObject to query its IHXFileResponse interface
  390.  * 
  391.  *  IID_IHXAdvise:
  392.  * 
  393.  *      {43C3A3B8-8F76-4394-A4F8-07AA9091A0CA}
  394.  * 
  395.  */
  396. DEFINE_GUID(IID_IHXAdvise, 0x43c3a3b8, 0x8f76, 0x4394, 0xa4, 0xf8, 0x7, 
  397.                         0xaa, 0x90, 0x91, 0xa0, 0xca);
  398. #undef  INTERFACE
  399. #define INTERFACE   IHXAdvise
  400. DECLARE_INTERFACE_(IHXAdvise, IUnknown)
  401. {
  402.     /*
  403.      *  IUnknown methods
  404.      */
  405.     STDMETHOD(QueryInterface)           (THIS_
  406.                                         REFIID riid,
  407.                                         void** ppvObj) PURE;
  408.     STDMETHOD_(ULONG32,AddRef)          (THIS) PURE;
  409.     STDMETHOD_(ULONG32,Release)         (THIS) PURE;
  410.     /*
  411.      *  IHXAdvise methods
  412.      */
  413.     /************************************************************************
  414.      *  Method:
  415.      *      IHXAdvise::Advise
  416.      *  Purpose:
  417.      *      Allows IHXFileObject to query its IHXFileResponse about
  418.      *      usage heuristics. It should pass HX_FILERESPONSEADVISE_xxx
  419.      *      flags into this method.
  420.      */
  421.     STDMETHOD(Advise)   (THIS_ ULONG32 ulInfo) PURE;
  422. };
  423. /****************************************************************************
  424.  * 
  425.  *  Interface:
  426.  * 
  427.  * IHXFileSystemObject
  428.  * 
  429.  *  Purpose:
  430.  * 
  431.  * Object that allows a Controller to communicate with a specific
  432.  * File System plug-in session
  433.  * 
  434.  *  IID_IHXFileSystemObject:
  435.  * 
  436.  * {00000202-0901-11d1-8B06-00A024406D59}
  437.  * 
  438.  */
  439. DEFINE_GUID(IID_IHXFileSystemObject, 0x00000202, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  440. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  441. #undef  INTERFACE
  442. #define INTERFACE   IHXFileSystemObject
  443. DECLARE_INTERFACE_(IHXFileSystemObject, IUnknown)
  444. {
  445.     /*
  446.      * IUnknown methods
  447.      */
  448.     STDMETHOD(QueryInterface) (THIS_
  449. REFIID riid,
  450. void** ppvObj) PURE;
  451.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  452.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  453.     /*
  454.      * IHXFileSystemObject methods
  455.      */
  456.     /************************************************************************
  457.      * Method:
  458.      *     IHXFileSystemObject::GetFileSystemInfo
  459.      * Purpose:
  460.      *     Returns information vital to the instantiation of file system
  461.      *     plugin.
  462.      *
  463.      *     pShortName should be a short, human readable name in the form
  464.      *      of "company-fsname".  For example: pShortName = "pn-local".
  465.      */
  466.     STDMETHOD(GetFileSystemInfo)    (THIS_
  467.     REF(const char*) /*OUT*/ pShortName,
  468.     REF(const char*) /*OUT*/ pProtocol) PURE;
  469.     STDMETHOD(InitFileSystem) (THIS_
  470. IHXValues* pOptions) PURE;
  471.     STDMETHOD(CreateFile) (THIS_
  472. IUnknown**    /*OUT*/ ppFileObject) PURE;
  473.     /*
  474.      * The following method is deprecated and should return HXR_NOTIMPL
  475.      */
  476.     STDMETHOD(CreateDir) (THIS_
  477. IUnknown**   /*OUT*/ ppDirObject) PURE;
  478. };
  479. /****************************************************************************
  480.  * 
  481.  *  Interface:
  482.  * 
  483.  * IHXFileStat
  484.  * 
  485.  *  Purpose:
  486.  * 
  487.  *      Gets information about a specific File object
  488.  * 
  489.  *  IID_IHXFileStat:
  490.  *  
  491.  * {00000205-0901-11d1-8B06-00A024406D59}
  492.  * 
  493.  */
  494. DEFINE_GUID(IID_IHXFileStat, 0x00000205, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  495. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  496. #undef  INTERFACE
  497. #define INTERFACE   IHXFileStat
  498. DECLARE_INTERFACE_(IHXFileStat, IUnknown)
  499. {
  500.     /*
  501.      * IUnknown methods
  502.      */
  503.     STDMETHOD(QueryInterface)   (THIS_
  504.                                 REFIID riid,
  505.                                 void** ppvObj) PURE;
  506.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  507.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  508.     /*
  509.      * IHXFileStat methods
  510.      */
  511.     STDMETHOD(Stat) (THIS_
  512. IHXFileStatResponse* pFileStatResponse
  513. ) PURE;
  514. };
  515. /****************************************************************************
  516.  * 
  517.  *  Interface:
  518.  * 
  519.  * IHXFileStatResponse
  520.  * 
  521.  *  Purpose:
  522.  * 
  523.  *      Returns information about a specific File object
  524.  * 
  525.  *  IID_IHXFileStatResponse:
  526.  *  
  527.  * {00000206-0901-11d1-8B06-00A024406D59}
  528.  * 
  529.  */
  530. DEFINE_GUID(IID_IHXFileStatResponse, 0x00000206, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  531. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  532. #undef  INTERFACE
  533. #define INTERFACE   IHXFileStatResponse
  534. DECLARE_INTERFACE_(IHXFileStatResponse, 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.      * IHXFileStat methods
  546.      */
  547.     STDMETHOD(StatDone) (THIS_
  548.  HX_RESULT status,
  549.  UINT32 ulSize,
  550.  UINT32 ulCreationTime,
  551.  UINT32 ulAccessTime,
  552.  UINT32 ulModificationTime,
  553.  UINT32 ulMode) PURE;
  554. };
  555. /****************************************************************************
  556.  * 
  557.  *  Interface:
  558.  * 
  559.  * IHXFileSystemManager
  560.  * 
  561.  *  Purpose:
  562.  * 
  563.  *      Gives out File Objects based on URLs
  564.  * 
  565.  *  IID_IHXFileSystemManager:
  566.  *  
  567.  * {00000207-0901-11d1-8B06-00A024406D59}
  568.  * 
  569.  */
  570. DEFINE_GUID(IID_IHXFileSystemManager, 0x00000207, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  571. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  572. #undef  INTERFACE
  573. #define INTERFACE   IHXFileSystemManager
  574. #define CLSID_IHXFileSystemManager IID_IHXFileSystemManager
  575. DECLARE_INTERFACE_(IHXFileSystemManager, IUnknown)
  576. {
  577.     /*
  578.      * IUnknown methods
  579.      */
  580.     STDMETHOD(QueryInterface)   (THIS_
  581.                                 REFIID riid,
  582.                                 void** ppvObj) PURE;
  583.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  584.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  585.     /*
  586.      * IHXFileSystemManager methods
  587.      */
  588.     STDMETHOD(Init) (THIS_
  589.     IHXFileSystemManagerResponse* /*IN*/  pFileManagerResponse
  590.     ) PURE;
  591.     /* GetFileObject attempts to locate an existing file via the DoesExist
  592.      * method in each file system's objects, and returns that object through
  593.      * FSManagerResponse->FileObjectReady
  594.      */
  595.     STDMETHOD(GetFileObject) (THIS_
  596.  IHXRequest* pRequest,
  597.  IHXAuthenticator* pAuthenticator) PURE;
  598.     /* GetNewFileObject is similar to GetFileObject except that no DoesExist
  599.      * checks are done.  The first file system that matches the mount point
  600.      * or protocol for the path in the request object creates the file
  601.      * which is then returned through FileObjectReady.  This is especially
  602.      * useful for those who wish to open a brand new file for writing.
  603.      */
  604.     STDMETHOD(GetNewFileObject) (THIS_
  605.  IHXRequest* pRequest,
  606.  IHXAuthenticator* pAuthenticator) PURE;
  607.     STDMETHOD(GetRelativeFileObject) (THIS_
  608.       IUnknown* pOriginalObject,
  609.       const char* pPath) PURE;
  610.     /*
  611.      * The following method is deprecated and should return HXR_NOTIMPL
  612.      */
  613.     STDMETHOD(GetDirObjectFromURL) (THIS_
  614.                                         const char* pURL) PURE;
  615. };
  616. /****************************************************************************
  617.  * 
  618.  *  Interface:
  619.  * 
  620.  * IHXFileSystemManagerResponse
  621.  * 
  622.  *  Purpose:
  623.  * 
  624.  *      Gives out File System objects based on URLs
  625.  * 
  626.  *  IID_IHXFileSystemManagerResponse:
  627.  *  
  628.  * {00000208-0901-11d1-8B06-00A024406D59}
  629.  * 
  630.  */
  631. DEFINE_GUID(IID_IHXFileSystemManagerResponse, 0x00000208, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  632. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  633. #undef  INTERFACE
  634. #define INTERFACE   IHXFileSystemManagerResponse
  635. DECLARE_INTERFACE_(IHXFileSystemManagerResponse, IUnknown)
  636. {
  637.     /*
  638.      * IUnknown methods
  639.      */
  640.     STDMETHOD(QueryInterface)   (THIS_
  641.                                 REFIID riid,
  642.                                 void** ppvObj) PURE;
  643.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  644.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  645.     /*
  646.      * IHXFileSystemManagerResponse methods
  647.      */
  648.     /************************************************************************
  649.      * Method:
  650.      * IHXFileSystemManagerResponse::InitDone
  651.      * Purpose:
  652.      */
  653.     STDMETHOD(InitDone)     (THIS_
  654.     HX_RESULT     status) PURE;
  655.     STDMETHOD(FileObjectReady) (THIS_
  656. HX_RESULT status,
  657.                                 IUnknown* pObject) PURE;
  658.     /*
  659.      * The following method is deprecated and should return HXR_NOTIMPL
  660.      */
  661.     STDMETHOD(DirObjectReady) (THIS_
  662. HX_RESULT status,
  663.                                 IUnknown* pDirObject) PURE;
  664. };
  665. /****************************************************************************
  666.  * 
  667.  *  Interface:
  668.  * 
  669.  * IHXFileExists
  670.  * 
  671.  *  Purpose:
  672.  * 
  673.  * Checks for the existense of a file.  Must be implemented.
  674.  * 
  675.  *  IID_IHXFileExists:
  676.  * 
  677.  * {00000209-0901-11d1-8B06-00A024406D59}
  678.  * 
  679.  */
  680. DEFINE_GUID(IID_IHXFileExists, 0x00000209, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  681. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  682. #undef  INTERFACE
  683. #define INTERFACE   IHXFileExists
  684. DECLARE_INTERFACE_(IHXFileExists, IUnknown)
  685. {
  686.     /*
  687.      * IUnknown methods
  688.      */
  689.     STDMETHOD(QueryInterface) (THIS_
  690. REFIID riid,
  691. void** ppvObj) PURE;
  692.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  693.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  694.     /*
  695.      * IHXFileExists methods
  696.      */
  697.     /************************************************************************
  698.      * Method:
  699.      *     IHXFileExists::DoesExist
  700.      * Purpose:
  701.      */
  702.     STDMETHOD(DoesExist) (THIS_
  703. const char* /*IN*/  pPath, 
  704. IHXFileExistsResponse* /*IN*/  pFileResponse) PURE;
  705. };
  706. /****************************************************************************
  707.  * 
  708.  *  Interface:
  709.  * 
  710.  * IHXFileExistsResponse
  711.  * 
  712.  *  Purpose:
  713.  * 
  714.  * Response interface for IHXFileExists.  Must be implemented.
  715.  * 
  716.  *  IID_IHXFileExistsResponse:
  717.  * 
  718.  * {0000020A-0901-11d1-8B06-00A024406D59}
  719.  * 
  720.  */
  721. DEFINE_GUID(IID_IHXFileExistsResponse, 0x0000020a, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  722. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  723. #undef  INTERFACE
  724. #define INTERFACE   IHXFileExists
  725. DECLARE_INTERFACE_(IHXFileExistsResponse, IUnknown)
  726. {
  727.     /*
  728.      * IUnknown methods
  729.      */
  730.     STDMETHOD(QueryInterface) (THIS_
  731. REFIID riid,
  732. void** ppvObj) PURE;
  733.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  734.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  735.     /*
  736.      * IHXFileExistsResponse methods
  737.      */
  738.     STDMETHOD(DoesExistDone) (THIS_
  739.       BOOL bExist) PURE;
  740. };
  741. /****************************************************************************
  742.  * 
  743.  *  Interface:
  744.  * 
  745.  * IHXFileMimeMapper
  746.  * 
  747.  *  Purpose:
  748.  * 
  749.  * Allows you to specify a mime type for a specific file.
  750.  * Optional interface.
  751.  * 
  752.  *  IID_IHXFileMimeMapper:
  753.  * 
  754.  * {0000020B-0901-11d1-8B06-00A024406D59}
  755.  * 
  756.  */
  757. DEFINE_GUID(IID_IHXFileMimeMapper, 0x0000020b, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  758. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  759. #undef  INTERFACE
  760. #define INTERFACE   IHXFileMimeMapper
  761. DECLARE_INTERFACE_(IHXFileMimeMapper, IUnknown)
  762. {
  763.     /*
  764.      * IUnknown methods
  765.      */
  766.     STDMETHOD(QueryInterface) (THIS_
  767. REFIID riid,
  768. void** ppvObj) PURE;
  769.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  770.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  771.     /*
  772.      * IHXFileMimeMapper methods
  773.      */
  774.     /************************************************************************
  775.      * Method:
  776.      *     IHXFileMimeMapper::FindMimeType
  777.      * Purpose:
  778.      */
  779.     STDMETHOD(FindMimeType) (THIS_
  780.     const char*     /*IN*/  pURL, 
  781.     IHXFileMimeMapperResponse* /*IN*/  pMimeMapperResponse
  782.     ) PURE;
  783. };
  784. /****************************************************************************
  785.  * 
  786.  *  Interface:
  787.  * 
  788.  * IHXFileMimeMapperResponse
  789.  * 
  790.  *  Purpose:
  791.  * 
  792.  * Response interface for IHXFileMimeMapper.
  793.  * Optional interface.
  794.  * 
  795.  *  IID_IHXFileMimeMapperResponse:
  796.  * 
  797.  * {0000020C-0901-11d1-8B06-00A024406D59}
  798.  * 
  799.  */
  800. DEFINE_GUID(IID_IHXFileMimeMapperResponse, 0x0000020c, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  801. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  802. #undef  INTERFACE
  803. #define INTERFACE   IHXFileMimeMapperResponse
  804. DECLARE_INTERFACE_(IHXFileMimeMapperResponse, IUnknown)
  805. {
  806.     /*
  807.      * IUnknown methods
  808.      */
  809.     STDMETHOD(QueryInterface) (THIS_
  810. REFIID riid,
  811. void** ppvObj) PURE;
  812.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  813.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  814.     /*
  815.      * IHXFileMimeMapperResponse methods
  816.      */
  817.     /************************************************************************
  818.      * Method:
  819.      *     IHXFileMimeMapperResponse::MimeTypeFound
  820.      * Purpose:
  821.      *     Notification interface provided by users of the IHXFileMimeMapper
  822.      *     interface. This method is called by the IHXFileObject when the
  823.      *     initialization of the file is complete, and the Mime type is
  824.      *     available for the request file. If the file is not valid for the
  825.      *     file system, the status HXR_FAILED should be returned,
  826.      *     with a mime type of NULL. If the file is valid but the mime type
  827.      *     is unknown, then the status HXR_OK should be returned with
  828.      *     a mime type of NULL.
  829.      *     
  830.      */
  831.     STDMETHOD(MimeTypeFound) (THIS_
  832.       HX_RESULT status,
  833.       const char* pMimeType) PURE;
  834. };
  835. /****************************************************************************
  836.  * 
  837.  *  Interface:
  838.  * 
  839.  * IHXBroadcastMapper
  840.  * 
  841.  *  Purpose:
  842.  * 
  843.  * Associates a file with a broadcast format plugin.
  844.  * Implementation only required by broadcast plugin file systems.
  845.  * 
  846.  *  IID_IHXBroadcastMapper:
  847.  * 
  848.  * {0000020D-0901-11d1-8B06-00A024406D59}
  849.  * 
  850.  */
  851. DEFINE_GUID(IID_IHXBroadcastMapper, 0x0000020d, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  852. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  853. #undef  INTERFACE
  854. #define INTERFACE   IHXBroadcastMapper
  855. DECLARE_INTERFACE_(IHXBroadcastMapper, IUnknown)
  856. {
  857.     /*
  858.      * IUnknown methods
  859.      */
  860.     STDMETHOD(QueryInterface) (THIS_
  861. REFIID riid,
  862. void** ppvObj) PURE;
  863.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  864.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  865.     /*
  866.      * IHXBroadcastMapper methods
  867.      */
  868.     /************************************************************************
  869.      * Method:
  870.      *     IHXBroadcastMapper::FindBroadcastType
  871.      * Purpose:
  872.      */
  873.     STDMETHOD(FindBroadcastType) (THIS_
  874. const char*      /*IN*/  pURL, 
  875. IHXBroadcastMapperResponse* /*IN*/  pBroadcastMapperResponse) PURE;
  876. };
  877. /****************************************************************************
  878.  * 
  879.  *  Interface:
  880.  * 
  881.  * IHXBroadcastMapperResponse
  882.  * 
  883.  *  Purpose:
  884.  * 
  885.  * Response interface for IHXBroadcastMapper.
  886.  * Implementation only required by broadcast plugin file systems.
  887.  * 
  888.  *  IID_IHXBroadcastMapperResponse:
  889.  * 
  890.  * {0000020E-0901-11d1-8B06-00A024406D59}
  891.  * 
  892.  */
  893. DEFINE_GUID(IID_IHXBroadcastMapperResponse, 0x0000020e, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  894. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  895. #undef  INTERFACE
  896. #define INTERFACE   IHXBroadcastMapperResponse
  897. DECLARE_INTERFACE_(IHXBroadcastMapperResponse, IUnknown)
  898. {
  899.     /*
  900.      * IUnknown methods
  901.      */
  902.     STDMETHOD(QueryInterface) (THIS_
  903. REFIID riid,
  904. void** ppvObj) PURE;
  905.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  906.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  907.     /*
  908.      * IHXBroadcastMapperResponse methods
  909.      */
  910.     /************************************************************************
  911.      * Method:
  912.      *     IHXBroadcastMapperResponse::BroadcastTypeFound
  913.      * Purpose:
  914.      *     Notification interface provided by users of the IHXBroadcastMapper
  915.      *     interface. This method is called by the File Object when the
  916.      *     initialization of the file is complete, and the broadcast type is
  917.      *     available for the request file. If the file is not valid for the
  918.      *     file system, the status HXR_FAILED should be returned,
  919.      *     with the broadcast type set to NULL.
  920.      *     
  921.      */
  922.     STDMETHOD(BroadcastTypeFound) (THIS_
  923.   HX_RESULT status,
  924.   const char* pBroadcastType) PURE;
  925. };
  926. /****************************************************************************
  927.  * 
  928.  *  Interface:
  929.  * 
  930.  * IHXGetFileFromSamePool
  931.  * 
  932.  *  Purpose:
  933.  * 
  934.  *      Gives out File Objects based on filenames and relative "paths"
  935.  * 
  936.  *  IID_IHXGetFileFromSamePool:
  937.  *  
  938.  * {0000020f-0901-11d1-8B06-00A024406D59}
  939.  * 
  940.  */
  941. DEFINE_GUID(IID_IHXGetFileFromSamePool, 0x0000020f, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  942. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  943. #undef  INTERFACE
  944. #define INTERFACE   IHXGetFileFromSamePool
  945. #define CLSID_IHXGetFileFromSamePool IID_IHXGetFileFromSamePool
  946. DECLARE_INTERFACE_(IHXGetFileFromSamePool, IUnknown)
  947. {
  948.     /*
  949.      * IUnknown methods
  950.      */
  951.     STDMETHOD(QueryInterface)   (THIS_
  952.                                 REFIID riid,
  953.                                 void** ppvObj) PURE;
  954.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  955.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  956.     /*
  957.      * IHXGetFileFromSamePool method
  958.      */
  959.     /************************************************************************
  960.      * Method:
  961.      *     IHXGetFileFromSamePool::GetFileObjectFromPool
  962.      * Purpose:
  963.      *      To get another FileObject from the same pool. 
  964.      */
  965.     STDMETHOD(GetFileObjectFromPool) (THIS_
  966.  IHXGetFileFromSamePoolResponse*) PURE;
  967. };
  968. /****************************************************************************
  969.  * 
  970.  *  Interface:
  971.  * 
  972.  * IHXGetFileFromSamePoolResponse
  973.  * 
  974.  *  Purpose:
  975.  * 
  976.  *      Gives out File Objects based on filenames and relative "paths"
  977.  * 
  978.  *  IID_IHXGetFileFromSamePoolResponse:
  979.  *  
  980.  * {00000210-0901-11d1-8B06-00A024406D59}
  981.  * 
  982.  */
  983. DEFINE_GUID(IID_IHXGetFileFromSamePoolResponse, 0x00000210, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  984. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  985. #undef  INTERFACE
  986. #define INTERFACE   IHXGetFileFromSamePoolResponse
  987. #define CLSID_IHXGetFileFromSamePoolResponse IID_IHXGetFileFromSamePoolResponse
  988. DECLARE_INTERFACE_(IHXGetFileFromSamePoolResponse, IUnknown)
  989. {
  990.     /*
  991.      * IUnknown methods
  992.      */
  993.     STDMETHOD(QueryInterface)   (THIS_
  994.                                 REFIID riid,
  995.                                 void** ppvObj) PURE;
  996.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  997.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  998.     /*
  999.      * IHXGetFileFromSamePoolResponse method
  1000.      */
  1001.     /************************************************************************
  1002.      * Method:
  1003.      *     IHXGetFileFromSamePoolResponse::FileObjectReady
  1004.      * Purpose:
  1005.      *      To return another FileObject from the same pool. 
  1006.      */
  1007.     STDMETHOD(FileObjectReady) (THIS_
  1008. HX_RESULT status,
  1009. IUnknown* ppUnknown) PURE;
  1010. };
  1011. /****************************************************************************
  1012.  * 
  1013.  *  Interface:
  1014.  * 
  1015.  * IHXFileAuthenticator
  1016.  * 
  1017.  *  Purpose:
  1018.  * 
  1019.  *      Set and Get a file object's authenticator object.
  1020.  * 
  1021.  *  IID_IHXFileAuthenticator:
  1022.  *  
  1023.  * {00000211-0901-11d1-8B06-00A024406D59}
  1024.  * 
  1025.  */
  1026. DEFINE_GUID(IID_IHXFileAuthenticator, 0x00000211, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1027. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1028. #undef  INTERFACE
  1029. #define INTERFACE   IHXFileAuthenticator
  1030. #define CLSID_IHXFileAuthenticator IID_IHXFileAuthenticator
  1031. DECLARE_INTERFACE_(IHXFileAuthenticator, IUnknown)
  1032. {
  1033.     /*
  1034.      * IUnknown methods
  1035.      */
  1036.     STDMETHOD(QueryInterface)   (THIS_
  1037.                                 REFIID riid,
  1038.                                 void** ppvObj) PURE;
  1039.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1040.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1041.     /*
  1042.      * IHXFileAuthenticator methods
  1043.      */
  1044.     STDMETHOD(SetAuthenticator) (THIS_
  1045.  IHXAuthenticator* pAuthenticator) PURE;
  1046.     
  1047.     STDMETHOD(GetAuthenticator) (THIS_
  1048.  REF(IHXAuthenticator*) pAuthenticator) PURE;
  1049. };
  1050. /****************************************************************************
  1051.  * 
  1052.  *  Interface:
  1053.  * 
  1054.  * IHXRequestHandler
  1055.  * 
  1056.  *  Purpose:
  1057.  * 
  1058.  *      Object to manage IHXRequest objects
  1059.  * 
  1060.  *  IID_IHXRequestHandler:
  1061.  *  
  1062.  * {00000212-0901-11d1-8B06-00A024406D59}
  1063.  * 
  1064.  */
  1065. DEFINE_GUID(IID_IHXRequestHandler, 0x00000212, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1066. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1067. #undef  INTERFACE
  1068. #define INTERFACE   IHXRequestHandler
  1069. #define CLSID_IHXRequestHandler IID_IHXRequestHandler
  1070. DECLARE_INTERFACE_(IHXRequestHandler, IUnknown)
  1071. {
  1072.     /*
  1073.      * IUnknown methods
  1074.      */
  1075.     STDMETHOD(QueryInterface)   (THIS_
  1076.                                 REFIID riid,
  1077.                                 void** ppvObj) PURE;
  1078.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1079.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1080.     /************************************************************************
  1081.      * Method:
  1082.      *     IHXRequestHandler::SetRequest
  1083.      * Purpose:
  1084.      *     Associates an IHXRequest with an object
  1085.      */
  1086.     STDMETHOD(SetRequest)   (THIS_
  1087.     IHXRequest*        /*IN*/  pRequest) PURE;
  1088.     /************************************************************************
  1089.      * Method:
  1090.      *     IHXRequestHandler::GetRequest
  1091.      * Purpose:
  1092.      *     Gets the IHXRequest object associated with an object
  1093.      */
  1094.     STDMETHOD(GetRequest)   (THIS_
  1095.     REF(IHXRequest*)        /*OUT*/  pRequest) PURE;
  1096. };
  1097. /****************************************************************************
  1098.  * 
  1099.  *  Interface:
  1100.  * 
  1101.  * IHXRequestContext
  1102.  * 
  1103.  *  Purpose:
  1104.  * 
  1105.  *      Object to manage the context of the Request
  1106.  * 
  1107.  *  IID_IHXRequestContext:
  1108.  *  
  1109.  * {00000217-0901-11d1-8B06-00A024406D59}
  1110.  * 
  1111.  */
  1112. DEFINE_GUID(IID_IHXRequestContext, 0x00000217, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1113. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1114. #undef  INTERFACE
  1115. #define INTERFACE   IHXRequestContext
  1116. #define CLSID_IHXRequestContext IID_IHXRequestContext
  1117. DECLARE_INTERFACE_(IHXRequestContext, IUnknown)
  1118. {
  1119.     /*
  1120.      * IUnknown methods
  1121.      */
  1122.     STDMETHOD(QueryInterface)   (THIS_
  1123.                                 REFIID riid,
  1124.                                 void** ppvObj) PURE;
  1125.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1126.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1127.     /*
  1128.      * IHXRequestContext methods
  1129.      */
  1130.     /************************************************************************
  1131.      * Method:
  1132.      *     IHXRequestContext::SetUserContext
  1133.      * Purpose:
  1134.      *     Sets the Authenticated users Context.
  1135.      */
  1136.     STDMETHOD(SetUserContext)
  1137.     (
  1138. THIS_
  1139. IUnknown* pIUnknownNewContext
  1140.     ) PURE;
  1141.     /************************************************************************
  1142.      * Method:
  1143.      *     IHXRequestContext::GetUserContext
  1144.      * Purpose:
  1145.      *     Gets the Authenticated users Context.
  1146.      */
  1147.     STDMETHOD(GetUserContext)
  1148.     (
  1149. THIS_
  1150. REF(IUnknown*) pIUnknownCurrentContext
  1151.     ) PURE;
  1152.     /************************************************************************
  1153.      * Method:
  1154.      *     IHXRequestContext::SetRequester
  1155.      * Purpose:
  1156.      *     Sets the Object that made the request.
  1157.      */
  1158.     STDMETHOD(SetRequester)
  1159.     (
  1160. THIS_
  1161. IUnknown* pIUnknownNewRequester
  1162.     ) PURE;
  1163.     /************************************************************************
  1164.      * Method:
  1165.      *     IHXRequestContext::GetRequester
  1166.      * Purpose:
  1167.      *     Gets the Object that made the request.
  1168.      */
  1169.     STDMETHOD(GetRequester)
  1170.     (
  1171. THIS_
  1172. REF(IUnknown*) pIUnknownCurrentRequester
  1173.     ) PURE;
  1174. };
  1175. /****************************************************************************
  1176.  * 
  1177.  *  Interface:
  1178.  * 
  1179.  * IHXRequest
  1180.  * 
  1181.  *  Purpose:
  1182.  * 
  1183.  *      Object to manage the RFC822 headers sent by the client
  1184.  * 
  1185.  *  IID_IHXRequest:
  1186.  *  
  1187.  * {00000213-0901-11d1-8B06-00A024406D59}
  1188.  * 
  1189.  */
  1190. DEFINE_GUID(IID_IHXRequest, 0x00000213, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1191. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1192. #undef  INTERFACE
  1193. #define INTERFACE   IHXRequest
  1194. #define CLSID_IHXRequest IID_IHXRequest
  1195. DECLARE_INTERFACE_(IHXRequest, IUnknown)
  1196. {
  1197.     /*
  1198.      * IUnknown methods
  1199.      */
  1200.     STDMETHOD(QueryInterface)   (THIS_
  1201.                                 REFIID riid,
  1202.                                 void** ppvObj) PURE;
  1203.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1204.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1205.     /*
  1206.      * IHXRequest methods
  1207.      */
  1208.     /************************************************************************
  1209.      * Method:
  1210.      *     IHXRequest::SetRequestHeaders
  1211.      * Purpose:
  1212.      *     Sets the headers that will be sent in the RFC822 header section
  1213.      *      of the request message
  1214.      */
  1215.     STDMETHOD(SetRequestHeaders) (THIS_
  1216. IHXValues* pRequestHeaders) PURE;
  1217.     
  1218.     /************************************************************************
  1219.      * Method:
  1220.      *     IHXRequest::GetRequestHeaders
  1221.      * Purpose:
  1222.      *     Gets the headers that were sent in the RFC822 header section
  1223.      *     of the request message
  1224.      */
  1225.     STDMETHOD(GetRequestHeaders) (THIS_
  1226. REF(IHXValues*) pRequestHeaders) PURE;
  1227.     /************************************************************************
  1228.      * Method:
  1229.      *     IHXRequest::SetResponseHeaders
  1230.      * Purpose:
  1231.      *     Sets the headers that will be returned in the RFC822 header
  1232.      *     section of the response message
  1233.      */
  1234.     STDMETHOD(SetResponseHeaders) (THIS_
  1235. IHXValues* pResponseHeaders) PURE;
  1236.     
  1237.     /************************************************************************
  1238.      * Method:
  1239.      *     IHXRequest::GetResponseHeaders
  1240.      * Purpose:
  1241.      *     Gets the headers that were returned in the RFC822 header section
  1242.      *     of the response message
  1243.      */
  1244.     STDMETHOD(GetResponseHeaders) (THIS_
  1245. REF(IHXValues*) pResponseHeaders) PURE;
  1246.     /************************************************************************
  1247.      * Method:
  1248.      *     IHXRequest::SetURL
  1249.      * Purpose:
  1250.      *     Sets the fully qualified path associated with a file object.
  1251.      *     Note: On the server, this path does not include the file system
  1252.      *      mount point.
  1253.      */
  1254.     STDMETHOD(SetURL) (THIS_
  1255. const char* pURL) PURE;
  1256.     /************************************************************************
  1257.      * Method:
  1258.      *     IHXRequest::GetURL
  1259.      * Purpose:
  1260.      *     Returns the fully qualified path associated with a file object.
  1261.      *     Note: On the server, this path does not include the file system
  1262.      *      mount point.
  1263.      *
  1264.      *     Note: The returned pointer's lifetime expires as soon as the
  1265.      *     caller returns from a function which was called from the RMA
  1266.      *     core (i.e. when you return control to the RMA core)
  1267.      */
  1268.     STDMETHOD(GetURL) (THIS_
  1269. REF(const char*) pURL) PURE;
  1270. };
  1271. /****************************************************************************
  1272.  * 
  1273.  *  Interface:
  1274.  * 
  1275.  * IHXFileRename
  1276.  * 
  1277.  *  Purpose:
  1278.  * 
  1279.  *      Interface to allow renaming of files.  Query off of the File Object.
  1280.  * Not all filesystem plugins implement this feature.
  1281.  * 
  1282.  *  IID_IHXFileRename:
  1283.  *  
  1284.  * {00000214-0901-11d1-8B06-00A024406D59}
  1285.  * 
  1286.  */
  1287. DEFINE_GUID(IID_IHXFileRename, 0x00000214, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1288. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1289. #undef  INTERFACE
  1290. #define INTERFACE   IHXFileRename
  1291. DECLARE_INTERFACE_(IHXFileRename, IUnknown)
  1292. {
  1293.     /*
  1294.      * IUnknown methods
  1295.      */
  1296.     STDMETHOD(QueryInterface)   (THIS_
  1297.                                 REFIID riid,
  1298.                                 void** ppvObj) PURE;
  1299.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1300.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1301.     /*
  1302.      * IHXFileRename methods
  1303.      */
  1304.     /************************************************************************
  1305.      * Method:
  1306.      *     IHXFileRename::Rename
  1307.      * Purpose:
  1308.      *     Renames a file to a new name.
  1309.      */
  1310.     STDMETHOD(Rename) (THIS_
  1311. const char* pNewFileName) PURE;
  1312. };
  1313. /****************************************************************************
  1314.  * 
  1315.  *  Interface:
  1316.  * 
  1317.  * IHXFileMove
  1318.  * 
  1319.  *  Purpose:
  1320.  * 
  1321.  *      Interface to allow removing of files.  Query off of the File Object.
  1322.  * Not all filesystem plugins implement this feature.
  1323.  * 
  1324.  *  IID_IHXFileMove:
  1325.  *  
  1326.  * {23E72FB0-DE0E-11d5-AA9A-00010251B340}
  1327.  * 
  1328.  */
  1329. DEFINE_GUID(IID_IHXFileMove, 0x23e72fb0, 0xde0e, 0x11d5, 0xaa, 0x9a, 0x0, 
  1330. 0x1, 0x2, 0x51, 0xb3, 0x40);
  1331. #undef  INTERFACE
  1332. #define INTERFACE   IHXFileMove
  1333. DECLARE_INTERFACE_(IHXFileMove, IUnknown)
  1334. {
  1335.     /*
  1336.      * IUnknown methods
  1337.      */
  1338.     STDMETHOD(QueryInterface)   (THIS_
  1339.                                 REFIID riid,
  1340.                                 void** ppvObj) PURE;
  1341.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1342.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1343.     /*
  1344.      * IHXFileMove methods
  1345.      */
  1346.     /************************************************************************
  1347.      * Method:
  1348.      *     IHXFileMove::Move
  1349.      * Purpose:
  1350.      *     Moves a file to a different location in the file system
  1351.      */
  1352.     STDMETHOD(Move) (THIS_
  1353. const char* pNewFilePathName) PURE;
  1354. };
  1355.     
  1356. /****************************************************************************
  1357.  * 
  1358.  *  Interface:
  1359.  * 
  1360.  * IHXDirHandler
  1361.  * 
  1362.  *  Purpose:
  1363.  * 
  1364.  * Object that exports directory handler API
  1365.  * 
  1366.  *  IID_IHXDirHandler:
  1367.  * 
  1368.  * {00000215-0901-11d1-8B06-00A024406D59}
  1369.  * 
  1370.  */
  1371. DEFINE_GUID(IID_IHXDirHandler, 0x00000215, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1372. #undef  INTERFACE
  1373. #define INTERFACE   IHXDirHandler
  1374. DECLARE_INTERFACE_(IHXDirHandler, IUnknown)
  1375. {
  1376.     /*
  1377.      * IUnknown methods
  1378.      */
  1379.     STDMETHOD(QueryInterface) (THIS_
  1380. REFIID riid,
  1381. void** ppvObj) PURE;
  1382.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1383.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1384.     /*
  1385.      * IHXDirHandler methods
  1386.      */
  1387.     /************************************************************************
  1388.      * Method:
  1389.      *     IHXDirHandler::InitDirHandler
  1390.      * Purpose:
  1391.      *     Associates a directory handler with the directory handler
  1392.      *     response, it should notify of operation completness.
  1393.      */
  1394.     STDMETHOD(InitDirHandler) (THIS_
  1395. IHXDirHandlerResponse*    /*IN*/  pDirResponse) PURE;
  1396.     /************************************************************************
  1397.      * Method:
  1398.      *     IHXDirHandler::CloseDirHandler
  1399.      * Purpose:
  1400.      *     Closes the directory handler resource and releases all resources
  1401.      *     associated with the object.
  1402.      */
  1403.     STDMETHOD(CloseDirHandler) (THIS) PURE;
  1404.     /************************************************************************
  1405.      * Method:
  1406.      *     IHXDirHandler::MakeDir
  1407.      * Purpose:
  1408.      *     Create the directory
  1409.      */
  1410.     STDMETHOD(MakeDir) (THIS) PURE;
  1411.     /************************************************************************
  1412.      * Method:
  1413.      *     IHXDirHandler::ReadDir
  1414.      * Purpose:
  1415.      *     Get a dump of the directory
  1416.      */
  1417.     STDMETHOD(ReadDir) (THIS) PURE;
  1418. };
  1419. /****************************************************************************
  1420.  * 
  1421.  *  Interface:
  1422.  * 
  1423.  * IHXDirHandlerResponse
  1424.  * 
  1425.  *  Purpose:
  1426.  * 
  1427.  * Object that exports the directory handler response API
  1428.  * 
  1429.  *  IID_IHXDirHandlerResponse:
  1430.  * 
  1431.  * {00000216-0901-11d1-8B06-00A024406D59}
  1432.  * 
  1433.  */
  1434. DEFINE_GUID(IID_IHXDirHandlerResponse, 0x00000216, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1435. #undef  INTERFACE
  1436. #define INTERFACE   IHXDirHandlerResponse
  1437. DECLARE_INTERFACE_(IHXDirHandlerResponse, IUnknown)
  1438. {
  1439.     /*
  1440.      * IUnknown methods
  1441.      */
  1442.     STDMETHOD(QueryInterface) (THIS_
  1443. REFIID riid,
  1444. void** ppvObj) PURE;
  1445.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1446.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1447.     /*
  1448.      * IHXDirHandlerResponse methods
  1449.      */
  1450.     /************************************************************************
  1451.      * Method:
  1452.      *     IHXDirHandlerResponse::InitDirHandlerDone
  1453.      * Purpose:
  1454.      *     Notification interface provided by users of the IHXDirHandler
  1455.      *     interface. This method is called by the IHXDirHandler when the
  1456.      *     initialization of the object is complete.
  1457.      */
  1458.     STDMETHOD(InitDirHandlerDone) (THIS_
  1459. HX_RESULT     status) PURE;
  1460.     /************************************************************************
  1461.      * Method:
  1462.      *     IHXDirHandlerResponse::CloseDirHandlerDone
  1463.      * Purpose:
  1464.      *     Notification interface provided by users of the IHXDirHandler
  1465.      *     interface. This method is called by the IHXDirHandler when the
  1466.      *     close of the directory is complete.
  1467.      */
  1468.     STDMETHOD(CloseDirHandlerDone) (THIS_
  1469. HX_RESULT     status) PURE;
  1470.     /************************************************************************
  1471.      * Method:
  1472.      *     IHXDirHandler::MakeDirDone
  1473.      * Purpose:
  1474.      *     Notification interface provided by users of the IHXDirHandler
  1475.      *     interface. This method is called by the IHXDirHandler when the
  1476.      *     attempt to create the directory is complete.
  1477.      */
  1478.     STDMETHOD(MakeDirDone) (THIS_ 
  1479. HX_RESULT     status) PURE;
  1480.     /************************************************************************
  1481.      * Method:
  1482.      *     IHXDirHandler::ReadDirDone
  1483.      * Purpose:
  1484.      *     Notification interface provided by users of the IHXDirHandler
  1485.      *     interface. This method is called by the IHXDirHandler when the
  1486.      *     read from the directory is complete and a buffer is available.
  1487.      */
  1488.     STDMETHOD(ReadDirDone) (THIS_ 
  1489. HX_RESULT     status,
  1490. IHXBuffer*     pBuffer) PURE;
  1491. };
  1492. // $Private:
  1493. /****************************************************************************
  1494.  * 
  1495.  *  Interface:
  1496.  * 
  1497.  * IHXGetRecursionLevel
  1498.  * 
  1499.  *  Purpose:
  1500.  * 
  1501.  * Set's Recursion Level
  1502.  * 
  1503.  *  IID_GetRecursionLevel:
  1504.  * 
  1505.  * {00000218-0901-11d1-8B06-00A024406D59}
  1506.  * 
  1507.  */
  1508. DEFINE_GUID(IID_IHXGetRecursionLevel, 0x00000218, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1509. #undef  INTERFACE
  1510. #define INTERFACE   IHXGetRecursionLevel
  1511. DECLARE_INTERFACE_(IHXGetRecursionLevel, IUnknown)
  1512. {
  1513.     /*
  1514.      * IUnknown methods
  1515.      */
  1516.     STDMETHOD(QueryInterface) (THIS_
  1517. REFIID riid,
  1518. void** ppvObj) PURE;
  1519.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1520.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1521.     /*
  1522.      * IHXGetRecursionLevel methods
  1523.      */
  1524.     STDMETHOD_(UINT32, GetRecursionLevel) (THIS) PURE;
  1525. };
  1526. /****************************************************************************
  1527.  * 
  1528.  *  Interface:
  1529.  * 
  1530.  * IHXFileRestrictor
  1531.  * 
  1532.  *  Purpose:
  1533.  * 
  1534.  * Allows restrictions on per file basis.  This will only get called for
  1535.  *  HTTP and it will only send in the localport.  Maybe some day.....
  1536.  * 
  1537.  *  IID_IHXFileRestrictor:
  1538.  * 
  1539.  * {00000219-0901-11d1-8B06-00A024406D59}
  1540.  * 
  1541.  */
  1542. DEFINE_GUID(IID_IHXFileRestrictor, 0x00000219, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1543. #undef  INTERFACE
  1544. #define INTERFACE   IHXFileRestrictor
  1545. DECLARE_INTERFACE_(IHXFileRestrictor, IUnknown)
  1546. {
  1547.     /*
  1548.      * IUnknown methods
  1549.      */
  1550.     STDMETHOD(QueryInterface) (THIS_
  1551. REFIID riid,
  1552. void** ppvObj) PURE;
  1553.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1554.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1555.     /*
  1556.      * IHXFileRestrictor methods
  1557.      */
  1558.     STDMETHOD_(BOOL, IsAllowed) (THIS_
  1559. const char* url,
  1560. ULONG32 LocalAddr,
  1561. UINT16 LocalPort,
  1562. ULONG32 RemoteAddr,
  1563. UINT16 RemotePort) PURE;
  1564. };
  1565. // $EndPrivate.
  1566. /****************************************************************************
  1567.  * 
  1568.  *  Interface:
  1569.  * 
  1570.  * IHXFileRemove
  1571.  * 
  1572.  *  Purpose:
  1573.  * 
  1574.  *      Interface to allow removing of files.  Query off of the File Object.
  1575.  * Not all filesystem plugins implement this feature.
  1576.  * 
  1577.  *  IID_IHXFileRemove:
  1578.  *  
  1579.  * {0000021A-0901-11d1-8B06-00A024406D59}
  1580.  * 
  1581.  */
  1582. DEFINE_GUID(IID_IHXFileRemove, 0x0000021A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1583. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1584. #undef  INTERFACE
  1585. #define INTERFACE   IHXFileRemove
  1586. DECLARE_INTERFACE_(IHXFileRemove, IUnknown)
  1587. {
  1588.     /*
  1589.      * IUnknown methods
  1590.      */
  1591.     STDMETHOD(QueryInterface)   (THIS_
  1592.                                 REFIID riid,
  1593.                                 void** ppvObj) PURE;
  1594.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1595.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1596.     /*
  1597.      * IHXFileRemove methods
  1598.      */
  1599.     /************************************************************************
  1600.      * Method:
  1601.      *     IHXFileRemove::Remove
  1602.      * Purpose:
  1603.      *     Removes a file from the file system.
  1604.      */
  1605.     STDMETHOD(Remove) (THIS) PURE;
  1606. };
  1607. // $Private:
  1608. /****************************************************************************
  1609.  * 
  1610.  *  Interface:
  1611.  * 
  1612.  * IHXFastFileFactory
  1613.  * 
  1614.  *  Purpose:
  1615.  * 
  1616.  *      Interface to allow wrapping file objects with a buffer and block-sharing
  1617.  * sceme.  Query off the server class factory.
  1618.  * 
  1619.  *  IID_IHXFastFileFactory:
  1620.  *  
  1621.  * {0000021C-0901-11d1-8B06-00A024406D59}
  1622.  * 
  1623.  */
  1624. DEFINE_GUID(IID_IHXFastFileFactory, 0x0000021C, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1625. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1626. #define CLSID_IHXFastFileFactory IID_IHXFastFileFactory
  1627. #undef  INTERFACE
  1628. #define INTERFACE   IHXFastFileFactory
  1629. DECLARE_INTERFACE_(IHXFastFileFactory, IUnknown)
  1630. {
  1631.     /*
  1632.      * IUnknown methods
  1633.      */
  1634.     STDMETHOD(QueryInterface)   (THIS_
  1635.                                 REFIID riid,
  1636.                                 void** ppvObj) PURE;
  1637.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1638.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1639.     /*
  1640.      * IHXFastFileFactory methods
  1641.      */
  1642.     /************************************************************************
  1643.      * Method:
  1644.      *     IHXFastFileFactory::Wrap
  1645.      * Purpose:
  1646.      *     Return an instantiated wrapper around an existing (but
  1647.      *      uninitialized) file object.
  1648.      *
  1649.      */
  1650.     STDMETHOD(Wrap) (THIS_
  1651.  REF(IUnknown*) /*OUT*/ pWrapper,
  1652.  IUnknown*      /*IN*/  pFileObj,
  1653.  UINT32         /*IN*/  ulBlockSize,
  1654.                                  BOOL           /*IN*/  bAlignReads,
  1655.                                  BOOL           /*IN*/  bCacheStats) PURE;
  1656. };
  1657. /****************************************************************************
  1658.  *
  1659.  *  Interface:
  1660.  *
  1661.  *      IHXFastFileFactory2
  1662.  *
  1663.  *  Purpose:
  1664.  *
  1665.  *      Interface to allow wrapping file objects with a buffer and block-sharing
  1666.  *      sceme.  Query off the server class factory.
  1667.  *
  1668.  *  IID_IHXFastFileFactory2:
  1669.  * 
  1670.  *      {0000021F-0901-11d1-8B06-00A024406D59}
  1671.  *
  1672.  */
  1673. DEFINE_GUID(IID_IHXFastFileFactory2, 0x0000021F, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
  1674.                         0xa0, 0x24, 0x40, 0x6d, 0x59);
  1675. #define CLSID_IHXFastFileFactory2 IID_IHXFastFileFactory2
  1676. #undef  INTERFACE
  1677. #define INTERFACE   IHXFastFileFactory2
  1678. DECLARE_INTERFACE_(IHXFastFileFactory2, IUnknown)
  1679. {
  1680.     /************************************************************************
  1681.      *  Method:
  1682.      *      IHXFastFileFactory2::Wrap
  1683.      *  Purpose:
  1684.      *      Return an instantiated wrapper around an existing (but
  1685.      *      uninitialized) file object.
  1686.      *
  1687.      */
  1688.     STDMETHOD(Wrap)             (THIS_
  1689.                                  REF(IUnknown*) /*OUT*/ pWrapper,
  1690.                                  IUnknown*      /*IN*/  pFileObj,
  1691.                                  UINT32         /*IN*/  ulBlockSize,
  1692.                                  BOOL           /*IN*/  bAlignReads,
  1693.                                  BOOL           /*IN*/  bCacheStats,
  1694.                                  UINT32         /*IN*/  ulMaxBlockSize) PURE;
  1695. };
  1696. /****************************************************************************
  1697.  * 
  1698.  *  Interface:
  1699.  * 
  1700.  * IHXFilePlacementRead
  1701.  * 
  1702.  *  Purpose:
  1703.  * 
  1704.  *      Reads into the passed buffer
  1705.  * 
  1706.  *  IID_IHXFilePlacementRead
  1707.  * 
  1708.  * {0000021D-0901-11d1-8B06-00A024406D59}
  1709.  * 
  1710.  */
  1711. DEFINE_GUID(IID_IHXFilePlacementRead, 0x0000021D, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1712. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1713. #undef  INTERFACE
  1714. #define INTERFACE   IHXFilePlacementRead
  1715. DECLARE_INTERFACE_(IHXFilePlacementRead, IUnknown)
  1716. {
  1717.     /*
  1718.      * IUnknown methods
  1719.      */
  1720.     STDMETHOD(QueryInterface)   (THIS_
  1721.                                 REFIID riid,
  1722.                                 void** ppvObj) PURE;
  1723.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1724.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1725.     /*
  1726.      * IHXFilePlacementRead methods
  1727.      */
  1728.     STDMETHOD(Read) (THIS_
  1729.                                 ULONG32 ulAmount,
  1730.                                 ULONG32 ulOffset,
  1731.                                 char*   pBuffer,
  1732.                                 BOOL    bOffsetBuffer) PURE;
  1733.     STDMETHOD_(ULONG32,AlignmentBoundary) (THIS) PURE;
  1734. };
  1735. // $EndPrivate.
  1736. /****************************************************************************
  1737.  * 
  1738.  *  Interface:
  1739.  * 
  1740.  * IHXFastFileStats
  1741.  * 
  1742.  *  Purpose:
  1743.  * 
  1744.  *      Interface to allow file objects to request that at close they be 
  1745.  *      informed how many bytes have been "fast cached" on their behalf if any.
  1746.  * 
  1747.  *      ulFastFileBytesSaved is the number of bytes that would have been read
  1748.  *      from the file object had FastFile not been in use (this includes some
  1749.  *      lookahead
  1750.  *
  1751.  *      ulFastFileBytesNeeded is the amount of data actually read by the file 
  1752.  *      system. 
  1753.  * 
  1754.  *  IID_IHXFastFileStats:
  1755.  *  
  1756.  * {0000021E-0901-11d1-8B06-00A024406D59}
  1757.  * 
  1758.  */
  1759. DEFINE_GUID(IID_IHXFastFileStats, 0x0000021E, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1760. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1761. #define CLSID_IHXFastFileStats IID_IHXFastFileStats
  1762. #undef  INTERFACE
  1763. #define INTERFACE   IHXFastFileStats
  1764. DECLARE_INTERFACE_(IHXFastFileStats, IUnknown)
  1765. {
  1766.     /*
  1767.      * IUnknown methods
  1768.      */
  1769.     STDMETHOD(QueryInterface)   (THIS_
  1770.                                 REFIID riid,
  1771.                                 void** ppvObj) PURE;
  1772.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  1773.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1774.     /*
  1775.      * IHXFastFileStats methods
  1776.      */
  1777.     STDMETHOD(UpdateFileObjectStats) (THIS_
  1778.                                          UINT32         /*IN*/  ulFastFileBytesSaved,
  1779.                                          UINT32         /*IN*/  ulFastFileBytesNeeded) PURE;
  1780. };
  1781. // $Private:
  1782. /****************************************************************************
  1783.  * 
  1784.  *  Interface:
  1785.  * 
  1786.  * IHXHTTPPostObject
  1787.  * 
  1788.  *  Purpose:
  1789.  * 
  1790.  * Object that exports file control API
  1791.  * 
  1792.  *  IID_IHXHTTPPostObject:
  1793.  * 
  1794.  * {00000112-0901-11d1-8B06-00A024406D59}
  1795.  * 
  1796.  */
  1797. DEFINE_GUID(IID_IHXHTTPPostObject, 0x00000112, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1798. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  1799. #define CLSID_IHXHTTPPostObject IID_IHXHTTPPostObject
  1800. #undef  INTERFACE
  1801. #define INTERFACE   IHXHTTPPostObject
  1802. DECLARE_INTERFACE_(IHXHTTPPostObject, IUnknown)
  1803. {
  1804.     /*
  1805.      * IUnknown methods
  1806.      */
  1807.     STDMETHOD(QueryInterface) (THIS_
  1808. REFIID riid,
  1809. void** ppvObj) PURE;
  1810.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1811.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1812.     /*
  1813.      * IHXHTTPPostObject methods
  1814.      */
  1815.     /************************************************************************
  1816.      * Method:
  1817.      *     IHXHTTPPostObject::Init
  1818.      * Purpose:
  1819.      *     Associates a file object with the file response object it should
  1820.      *     notify of operation completness. This method should also check
  1821.      *     for validity of the object (for example by opening it if it is
  1822.      *     a local file).
  1823.      */
  1824.     STDMETHOD(Init) (THIS_
  1825. ULONG32     /*IN*/  ulFlags,
  1826. IHXHTTPPostResponse*   /*IN*/  pFileResponse) PURE;
  1827.     /************************************************************************
  1828.      * Method:
  1829.      *     IHXHTTPPostObject::Close
  1830.      * Purpose:
  1831.      *     Closes the file resource and releases all resources associated
  1832.      *     with the object.
  1833.      */
  1834.     STDMETHOD(Close) (THIS) PURE;
  1835.     /************************************************************************
  1836.      * Method:
  1837.      *     IHXHTTPPostObject::GetResponse
  1838.      * Purpose:
  1839.      *     Tells the object to retreive any response data from the POST.
  1840.      *     Calls IHXHTTPPostResponse with ResponseReady(IHXValues*).
  1841.      */
  1842.     STDMETHOD(GetResponse) (THIS) PURE;
  1843.     /************************************************************************
  1844.      * Method:
  1845.      *     IHXHTTPPostObject::Post
  1846.      * Purpose:
  1847.      *     Writes a buffer of data to the HTTP URL and asynchronously notifies
  1848.      *     the caller via the IHXFileResponse interface passed in to Init,
  1849.      *     of the completeness of the operation.
  1850.      */
  1851.     STDMETHOD(Post) (THIS_
  1852. IHXBuffer* pBuffer) PURE;
  1853. /************************************************************************
  1854.      * Method:
  1855.      *     IHXHTTPPostObject::SetSize
  1856.      * Purpose:
  1857.      *      Set the total size of the Post(s) about to be made.
  1858.      */
  1859.     STDMETHOD(SetSize) (THIS_
  1860. ULONG32 ulLength) PURE;
  1861. };
  1862. /****************************************************************************
  1863.  * 
  1864.  *  Interface:
  1865.  * 
  1866.  * IHXHTTPPostResponse
  1867.  * 
  1868.  *  Purpose:
  1869.  * 
  1870.  * Object that exports file response API
  1871.  * 
  1872.  *  IID_IHXHTTPPostResponse:
  1873.  * 
  1874.  * {00000113-0901-11d1-8B06-00A024406D59}
  1875.  * 
  1876.  */
  1877. DEFINE_GUID(IID_IHXHTTPPostResponse, 0x00000113, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  1878.     0xa0, 0x24, 0x40, 0x6d, 0x59);
  1879. #undef  INTERFACE
  1880. #define INTERFACE   IHXHTTPPostResponse
  1881. DECLARE_INTERFACE_(IHXHTTPPostResponse, IUnknown)
  1882. {
  1883.     /*
  1884.      * IUnknown methods
  1885.      */
  1886.     STDMETHOD(QueryInterface) (THIS_
  1887. REFIID riid,
  1888. void** ppvObj) PURE;
  1889.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1890.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1891.     /*
  1892.      * IHXHTTPPostResponse methods
  1893.      */
  1894.     /************************************************************************
  1895.      * Method:
  1896.      *     IHXHTTPPostResponse::InitDone
  1897.      * Purpose:
  1898.      *     Notification interface provided by users of the IHXHTTPPostObject
  1899.      *     interface. This method is called by the IHXHTTPPostObject when the
  1900.      *     initialization of the file is complete. If the file is not valid 
  1901.      *     for the file system, the status HXR_FAILED should be 
  1902.      *     returned.
  1903.      */
  1904.     STDMETHOD(InitDone) (THIS_
  1905. HX_RESULT     status) PURE;
  1906.     /************************************************************************
  1907.      * Method:
  1908.      *     IHXHTTPPostResponse::CloseDone
  1909.      * Purpose:
  1910.      *     Notification interface provided by users of the IHXHTTPPostObject
  1911.      *     interface. This method is called by the IHXHTTPPostObject when the
  1912.      *     close of the file is complete.
  1913.      */
  1914.     STDMETHOD(CloseDone) (THIS_
  1915. HX_RESULT     status) PURE;
  1916.     /************************************************************************
  1917.      * Method:
  1918.      *     IHXHTTPPostResponse::ResponseReady
  1919.      * Purpose:
  1920.      *     Notification interface provided by users of the IHXHTTPPostObject
  1921.      *     interface. This method is called by the IHXHTTPPostObject when the
  1922.      *     POST response data has been completely read.
  1923.      */
  1924.     STDMETHOD(ResponseReady) (THIS_ 
  1925. HX_RESULT     status,
  1926. IHXBuffer*     pContentBuffer) PURE;
  1927.     /************************************************************************
  1928.      * Method:
  1929.      *     IHXHTTPPostResponse::WriteDone
  1930.      * Purpose:
  1931.      *     Notification interface provided by users of the IHXHTTPPostObject
  1932.      *     interface. This method is called by the IHXHTTPPostObject when the
  1933.      *     last write to the file is complete.
  1934.      */
  1935.     STDMETHOD(PostDone) (THIS_ 
  1936. HX_RESULT     status) PURE;
  1937. };
  1938. // $EndPrivate.
  1939. // $Private:
  1940. /****************************************************************************
  1941.  * 
  1942.  *  Interface:
  1943.  * 
  1944.  * IHXHTTPRedirect
  1945.  * 
  1946.  *  Purpose:
  1947.  * 
  1948.  * Allows you to get redirect URL
  1949.  * 
  1950.  *  IID_IHXHTTPRedirect:
  1951.  * 
  1952.  * {00002E00-0901-11d1-8B06-00A024406D59}
  1953.  * 
  1954.  */
  1955. DEFINE_GUID(IID_IHXHTTPRedirect, 0x21eae0b9, 0x2e0c, 0x4003, 0xbb, 0x79,
  1956.             0xbc, 0x8c, 0xc5, 0x67, 0x2c, 0x2d);
  1957. #undef  INTERFACE
  1958. #define INTERFACE   IHXHTTPRedirect
  1959. DECLARE_INTERFACE_(IHXHTTPRedirect, IUnknown)
  1960. {
  1961.     /*
  1962.      * IUnknown methods
  1963.      */
  1964.     STDMETHOD(QueryInterface) (THIS_
  1965. REFIID riid,
  1966. void** ppvObj) PURE;
  1967.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  1968.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  1969.     /*
  1970.      * IHXHTTPRedirect methods
  1971.      */
  1972.     /************************************************************************
  1973.      * Method:
  1974.      *     IHXHTTPRedirect::Init
  1975.      * Purpose:
  1976.      *     Initialize the response object
  1977.      */
  1978.     STDMETHOD(Init)     (THIS_
  1979.      IHXHTTPRedirectResponse* pRedirectResponse) PURE;
  1980.     /************************************************************************
  1981.      * Method:
  1982.      *     IHXHTTPRedirect::SetResponseObject
  1983.      * Purpose:
  1984.      *     Initialize the response object w/o calling Init
  1985.      */
  1986.     STDMETHOD(SetResponseObject) (THIS_ 
  1987.                              IHXHTTPRedirectResponse* pRedirectResponse) PURE;
  1988. };
  1989. /****************************************************************************
  1990.  * 
  1991.  *  Interface:
  1992.  * 
  1993.  * IHXHTTPRedirectResponse
  1994.  * 
  1995.  *  Purpose:
  1996.  * 
  1997.  * Allows you to get redirect URL
  1998.  * 
  1999.  *  IID_IHXHTTPRedirectResponse:
  2000.  * 
  2001.  * {00002E01-0901-11d1-8B06-00A024406D59}
  2002.  * 
  2003.  */
  2004. DEFINE_GUID(IID_IHXHTTPRedirectResponse, 0x125a63b1, 0x669c, 0x42f9, 0xb1,
  2005.             0xf9, 0x1b, 0x53, 0xe9, 0x95, 0x82, 0x95);
  2006. #undef  INTERFACE
  2007. #define INTERFACE   IHXHTTPRedirectResponse
  2008. DECLARE_INTERFACE_(IHXHTTPRedirectResponse, IUnknown)
  2009. {
  2010.     /*
  2011.      * IUnknown methods
  2012.      */
  2013.     STDMETHOD(QueryInterface) (THIS_
  2014. REFIID riid,
  2015. void** ppvObj) PURE;
  2016.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  2017.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  2018.     /*
  2019.      * IHXHTTPRedirectResponse methods
  2020.      */
  2021.     /************************************************************************
  2022.      * Method:
  2023.      *     IHXHTTPRedirectResponse::RedirectDone
  2024.      * Purpose:
  2025.      *     return the redirect URL
  2026.      */
  2027.     STDMETHOD(RedirectDone) (THIS_
  2028.  IHXBuffer* pURL) PURE;
  2029. };
  2030. /****************************************************************************
  2031.  * 
  2032.  *  Interface:
  2033.  *
  2034.  * IHXRM2Converter2
  2035.  *
  2036.  *  Purpose:
  2037.  *
  2038.  * Interface to RM1->RM2 merge/converter module. This is a new improved
  2039.  *      interface which contains all of the functionality of the old one.
  2040.  *      However, this one is asynchronous where necessary and takes standard
  2041.  *      IHXFileObjects instead of pathnames for the required files.
  2042.  *
  2043.  *  IHXRM2Converter
  2044.  *
  2045.  * {00002F00-0901-11D1-8B06-00A024406D59}
  2046.  */
  2047. DEFINE_GUID(IID_IHXRM2Converter2, 0x00002F00, 0x901, 0x11d1, 0x8b, 
  2048.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  2049. #define CLSID_IRMARM2Converter2 IID_IHXRM2Converter2
  2050. #undef  INTERFACE
  2051. #define INTERFACE   IHXRM2Converter2
  2052. DECLARE_INTERFACE_(IHXRM2Converter2, IUnknown)
  2053. {
  2054.     /*
  2055.      * IUnknown methods
  2056.      */
  2057.     STDMETHOD(QueryInterface)     (THIS_
  2058.     REFIID riid,
  2059.     void** ppvObj) PURE;
  2060.     STDMETHOD_(ULONG32,AddRef)     (THIS) PURE;
  2061.     STDMETHOD_(ULONG32,Release)     (THIS) PURE;
  2062.     /*
  2063.      * IHXRM2Converter2 methods
  2064.      */
  2065.     STDMETHOD(Init)     (THIS_
  2066.     IHXRM2Converter2Response* pResponse) PURE;
  2067.     //
  2068.     // AddStream takes a stream from an RM1 file and
  2069.     // adds it to the new RM2 multirate section
  2070.     //
  2071.     STDMETHOD(AddStream)     (THIS_
  2072.     const char* pFilename,
  2073.     IHXFileObject* pFileObject,
  2074.     UINT16 nStreamNumber,
  2075.     BOOL bTagAsBackwardCompatible) PURE;
  2076.     //
  2077.     // AddInterleavedStream takes a stream from an
  2078.     // RM1 file and adds it to the initial interleaved
  2079.     // backward compatibility section
  2080.     //
  2081.     STDMETHOD(AddInterleavedStream) (THIS_
  2082.     const char* pFilename,
  2083.     IHXFileObject* pFileObject,
  2084.     UINT16 nStreamNumber) PURE;
  2085.     //
  2086.     // Add file slurps down all of the streams in
  2087.     // an RM1 file and adds them to the new RM2
  2088.     // multirate section.
  2089.     //
  2090.     STDMETHOD(AddFile)     (THIS_
  2091.     const char* pFilename,
  2092.     IHXFileObject* pFileObject) PURE;
  2093.     //
  2094.     // SetTitle,Author,Copyright, and Comment
  2095.     // should all be pretty self explanatory...
  2096.     //
  2097.     STDMETHOD(SetTitle)     (THIS_
  2098.     const char* pTitle) PURE;
  2099.     STDMETHOD(SetAuthor)     (THIS_
  2100.     const char* pAuthor) PURE;
  2101.     STDMETHOD(SetCopyright)     (THIS_
  2102.     const char* pCopyright) PURE;
  2103.     STDMETHOD(SetComment)     (THIS_
  2104.     const char* pComment) PURE;
  2105.     //
  2106.     // PairStreams lets you pair two different
  2107.     // streams together to play at a particular
  2108.     // bandwidth (i.e. the sum of the stream
  2109.     // bandwidths involved).
  2110.     //
  2111.     STDMETHOD(PairStreams)     (THIS_
  2112.     const char* pFilename1,
  2113.     UINT16 nStreamNumber1,
  2114.     const char* pFilename2,
  2115.     UINT16 nStreamNumber2) PURE;
  2116.     STDMETHOD(Merge) (THIS_
  2117. const char* pFilename,
  2118. IHXFileObject* pOutputFile,
  2119. UINT32 ulBytesToWrite) PURE;
  2120.     STDMETHOD(Reset)     (THIS) PURE;
  2121.     STDMETHOD(Done)     (THIS) PURE;
  2122. };
  2123. /****************************************************************************
  2124.  * 
  2125.  *  Interface:
  2126.  *
  2127.  * IHXRM2Converter2Response
  2128.  *
  2129.  *  Purpose:
  2130.  *
  2131.  * Response Interface for IHXRM2Converter2. 
  2132.  *
  2133.  *  IHXRM2Converter
  2134.  *
  2135.  * {00002F01-0901-11D1-8B06-00A024406D59}
  2136.  */
  2137. DEFINE_GUID(IID_IHXRM2Converter2Response, 0x00002F01, 0x901, 0x11d1, 0x8b, 
  2138.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  2139. #undef  INTERFACE
  2140. #define INTERFACE   IHXRM2Converter2Response
  2141. DECLARE_INTERFACE_(IHXRM2Converter2Response, IUnknown)
  2142. {
  2143.     /*
  2144.      * IUnknown methods
  2145.      */
  2146.     STDMETHOD(QueryInterface) (THIS_
  2147. REFIID riid,
  2148. void** ppvObj) PURE;
  2149.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  2150.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  2151.     /*
  2152.      * IHXRM2Converter2Response methods
  2153.      */
  2154.     STDMETHOD(InitDone) (THIS_
  2155. HX_RESULT status) PURE;
  2156.     STDMETHOD(AddStreamDone) (THIS_
  2157. HX_RESULT status) PURE;
  2158.     STDMETHOD(AddInterleavedStreamDone) (THIS_
  2159. HX_RESULT status) PURE;
  2160.     STDMETHOD(AddFileDone) (THIS_
  2161. HX_RESULT status) PURE;
  2162.     STDMETHOD(MergeDone) (THIS_
  2163. HX_RESULT status) PURE;
  2164. };
  2165. /****************************************************************************
  2166.  * 
  2167.  *  Interface:
  2168.  * 
  2169.  * IHXPoolPathAdjustment
  2170.  * 
  2171.  *  Purpose:
  2172.  * 
  2173.  * For file systems that use GetFileObjectFromPool to properly
  2174.  * adjust absolute local URLs so they will be accessed relative
  2175.  *      to the pool filesystem mountpoint.
  2176.  *
  2177.  *  IID_IHXPoolPathAdjustment:
  2178.  * 
  2179.  * {00002F02-0901-11d1-8b06-00A024406D59}
  2180.  * 
  2181.  */
  2182. DEFINE_GUID(IID_IHXPoolPathAdjustment, 0x00002F02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  2183. #undef  INTERFACE
  2184. #define INTERFACE   IHXPoolPathAdjustment
  2185. DECLARE_INTERFACE_(IHXPoolPathAdjustment, IUnknown)
  2186. {
  2187.     /*
  2188.      * IUnknown methods
  2189.      */
  2190.     STDMETHOD(QueryInterface) (THIS_
  2191. REFIID riid,
  2192. void** ppvObj) PURE;
  2193.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  2194.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  2195.     /*
  2196.      * IHXPoolPathAdjustment Methods.
  2197.      */
  2198.     STDMETHOD(AdjustAbsolutePath)   (THIS_
  2199.          IHXBuffer*      /*IN*/  pOldPath,
  2200.          REF(IHXBuffer*) /*OUT*/ pNewPath) PURE;
  2201. };
  2202. /*
  2203.  * Interface:
  2204.  *  IHXPostDataHandler
  2205.  *
  2206.  * Purpose:
  2207.  *
  2208.  *  Allows a file object to receive out of band POST data
  2209.  *      from an HTTP request.  If this interface is not implemented
  2210.  *      data will be placed in request header as "PostData"
  2211.  *
  2212.  *      When there is no more Data remaining, PostData will be
  2213.  *      called with a NULL argument.
  2214.  *
  2215.  * IID_IHXPostDataHandler:
  2216.  *
  2217.  * {0x0222a1b5-49fc-47e2-b69098befa0a588e}
  2218.  *
  2219.  */
  2220. DEFINE_GUID(IID_IHXPostDataHandler, 0x0222a1b5, 0x49fc, 0x47e2, 0xb6,
  2221. 0x90, 0x98, 0xbe, 0xfa, 0x0a, 0x58, 0x8e);
  2222. #undef INTERFACE
  2223. #define INTERFACE IHXPostDataHandler
  2224. DECLARE_INTERFACE_(IHXPostDataHandler, IUnknown)
  2225. {
  2226.     /*
  2227.      * IUnknownMethods
  2228.      */
  2229.     STDMETHOD(QueryInterface) (THIS_
  2230.     REFIID riid,
  2231.     void** ppvObj) PURE;
  2232.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  2233.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  2234.     /*
  2235.      * IHXPostDataHandler methods
  2236.      */
  2237.     STDMETHOD(PostData) (THIS_
  2238.          IHXBuffer* pBuf) PURE;
  2239. };
  2240. // $EndPrivate.
  2241. #endif  /* _HXFILES_H_ */