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
00027
00028
00029
00030
00031
00032 #ifndef _dodsfilter_h
00033 #define _dodsfilter_h
00034
00035
00036 #include <stdio.h>
00037 #include <sys/types.h>
00038 #include <sys/stat.h>
00039
00040 #include <string>
00041
00042 #ifndef _das_h
00043 #include "DAS.h"
00044 #endif
00045
00046 #ifndef _dds_h
00047 #include "DDS.h"
00048 #endif
00049
00050 #ifndef constraint_evaluator_h
00051 #include "ConstraintEvaluator.h"
00052 #endif
00053
00080 class DODSFilter
00081 {
00082 public:
00084 enum Response {
00085 Unknown_Response,
00086 DAS_Response,
00087 DDS_Response,
00088 DataDDS_Response,
00089 DDX_Response,
00090 BLOB_Response,
00091 Version_Response
00092 };
00093
00094 protected:
00095 bool d_comp;
00096 bool d_bad_options;
00097 bool d_conditional_request;
00098
00099 string d_program_name;
00100 string d_dataset;
00101 string d_ce;
00102 string d_cgi_ver;
00103 string d_anc_dir;
00104 string d_anc_file;
00105 string d_cache_dir;
00106 string d_url;
00107
00108 Response d_response;
00109 string d_action;
00110
00111 int d_timeout;
00112
00113 time_t d_anc_das_lmt;
00114 time_t d_anc_dds_lmt;
00115 time_t d_if_modified_since;
00116
00117 void initialize();
00118 void initialize(int argc, char *argv[]);
00119
00120 virtual int process_options(int argc, char *argv[]);
00121
00122 public:
00130 DODSFilter()
00131 {
00132 initialize();
00133 }
00134 DODSFilter(int argc, char *argv[]) throw(Error);
00135
00136 virtual ~DODSFilter();
00137
00138 virtual bool is_conditional() const;
00139
00140 virtual string get_cgi_version() const;
00141 virtual void set_cgi_version(string version);
00142
00143 virtual string get_ce() const;
00144 virtual void set_ce(string _ce);
00145
00146 virtual string get_dataset_name() const;
00147 virtual void set_dataset_name(const string _dataset);
00148
00149 virtual string get_URL() const;
00150 virtual void set_URL(const string &url);
00151
00152 virtual string get_dataset_version() const;
00153
00154 virtual Response get_response() const;
00155 virtual string get_action() const;
00156 virtual void set_response(const string &r);
00157
00158 virtual time_t get_dataset_last_modified_time() const;
00159
00160 virtual time_t get_das_last_modified_time(const string &anc_location = "") const;
00161
00162 virtual time_t get_dds_last_modified_time(const string &anc_location = "") const;
00163
00164 virtual time_t get_data_last_modified_time(const string &anc_location = "") const;
00165
00166 virtual time_t get_request_if_modified_since() const;
00167
00168 virtual string get_cache_dir() const;
00169
00170 void set_timeout(int timeout = 0);
00171
00172 int get_timeout() const;
00173
00174 virtual void establish_timeout(FILE *stream) const;
00175 virtual void establish_timeout(ostream &stream) const;
00176
00177 virtual void read_ancillary_das(DAS &das, const string &anc_location = "") const;
00178
00179 virtual void read_ancillary_dds(DDS &dds, const string &anc_location = "") const;
00180
00181 virtual void print_usage() const;
00182
00183 virtual void send_version_info() const;
00184
00185 virtual void send_das(DAS &das, const string &anc_location = "",
00186 bool with_mime_headers = true) const;
00187 virtual void send_das(FILE *out, DAS &das, const string &anc_location = "",
00188 bool with_mime_headers = true) const;
00189 virtual void send_das(ostream &out, DAS &das, const string &anc_location = "",
00190 bool with_mime_headers = true) const;
00191
00192 virtual void send_dds(DDS &dds, ConstraintEvaluator &eval,
00193 bool constrained = false,
00194 const string &anc_location = "",
00195 bool with_mime_headers = true) const;
00196 virtual void send_dds(FILE *out, DDS &dds, ConstraintEvaluator &eval,
00197 bool constrained = false,
00198 const string &anc_location = "",
00199 bool with_mime_headers = true) const;
00200 virtual void send_dds(ostream &out, DDS &dds, ConstraintEvaluator &eval,
00201 bool constrained = false,
00202 const string &anc_location = "",
00203 bool with_mime_headers = true) const;
00204
00205 virtual void functional_constraint(BaseType &var, DDS &dds,
00206 ConstraintEvaluator &eval, FILE *out) const;
00207 virtual void functional_constraint(BaseType &var, DDS &dds,
00208 ConstraintEvaluator &eval, ostream &out) const;
00209 virtual void dataset_constraint(DDS &dds, ConstraintEvaluator &eval,
00210 FILE *out) const;
00211 virtual void dataset_constraint(DDS &dds, ConstraintEvaluator &eval,
00212 ostream &out) const;
00213
00214 virtual void send_data(DDS &dds, ConstraintEvaluator &eval,
00215 FILE *data_stream,
00216 const string &anc_location = "",
00217 bool with_mime_headers = true) const;
00218 virtual void send_data(DDS &dds, ConstraintEvaluator &eval,
00219 ostream &data_stream,
00220 const string &anc_location = "",
00221 bool with_mime_headers = true) const;
00222
00223 virtual void send_ddx(DDS &dds, ConstraintEvaluator &eval, FILE *out,
00224 bool with_mime_headers = true) const;
00225 virtual void send_ddx(DDS &dds, ConstraintEvaluator &eval, ostream &out,
00226 bool with_mime_headers = true) const;
00227
00228
00229 virtual void send_blob(DDS &dds, FILE *out, bool with_mime_headers = true);
00230 };
00231
00232 #endif // _dodsfilter_h