libdap Updated for version 3.21.1
libdap4 is an implementation of OPeNDAP's DAP protocol.
D4ResponseBuilder.h
Go to the documentation of this file.
1
2// -*- mode: c++; c-basic-offset:4 -*-
3
4// This file is part of libdap, A C++ implementation of the OPeNDAP Data
5// Access Protocol.
6
7// Copyright (c) 2013 OPeNDAP, Inc.
8// Author: James Gallagher <jgallagher@opendap.org>
9//
10// This library is free software; you can redistribute it and/or
11// modify it under the terms of the GNU Lesser General Public
12// License as published by the Free Software Foundation; either
13// version 2.1 of the License, or (at your option) any later version.
14//
15// This library is distributed in the hope that it will be useful,
16// but WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18// Lesser General Public License for more details.
19//
20// You should have received a copy of the GNU Lesser General Public
21// License along with this library; if not, write to the Free Software
22// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23//
24// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25
26#ifndef _d4response_builder_h
27#define _d4response_builder_h
28
29#include <string>
30#include <set>
31
32#if 0
33#ifndef _das_h
34#include "DAS.h"
35#endif
36
37#ifndef _dds_h
38#include "DDS.h"
39#endif
40#endif
41
42#ifndef constraint_evaluator_h
43#include "ConstraintEvaluator.h"
44#endif
45
46#ifndef _object_type_h
47#include "ObjectType.h"
48#endif
49
50#ifndef _encodingtype_h
51#include "EncodingType.h"
52#endif
53
54#include "escaping.h"
55
56namespace libdap
57{
58
59class DAPCache3;
60
67
69{
70public:
71 friend class ResponseBuilderTest;
72
73protected:
74 string d_dataset;
75 string d_ce;
79
81
82 void initialize();
83
84public:
85
92
93 virtual ~D4ResponseBuilder();
94
96 virtual string ce() const { return d_ce; }
98 virtual void set_ce(const string &ce) { d_ce = www2id(ce, "%", "%20"); }
99
100 virtual string get_btp_func_ce() const { return d_btp_func_ce; }
101 virtual void set_btp_func_ce(string _ce) { d_btp_func_ce = _ce; }
102
104 virtual string dataset_name() const { return d_dataset; }
106 virtual void set_dataset_name(const string &ds) { d_dataset = www2id(ds, "%", "%20"); }
107
109 void set_timeout(int t = 0) { d_timeout = t; }
111 int timeout() const { return d_timeout; }
112
113 virtual void establish_timeout(ostream &stream) const;
114 virtual void remove_timeout() const;
115
116 virtual void split_ce(ConstraintEvaluator &eval, const string &expr = "");
117 virtual bool is_valid(const string &cache_file_name);
118#if 0
119 virtual void send_das(ostream &out, DAS &das, bool with_mime_headers = true) const;
120 virtual void send_das(ostream &out, DDS &dds, ConstraintEvaluator &eval,
121 bool constrained = false, bool with_mime_headers = true);
122#endif
123 virtual void send_dds(ostream &out, DDS &dds, ConstraintEvaluator &eval,
124 bool constrained = false, bool with_mime_headers = true);
125
126 virtual void dataset_constraint(ostream &out, DDS &dds, ConstraintEvaluator &eval, bool ce_eval = true);
127 virtual void send_data(ostream &data_stream, DDS &dds, ConstraintEvaluator &eval, bool with_mime_headers = true);
128
129 virtual void send_ddx(ostream &out, DDS &dds, ConstraintEvaluator &eval,
130 bool with_mime_headers = true);
131
132 virtual void dataset_constraint_ddx(ostream &out, DDS & dds, ConstraintEvaluator & eval,
133 const string &boundary, const string &start,
134 bool ce_eval = true);
135
136 virtual void send_data_ddx(ostream &data_stream, DDS &dds, ConstraintEvaluator &eval,
137 const string &start, const string &boundary,
138 bool with_mime_headers = true);
139
140#ifdef DAP4
141 // DAP4 responses - but do not send the response MIME headers, just the
142 // response body.
143 virtual void send_dmr(ostream &out, DDS &dds, ConstraintEvaluator &eval);
144#endif // DAP4
145
146 virtual void cache_data_ddx(const string &cache_file_name, DDS &dds);
147 virtual void read_data_from_cache(FILE *data, DDS *fdds);
148 virtual DDS *get_cached_data_ddx(const string &cache_file_name, BaseTypeFactory *factory);
149
150 // This method is uses the above three and is used by send_das(), send_dds(), and send_data().
151 virtual DDS *read_cached_dataset(DDS &dds, ConstraintEvaluator & eval, string &cache_token);
152
153#ifdef DAP4
154 // These functions are used both by the methods above and by other code
155
156 virtual void send_dap4_data(ostream &data_stream, DDS &dds, ConstraintEvaluator &eval);
157#endif // DAP4
158
159 void set_mime_ddx_boundary(ostream &out, const string &boundary,
160 const string &start) const;
161
162 void set_mime_data_boundary(ostream &out, const string &boundary,
163 const string &cid, const string &endian, unsigned long long len) const;
164
165 // These functions are used both by the methods above and by other code.
166 // However, Hyrax uses the OLFS to send the HTTP headers, so these functions
167 // are never used in Hyrax. The BES may uses these in other contexts.
168
170 EncodingType enc = x_plain,
171 const time_t last_modified = 0,
172 const string &protocol = "") const;
173
175 EncodingType enc = x_plain,
176 const time_t last_modified = 0,
177 const string &protocol = "") const;
178
180 EncodingType enc = x_plain,
181 const time_t last_modified = 0,
182 const string &protocol = "") const;
183
184 void set_mime_multipart(ostream &out, const string &boundary,
185 const string &start, ObjectType type = unknown_type, EncodingType enc = x_plain,
186 const time_t last_modified = 0, const string &protocol = "",
187 const string &url = "") const;
188
189 void set_mime_error(ostream &out, int code = 404,
190 const string &reason = "Dataset not found",
191 const string &protocol = "") const;
192};
193
194} // namespace libdap
195
196#endif // _response_builder_h
Evaluate a constraint expression.
void set_mime_ddx_boundary(ostream &out, const string &boundary, const string &start) const
virtual void cache_data_ddx(const string &cache_file_name, DDS &dds)
Cache data.
virtual void set_ce(const string &ce)
string d_btp_func_ce
Constraint expression.
int d_timeout
The BTP functions, extracted from the CE.
virtual string get_btp_func_ce() const
string d_default_protocol
Response timeout after N seconds.
virtual string ce() const
void set_mime_binary(ostream &out, ObjectType type=unknown_type, EncodingType enc=x_plain, const time_t last_modified=0, const string &protocol="") const
virtual bool is_valid(const string &cache_file_name)
virtual void dataset_constraint_ddx(ostream &out, DDS &dds, ConstraintEvaluator &eval, const string &boundary, const string &start, bool ce_eval=true)
virtual void remove_timeout() const
void set_mime_data_boundary(ostream &out, const string &boundary, const string &cid, const string &endian, unsigned long long len) const
virtual void send_data(ostream &data_stream, DDS &dds, ConstraintEvaluator &eval, bool with_mime_headers=true)
Transmit data.
virtual void set_btp_func_ce(string _ce)
void set_mime_error(ostream &out, int code=404, const string &reason="Dataset not found", const string &protocol="") const
virtual string dataset_name() const
virtual void establish_timeout(ostream &stream) const
virtual DDS * read_cached_dataset(DDS &dds, ConstraintEvaluator &eval, string &cache_token)
void set_mime_html(ostream &out, ObjectType type=unknown_type, EncodingType enc=x_plain, const time_t last_modified=0, const string &protocol="") const
virtual void split_ce(ConstraintEvaluator &eval, const string &expr="")
string d_ce
Name of the dataset/database.
void set_mime_text(ostream &out, ObjectType type=unknown_type, EncodingType enc=x_plain, const time_t last_modified=0, const string &protocol="") const
virtual void send_data_ddx(ostream &data_stream, DDS &dds, ConstraintEvaluator &eval, const string &start, const string &boundary, bool with_mime_headers=true)
Transmit data.
virtual void send_ddx(ostream &out, DDS &dds, ConstraintEvaluator &eval, bool with_mime_headers=true)
virtual DDS * get_cached_data_ddx(const string &cache_file_name, BaseTypeFactory *factory)
virtual void dataset_constraint(ostream &out, DDS &dds, ConstraintEvaluator &eval, bool ce_eval=true)
virtual void set_dataset_name(const string &ds)
virtual void send_dds(ostream &out, DDS &dds, ConstraintEvaluator &eval, bool constrained=false, bool with_mime_headers=true)
Transmit a DDS.
DAPCache3 * d_cache
Version string for the library's default protocol version.
void set_mime_multipart(ostream &out, const string &boundary, const string &start, ObjectType type=unknown_type, EncodingType enc=x_plain, const time_t last_modified=0, const string &protocol="", const string &url="") const
virtual void read_data_from_cache(FILE *data, DDS *fdds)
Implementation of a caching mechanism for compressed data. This cache uses simple advisory locking fo...
Definition DAPCache3.h:82
Hold attribute data for a DAP2 dataset.
Definition DAS.h:119
STL class.
top level DAP object to house generic methods
Definition AISConnect.cc:30
string www2id(const string &in, const string &escape, const string &except)
Definition escaping.cc:202
EncodingType
The type of encoding used on the current stream.
ObjectType
The type of object in the stream coming from the data server.
Definition ObjectType.h:57
@ unknown_type
Definition ObjectType.h:58