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

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. // HttpDownload.h: interface for the HttpDownload class.
  20. //
  21. //////////////////////////////////////////////////////////////////////
  22. #if !defined(AFX_HTTPDOWNLOAD_H__D397CA06_A1C5_4301_A6AE_9CE551094F4C__INCLUDED_)
  23. #define AFX_HTTPDOWNLOAD_H__D397CA06_A1C5_4301_A6AE_9CE551094F4C__INCLUDED_
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include <WinInet.h>
  28. /*******************
  29. Create() :类初始化
  30. OpenRequest(CString url) : 打开一个http URL,并将网页内容全部下载(阻塞的)
  31. ReadString: 读取一行,参考CStdioFile同名函数的行为(不牵涉网络操作)
  32. StopRequest: 中断OpenRequest的动作
  33. *******************/
  34. #define USER_BUSY 32775 //程序忙
  35. #define USER_STOP 32776 //使用者中断
  36. #define ERROR_HTML 32774 //代码页错误
  37. #define ERROR_STOP 32777 //错误,工作终结
  38. #define SUCCEED_CONTINUE 0 //正常,通行
  39. #define EVENT_SERIES 2
  40. #define DOWNLOAD_THREADS 5
  41. class HttpRequest  
  42. {
  43. public:
  44. HttpRequest();
  45. virtual ~HttpRequest();
  46. BOOL Create(UINT = 60000, UINT = 60000, BOOL wide = FALSE);
  47. void SetFileMode(HANDLE h, DWORD m = UINT_MAX, DWORD n = UINT_MAX)
  48. {h_File = h; m_dwOffset = m; m_dwOffsetEnd = n;}
  49. void EndFileMode(){h_File = NULL; m_dwOffset = m_dwOffsetEnd = UINT_MAX;}
  50. BOOL OpenRequest(LPCWSTR, BOOL cache = FALSE, LPCWSTR send = NULL);
  51. BOOL OpenRequest(LPCSTR, BOOL cache = FALSE, LPCSTR send = NULL);
  52. BOOL OpenRequestEx(LPCTSTR, BOOL cache, const void *send, DWORD sendsize);
  53. void SetStopRequest();
  54. void ResumeStopRequest();
  55. BOOL ReadString(LPWSTR);
  56. BOOL ReadString(LPSTR);
  57. int  ReadStringEx();
  58. DWORD GetError(){return errorcode;}
  59. UINT  getBufLen(){return buflength;}
  60. void  TransBuf(BYTE* dest){memcpy(dest, recvBuf, buflength);}
  61. static void  SetProxy(int b){b_useproxy = b;}
  62. static void  SetProxyName(LPCWSTR s);
  63. static void  SetProxyName(LPCSTR s);
  64.     //增强了inet库的效能
  65.     static BOOL  GetCookieEx(
  66.         LPCTSTR lpszUrlName,
  67.         LPCTSTR lpszCookieDataName,
  68.         LPTSTR lpszCookieData,
  69.         LPDWORD lpdwSize);
  70. protected:
  71. BOOL fWide;
  72. static  void CALLBACK AsyncInternetCallback( //internet callback func.
  73.     HINTERNET hInternet,
  74. DWORD dwContext,
  75. DWORD dwInternetStatus,
  76. LPVOID lpvStatusInformation,
  77. DWORD dwStatusInformationLength);
  78. static  DWORD WINAPI InitialCallback(LPVOID);
  79. UINT WaitingEvent(DWORD = INFINITE);
  80. void HDResetEvent();
  81. void InternetCloseHandleAsync(HINTERNET);
  82. BOOL ParseURL(LPCTSTR src, LPTSTR stN, LPTSTR flN, DWORD* port);
  83. BOOL WriteBuffer(const BYTE*, const DWORD);
  84. void MakeHeadMsg(BOOL post, LPTSTR);
  85. void InitWrite(DWORD);
  86. // HINTERNET HSO;
  87. //连接超时
  88. UINT Connect_timeout;
  89. UINT Request_timeout;
  90. //回调函数用代码
  91. // CRITICAL_SECTION m_hSync;
  92. // BOOL b_userStop;
  93. HANDLE m_hEvent[EVENT_SERIES]; //内部交互的事件
  94. HINTERNET m_hInternet;
  95. //错误代码
  96. DWORD errorcode;
  97. BYTE* recvBuf;
  98. DWORD  buflength;
  99. UINT  readstrpos;
  100. HANDLE h_File;
  101. DWORD  m_dwOffset;
  102. DWORD  m_dwOffsetEnd;
  103. //proxy
  104. static int  b_useproxy;
  105. static TCHAR m_proxystr[256];
  106. };
  107. #endif // !defined(AFX_HTTPDOWNLOAD_H__D397CA06_A1C5_4301_A6AE_9CE551094F4C__INCLUDED_)