M5HttpDown.h
上传用户:pmma55
上传日期:2020-12-28
资源大小:17k
文件大小:2k
源码类别:

手机WAP编程

开发平台:

Visual C++

  1. #ifndef _M5_HTTP_DOWN_H_
  2. #include <process.h>
  3. #include <wininet.h>
  4. #include <winsock2.h>
  5. #include <stdio.h>
  6. #define HTTP_DEBUG_MODE 1
  7.  
  8. #define HTTP_WEB_PORT            80
  9. #define HTTP_TEMP_BUF_LEN        120
  10. #define HTTP_SEND_BUF_LEN        256
  11. #define HTTP_RECV_BUF_LEN        4096
  12. #define HTTP_HDR_OK              "200 OK"
  13. #define HTTP_HDR_FILE_LEN        "Content-Length: "
  14. #define HTTP_HDR_DIV             "rn"
  15. #define HTTP_HDR_END             "rnrn"
  16. #define HTTP_PREFIX              "http://"
  17. #define HTTPS_PREFIX             "https://"
  18. #define HTTP_COMMON_GET "GET /%s HTTP/1.1rn
  19. User-Agent: Opera 8.0rn
  20. Host: %s:%drnAccept: */
  21. *rnConnection: Keep-Alivernrn"
  22. #define HTTP_RESUME_GET "GET /%s HTTP/1.1rn
  23. User-Agent: Opera 8.0rn
  24. Host: %s:%drnAccept: */
  25. *rnRANGE: bytes=%d-rn
  26. Connection: Keep-Alivernrn"
  27. typedef void (*RECV_CALLBACK)(char * recv_buf, int recv_len, void * data) ;
  28.   
  29. class CM5HttpDown {
  30. protected:
  31.     // socket data
  32.     SOCKET        m_sock ; 
  33.     bool          m_running ;
  34.     bool          m_is_first_resp ; 
  35.     char *        m_web_addr ; 
  36.     char *        m_web_fname ; 
  37.     int           m_web_port ;
  38.     char *        m_recv_buf ; 
  39.     int           m_total_bytes ; 
  40.     int           m_recv_bytes;
  41.     
  42.     // custom defined receive handler  
  43.     RECV_CALLBACK m_custom_callback ; 
  44.     void *        m_custom_data ; 
  45. public:
  46.     // common receive thread func 
  47.     static void recv_thread(void * data) ; 
  48.     void recv_thread_handler() ; 
  49.     
  50. protected:
  51.     bool parse_uri(char * uri, 
  52.                    char * web_addr, char * web_fname, int * web_port) ; 
  53.                    
  54.     bool parse_webfile_info(char * recv_buf, 
  55.                             int * total_length, int * jump_len) ; 
  56.                             
  57.     bool get_resp_field(char * recv_buf, 
  58.                         char * field_name, char * end_flag, char * res) ; 
  59.                         
  60.     bool init_sock(char * server_name, int server_port) ; 
  61.     bool send_req(char * req_str, int req_len) ; 
  62.     bool close_sock() ; 
  63. public:
  64.     CM5HttpDown() ; 
  65.     ~CM5HttpDown() ; 
  66.     
  67.     bool is_running() {return m_running ; }
  68.     int  http_total_size() { return m_total_bytes ; }
  69.     int  http_recv_size() { return m_recv_bytes ; } 
  70.     bool http_down(char * uri, 
  71.                    RECV_CALLBACK custom_func, void * custom_data, 
  72.                    int recv_bytes = 0) ; 
  73.     bool http_stop() ; 
  74. } ; 
  75. #endif