RANGE.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*===========================================================================
  2. Copyright 1996 Microsoft Corporation.  All Rights Reserved.
  3. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  4. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  5. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  6. PARTICULAR PURPOSE.
  7. OVERVIEW OF INTERFACE
  8. The client calls HttpReadRequest to specify the URL, a callback function, 
  9. and an optional array of read ranges.  First, the callback will be notified
  10. of the http response code, content length, last modified time, whether 
  11. ranges are supported by the server, and whether the file is from the cache.  
  12. Next, it may be called repeatedly with data which must be processed during the 
  13. call.  Finally, it will indicate completion and an error if any.  Within the
  14. callback, a client can initiate a new HttpReadRequest and/or return FALSE to
  15. stop the current request.
  16. All ActiveX controls can use this interface.  Other applications must satisfy
  17. some requirements due to an implicit dependency on URL moniker.  The client
  18. thread must have a message loop.  Before calling HttpReadRequest, the client
  19. process must have called CoInitialize or OleInitialize.  After exiting the
  20. message loop, the client process must call CoUninitialize or OleUninitialize.
  21. ===========================================================================*/
  22. #ifndef _RANGE_
  23. #define _RANGE_
  24. #include <windows.h>
  25. #include <objbase.h>
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. // ===========================================================================
  30. // Callback parameter structure and prototype
  31. // ===========================================================================
  32. // Callback Types:
  33. typedef enum 
  34. {
  35. REQUESTCB_STARTED  = 0,
  36. REQUESTCB_DATA     = 1,
  37. REQUESTCB_DONE     = 2,
  38. }
  39. HTTP_REQUESTCB_TYPE;
  40. // Callback parameters: valid only during the current call.
  41. typedef struct
  42. {
  43. DWORD  cbStruct;       // will be sizeof(HTTP_CALLBACK_PARAM)
  44.     DWORD  dwRequestCtx;   // context passed in to HttpReadRequest
  45.     HTTP_REQUESTCB_TYPE CallbackType;   // callback type as defined above
  46.     
  47.     union
  48.     {
  49.         struct // fields used if CallbackType == REQUESTCB_STARTED
  50. {
  51.     DWORD       fdwRequestFlags;  // fields as defined below
  52.     DWORD       dwResponseCode;   // status code (0 if unknown)
  53.     SYSTEMTIME* pstLastModified;  // last modified (NULL if unknown)
  54.             DWORD       dwContentLength;  // content length (0 if unknown)
  55. };
  56.         struct // fields used if CallbackType == REQUESTCB_DATA
  57.         {
  58.     DWORD       dwDataOffset;     // offset of data
  59.     LPVOID      lpDataBuffer;     // pointer to data
  60.     DWORD       cbDataLength;     // amount of data
  61. };
  62. struct // fields used if CallbackType == REQUESTCB_DONE
  63. {
  64.             HRESULT     hrRequest;        // values defined in urlmon.h
  65. };
  66. };
  67. }
  68. HTTP_REQUESTCB_PARAM, *PHTTP_REQUESTCB_PARAM;
  69. // Fields for HTTP_REQUESTCB_PARAM.fdwRequestFlags:
  70. #define HTTP_REQUEST_FROM_CACHE       1
  71. #define HTTP_REQUEST_ACCEPT_RANGES    2 
  72. // Callback function supplied by client:
  73. typedef BOOL (*PFN_REQUESTCB) (PHTTP_REQUESTCB_PARAM);
  74. // ===========================================================================
  75. // HttpReadRequest parameter structure and prototype
  76. // ===========================================================================
  77. // Structure for specifying a read range:
  78. typedef struct
  79. {
  80. DWORD dwOffset;     // offset of data within the URL
  81. DWORD dwSize;       // amount of data (0 means until end of file)
  82. }
  83. HTTP_REQUEST_RANGE, *PHTTP_REQUEST_RANGE;
  84. // Read request parameters must remain valid until REQUEST_COMPLETE:
  85. typedef struct
  86. {
  87. DWORD               cbStruct;        // must be sizeof(HTTP_REQUEST_PARAM)
  88.   LPVOID              punkOuter;       // controlling IUnknown (may be NULL)
  89.     PCSTR               pszUrl;          // URL to request via http
  90. PFN_REQUESTCB       pfnRequestCB;    // request callback function
  91.     DWORD               dwRequestCtx;    // context to pass to callback
  92.     // Optional fields for specifying ranges, otherwise set all to 0:
  93.     PHTTP_REQUEST_RANGE pRanges;                // array of read ranges
  94.     DWORD               cRanges;                // number of ranges
  95.     SYSTEMTIME*         pstUnlessModifiedSince; // unless-modified-since time
  96. }
  97. HTTP_REQUEST_PARAM, *PHTTP_REQUEST_PARAM;
  98. // Function called by client to initiate http read request.
  99. BOOL HttpReadRequest    (PHTTP_REQUEST_PARAM); // try cache first
  100. BOOL HttpReadFromServer (PHTTP_REQUEST_PARAM); // bypass cache
  101. #ifdef __cplusplus
  102. } // extern "C" {
  103. #endif
  104. #endif // _RANGE_