Blame README

Packit a4aae4
Updated for version 3.19.1
Packit a4aae4
Packit a4aae4
Bug fixes; See the ChangeLog and NEWS files.
Packit a4aae4
Packit a4aae4
Updated for version 3.18.3
Packit a4aae4
Packit a4aae4
Bug fixes; See the ChangeLog and NEWS files.
Packit a4aae4
Packit a4aae4
Updated for version 3.18.2
Packit a4aae4
Packit a4aae4
Added support for DAP4 filter operations.
Packit a4aae4
Packit a4aae4
For other information, see NEWS and ChangeLog
Packit a4aae4
Packit a4aae4
Updated for 3.16.0
Packit a4aae4
Packit a4aae4
libdap now supports parallel I/O for certain data write operations,
Packit a4aae4
mostly those involving larger amounts of data - Marshaller::put_vector
Packit a4aae4
and put_vector_part. The behavior can be 'turned off' by #undef the
Packit a4aae4
symbol USE_POSIX_THREADS in the XDSStreamMarshaller classes.
Packit a4aae4
Packit a4aae4
Added to libdap is the ability to send DAP2 responses in parts, so that
Packit a4aae4
code that builds large responses from multiple reads can write a part
Packit a4aae4
that is complete and then return to work on the next part. This is
Packit a4aae4
especially beneficial for aggregations that cross many granules. The new
Packit a4aae4
method is Marshaller::put_vector_part().
Packit a4aae4
Packit a4aae4
Added to libdap is a virtual void BaseType::clear_local_data() method
Packit a4aae4
that can be used to free the memory used by a BaseType to hold data values.
Packit a4aae4
This provides a way for the object to persist in memory without holding
Packit a4aae4
onto all of its data (which can be a substantial part of the object's
Packit a4aae4
total size).
Packit a4aae4
Packit a4aae4
Updated for 3.14.0
Packit a4aae4
Packit a4aae4
Bison 3 is required to build this code.
Packit a4aae4
Packit a4aae4
Updated for 3.13.3
Packit a4aae4
Packit a4aae4
Bug fix release
Packit a4aae4
Packit a4aae4
Updated for 3.13.2
Packit a4aae4
Packit a4aae4
Bug fix release
Packit a4aae4
Packit a4aae4
Updated for 3.13.1
Packit a4aae4
Packit a4aae4
A test baseline was updated to use both the DAP2 and DAP4 version of
Packit a4aae4
the XDAP/X-DAP header. This change was likely over doing things on our
Packit a4aae4
part, but it's important to have the source releases pass all their
Packit a4aae4
tests.
Packit a4aae4
 
Packit a4aae4
Updated 3.13.0
Packit a4aae4
Packit a4aae4
Support for clang: Apple LLVM version 5.1 (clang-503.0.40) (based on
Packit a4aae4
LLVM 3.4svn) added.
Packit a4aae4
Packit a4aae4
Updated for version 3.12.1
Packit a4aae4
Packit a4aae4
Note that the documented behavior of BaseType::read() is now correctly
Packit a4aae4
implemented.
Packit a4aae4
Packit a4aae4
Updated for version 3.12.0
Packit a4aae4
Packit a4aae4
The server functions have been moved out of libdap and into their own 
Packit a4aae4
BES module. Currently this modules is part of the BES, but that will change
Packit a4aae4
in the future. This version of libdap supports building very large arrays
Packit a4aae4
made up of constant value (e.g., to be used as masks in server functions
Packit a4aae4
you write). 
Packit a4aae4
Packit a4aae4
For information on the way to make these functions, see:
Packit a4aae4
http://docs.opendap.org/index.php/Expanded_arguments_for_Constraint_Expressions 
Packit a4aae4
Note that this version of libdap requires bison 2.4. This is a change so
Packit a4aae4
the parsers can use C++ I/O streams and we can eventually drop the FILE*
Packit a4aae4
interfaces.
Packit a4aae4
Packit a4aae4
Updated for version 3.11.7
Packit a4aae4
Packit a4aae4
Minor tweak for the server function caching code: turn on or off the 
Packit a4aae4
cache by adding or removing the directory /tmp/dap_functions_cache. 
Packit a4aae4
If the directory is not present no caching of server function calls
Packit a4aae4
is done. All the other behaviors are otherwise identical.
Packit a4aae4
Packit a4aae4
Updated for version 3.11.6
Packit a4aae4
Packit a4aae4
There is a new cache for some kinds of response objects. It's size and
Packit a4aae4
location are currently fixed to 20GB bytes and 
Packit a4aae4
"/tmp/dap_functions_cache/" but these will be made BES parameters in a
Packit a4aae4
future release.
Packit a4aae4
Packit a4aae4
Updated for version 3.11.5
Packit a4aae4
Packit a4aae4
A memory leak in XDRStreamMarshaller was fixed.
Packit a4aae4
Packit a4aae4
A bug in DDS::add_var_nocopy() was fixed.
Packit a4aae4
Packit a4aae4
Updated for version 3.11.2
Packit a4aae4
Packit a4aae4
Bug fixes and improvements in the implementations of some methods.
Packit a4aae4
Packit a4aae4
Updated for version 3.11.1
Packit a4aae4
Packit a4aae4
Bug fixes only.
Packit a4aae4
Packit a4aae4
Updated for version 3.11.0
Packit a4aae4
Packit a4aae4
Now constraint expressions can have multiple function calls that return data.
Packit a4aae4
Packit a4aae4
I've bumped up the DAP version from 3.3 to 3.4 to reflect this change.
Packit a4aae4
Packit a4aae4
Updated for Version 3.10.2
Packit a4aae4
Packit a4aae4
BaseType::transfer_attributes() and related methods provide a way for
Packit a4aae4
handlers to customize how attributes from a DAS object are merged into
Packit a4aae4
a DDS.
Packit a4aae4
Packit a4aae4
In the past we supported a kind of client-side system that could augment
Packit a4aae4
the attributes call the 'AIS' (Ancillary Information System). This has
Packit a4aae4
been removed - our server now supports the NcML language to do much the same
Packit a4aae4
thing but in a way that can be set on the server once for all users. It's also
Packit a4aae4
an emerging convention that's gaining wide support within the community.
Packit a4aae4
Packit a4aae4
Updated for Version 3.10.0
Packit a4aae4
Packit a4aae4
DAP 3.3 is now supported; see http://docs.opendap.org/index.php/DAP3/4.
Packit a4aae4
Packit a4aae4
This version of libdap contains many changes that are needed for both
Packit a4aae4
DAP 4 and the NcML handler. This version of the library is required
Packit a4aae4
for the Hyrax 1.6 handlers.
Packit a4aae4
Packit a4aae4
The 'deflate' program is no longer part of this library package since
Packit a4aae4
we are no longer supporting the old data server system (based on WWW's
Packit a4aae4
CGI specification).
Packit a4aae4
Packit a4aae4
Updated for version 3.9.2
Packit a4aae4
Packit a4aae4
Now libdap supports DAP 3.2. You can read about the evolving DAP 3.x protocol
Packit a4aae4
at http://docs.opendap.org/index.php/DAP3/4. If your client sends the
Packit a4aae4
XDAP-Accept header with a value of 3.2 the DDX is different (it includes
Packit a4aae4
protocol information and also an xmlbase element).
Packit a4aae4
Packit a4aae4
Behavior change for the DAS: In the past the format handlers added double
Packit a4aae4
quotes to the values of string attributes when they added those values to the
Packit a4aae4
AttrTable object. This meant that the value of the attribute in the C++
Packit a4aae4
object was actually not correct since it contained quotes not found in the
Packit a4aae4
original attribute value. I modified libdap so that if an attribute value in
Packit a4aae4
the C++ AttrTable object does not have quotes then those quotes are added
Packit a4aae4
when the value is output in a DAS response (but not a DDX since there's no
Packit a4aae4
need to quote the value in that response). This ensures that the text in the
Packit a4aae4
DAS wire representation will parse whether a handler has added quotes or not
Packit a4aae4
(paving the way for fixed handlers). At the same time I fixed all of our
Packit a4aae4
handlers so that they no longer add the erroneous quotes. This fixes a
Packit a4aae4
problem with the DDX where the quotes were showing up as part of the
Packit a4aae4
attribute value. The change to libdap is such that a broken handler will not
Packit a4aae4
be any more broken but a fixed handler will work for both DAS and DDX
Packit a4aae4
generation.
Packit a4aae4
Packit a4aae4
If you have a handler and it's not adding quotes to the String attribute 
Packit a4aae4
values - good, don't change that! If your handler does add quotes, please
Packit a4aae4
modify it so the DDX will be correct.  
Packit a4aae4
Packit a4aae4
Our handler's old, broken, behavior can be resurrected by removing the 
Packit a4aae4
ATTR_STRING_QUOTE FIX define in the appropriate files.
Packit a4aae4
Packit a4aae4
Updated for version 3.8.2 (23 June 2008)
Packit a4aae4
Packit a4aae4
HTTP Cache and win32 installer fixes (the latter are actually in the 3.8.1
Packit a4aae4
installer for winXP). API change: The functions used to merge ancillary data
Packit a4aae4
have been moved to their own class (Ancillary).
Packit a4aae4
Packit a4aae4
Updated for version 3.8.1 (10 June 2008)
Packit a4aae4
Packit a4aae4
The syntax for PROXY_SERVER in the .dodsrc file was relaxed. See the .dodsrc
Packit a4aae4
file for more information.
Packit a4aae4
Packit a4aae4
Updated for Version 3.8.0 (29 February 2008)
Packit a4aae4
Packit a4aae4
The libdap classes and code are now inside of the libdap namespace. In order
Packit a4aae4
to access any of the classes, for example, you will need to do one of the
Packit a4aae4
following. After including the libdap headers you can:
Packit a4aae4
Packit a4aae4
1. add a using statement for the entire libdap namespace:
Packit a4aae4
Packit a4aae4
using namespace libdap ;
Packit a4aae4
Packit a4aae4
2. add a using statement for the classes that you will be using:
Packit a4aae4
Packit a4aae4
using libdap::DAS ;
Packit a4aae4
Packit a4aae4
3. inside your code scope the use of libdap classes.
Packit a4aae4
Packit a4aae4
libdap::DAS *das = code_to_get_das() ;
Packit a4aae4
Packit a4aae4
Added method to HTTPCache to return not only the FILE pointer of a cached
Packit a4aae4
response but also the name of the file in the cache, to allow for this file
Packit a4aae4
name to be passed to data handlers in the BES to be read.
Packit a4aae4
Packit a4aae4
See NEWS for more information about changes for this version and ChangeLog
Packit a4aae4
for the gory details.
Packit a4aae4
Packit a4aae4
Updated for Version 3.7.10 (28 November 2007)
Packit a4aae4
Packit a4aae4
A bug fix release. See NEWS.
Packit a4aae4
Packit a4aae4
Updated for Version 3.7.9 (13 November 2007)
Packit a4aae4
Packit a4aae4
This release is a bug fix and refactoring release. Old classes which were no
Packit a4aae4
longer used have been removed, the FILE* output methods are slated to be
Packit a4aae4
replaced with ones which will use iostream and will support a chucked
Packit a4aae4
transfer 'Marshaller,' and the transfer_data() methods have been made a
Packit a4aae4
formal part of the library, implemented for all classes, fixed and renamed to
Packit a4aae4
intern_data(). Many bugs in the library were also fixed.
Packit a4aae4
Packit a4aae4
Updated for version 3.7.8 (26 June 2007)
Packit a4aae4
Packit a4aae4
The major fixes in this version are memory errors found and fixed in the
Packit a4aae4
Regex class and HTTP header processing software. This version also supports
Packit a4aae4
pkg-config on hosts that have that installed.
Packit a4aae4
Packit a4aae4
See NEWS for more information about changes for this version and ChangeLog
Packit a4aae4
for the gory details.
Packit a4aae4
Packit a4aae4
Notes for version 3.7.7 (2 May 2007)
Packit a4aae4
Packit a4aae4
The major fix here is to the source build. We've fixed the issue where source
Packit a4aae4
builds failed to make the dapserver and dapclient libraries.
Packit a4aae4
Packit a4aae4
Notes for version 3.7.6 (12 March 2007)
Packit a4aae4
Packit a4aae4
Two bug fixes, both minor. Problems in the linear_scale() constraint
Packit a4aae4
expression function and a bad/missing #include in GNURegex.h were fixed.
Packit a4aae4
Packit a4aae4
There was an error in the INSTALL file sent out in the previous release. It
Packit a4aae4
said this library implemented DAP version 3.2, but in fact it implements
Packit a4aae4
version 3.1. The version 3.2 release will be along soon (RSN).
Packit a4aae4
Packit a4aae4
Notes for version 3.7.5 (7 Feb 2007)
Packit a4aae4
Packit a4aae4
This version includes many fixes from the first Server4 beta release
Packit a4aae4
plus fixes for the server-side functions. It also includes a smoother
Packit a4aae4
Win32 build.
Packit a4aae4
Packit a4aae4
Notes for version 3.7.4 (2 Jan 2007)
Packit a4aae4
Packit a4aae4
Release for the Server4 beta release.
Packit a4aae4
Packit a4aae4
Notes for version 3.7.3 (24 Nov 2006)
Packit a4aae4
Packit a4aae4
This version of libdap contains a beta release of the server-side functions
Packit a4aae4
geogrid(), geoarray(), linear_scale() and version(). These can be used to
Packit a4aae4
select parts of Grids and Arrays using latitude and longitude values instead
Packit a4aae4
of array position indexes. The linear_scale() function can be used to scale
Packit a4aae4
variables (including those return by other function) using 'y = mx + b'. The
Packit a4aae4
version() function can be used to find out which versions of the functions are
Packit a4aae4
installed.
Packit a4aae4
Packit a4aae4
EXAMPLES
Packit a4aae4
Packit a4aae4
To get version information use the 'version()' function. Currently, version()
Packit a4aae4
can only be called when asking for data, and you must give the name of a data
Packit a4aae4
source, although in the default version of version() the data source is not
Packit a4aae4
used. The version function takes one optional argument which may be the strings
Packit a4aae4
'help' or 'xml'. Use 'help' to get help on using the function; use 'xml' to get
Packit a4aae4
version information encoded using XML instead of plain text:
Packit a4aae4
Packit a4aae4
Packit a4aae4
[jimg@zoe libdap]$ url=http://test.opendap.org/dap/data/nc/coads_climatology.nc
Packit a4aae4
[jimg@zoe libdap]$ ./getdap -D "$url?version()"
Packit a4aae4
The data:
Packit a4aae4
String version = "Function set: version 1.0, grid 1.0, geogrid 1.0b2, 
Packit a4aae4
		          geoarray 0.9b1, linear_scale 1.0b1";
Packit a4aae4
Packit a4aae4
[jimg@zoe libdap]$ ./getdap -D "$url?version(help)"
Packit a4aae4
The data:
Packit a4aae4
String version = "Usage: version() returns plain text information about ...
Packit a4aae4
Packit a4aae4
[jimg@zoe libdap]$ ./getdap -D "$url?version(xml)"
Packit a4aae4
The data:
Packit a4aae4
String version = "
Packit a4aae4
    <functions>
Packit a4aae4
        <function name=\"version\" version=\"1.0\"/>
Packit a4aae4
        <function name=\"grid\" version=\"1.0\"/>
Packit a4aae4
        <function name=\"geogrid\" version=\"1.0\"/>
Packit a4aae4
        <function name=\"geoarray\" version=\"1.0\"/>
Packit a4aae4
        <function name=\"linear_scale\" version=\"1.0\"/>
Packit a4aae4
    </functions>";
Packit a4aae4
Packit a4aae4
The geogrid function can only be used with variables that are Grids:
Packit a4aae4
Packit a4aae4
[jimg@zoe libdap]$ getdap -d "$url"
Packit a4aae4
Dataset {
Packit a4aae4
    Float64 COADSX[COADSX = 180];
Packit a4aae4
    Float64 COADSY[COADSY = 90];
Packit a4aae4
    Float64 TIME[TIME = 12];
Packit a4aae4
    Grid {
Packit a4aae4
      Array:
Packit a4aae4
        Float32 SST[TIME = 12][COADSY = 90][COADSX = 180];
Packit a4aae4
      Maps:
Packit a4aae4
        Float64 TIME[TIME = 12];
Packit a4aae4
        Float64 COADSY[COADSY = 90];
Packit a4aae4
        Float64 COADSX[COADSX = 180];
Packit a4aae4
    } SST;
Packit a4aae4
    Grid {
Packit a4aae4
    .
Packit a4aae4
    .
Packit a4aae4
    .
Packit a4aae4
Packit a4aae4
    
Packit a4aae4
Pass the name of the Grid variable and the upper-left and lower-right corners 
Packit a4aae4
of the lat/lon rectangle to geogrid. Optionally, pass one or more relational
Packit a4aae4
expressions to select parts of dimensions that are not lat/lon. 
Packit a4aae4
Packit a4aae4
Note: in libdap 3.7.3 calling geogrid with a constraint on each dimension
Packit a4aae4
may return incorrect values that indicate missing data even though data should
Packit a4aae4
have been returned.
Packit a4aae4
Packit a4aae4
Packit a4aae4
[jimg@zoe libdap]$ getdap -D "$url?geogrid(SST,30,-60,20,-60,\"TIME=366\")"
Packit a4aae4
The data:
Packit a4aae4
Grid {
Packit a4aae4
  Array:
Packit a4aae4
    Float32 SST[TIME = 1][COADSY = 7][COADSX = 2];
Packit a4aae4
  Maps:
Packit a4aae4
    Float64 TIME[TIME = 1];
Packit a4aae4
    Float64 COADSY[COADSY = 7];
Packit a4aae4
    Float64 COADSX[COADSX = 2];
Packit a4aae4
} SST = {  Array: {{{24.4364, 25.0923},{23.7465, 24.4146},{19.843, 23.6033},
Packit a4aae4
{16.8464, 17.7756},{16.65, 16.818},{-1e+34, 15.3656},{18.7214, 13.1286}}}  
Packit a4aae4
Maps: {366}, {19, 21, 23, 25, 27, 29, 31}, {-61, -59} };
Packit a4aae4
Packit a4aae4
Packit a4aae4
The geoarray() function works like geogrid() except that it's used to select
Packit a4aae4
from an Array variable and not a Grid. In addition to the four lat/lon values
Packit a4aae4
for selection rectangle, the caller must supply the data's corner points. A 
Packit a4aae4
subsequent release of libdap will include a version that reads the data extent
Packit a4aae4
from the data source when possible so caller's won't normally have to know the
Packit a4aae4
data's extent ahead of time.
Packit a4aae4
Packit a4aae4
The linear_scale() function take either one or three arguments. The first
Packit a4aae4
(only) argument is the name of a variable or the return from another
Packit a4aae4
function. This variable will be scaled using the 'y = mx + b' equation where
Packit a4aae4
'x' is the value(s) of the input variable and 'm' and 'b' are read from the
Packit a4aae4
data source using the values of attributes name 'scale_factor' and
Packit a4aae4
'add_offset.' If these are not present, or to over ride their values, m and b
Packit a4aae4
can be supplied using the second and third arguments.
Packit a4aae4
Packit a4aae4
Note that there are still some problems with linear_scale() in this release.
Packit a4aae4
Packit a4aae4
See NEWS and ChangeLog for information about other changes
Packit a4aae4
Packit a4aae4
Notes for version 3.7.2
Packit a4aae4
Packit a4aae4
This version of libdap is required for the 9/15/06 alpha release of Server4.
Packit a4aae4
The library now contains software which enables Server4 to build the ASCII
Packit a4aae4
data response for all types of variables, including Sequence and nested
Packit a4aae4
Sequence variables. These features are additions to the API, so older code
Packit a4aae4
will work just fine with the new library. See NEWS for more specific info
Packit a4aae4
about bug fixes.
Packit a4aae4
Packit a4aae4
Notes for version 3.7.1
Packit a4aae4
Packit a4aae4
This is a bug fix release (mostly) made for users of the netcdf client
Packit a4aae4
library who need a fix for a problem dealing with attributes from the HDF4
Packit a4aae4
server. 
Packit a4aae4
Packit a4aae4
NOTES for version 3.7.0
Packit a4aae4
Packit a4aae4
This version includes new features and an implementation change.
Packit a4aae4
Packit a4aae4
This version of libdap now returns the DAP protocol version number, 3.1, in
Packit a4aae4
an HTTP response header. Use this to determine which protocol version the
Packit a4aae4
library implements. The inclusion of a protocol version number is the sole
Packit a4aae4
official new feature of DAP 3.1. Use Connect::get_protocol() to get the
Packit a4aae4
version number. Clients can use this to determine the features supported by a
Packit a4aae4
server. The Connect::get_version() method can still be used to get our
Packit a4aae4
server's implementation version. The distinction is that as more groups
Packit a4aae4
provide their own implementations of the DAP, the protocol version will
Packit a4aae4
provide a way for clients to determine capabilities independently of
Packit a4aae4
implementation.
Packit a4aae4
Packit a4aae4
The libdap library now contains an implementation of the DDX object/response,
Packit a4aae4
although this is an alpha implementation and it's actually been part of the
Packit a4aae4
library for some time now. The implementation contained in this version of
Packit a4aae4
the library is close enough to the version we intend for DAP4 that developers
Packit a4aae4
can start to use it. Most of the server handlers will return DDXs when asked.
Packit a4aae4
Packit a4aae4
The DDX combines the information previously held by the DDS and DAS objects,
Packit a4aae4
making it much easier to associate attributes to variables. As the name
Packit a4aae4
suggests, the DDX uses XML rather than curly-braces. You can drop the DDX
Packit a4aae4
into your favorite XML parser and get a DOM tree; no need to use our parsers.
Packit a4aae4
However, libdap contains a nice SAX parser that will build the libdap objects
Packit a4aae4
directly from the XML DDX object/response. Also included in libdap are
Packit a4aae4
methods to build a DDX using a DDS and DAS, so there's an easy migration path
Packit a4aae4
for both servers and clients.
Packit a4aae4
Packit a4aae4
Finally, the library contains two structural changes. First, the library
Packit a4aae4
named 'libdap' now holds the DAP implementation while two new libraries,
Packit a4aae4
'libdapclient' and 'libdapserver', now hold the client and server helper
Packit a4aae4
classes which are not strictly part of the DAP. Secondly, the DDS/DDX object
Packit a4aae4
now takes the constraint evaluator as a parameter. The class
Packit a4aae4
ConstraintEvaluator holds our default evaluator, but it's now possible to use
Packit a4aae4
your own evaluator .
Packit a4aae4
Packit a4aae4
NOTES for version 3.6.1
Packit a4aae4
Packit a4aae4
Version 3.6.1 is bug fix release.
Packit a4aae4
Packit a4aae4
NOTES for version 3.6.0
Packit a4aae4
Packit a4aae4
This version of the library may not work older source code. Many of the 
Packit a4aae4
deprecated methods have been removed. 
Packit a4aae4
Packit a4aae4
Added are headers which send information about the version of the DAP protocol
Packit a4aae4
that the library implements (in contrast to the implementation of the library
Packit a4aae4
itself). A new header named XOPeNDAP-Server is used to send information about
Packit a4aae4
the implementation of servers.
Packit a4aae4
Packit a4aae4
The libtool interface version has been incremented from 3 to 4 (these versions
Packit a4aae4
do no track the software's release version since several releases might 
Packit a4aae4
present compatible binary interfaces). 
Packit a4aae4
Packit a4aae4
NOTES for version 3.5.3
Packit a4aae4
Packit a4aae4
This version of libdap++ cannot be used to build the 3.4.x and previous
Packit a4aae4
clients and/or servers. However, client and servers built using this code
Packit a4aae4
_will_ work with the older clients and servers.
Packit a4aae4
Packit a4aae4
WHAT'S IN THIS DIRECTORY?
Packit a4aae4
Packit a4aae4
This directory contains the OPeNDAP C++ implementation of the Data
Packit a4aae4
Access Protocol version 2 (DAP2) with some extensions that will be
Packit a4aae4
part of DAP3.  Documentation for this software can be found on the
Packit a4aae4
OPeNDAP home page at http://www.opendap.org/. The NASA/ESE RFC which
Packit a4aae4
describes DAP2, implemented by the library, can be found at
Packit a4aae4
http://spg.gsfc.nasa.gov/rfc/004/.
Packit a4aae4
Packit a4aae4
The DAP2 is used to provide a uniform way of accessing a variety of
Packit a4aae4
different types of data across the Internet. It was originally part of
Packit a4aae4
the DODS and then NVODS projects. The focus of those projects was
Packit a4aae4
access to Earth-Science data, so much of the software developed using
Packit a4aae4
the DAP2 to date has centered on that discipline. However, the DAP2
Packit a4aae4
data model is very general (and similar to a modern structured
Packit a4aae4
programming language) so it can be applied to a wide variety of
Packit a4aae4
fields.
Packit a4aae4
Packit a4aae4
The DAP2 is implemented as a set of C++ classes that can be used to
Packit a4aae4
build data servers and clients. The classes may be specialized to
Packit a4aae4
mimic the behavior of other data access APIs, such as netCDF. In this
Packit a4aae4
way, programs originally meant to work with local data in those
Packit a4aae4
formats can be re-linked and equipped to work with data stored
Packit a4aae4
remotely in many different formats.  The classes can also by
Packit a4aae4
specialized to build standalone client programs.
Packit a4aae4
Packit a4aae4
The DAP2 is contained in a single library: libdap++.a. Also included
Packit a4aae4
in the library are classes and utility functions which simplify
Packit a4aae4
building clients and servers.
Packit a4aae4
Packit a4aae4
WHAT ELSE IS THERE?
Packit a4aae4
Packit a4aae4
The file README.dodsrc describes the client-side behavior which can be
Packit a4aae4
controlled using the .dodsrc file. This includes client-side caching,
Packit a4aae4
proxy servers, et c., and is described in a separate file so it's easy
Packit a4aae4
to include in your clients.
Packit a4aae4
Packit a4aae4
The file README.AIS describes the prototype Ancillary Information
Packit a4aae4
Service (AIS) included in this version of the library. The AIS is
Packit a4aae4
(currently) a client-side capability which provides a way to augment
Packit a4aae4
DAP attributes. This is a very useful feature because it can be used
Packit a4aae4
to add missing metadata to a data source. The AIS is accessed by using
Packit a4aae4
the AISConnect class in place of Connect in your client.
Packit a4aae4
Packit a4aae4
This directory also contains test programs for the DAP2, a sample
Packit a4aae4
specialization of the classes, getdap (a useful command-line web
Packit a4aae4
client created with DAP2) and dap-config (a utility script to simplify
Packit a4aae4
linking with libdap.a). Also included as of version 3.5.2 is
Packit a4aae4
libdap.m4, an autoconf macro which developers can use along with
Packit a4aae4
autoconf to test for libdap. This macro will be installed in
Packit a4aae4
${prefix}/share/aclocal and can be by any package which uses autoconf
Packit a4aae4
for its builds. See the file for more information.
Packit a4aae4
Packit a4aae4
We also have Java and C versions of the DAP2 library which
Packit a4aae4
inter-operate with software which uses this library. In other words,
Packit a4aae4
client programs built with the Java DAP2 implementation can
Packit a4aae4
communicate with servers built with this (C++) implementation of the
Packit a4aae4
DAP2. The C DAP2 library, called the Ocapi, only implements the
Packit a4aae4
client-side part of the protocol. Clients written using the Ocapi are
Packit a4aae4
interoperable with both the Java and C++ DAP2 libraries. Note that the
Packit a4aae4
Ocapi is in early beta and available only from CVS at this time (5 May
Packit a4aae4
2005).
Packit a4aae4
  
Packit a4aae4
THREAD SAFETY
Packit a4aae4
Packit a4aae4
We don't need to do this since the STL is also not thread safe. Users
Packit a4aae4
of libdap have to be sure that multiple threads never make
Packit a4aae4
simultaneous and/or overlapping calls to a single copy of libdap. If
Packit a4aae4
several threads are part of a program and each will make calls to
Packit a4aae4
libdap, either those threads must synchronize their calls or arrange
Packit a4aae4
to each use their own copy of libdap.  Some aspects of the library
Packit a4aae4
are thread-safe: the singleton classes are all protected as is the
Packit a4aae4
HTTP cache (which uses the local file system).
Packit a4aae4
Packit a4aae4
INSTALLATION INSTRUCTIONS
Packit a4aae4
Packit a4aae4
See the file INSTALL in this directory for information on building the
Packit a4aae4
library and the geturl client.
Packit a4aae4
Packit a4aae4
COPYRIGHT INFORMATION
Packit a4aae4
Packit a4aae4
The OPeNDAP DAP library is copyrighted using the GNU Lesser GPL. See
Packit a4aae4
the file COPYING or contact the Free Software Foundation, Inc., at 59
Packit a4aae4
Temple Place, Suite 330, Boston, MA 02111-1307 USA. Older versions of
Packit a4aae4
the DAP were copyrighted by the University of Rhode Island and
Packit a4aae4
Massachusetts Institute of Technology; see the file COPYRIGHT_URI. The
Packit a4aae4
file deflate.c is also covered by COPYRIGHT_W3C.