http_fetcher.h
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:4k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /* http_fetcher.h # HTTP handling functions
  2. HTTP Fetcher
  3. Copyright (C) 2001, 2003, 2004 Lyle Hanson (lhanson@users.sourceforge.net)
  4. This library is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU Library General Public
  6. License as published by the Free Software Foundation; either
  7. version 2 of the License, or (at your option) any later version.
  8. This library is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11. Library General Public License for more details.
  12. See LICENSE file for details
  13.  */
  14. #ifndef HTTP_FETCHER_H
  15. #define HTTP_FETCHER_H
  16. class HttpFetcher {
  17. /******************************************************************************/
  18. /**************** Function declarations and descriptions **********************/
  19. /******************************************************************************/
  20. public:
  21. HttpFetcher();
  22. /* 
  23.  * [!!! NOTE !!!]  All HTTP Fetcher functions return -1 on error.  You can
  24.  * then either call http_perror to print the error message or call
  25.  * http_strerror to get a pointer to it
  26.  */
  27. /*
  28.  * Download the url to localFile.
  29.  * Returns:
  30.  * # of bytes downloaded, or
  31.  * -1 on error
  32.  */
  33. int http_fetch(const char *url, HANDLE localFile, UINT& fileSize, UINT& downloadedSize, double limitSpeed);
  34. /*
  35.  * Returns a pointer to the current error description message.  The
  36.  * message pointed to is only good until the next call to http_strerror(),
  37.  * so if you need to hold on to the message for a while you should make
  38.  * a copy of it.
  39.  */
  40. const char *http_strerror();
  41. private:
  42. /******************************************************************************/
  43. /**** The following functions are used INTERNALLY by http_fetcher *************/
  44. /******************************************************************************/
  45. /*
  46.  * Reads the metadata of an HTTP response.  On success returns the number
  47.  * Returns:
  48.  * # of bytes read on success, or
  49.  * -1 on error
  50.  */
  51. int _http_read_header(int sock, char *headerPtr);
  52. /*
  53.  * Opens a TCP socket and returns the descriptor
  54.  * Returns:
  55.  * socket descriptor, or
  56.  * -1 on error
  57.  */
  58. int makeSocket(const char *host);
  59. /*
  60.  * Determines if the given NULL-terminated buffer is large enough to
  61.  * concatenate the given number of characters.  If not, it attempts to
  62.  * grow the buffer to fit.
  63.  * Returns:
  64.  * 0 on success, or
  65.  * -1 on error (original buffer is unchanged).
  66.  */
  67. int _checkBufSize(char **buf, int *bufsize, int more);
  68. private:
  69. const char* DEFAULT_VERSION;
  70. const char* HTTP_VERSION;
  71. const char* DEFAULT_USER_AGENT;
  72. enum {  PORT_NUMBER = 80, 
  73. REQUEST_BUF_SIZE = 1024, 
  74. HEADER_BUF_SIZE = 1024, 
  75. DEFAULT_PAGE_BUF_SIZE = 1024*10, /* 10KB should hold most things */
  76. DEFAULT_REDIRECTS = 3,           /* Number of HTTP redirects to follow */
  77. DEFAULT_READ_TIMEOUT = 15};      /* Seconds to wait before giving up
  78.   * when no data is arriving */
  79. /* Error sources */
  80. enum {FETCHER_ERROR = 0, ERRNO = 1};
  81. /* HTTP Fetcher error codes */
  82. enum {  HF_SUCCESS = 0, HF_METAERROR = 1, HF_NULLURL = 2, HF_HEADTIMEOUT = 3, 
  83. HF_DATATIMEOUT = 4, HF_FRETURNCODE = 5, HF_CRETURNCODE = 6, 
  84. HF_STATUSCODE = 7, HF_CONTENTLEN = 8, HF_HERROR = 9, 
  85. HF_CANTREDIRECT = 10, HF_MAXREDIRECTS = 11};
  86. private:
  87. const char *http_errlist[12]; /* Array of HTTP Fetcher error messages */
  88. /* Used to copy in messages from http_errlist[] and replace %d's with
  89.  * the value of errorInt.  Then we can pass the pointer to THIS */
  90. char convertedError[128];
  91. int errorSource;
  92. int http_errno;
  93. int errorInt; /* When the error message has a %d in it,
  94. * this variable is inserted */
  95. };
  96. #endif