libdap++  Updated for version 3.8.2
libdap::ResponseBuilder Class Reference

Build responses for Hyrax server modules/handlers. More...

#include <ResponseBuilder.h>

Collaboration diagram for libdap::ResponseBuilder:
Collaboration graph

Public Member Functions

virtual void dataset_constraint (ostream &out, DDS &dds, ConstraintEvaluator &eval, bool ce_eval=true) const
 
virtual void dataset_constraint_ddx (ostream &out, DDS &dds, ConstraintEvaluator &eval, const string &boundary, const string &start, bool ce_eval=true) const
 
virtual void establish_timeout (ostream &stream) const
 
virtual string get_ce () const
 Get the constraint expression. More...
 
virtual string get_dataset_name () const
 Get the dataset name. More...
 
int get_timeout () const
 
 ResponseBuilder ()
 
virtual void send_das (ostream &out, DAS &das, bool with_mime_headers=true) const
 Transmit a DAS. More...
 
virtual void send_data (ostream &data_stream, DDS &dds, ConstraintEvaluator &eval, bool with_mime_headers=true) const
 Transmit data. More...
 
virtual void send_data_ddx (ostream &data_stream, DDS &dds, ConstraintEvaluator &eval, const string &start, const string &boundary, bool with_mime_headers=true) const
 Transmit data. More...
 
virtual void send_dds (ostream &out, DDS &dds, ConstraintEvaluator &eval, bool constrained=false, bool with_mime_headers=true) const
 Transmit a DDS. More...
 
virtual void send_ddx (ostream &out, DDS &dds, ConstraintEvaluator &eval, bool with_mime_headers=true) const
 
virtual void set_ce (string _ce)
 
virtual void set_dataset_name (const string _dataset)
 
void set_mime_binary (ostream &out, ObjectType type=unknown_type, EncodingType enc=x_plain, const time_t last_modified=0, const string &protocol="") const
 
void set_mime_data_boundary (ostream &out, const string &boundary, const string &cid, ObjectType type=unknown_type, EncodingType enc=x_plain) const
 
void set_mime_ddx_boundary (ostream &out, const string &boundary, const string &start, ObjectType type=unknown_type, EncodingType enc=x_plain) const
 
void set_mime_error (ostream &out, int code=404, const string &reason="Dataset not found", const string &protocol="") const
 
void set_mime_html (ostream &out, ObjectType type=unknown_type, EncodingType enc=x_plain, const time_t last_modified=0, const string &protocol="") const
 
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
 
void set_mime_text (ostream &out, ObjectType type=unknown_type, EncodingType enc=x_plain, const time_t last_modified=0, const string &protocol="") const
 
void set_timeout (int timeout=0)
 
virtual ~ResponseBuilder ()
 

Protected Member Functions

void initialize ()
 Version string for the library's default protocol version. More...
 

Protected Attributes

string d_ce
 Name of the dataset/database. More...
 
string d_dataset
 
string d_default_protocol
 Response timeout after N seconds. More...
 
int d_timeout
 Constraint expression. More...
 

Friends

class ResponseBuilderTest
 

Detailed Description

Author
jhrg 1/28/2011

Definition at line 60 of file ResponseBuilder.h.

Constructor & Destructor Documentation

libdap::ResponseBuilder::ResponseBuilder ( )
inline

Make an empty instance. Use the set_*() methods to load with needed values. You must call at least set_dataset_name() or be requesting version information.

Definition at line 82 of file ResponseBuilder.h.

References initialize().

Here is the call graph for this function:

libdap::ResponseBuilder::~ResponseBuilder ( )
virtual

Definition at line 66 of file ResponseBuilder.cc.

Member Function Documentation

void libdap::ResponseBuilder::dataset_constraint ( ostream &  out,
DDS dds,
ConstraintEvaluator eval,
bool  ce_eval = true 
) const
virtual

Definition at line 306 of file ResponseBuilder.cc.

References DBG, libdap::DDS::print_constrained(), libdap::DDS::var_begin(), and libdap::DDS::var_end().

Here is the call graph for this function:

void libdap::ResponseBuilder::dataset_constraint_ddx ( ostream &  out,
DDS dds,
ConstraintEvaluator eval,
const string &  boundary,
const string &  start,
bool  ce_eval = true 
) const
virtual
void libdap::ResponseBuilder::establish_timeout ( ostream &  stream) const
virtual

Use values of this instance to establish a timeout alarm for the server. If the timeout value is zero, do nothing.

Todo:
When the alarm handler is called, two CRLF pairs are dumped to the stream and then an Error object is sent. No attempt is made to write the 'correct' MIME headers for an Error object. Instead, a savvy client will know that when an exception is thrown during a deserialize operation, it should scan ahead in the input stream for an Error object. Add this, or a sensible variant once libdap++ supports reliable error delivery. Dumb clients will never get the Error object...

Definition at line 237 of file ResponseBuilder.cc.

References libdap::SignalHandler::register_handler().

Here is the call graph for this function:

string libdap::ResponseBuilder::get_ce ( ) const
virtual

Return the entire constraint expression in a string. This includes both the projection and selection clauses, but not the question mark.

Returns
A string object that contains the constraint expression.

Definition at line 152 of file ResponseBuilder.cc.

string libdap::ResponseBuilder::get_dataset_name ( ) const
virtual

The ``dataset name'' is the filename or other string that the filter program will use to access the data. In some cases this will indicate a disk file containing the data. In others, it may represent a database query or some other exotic data access method.

Returns
A string object that contains the name of the dataset.

Definition at line 202 of file ResponseBuilder.cc.

int libdap::ResponseBuilder::get_timeout ( ) const

Get the server's timeout value.

Definition at line 222 of file ResponseBuilder.cc.

void libdap::ResponseBuilder::initialize ( )
protected

Called when initializing a ResponseBuilder that's not going to be passed a command line arguments.

Definition at line 72 of file ResponseBuilder.cc.

References DAP_PROTOCOL_VERSION.

Referenced by ResponseBuilder().

void libdap::ResponseBuilder::send_das ( ostream &  out,
DAS das,
bool  with_mime_headers = true 
) const
virtual

This function formats and prints an ASCII representation of a DAS on stdout. This has the effect of sending the DAS object back to the client program.

Parameters
outThe output stream to which the DAS is to be sent.
dasThe DAS object to be sent.
anc_locationThe directory in which the external DAS file resides.
with_mime_headersIf true (the default) send MIME headers.
Returns
void
See also
DAS

Definition at line 260 of file ResponseBuilder.cc.

References libdap::dods_das, libdap::last_modified_time(), libdap::DAS::print(), libdap::set_mime_text(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::send_data ( ostream &  data_stream,
DDS dds,
ConstraintEvaluator eval,
bool  with_mime_headers = true 
) const
virtual

Send the data in the DDS object back to the client program. The data is encoded using a Marshaller, and enclosed in a MIME document which is all sent to data_stream. If this is being called from a CGI, data_stream is probably stdout and writing to it has the effect of sending the response back to the client.

Parameters
ddsA DDS object containing the data to be sent.
evalA reference to the ConstraintEvaluator to use.
data_streamWrite the response to this stream.
anc_locationA directory to search for ancillary files (in addition to the CWD). This is used in a call to get_data_last_modified_time().
with_mime_headersIf true, include the MIME headers in the response. Defaults to true.
Returns
void

Definition at line 384 of file ResponseBuilder.cc.

References libdap::dods_data, libdap::ConstraintEvaluator::eval_function_clauses(), libdap::ConstraintEvaluator::function_clauses(), libdap::DDS::get_dap_version(), libdap::last_modified_time(), libdap::ConstraintEvaluator::parse_constraint(), libdap::set_mime_binary(), libdap::DDS::set_timeout(), libdap::DDS::tag_nested_sequences(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::send_data_ddx ( ostream &  data_stream,
DDS dds,
ConstraintEvaluator eval,
const string &  start,
const string &  boundary,
bool  with_mime_headers = true 
) const
virtual

Send the data in the DDS object back to the client program. The data is encoded using a Marshaller, and enclosed in a MIME document which is all sent to data_stream. If this is being called from a CGI, data_stream is probably stdout and writing to it has the effect of sending the response back to the client.

Parameters
ddsA DDS object containing the data to be sent.
evalA reference to the ConstraintEvaluator to use.
data_streamWrite the response to this stream.
anc_locationA directory to search for ancillary files (in addition to the CWD). This is used in a call to get_data_last_modified_time().
with_mime_headersIf true, include the MIME headers in the response. Defaults to true.
Returns
void

Definition at line 457 of file ResponseBuilder.cc.

References CRLF, libdap::dap4_data_ddx, libdap::ConstraintEvaluator::eval_function_clauses(), libdap::ConstraintEvaluator::function_clauses(), libdap::last_modified_time(), libdap::ConstraintEvaluator::parse_constraint(), libdap::set_mime_multipart(), libdap::DDS::set_timeout(), libdap::DDS::tag_nested_sequences(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::send_dds ( ostream &  out,
DDS dds,
ConstraintEvaluator eval,
bool  constrained = false,
bool  with_mime_headers = true 
) const
virtual

This function formats and prints an ASCII representation of a DDS on stdout. When called by a CGI program, this has the effect of sending a DDS object back to the client program. Either an entire DDS or a constrained DDS may be sent.

Parameters
outThe output stream to which the DAS is to be sent.
ddsThe DDS to send back to a client.
evalA reference to the ConstraintEvaluator to use.
constrainedIf this argument is true, evaluate the current constraint expression and send the `constrained DDS' back to the client.
anc_locationThe directory in which the external DAS file resides.
with_mime_headersIf true (the default) send MIME headers.
Returns
void
See also
DDS

Definition at line 285 of file ResponseBuilder.cc.

References libdap::dods_dds, libdap::ConstraintEvaluator::functional_expression(), libdap::DDS::get_dap_version(), libdap::last_modified_time(), libdap::ConstraintEvaluator::parse_constraint(), libdap::DDS::print(), libdap::DDS::print_constrained(), libdap::set_mime_text(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::send_ddx ( ostream &  out,
DDS dds,
ConstraintEvaluator eval,
bool  with_mime_headers = true 
) const
virtual

Send the DDX response. The DDX never contains data, instead it holds a reference to a Blob response which is used to get the data values. The DDS and DAS objects are built using code that already exists in the servers.

Parameters
ddsThe dataset's DDS with attributes in the variables.
evalA reference to the ConstraintEvaluator to use.
outDestination
with_mime_headersIf true, include the MIME headers in the response. Defaults to true.

Definition at line 426 of file ResponseBuilder.cc.

References libdap::dap4_ddx, libdap::ConstraintEvaluator::functional_expression(), libdap::DDS::get_dap_version(), libdap::last_modified_time(), libdap::ConstraintEvaluator::parse_constraint(), libdap::DDS::print_xml(), libdap::set_mime_text(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::set_ce ( string  _ce)
virtual

Definition at line 157 of file ResponseBuilder.cc.

References libdap::www2id().

Here is the call graph for this function:

void libdap::ResponseBuilder::set_dataset_name ( const string  _dataset)
virtual

Definition at line 207 of file ResponseBuilder.cc.

References libdap::www2id().

Here is the call graph for this function:

void libdap::ResponseBuilder::set_mime_binary ( ostream &  strm,
ObjectType  type = unknown_type,
EncodingType  enc = x_plain,
const time_t  last_modified = 0,
const string &  protocol = "" 
) const

Write an HTTP 1.0 response header for our binary response document (i.e., the DataDDS object).

Parameters
strmWrite the MIME header to this stream.
typeThe type of this this response. Defaults to application/octet-stream.
verThe version string; denotes the libdap implementation version.
encHow is this response encoded? Can be plain or deflate or the x_... versions of those. Default is x_plain.
last_modifiedThe time to use for the Last-Modified header value. Default is zero which means use the current time.

Definition at line 608 of file ResponseBuilder.cc.

References CRLF, DVR, libdap::rfc822_date(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::set_mime_data_boundary ( ostream &  out,
const string &  boundary,
const string &  cid,
ObjectType  type = unknown_type,
EncodingType  enc = x_plain 
) const

Definition at line 684 of file ResponseBuilder.cc.

References CRLF, and libdap::x_plain.

void libdap::ResponseBuilder::set_mime_ddx_boundary ( ostream &  out,
const string &  boundary,
const string &  start,
ObjectType  type = unknown_type,
EncodingType  enc = x_plain 
) const

Definition at line 671 of file ResponseBuilder.cc.

References CRLF, and libdap::x_plain.

void libdap::ResponseBuilder::set_mime_error ( ostream &  strm,
int  code = 404,
const string &  reason = "Dataset not found",
const string &  protocol = "" 
) const

Generate an HTTP 1.0 response header for an Error object.

Parameters
strmWrite the MIME header to this stream.
codeHTTP 1.0 response code. Should be 400, ... 500, ...
reasonReason string of the HTTP 1.0 response header.
versionThe version string; denotes the DAP spec and implementation version.

Definition at line 703 of file ResponseBuilder.cc.

References CRLF, DVR, and libdap::rfc822_date().

Here is the call graph for this function:

void libdap::ResponseBuilder::set_mime_html ( ostream &  strm,
ObjectType  type = unknown_type,
EncodingType  enc = x_plain,
const time_t  last_modified = 0,
const string &  protocol = "" 
) const

Generate an HTTP 1.0 response header for a html document.

Parameters
strmWrite the MIME header to this stream.
typeThe type of this this response.
verThe version string; denotes the libdap implementation version.
encHow is this response encoded? Can be plain or deflate or the x_... versions of those. Default is x_plain.
last_modifiedThe time to use for the Last-Modified header value. Default is zero which means use the current time.

Definition at line 560 of file ResponseBuilder.cc.

References CRLF, libdap::dods_error, DVR, libdap::rfc822_date(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::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

Definition at line 639 of file ResponseBuilder.cc.

References CRLF, DVR, libdap::rfc822_date(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::set_mime_text ( ostream &  strm,
ObjectType  type = unknown_type,
EncodingType  enc = x_plain,
const time_t  last_modified = 0,
const string &  protocol = "" 
) const

Generate an HTTP 1.0 response header for a text document. This is used when returning a serialized DAS or DDS object.

Parameters
strmWrite the MIME header to this stream.
typeThe type of this this response. Defaults to application/octet-stream.
verThe version string; denotes the libdap implementation version.
encHow is this response encoded? Can be plain or deflate or the x_... versions of those. Default is x_plain.
last_modifiedThe time to use for the Last-Modified header value. Default is zero which means use the current time.

Definition at line 510 of file ResponseBuilder.cc.

References CRLF, libdap::dap4_ddx, libdap::dods_error, DVR, libdap::rfc822_date(), and libdap::x_plain.

Here is the call graph for this function:

void libdap::ResponseBuilder::set_timeout ( int  t = 0)

Set the server's timeout value. A value of zero (the default) means no timeout.

Parameters
tServer timeout in seconds. Default is zero (no timeout).

Definition at line 216 of file ResponseBuilder.cc.

Friends And Related Function Documentation

friend class ResponseBuilderTest
friend

Definition at line 63 of file ResponseBuilder.h.

Member Data Documentation

string libdap::ResponseBuilder::d_ce
protected

Definition at line 67 of file ResponseBuilder.h.

string libdap::ResponseBuilder::d_dataset
protected

Definition at line 66 of file ResponseBuilder.h.

string libdap::ResponseBuilder::d_default_protocol
protected

Definition at line 69 of file ResponseBuilder.h.

int libdap::ResponseBuilder::d_timeout
protected

Definition at line 68 of file ResponseBuilder.h.


The documentation for this class was generated from the following files: