RCReader.h

Go to the documentation of this file.
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: Jose Garcia <jgarcia@ucar.edu>
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 // (c) COPYRIGHT URI/MIT 2001-2002
00027 // Please read the full copyright statement in the file COPYRIGHT_URI.
00028 //
00029 // Authors:
00030 //         jose  Jose Garcia <jgarcia@ucar.edu>
00031 
00032 #ifndef _rc_reader_h_
00033 #define _rc_reader_h_
00034 
00035 #include <iostream>
00036 #include <string>
00037 
00038 #include "Error.h"
00039 #include "util.h"
00040 
00041 using namespace std;
00042 
00043 namespace libdap
00044 {
00045 
00054 class RCReader
00055 {
00056 private:
00057     string d_rc_file_path;
00058     string d_cache_root;
00059 
00060     bool _dods_use_cache; // 0- Disabled 1- Enabled
00061     unsigned int _dods_cache_max; // Max cache size in Mbytes
00062     unsigned int _dods_cached_obj; // Max cache entry size in Mbytes
00063     int _dods_ign_expires; // 0- Honor expires 1- Ignore them
00064 
00065     // NB: NEVER_DEFLATE: I added this (12/1/99 jhrg) because libwww 5.2.9
00066     // cannot process compressed (i.e., deflated) documents in the cache.
00067     // Users must be able to choose whether they want compressed data that
00068     // will always be refreshed or uncompressed data that will be cached.
00069     // When set this flag overrides the value passed into the Connect
00070     // object's constructor. This gives users control over the value.
00071     // Previously, this could only be set by the program that called
00072     // Connect(...). Note that I've now (4/6/2000 jhrg) fixed libwww so this
00073     // parameter is no longer needed.111
00074     //
00075     // Added back in, but with a better name (removed double negative).
00076     // 6/27/2002 jhrg
00077     bool _dods_deflate;  // 1- request comp responses, 0- don't
00078 
00079     int _dods_default_expires; // 24 hours in seconds
00080     int _dods_always_validate; // Let libwww decide by default so set to 0
00081 
00082     // flags for PROXY_SERVER=<protocol>,<host url>
00083     string d_dods_proxy_server_protocol;
00084     string d_dods_proxy_server_host;
00085     int d_dods_proxy_server_port;
00086     string d_dods_proxy_server_userpw;
00087 
00088     // Should libcurl validate SSL hosts/certificates"
00089     int d_validate_ssl;
00090 
00091     string _dods_proxy_server_host_url; // deprecated
00092 
00093     // The proxy-for stuff is all deprecated. 06/17/04 jhrg
00094     // flags for PROXY_FOR=<regex>,<proxy host url>,<flags>
00095     bool _dods_proxy_for; // true if proxy_for is used.
00096     string _dods_proxy_for_regexp;
00097     string _dods_proxy_for_proxy_host_url;
00098     int _dods_proxy_for_regexp_flags; // not used w/libcurl. 6/27/2002 jhrg
00099 
00100     //flags for NO_PROXY_FOR=<protocol>,<host>,<port>
00101     bool d_dods_no_proxy_for; // true if no_proxy_for is used.
00102     string d_dods_no_proxy_for_protocol;
00103     string d_dods_no_proxy_for_host;
00104     int _dods_no_proxy_for_port; // not used w/libcurl. 6/27/2002 jhrg
00105 
00106     // Make this a vector of strings or support a PATH-style list. 02/26/03
00107     // jhrg
00108     string d_ais_database;
00109 
00110     static RCReader* _instance;
00111 
00112     RCReader() throw(Error);
00113     ~RCReader();
00114 
00115     // File I/O methods
00116     bool write_rc_file(const string &pathname);
00117     bool read_rc_file(const string &pathname);
00118 
00119     // Look for the RC file
00120     string check_env_var(const string &variable_name);
00121     string check_string(string env_var);
00122 
00123     static void initialize_instance();
00124     static void delete_instance();
00125 
00126     friend class RCReaderTest;
00127     friend class HTTPConnectTest;
00128 
00129 public:
00130     static RCReader* instance();
00131 
00132     // GET METHODS
00133     const string get_dods_cache_root()
00134     {
00135         return d_cache_root;
00136     }
00137     const bool get_use_cache() throw()
00138     {
00139         return _dods_use_cache;
00140     }
00141     const int get_max_cache_size()  throw()
00142     {
00143         return _dods_cache_max;
00144     }
00145     const unsigned int get_max_cached_obj() throw()
00146     {
00147         return _dods_cached_obj;
00148     }
00149     const int get_ignore_expires() throw()
00150     {
00151         return _dods_ign_expires;
00152     }
00153     const int get_default_expires() throw()
00154     {
00155         return _dods_default_expires;
00156     }
00157     const int get_always_validate() throw()
00158     {
00159         return _dods_always_validate;
00160     }
00161     int get_validate_ssl() const throw()
00162     {
00163         return d_validate_ssl;
00164     }
00165 
00166     const bool get_deflate() throw()
00167     {
00168         return _dods_deflate;
00169     }
00170 
00172     const string get_proxy_server_protocol() throw()
00173     {
00174         return d_dods_proxy_server_protocol;
00175     }
00177     const string get_proxy_server_host() throw()
00178     {
00179         return d_dods_proxy_server_host;
00180     }
00182     const int get_proxy_server_port() throw()
00183     {
00184         return d_dods_proxy_server_port;
00185     }
00187     const string get_proxy_server_userpw() throw()
00188     {
00189         return d_dods_proxy_server_userpw;
00190     }
00192     const string get_proxy_server_host_url()  throw()
00193     {
00194         return (d_dods_proxy_server_userpw.empty() ? "" : d_dods_proxy_server_userpw + "@")
00195                + d_dods_proxy_server_host
00196                + ":" + long_to_string(d_dods_proxy_server_port);
00197     }
00198 
00199     // The whole regex/proxy-for implementation needs reworking. We really
00200     // need a vector of structs which hold the information on a set of regexes
00201     // and matching proxies. Then in the code that derefs a URL, we should
00202     // check to see if the URL matches any of the regexs, et cetera. I'm
00203     // going to disable the entire feature and see if anyone complains. If
00204     // they do, we can fix it. If not, one less thing to do... 06/17/04 jhrg
00206     bool is_proxy_for_used() throw()
00207     {
00208         return _dods_proxy_for;
00209     }
00211     const string get_proxy_for_regexp() throw()
00212     {
00213         return _dods_proxy_for_regexp;
00214     }
00216     const string get_proxy_for_proxy_host_url() throw()
00217     {
00218         return _dods_proxy_for_proxy_host_url;
00219     }
00220 
00222     const int get_proxy_for_regexp_flags() throw()
00223     {
00224         return _dods_proxy_for_regexp_flags;
00225     }
00226 
00227     // The whole no_proxy implementation also needs a rewrite. However, it is
00228     // useful as it is since the user can give a domain and there's often a
00229     // real need for suppressing proxy access for the local domain. The
00230     // ..._port() method is bogus, however, so it is deprecated. There's no
00231     // code that uses it. 06/17/04 jhrg
00232     bool is_no_proxy_for_used() throw()
00233     {
00234         return d_dods_no_proxy_for;
00235     }
00236     const string get_no_proxy_for_protocol() throw()
00237     {
00238         return d_dods_no_proxy_for_protocol;
00239     }
00240     const string get_no_proxy_for_host() throw()
00241     {
00242         return d_dods_no_proxy_for_host;
00243     }
00244 
00246     const int    get_no_proxy_for_port() throw()
00247     {
00248         return _dods_no_proxy_for_port;
00249     }
00250 
00251     string get_ais_database() const throw()
00252     {
00253         return d_ais_database;
00254     }
00255 
00256     // SET METHODS
00257     void set_use_cache(bool b) throw()
00258     {
00259         _dods_use_cache = b;
00260     }
00261     void set_max_cache_size(int i) throw()
00262     {
00263         _dods_cache_max = i;
00264     }
00265     void set_max_cached_obj(int i) throw()
00266     {
00267         _dods_cached_obj = i;
00268     }
00269     void set_ignore_expires(int i) throw()
00270     {
00271         _dods_ign_expires = i;
00272     }
00273     void set_default_expires(int i) throw()
00274     {
00275         _dods_default_expires = i;
00276     }
00277     void set_always_validate(int i) throw()
00278     {
00279         _dods_always_validate = i;
00280     }
00281     void set_validate_ssl(int i) throw()
00282     {
00283         d_validate_ssl = i;
00284     }
00285 
00286     void set_deflate(bool b) throw()
00287     {
00288         _dods_deflate = b;
00289     }
00290 
00291     void set_proxy_server_protocol(const string &s) throw()
00292     {
00293         d_dods_proxy_server_protocol = s;
00294     }
00295     void set_proxy_server_host(const string &s) throw()
00296     {
00297         d_dods_proxy_server_host = s;
00298     }
00299     void set_proxy_server_port(int l) throw()
00300     {
00301         d_dods_proxy_server_port = l;
00302     }
00303     void set_proxy_server_userpw(const string &s) throw()
00304     {
00305         d_dods_proxy_server_userpw = s;
00306     }
00307 
00309     void set_proxy_server_host_url(const string &s) throw()
00310     {
00311         _dods_proxy_server_host_url = s;
00312     }
00313 
00315     void set_proxy_for_regexp(const string &s) throw()
00316     {
00317         _dods_proxy_for_regexp = s;
00318     }
00320     void set_proxy_for_proxy_host_url(const string &s) throw()
00321     {
00322         _dods_proxy_for_proxy_host_url = s;
00323     }
00325     void set_proxy_for_regexp_flags(int i) throw()
00326     {
00327         _dods_proxy_for_regexp_flags = i;
00328     }
00329 
00330     void set_no_proxy_for_protocol(const string &s) throw()
00331     {
00332         d_dods_no_proxy_for_protocol = s;
00333     }
00334     void set_no_proxy_for_host(const string &s) throw()
00335     {
00336         d_dods_no_proxy_for_host = s;
00337     }
00338 
00340     void set_no_proxy_for_port(int i) throw()
00341     {
00342         _dods_no_proxy_for_port = i;
00343     }
00344 
00345     void set_ais_database(const string &db) throw()
00346     {
00347         d_ais_database = db;
00348     }
00349 };
00350 
00351 } // namespace libdap
00352 
00353 #endif // _RCReader_h_

Generated on Tue Jun 10 18:00:31 2008 for libdap++ by  doxygen 1.5.4