00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _httpconnect_h
00027 #define _httpconnect_h
00028
00029
00030 #include <stdio.h>
00031
00032 #include <string>
00033
00034 #include <curl/curl.h>
00035 #include <curl/types.h>
00036 #include <curl/easy.h>
00037
00038 #ifndef _rc_reader_h_
00039 #include "RCReader.h"
00040 #endif
00041
00042 #ifndef _object_type_h
00043 #include "ObjectType.h"
00044 #endif
00045
00046 #ifndef _http_cache_h
00047 #include "HTTPCache.h"
00048 #endif
00049
00050 #ifndef http_response_h
00051 #include "HTTPResponse.h"
00052 #endif
00053
00054 #ifndef _util_h
00055 #include "util.h"
00056 #endif
00057
00058 using std::string;
00059 using std::vector;
00060
00061
00062
00063 extern ObjectType get_type(const string &value);
00064
00077 class HTTPConnect
00078 {
00079 private:
00080 CURL *d_curl;
00081 RCReader *d_rcr;
00082 HTTPCache *d_http_cache;
00083
00084 char d_error_buffer[CURL_ERROR_SIZE];
00085
00086 bool d_accept_deflate;
00087
00088 string d_username;
00089 string d_password;
00090 string d_upstring;
00091
00092 vector<string> d_request_headers;
00093
00094 void www_lib_init();
00095 long read_url(const string &url, FILE *stream, vector<string> *resp_hdrs,
00096 const vector<string> *headers = 0);
00097
00098 HTTPResponse *plain_fetch_url(const string &url);
00099 HTTPResponse *caching_fetch_url(const string &url);
00100
00101 bool url_uses_proxy_for(const string &url) throw();
00102 bool url_uses_no_proxy_for(const string &url) throw();
00103
00104 void extract_auth_info(string &url);
00105
00106
00107
00108 friend size_t save_raw_http_header(void *ptr, size_t size, size_t nmemb,
00109 void *http_connect);
00110 friend class HTTPConnectTest;
00111 friend class ParseHeader;
00112
00113 protected:
00119 HTTPConnect()
00120 { }
00121 HTTPConnect(const HTTPConnect &)
00122 { }
00123 HTTPConnect &operator=(const HTTPConnect &)
00124 {
00125 throw InternalErr(__FILE__, __LINE__, "Unimplemented assignment");
00126 }
00128
00129 public:
00130 HTTPConnect(RCReader *rcr) throw(Error, InternalErr);
00131
00132 virtual ~HTTPConnect();
00133
00134 void set_credentials(const string &u, const string &p);
00135 void set_accept_deflate(bool defalte);
00136
00142 void set_cache_enabled(bool enabled)
00143 {
00144 if (d_http_cache)
00145 d_http_cache->set_cache_enabled(enabled);
00146 }
00147
00149 bool is_cache_enabled()
00150 {
00151 return (d_http_cache) ? d_http_cache->is_cache_enabled() : false;
00152 }
00153
00154 HTTPResponse *fetch_url(const string &url);
00155 };
00156
00157 #endif // _httpconnect_h