libdap++ Updated for version 3.8.2
|
00001 00002 // -*- mode: c++; c-basic-offset:4 -*- 00003 00004 // This file is part of libdap, A C++ implementation of the OPeNDAP Data 00005 // Access Protocol. 00006 00007 // Copyright (c) 2002,2003 OPeNDAP, Inc. 00008 // Author: James Gallagher <jgallagher@opendap.org> 00009 // 00010 // This library is free software; you can redistribute it and/or 00011 // modify it under the terms of the GNU Lesser General Public 00012 // License as published by the Free Software Foundation; either 00013 // version 2.1 of the License, or (at your option) any later version. 00014 // 00015 // This library is distributed in the hope that it will be useful, 00016 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 // Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public 00021 // License along with this library; if not, write to the Free Software 00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00023 // 00024 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112. 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]; // A human-readable message. 00082 00083 bool d_accept_deflate; 00084 00085 string d_username; // extracted from URL 00086 string d_password; // extracted from URL 00087 string d_upstring; // used to pass info into curl 00088 00089 string d_cookie_jar; 00090 00091 vector<string> d_request_headers; // 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 // string get_temp_file(FILE *&stream) throw(InternalErr); 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); // deprecated 00171 ObjectType get_description_type(const string &value); 00172 00173 } // namespace libdap 00174 00175 #endif // _httpconnect_h