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 <string>
00031
00032 #include <curl/curl.h>
00033 #include <curl/types.h>
00034 #include <curl/easy.h>
00035
00036 #ifndef _rc_reader_h_
00037 #include "RCReader.h"
00038 #endif
00039
00040 #ifndef _object_type_h
00041 #include "ObjectType.h"
00042 #endif
00043
00044 #ifndef _http_cache_h
00045 #include "HTTPCache.h"
00046 #endif
00047
00048 #ifndef http_response_h
00049 #include "HTTPResponse.h"
00050 #endif
00051
00052 #ifndef _util_h
00053 #include "util.h"
00054 #endif
00055
00056 using std::string;
00057 using std::vector;
00058
00059 namespace libdap
00060 {
00061
00074 class HTTPConnect
00075 {
00076 private:
00077 CURL *d_curl;
00078 RCReader *d_rcr;
00079 HTTPCache *d_http_cache;
00080
00081 char d_error_buffer[CURL_ERROR_SIZE];
00082
00083 bool d_accept_deflate;
00084
00085 string d_username;
00086 string d_password;
00087 string d_upstring;
00088
00089 string d_cookie_jar;
00090
00091 vector<string> d_request_headers;
00092
00093 int d_dap_client_protocol_major;
00094 int d_dap_client_protocol_minor;
00095
00096 void www_lib_init();
00097 long read_url(const string &url, FILE *stream, vector<string> *resp_hdrs,
00098 const vector<string> *headers = 0);
00099
00100 HTTPResponse *plain_fetch_url(const string &url);
00101 HTTPResponse *caching_fetch_url(const string &url);
00102
00103 bool url_uses_proxy_for(const string &url) throw();
00104 bool url_uses_no_proxy_for(const string &url) throw();
00105
00106 void extract_auth_info(string &url);
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 throw InternalErr(__FILE__, __LINE__, "Unimplemented method");
00121 }
00122 HTTPConnect(const HTTPConnect &) {
00123 throw InternalErr(__FILE__, __LINE__, "Unimplemented method");
00124 }
00125 HTTPConnect &operator=(const HTTPConnect &) {
00126 throw InternalErr(__FILE__, __LINE__, "Unimplemented assignment");
00127 }
00129
00130 public:
00131 HTTPConnect(RCReader *rcr);
00132
00133 virtual ~HTTPConnect();
00134
00135 void set_credentials(const string &u, const string &p);
00136 void set_accept_deflate(bool defalte);
00137 void set_xdap_protocol(int major, int minor);
00138
00145 void set_cookie_jar(const string &cookie_jar)
00146 {
00147 d_cookie_jar = cookie_jar;
00148 }
00149
00155 void set_cache_enabled(bool enabled)
00156 {
00157 if (d_http_cache)
00158 d_http_cache->set_cache_enabled(enabled);
00159 }
00160
00162 bool is_cache_enabled()
00163 {
00164 return (d_http_cache) ? d_http_cache->is_cache_enabled() : false;
00165 }
00166
00167 HTTPResponse *fetch_url(const string &url);
00168 };
00169
00170 ObjectType get_type(const string &value);
00171 ObjectType get_description_type(const string &value);
00172
00173 }
00174
00175 #endif // _httpconnect_h