1News for version 3.20.8
2
3 Modified Error so that it is more in line with C++11.
4
5 Added (shallow) unit64_t request size computations and max_request_size state.
6
7 Changed the internal representation of max response size to uint64_t and confined the overflow
8 to just the (deprecated) functions.
9
10News for version 3.20.7
11
12 Added code coverage (using gcov) to the CI processes.
13
14 Dropped support for CentOS-6 (whew!)
15
16 Improved Int64 support.
17
18 Corrected byte order issue with DAP4 data transmission.
19
20 Improved error reporting.
21
22News for version 3.20.6
23
24 Stopped CE parse errors from returning user supplied
25 strings in error messages.
26
27 Switched to README.md from README
28
29 Swapped out unique_ptr for auto_ptr because of CentOS6 issues.
30
31News for version 3.20.5
32
33 Fixed memory leaks in imported aws signing code.
34
35 Minor bug fixes.
36
37 Lots of work on CI.
38
39News for version 3.20.4
40
41Fixed memory leaks in the libxml2-based DMR and DDX parsers.
42
43Moved more toward C++-11. On CentOS 6 we now build using
44c++0x while CentOS7 uses c++11. This means that we can
45use unique_ptr<> but not null_ptr, for example.
46
47We have found a bug in the code that orders Dimensions,
48Enumeration definitions and Groups in the DMR. Listing the
49Groups last makes DMRs that reference Dimensions defined inside
50Groups fail silently.
51
52News for version 3.20.3
53
54Added support for a CI build of a debian package of libdap4
55
56News for version 3.20.2
57
58Added libdap::Array::rename_dim() for HK-247 (an issue in the BES)
59
60News for version 3.20.1
61
62Support Continuous Delivery of CentOS 6 and 7 RPMs using Travis CI.
63
64News for version 3.20.0
65
66We now have debian packages for libdap, built using Travis CI
67
68The library now returns only DAP 3.2 DDX responses, ending confusion about
69what exactly the DDX syntax would be.
70
71Using libtirpc (Libtirpc is a port of Suns Transport-Independent RPC library to Linux).
72Thanks to Orion Poplawski.
73
74Use quotes when testing $CC in the configure script.
75This avoids the error "test: too many arguments" appearing in the
76configure output if CC contains multiple words, such as "ccache cc".
77Thanks to Ryan Schmidt.
78
79Testing and coverage analysis.
80Thanks to Ed Hartnett.
81
82News for version 3.19.1
83
84Portability issues: Updated gnulib and mkstemps fixed as per user
85reports. Removed a test for block_size in HTTPCacheTest that failed on
86Fedora ppc64le system with XFS system
87
88Branches/tickets merged: hyrax390 (CppUnit test improvements)
89
90News for version 3.19.0
91
92Bug fixes in memory usage for Vector types.
93
94Refactored transform_to_dap4() methods and associated API
95
96Implmented transform_to_dap2() method.
97
98Refactored test harnesses so that running individual
99tests is now a viable option.
100
101News for version 3.18.3
102
103Bug fix for DAP4 data transmissions.
104
105XML Parser fixes for DAP4: We are now tolerant of elements that
106are not in the DAP4 namespace, so the DMR document can be extended
107with additional information without breaking our parser.
108
109D4Group's clone (aka ptr_duplicate) method returned a D4Group and not
110a BaseType; fixed.
111
112News for version 3.18.2
113
114Fixed an issue with DAP4 CE parsing, double quotes and %20 escape
115characters.
116
117Type fix for getopt() for platforms where char is unsigned by default.
118
119Added more bigendian test baselines.
120
121Added libuuid to the requirements listed in INSTALL.
122
123News for version 3.18.1
124
125Minor fix for the source distribution.
126
127Fixed a long-standing bug in BaseType::set_send_p() and set_read_p().
128
129Added a way to build 'universal' baselines for tests that include
130data. Tests that included data had different checksums on different
131architectures and this meant two sets of baselines for them. No more.
132I'm keeping the old tests with their dual baselines (they test the
133checksum code) but all newer tests should use the 'universal' test
134macros.
135
136Added DAP4 filter support!
137
138News for version 3.17.3
139
140Fixed a soname error - Adding a const constructor seems to have
141*removed* the old constructor as far as some code is cncerned (it's
142still there, but with a different mangled name).
143
144News for version 3.17.2
145
146Added tests for big-endian machines from Dan Horák  <dan@danny.cz>
147
148News for version 3.17.1
149
150A bug fix release.
151
152Fix for endian detection issues and unqualified use of 'array' (it
153should have been libdap::array). The latter affects builds with
154recent versions of gcc.
155
156See the ChangeLog for other issues that this version addresses.
157
158News for version 3.17.0
159
160Better error reporting. Error objects are now always thrown with a
161code that 'make sense' and use the default code only when really
162necessary. This means that the BES will not report most Error throws
163as an internal error (only a few are) unless that's really the case.
164This is used, in turn, by the front end to make better error responses
165for users.
166
167The old timeout code is still present but not used. This matches
168changes made in the BES to correctly process timeouts.
169
170Improved support for doxygen.
171
172Support for DAP4: Attributes were sometimes mis-coded as Byte when
173they should have been Float32. Fixed.
174
175Child Groups were sometimes printed twice. No more.
176
177News for version 3.16.0
178
179I've bumped up the version because of an API change in libdap - the
180library no longer computes the DAP4 CRC32 checksum as part of the
181BaseType::intern_data() method. This API change affects DAP4 only.
182Otherwise, this is a bug-fix release for 3.15.1
183
184Bugs fixed:
185
186getdap4 correctly produces output for dataset with child groups.
187
188Tests now work correctly for big-endian machines - before the DMR tests
189were failing because the CRC32 codes are different for the same, e.g.,
190int32 value, with different byte order. Not addressed are the issues
191of how best to encode the byte order used when CRC32 computations are
192done. Thanks to the folks at RedHat for help (a VM) to work on this.
193
194News for version 3.15.1
195
196Bug fixes
197
198News for version 3.15.0
199
200The library now writes to the network using a child thread, allowing
201parallel processing of data reads and writes when one or more variables
202are returned (or when returning the result of an aggregation).
203
204The library now supports writing 'vector' data (i.e., Array variables)
205in parts so that large arrays that are being built up over time can be
206serialized in pieces as the data becomes available. This is combined
207with the parallel I/O feature when serializing aggregations - other
208handlers could also take advantage of it
209
210We fixed an issue in Vector where template methods were used in a way
211that broke inheritance, introducing a hard-to-diagnose bug in the NCML
212code. The problem was that variables that describe the 'aggregation
213dimension' could not be subset. That's now fixed.
214
215News for version 3.14.2
216
217This version of the library _changes the behavior of BaseType::serialize()_
218so that memory allocated on the heap used to hold data (e.g., for an
219Array) will be deleted as soon as the data are serialized. This was added
220to reduce memory consumption when returning responses with many large
221variables. The change did not affect any of the code we normally test
222against; I think it was a largely undocumented 'feature' that the data
223were still present after serialized returned. However, if a module needs
224the data after serialize() is called, it can use a new method called
225serialize_no_release() to get the old behavior.
226
227News for version 3.14.1
228
229We started using Travis-CI and Coverity for/with/on this code; there was
230a learning curve... ;-) Also some issues with the parsers have been
231addressed, hopefully resulting in more straightforward builds.
232
233News for version 3.14.0
234
235This version of libdap contains the current DAP4 implementation for
236C++. The implementation is nearly complete, lacking only the CE filters
237for Sequences.
238
239News for version 3.13.3
240
241Memory leak fix in RValue.cc - affects server function evaluation only.
242
243News for version 3.13.2
244
245Fixed a memory leak in the CE parser when evaluating server functions.
246
247News for version 3.13.1
248
249Fix for a unit-test that uses the default server at test.opendap.org.
250This affects neither the API nor ABI of libdap; only the test baseline
251was changed.
252
253News for version 3.13.0
254
255Added a xml file to serve as input for the perl-based abi compatibility
256checker. Seems to be pretty slick; see abi-checker.xml.in for more info.
257
258Some updates - mostly addition of #include <unistd.h> - for OSX 10.9's
259clang compiler.
260
261News for version 3.12.1
262
263Fixed the behavior of Sequence::read_row() so that the documented
264semantics of read() are used. This will require changes in some of the
265handlers but does not change the libray's ABI. Handler's that don't
266need the new/corrected behavior can use version 3.12.0.
267
268News for version 3.12.0
269
270Moved server functions out of libdap; they are now stored in a BES module.
271
272Added support for building large (constant) arrays to be used in
273server functions. The arrays are defined using a new special form that
274the ConstraintEvaluator class supports. The server side functions are
275now in their own BES module (built as part of the BES for now) and
276it's possible to name the constant arrays. Arrays of 1 million
277elements can be made in a fraction of a second (although it will take
278longer to send the constraint to the server). See the README file for
279more details.
280
281News for version 3.11.7
282
283Bug fix for the server function caching code. Now if the function
284cache directory /tmp/dap_functions_cache exists, it will be used to
285cache the results of applying server functions. If the directory does
286not exist, then the function results won't be cached - a minor
287performance penalty in most cases.
288
289The size of the cache is set to 20GB. The size and location of the
290cache are fixed for this version of libdap but they will move into
291the bes.conf file as parameters in a future version of the server.
292
293News for version 3.11.6
294
295Changes to the way constraints are evaluated when they contain server
296functions. Now DAS and DDS objects can be returned from requests that
297include those constraints. The server function call results are
298cached, so that sending the same function calls several times will not
299evaluate those functions more than once.
300
301News for version 3.11.5
302
303Fixed a memory leak in XDRStreamMarshaller and a bug in
304DDS::add_var_nocopy().
305
306News for version 3.11.4
307
308Merged to trunk; tagged.
309
310News for version 3.11.3
311
312Changed the return value for dap-config --libs so that it does not contain
313the curl static libs. This causes problems when linking on CentOS 6 in some
314cases.
315
316News for version 3.11.2
317
318The new DAP3.3 Keywords are supported by the library. These are sort
319of a hidden feature of DAP4 that might not be used.
320
321There are many bug fixes in this update; check the ChangeLog or Trac.
322Two notable fixes:
323
324* The way attributes are encoded has changed subtly so that now only
325  spaces are escaped. This fixes a problem with our XML and RDF
326  responses.
327
328* The XML output (i.e., the DDX) is now built using an XML library, so
329  any encoding issues are its fault ;-) But, in a pragmatic sense,
330  this has greatly simplified the library and sets the stage for
331  further simplification of the methods that build responses. The
332  behavior of those methods has not changed.
333
334News for version 3.11.1
335
336Merge of the Hyrax 3.6.2 fixes.
337
338A race condition in the HTTP cache was fixed.
339
340Fixes for the OS/X package.
341
342News for version 3.11.0
343
344Constraint expressions can now include multiple function calls.
345Previously, when a function was used in the projection part of the CE
346and it was not a 'projection function,' but a function that returns
347data, only function could be called in the CE. Now the evaluator
348supports calling a series of functions. The results are returned in a
349Dataset object as before. Because this is a new behavior for the
350library I have bumped up the minor revision. This version is backward
351compatible with the previous version of the library.
352
353Grid now prints the XML declaration correctly when a constrained Grid
354variable's type decays to a Structure. The expr-test program now has
355an XML option (-x) for use with constrained DDS/DDX output. This bug
356affected the usefulness of the DDX response.
357
358the geogrid() function now takes both (grid, <box points>) and (grid,
359lat array, lon array <box points>). This includes some minimal testing
360of the new code.
361
362Bug fixes.
363
364News for version 3.10.2
365
366Changed the way the DAS object's attributes are merged into a DDS
367object, which did two things. First, the process of merging the
368attributes has a default behavior that will work if the DAS and DDS
369are built according to the DAP 2.0 specification, and second, the
370handlers can specialize the process to suite their own needs. This
371means that new handlers that build odd DAS objects will need to
372specialize the transfer_attributes() method defined by BaseType,
373Constructor and Grid. I've already done this for the current handlers
374we're distributing as part of Hyrax. This means that attributes from
375the netCDF handler appear correctly in Grid maps.
376
377Speaking of the netCDF handler, it now builds with netcdf 4.1.
378
379Build fixes galore, including new Requires: lines in the rpm spec
380files which should make it easier to short circuit installation
381problems with the handlers.
382
383The DDX no longer contains attributes with &0xdd; escape codes. When
384an XML document declares that it is UTF-8 codes < 0x20 are not
385allowed. We're using octal escapes again.
386
387The preceding fix, along with the corrected processing of the DAS
388object mean that two major issues with the DDX that hindered the use
389of that response in semantic web applications are gone.
390
391News for version 3.10.1b
392
393We have removed the Server 3 (CGI) software from the dap-server
394package and, with that change, we have removed the deflate program
395from this library/package.
396
397The geogrid() function has been much improved. It will now answer
398requests where the latitude is upside down in the dataset and flip the
399result so that the north pole is 'up'. It will also handle requests
400that 'wrap around' the date line. Error messages are also improved.
401
402This library now implements DAP 3.3 including the OtherXML DAP
403attribute type (which will become AnyXML in DAP 4). The library now
404implements simple version negotiation and a DDX response that is DAP
405version sensitive. See the online DAP4 design documentation for more
406information (docs.opendap.org).
407
408Many, many fixes and extensions for DAP4 and NcML support. (NB: the
409NcML handler is a separate project).
410
411News for version 3.9.2
412
413Memory leak fixed when using DDS::transfer_attributes on a DAS that uses the
414Alias keyword.
415
416News for version 3.9.1
417
418The CE parser now returns an error if an array of structures that contains
419arrays is improperly constrained (the enclosing structure array _may_ be
420subsampled, but that subsampling must be the same for each of its fields. The
421fields can be independently subsampled.
422
423A problem with the client-side cache has been fixed.
424
425Variable names can now be quoted! That is, in a CE you can say:
426
427  "my odd name"."% H2O"[10:13]
428
429and it will parse. Must clients and all web browsers will encode all of this
430using the web's URL escape syntax, which his hard to read, but this means that
431any character can now appear in a variable name (double quotes can be escaped
432using a backslash and backslashes can be includes using '\\'). The quotes are
433optional, of course, so all CEs that work now will continue to work.
434
435News for version 3.9.0
436
437libdap now supports DAP 3.2. The evolving DAP 3.x protocol is described at
438http://docs.opendap.org/index.php/DAP3/4. The most important change from DAP
4393.1 to 3.2 is:
440
441  DAP 3.2 introduces the notion of protocol negotiation, similar to HTTP's
442  response type or encoding negotiation. The client MAY send an XDAP-Accept
443  header to tell the server the highest version of the protocol that the
444  client can understand. The server MUST then respond using only responses at
445  or below that version number of the protocol. Note that an Error response
446  (e.g., "The response you requested cannot be returned using the protocol
447  version you understand") can be understood by any client. If a client does
448  not send the XDAP-Accept header, then the server MUST assume a DAP 2.0/3.1
449  client. The only functional difference between DAP 2.0, 3.0 and 3.1 is
450  form/content of the version information returned in the HTTP response
451  header.
452
453  By allowing the server to respond with a lower version the protocol can
454  support old servers (since that's how they will respond) and enable newer
455  clients to treat the lower version responses as errors (because the newer
456  servers can be expected to discriminate between different server versions).
457
458  New servers SHOULD always return a response that conforms to the version
459  sent from the client in the XDAP-Accept header.
460
461  In addition to returning the DAP protocol version using the XDAP header
462  (which is a mechanism specific to HTTP), the protocol version will also be
463  returned in the DDX Dataset element using the XML attribute dap-version.
464  See DDX.
465
466With this version of libdap the DDX is slightly different for DAP 3.2 - it
467now includes DAP protocol version information and an xmlbase element.
468
469There was ambiguity regarding how an array of structures would be constrained.
470The web page of DAP 2 Errata has been updated with a clarification of this and
471the constraint expression parser has been updated to reflect that fix. See
472the DAP3/4 page and ticket 975 for the complete info. Short version: Suppose
473's' is an array of structures and 'm' is an array that is a member of 's'.
474You can constraint 'm' like this: s2[0:4].m[2:7]
475
476Now the notion that a dataset identifier (e.g., a file name) is bound to the
477DDS has been  dropped and that identifier is bound to a variable. This lets
478the library be used in contexts where a DDS holds variables from several
479different places (e.g., files).
480
481String attribute values were always quoted (quotes were added if not present
482in the data set) and while this was OK for the DAS response, it broke the
483DDX. Now quotes are added to DAS response but not the values themselves. See
484ticket 1163.
485
486Nested Sequences were failing when the constraint forced one or more rows of
487the inner Sequence to be empty. Fixed.
488
489A number of build issues have been fixed in this version, see the ChangeLog
490file.
491
492News for version 3.8.2
493
494Significant improvements to the HTTP cache. The cache software could return
495erroneous responses in some rare cases when using multi-threaded code. Fixed.
496Also the entire caching system is now much more robust since the 'table' that
497contains information about individual entries is encapsulated in it's own
498class. The HTTP cache is still both thread-safe and _not_ multi-process safe.
499However, it should be possible to modify the HTTPCacheTable class to use a
500database system like MySQL or SQLite to make it MP-safe.
501
502The 'ancillary information' functions have been moved to their own class
503(from DODSFilter and the file cgi_util.cc).
504
505I fixed the libdap win32 installer so that it does not install stuff in the
506win32 system directories anymore.
507
508News for version 3.8.1
509
510The syntax for PROXY_SERVER and NO_PROXY_FOR have been fixed so that they are
511easier to use. PROXY_SERVER now takes a value like
512'http://user:pw@squid.proxy.edu:3128' and uses it correctly. In that value,
513all parts but the host name (squid.proxy.edu) are optional and the old syntax,
514as well as several common variants, are accepted. For the NO_PROXY_FOR entry,
515the '<protocol>,' is now optional. Only the HTTP protocol is supported or the
516proxy server.
517
518News for version 3.8.0, 29 February 2008
519
520The libdap classes and code are now inside of the libdap namespace. In order
521to access any of the classes, for example, you will need to do one of the
522following. After including the libdap headers you can:
523
5241. add a using statement for the entire libdap namespace:
525
526using namespace libdap ;
527
5282. add a using statement for the classes that you will be using:
529
530using libdap::DAS ;
531
5323. inside your code scope the use of libdap classes.
533
534libdap::DAS *das = code_to_get_das() ;
535
536HTTPCache updated to cache an entry, returning not only the FILE pointer but
537also the name of the file in the cache. This way, the cached item could be
538passed to a data handler, such as the netcdf_handler, and read.
539
540The pkg build for Mac OSX was updated to automate the creation of the
541ReadMe.txt file, add a README and NEWS file to the dmg and automatically
542create the dmg using DropDMG.
543
544News for version 3.7.10, 28 November 2007
545
546Fixed XDRStreamMarshaller so that it no longer allocates a huge buffer. This
547fixes a bug where the BES fails to start on smaller machines.
548
549News for version 3.7.9, 21 November 2007
550
551Bumped up the soname version numbers for libdapclient and libdapserver due
552to changes in the HTTPResponse and AlarmHandler interfaces.
553
554The transfer_data() method defined for Sequence and Structure has been
555generalized and implemented for all classes. In the process, so issues with
556the way nested sequences were handled have been fixed. I renamed the method
557to intern_data() since it is now a part of libdap (and not just two classes).
558The method uses the read() methods defined for the type classes (Byte, ...,
559Grid) to read data into variables in a DDS as if they were read in using
560deserialize(). This is used by the ASCII response generator and might be used
561by other 'formatted output' generators.
562
563Generated files (like the grammar files) are now shipped with the source
564distributions. (From Patrice Dumas)
565
566Methods which write output using the C++ iostream system have been added back
567into the library and are going to replace the FILE* versions of those
568methods. We have also added an 'Un/Marshaller' set of classes so that we can
569release a version of Hyrax (slated to be 1.4) that will improve BES/OLFS
570communication efficiency.
571
572The functionality of the Passive* type classes was subsumed by their parent
573classes and they were removed from the library to cut down on 'hierarchy
574clutter.' Some other unneeded files were also removed.
575
576The maximum size of a Str object was changes to 65535 (DODS_USHORT_INT-1) to
577accommodate HDF5 strings.
578
579Checkouts from subversion now have no (?) generated files. We are keeping a
580copy of the grammars in subdirectory named 'grammarfiles.'
581
582HTTP response codes are now available in libdap HTTPResponse objects. From
583Darren Hardy.
584
585News for version 3.7.8, 26 June 2007
586
587Updated the email address for support to support at opendap.org and changed
588the tech email list address to opendap-tech at opendap.org. This is part of
589the plan to shift support services to OPeNDAP and to use the tech email list
590as part of that plan.
591
592Updated to the latest gnulib software.
593
594Memory errors fixed:
595
596    In the HTTP processing code for clients which was triggered when a client
597    read from an older server (older servers had malformed HTTP headers).
598
599    An error in the regular expression class (Regex) where the build
600    generated flawed code on a 64-bit machine.
601
602OSX Build improvements.
603
604Patrice Dumas' changes to dods-datatypes.h - Now the header uses the C99
605types unless the stdint.h header is not present.
606
607pkg-config support. From a patch by Patrice Dumas.
608
609General improvements to comments, strings and error messages throughout the
610libraries.
611
612News for version 3.7.7, 2 May 2007
613
614Fixed a bug where the build was not installing the dapserver and dapclient
615libraries.
616
617Fixed a handful of platform-specific build issues.
618
619There are some minor performance improvements to the constraint evaluator.
620
621Repaired some problems with the server-side functions.
622
623News for version 3.7.6, 12 March 2007
624
625Fixed a bug in the linear_scale() Constraint Expression function when that
626function was used with plain arrays.
627
628I fixed a build issue on linux for ml-structs caused by a bad/missing
629#include in GnuRegex.h.
630
631News for version 3.7.5, 7 Feb 2007
632
633Many bug fixes for the Server-Side functions linear_scale(), grid(),
634geogrid() and geoarray().
635
636Added dump method to the BaseType classes, DAS, DDS, DataDDS. To do
637this, created a DapObj base class for all of these to inherit from
638(directly or indirectly) and in the DapObj class is the operator<<
639method. This will aid in debugging. Created an indentation classes to
640help with dumping objects.
641
642Win32 port fixes. The Win32 build is closer to the Unix build. Our
643hope is to get the two to be almost identical so that we can all build
644on Win32 and thus get away from having the win32 releases lag behind the
645Unix releases.
646
647Fix in Vector for gcc 4.1
648
649News for version 3.7.4, 02 Jan 2007
650
651Build enhancements and bug fixes. See ChangeLog for specifics.
652
653News for version 3.7.3, 24 Nov 2006
654
655Fixed unescattr() so that it works!
656
657Rob added improvements to the win32 build.
658
659Fixed a number of bugs including: Problems with the DDS::transfer_attributes()
660method which broke libnc-dap; Added a new configuration parameter to .dodsrc
661so that SSL validation can be suppressed; Fixed problems with the change from
662\n to \r\n line terminators for MIME headers which slipped through the cracks
663the first time; and add gzip and compress to the set of accepted compression
664types supported by the client side.
665
666Added Connect::request_ddx() which asks a server for the DDX response.
667Previously, it was possible to use getdap to print the DDX, but that object
668was actually built using the DAS and DDS from a server. Now the server is asked
669for the DDX. Servers should support this response to be compliant with DAP 3.1.
670
671In the ConstraintEvaluator class, the add_function() method now allows a server
672to override a function from libdap with a new definition of the same name.
673
674I added a new interface for the scalar types: value() and set_value() can be
675used to get and set values. These are much simple to use than the older
676val2buf() and buf2val() methods. This idea was copied from copied from the
677PassiveByte, ..., classes.
678
679New server-side functions for geographical constraints have been added. These
680functions provide a way to select parts of Grid or Array variables using
681Latitude and Longitude. Also added is a version() function which can be used
682by clients to figure out which version of functions is present. The version
683function has two forms, one which returns the information as plain text and
684one which returns the information in a small XML document. libdap 3.7.3 is a
685beta release of these functions. Note that these are _server-side_ functions
686so before they can be used, servers need to be built using this library and
687installed.
688
689The dap-config script has been fixed so that it behaves more like other
690such scripts.
691
692News for version 3.7.2
693
694Fixed a persistent bug in the GNURegex code. (ticket 389)
695
696Fixed a problem in HTTPConnect where the change from newline to cr/nl line
697terminators was not accommodated (no ticket, but part of the issues behind
698ticket 552).
699
700Added Sequence::transfer_data(). This method uses the read() method to read
701data and follows the same logic used by serialize to determine which data is
702'sent' but instead records the data in the d_values field. Thus a Sequence
703can transfer data to itself. The locally stored data apes the ability of the
704other classes to store a complete response and is the basis for the new ASCII
705response code (in dap-server/asciival) which Server4 uses.
706
707There's a fair amount of the geogrid() code now in place, although the
708function does not work, I have added a GeoConstraint class which is close to
709complete. The CEFunctionsTest unit tests fail.
710
711News for version 3.7.1
712
713Fixed bug #480. Attributes from the HDF4 server were not being handled in a
714way that made sense to netCDF clients.
715
716Added a new method to AttrTable so that a vector of strings can be used to
717set a vector of attribute values in one call. No more need to build a loop
718every time you want to set values.
719
720The grid() CE function now conforms to the design submitted to URI as part of
721the REASoN award.
722
723Fixed a bug when % signs were not handled correctly by the code in
724escaping.cc.
725
726News for version 3.7.0
727
728The big change: The first of the DAP3/4 features was added to the libdap
729library; the library now includes the DAP protocol version number in all
730responses. A savvy client can test for this and process accordingly.
731
732A second feature, representation of the data source metadata in XML, is
733supported in alpha form. Expect the 'DDX' response to change slightly in the
734next release. The DDX returned now contains an obsolete element named 'Blob'
735which we won't be using. Other than the Blob element, the current DDX
736probably will not change much except for the addition of new datatypes,
737something that will take place only after other changes are made to the
738protocol. Many of the handlers now support returning the DDX, so developers
739can begin to play with it's capabilities.
740
741What's really nice about the DDX: It's cool that the DDX now encode the
742metadata in XML, but the really nice feature is that it combines information
743from the DDS and DAS, making the association of attributes to variables much
744easier.
745
746Updated the reference guide (HTML pages in docs).
747
748Fixed a pernicious bug in GNURegex.cc
749
750Added the class ConstraintEvaluator. The DDS class now takes the constraint
751evaluator as a parameter, so it's possible to replace ours with your own.
752
753The single library libdap has been split into three libraries: libdap for the
754DAP functionality, libdapclient for the client-side classes and libdapserver
755for the server-side classes.
756
757Added INSTALL.AIX which contains information about building libdap on AIX
758using the _native compiler_.
759
760News for version 3.6.2
761
762This version includes two bug fixes.
763
7641. The library can now correctly reads binary data objects saved using the web
765interface. Before, this was very hard to do. The utility getdap has been
766modified so that it can decode these saved '.dods' files.
767
7682. The DODSFilter class used to build all of our data handlers no longer
769blocks when returning a data object to a web browser. This fixes a problem
770where the 'Get Binary' button on the data server's web interface would hang
771seemingly forever. In fact it did return the data blob, but only after the
772blocked handler had timed out.
773
774News for version 3.6.1
775
776Fixed a bug in deflate.c: Some comments used the C++ style comments and gcc
777rejected that.
778
779Data server filters built with the 3.6.0 library were not compatible with the
780dap-server 3.6.0 software because the DODSFilter class did not recognize the
781-t option (which is used to pass the handler a timeout value).
782
783News for version 3.6.0
784
785Added patches for RPM spec files from Patrice Dumas.
786
787Fixed a problem where Grids with two or more dimensions with the same name
788were flagged as broken (by Grid::check_semantics). Now they are allowed as per
789the specification.
790
791Added a new method get_parent() to AttrTable. This returns the parent
792container for this AttrTable.
793
794I removed the old iostream methods from the library. These methods should not
795be used because in many cases since other parts of the library use the C/stdio
796functions for I/O. In older versions of gcc, it was possible to mix the
797two types of I/O systems, but not now (and not in other compilers). To change
798your code, look in the file Removed_functions.txt to see the functions/methods
799that have been removed. In all cases there is a version that takes a FILE *
800in place of the ostream &. Use the FILE* version. If you're performing I/O
801that relies on operator<<() to do type conversions, use an ostringstream
802in your code and then write the string to stdout (or wherever) using fprintf
803like: fprintf(stdout, "%s", oss.str().c_str()). Ugly, but easier in some
804cases than replacing lots of tested C++ I/O with fprintf calls.
805
806I removed old methods in Connect that have been deprecated for more than
807a year. See Removed_functions.txt
808
809I removed the old Pix methods. See removed_functions.txt.
810
811I removed the const char * overloads added to prevent collisions between
812the Pix and String (not string, but GNU's old libg String class) methods.
813
814Added protocol version number header to responses which use the set_mime...()
815functions. The new header is called "XDAP-Protocol" and its value is the
816two digit DAP protocol version number. This is now used by the client-side
817deserialize() methods; I assume that a server that does not announce its
818protocol version is a 2.0 server.
819
820Removed the set_mime...() functions which take an iostream; use the ones
821which take the FILE* instead. We replaced the iostream versions with FILE*
822versions a long time ago because the parsers all use FILE* I/O functions
823and mixing the C++ and C I/O is not predictable. The old functions were
824deprecated. To fix your code, just change the iostream variable to a FILE*.
825In most cases this will mean changing 'cout' to 'stdout.'
826
827News for Release 3.5.3
828
829Changes to the Regex software. I've reimplemented the GNURegex code to
830use the only the POSIX functions. Because of this there are some subtle
831changes in the way the class Regex works. These changes address bugs that
832show up on Mac OS/X 10.4 (Tiger).
833
8341) Meta characters like '{' now have to be escaped like '\\{'
8352) See the docs for the Regex::match and Regex::serach methods. Regex:match
836   returns the number of characters that match or -1 if there's no match.
837   Regex::serach returns the position of the _first_ match (not the longest
838   as with POSIX) and the length of that first match in the value-result
839   parameter 'matchlen'.
8403) The Regex constructor now takes only one argument, the regular expression
841   to compile. There's a second ctor that takes a second parameter (an int)
842   but it is a dummy.
843
844As a result of these changes, a small portion of the interface for libdap
845has changed.
846
847Build improvements from Patrice Dumas.
848
849Added a Mac OS/X package and RedHat rpm/srpm targets. There's also a pmsp
850file for use with Mac's PackageMaker.
851
852News for Release 3.5.2
853
854Fixed a bug where malformed Error objects from servers caused an exception.
855This caused the original error message to be lost, not very helpful.
856
857The library used a compile-time switch to control use of the factory class for
858creation of objects at run-time. This was causing more trouble than it was
859preventing, so I removed it. Code should switch from the 'virtual
860constructors' to the factory class now.
861
862The Test classes in the subdir 'test' should now produce the same values on
86364- and 32-bit machines.
864
865Unit tests should all work (although one of the tests for util.cc is known to
866fail on FC4).
867
868Revamped the build to use automake.
869
870Regression tests and the test classes are now in the subdir 'tests.'
871
872The unit tests are now in the subdir 'unit-tests' and are not built or run by
873default. Some of these tests require access to the Internet to work and I
874decided to make then not run using the make check target from the top level
875(the regression tests in 'tests' do run using the top-level check target) so
876that the build would work w/o access to the net.
877
878The rpm spec file has been updated. See INSTALL for information about
879building rpm distributions.
880
881Thanks to Patrice Dumas for help on the autoconf/make, with gnulib and the
882rpm spec file.
883
884News for Release 3.5.1 beta 2005/05/13
885
886I changed some of the build parameters; the utility script is now named
887dap-config, the headers now install into $prefix/include/dap and the static
888library no longer has a version number appended. I've also written a rpm spec
889file which can be used to build a rpm file of/for a binary distribution. At
890this stage you'll need to be pretty savvy with RPM to get it to work; I'll
891write up instructions soon.
892
893News for Release 3.5.0 beta 2005/05/05
894
895Changes in the way the software is organized:
896
897* First, the old 'DODS' CVS module is being broken up to facilitate more
898  frequent releases of software. libdap++ has a new CVS module named
899  'libdap.' To access the software using CVS, use 'cvs co libdap' (where in
900  the past you used 'cvs co DODS/src/dap' or 'cvs co DODS' and then changed
901  into the DODS/src/dap directory).
902
903* The autoconf scripts have been updated; still no libtool or Makefile.am,
904  but the scripts are much more robust.
905
906* The third-party packages are no longer bundled with the library. In a sense
907  they never were, but they _were_ a part of the DODS CVS module. Now it's up
908  to you to get and install the required packages. Look on the web site (or
909  Google) for libxml2 and curl. We build using curl version 7.12.3 and libxml
910  version 2.6.16; curl 7.12.0 and libxml2 2.5.7 should work.
911
912* The libdap software now installs in $prefix/{lib,include,bin} instead of
913  inside the 'DODS tree.' By default $prefix is /usr/local; use the --prefix
914  option of configure to specify a different directory than /usr/local. The
915  library itself installs in $prefix/lib as libdap++.a.3.5; libdap++.a is
916  symbolically linked to that file. The header files now install in
917  $prefix/include/libdap-3.5; $prefix/include/libdap is symbolically linked
918  to that directory. The utilities geturl and opendap-config have been
919  renamed getdap and dap-config, respectively (the name geturl corresponds to
920  another utility). The getdap utility is, except for the name change,
921  exactly the same as geturl. The dap-config script provides a way to
922  determine which libraries should be included when linking with a particular
923  build of libdap++. It also provides information about the version of the
924  library linked to $prefix/lib/libdap++.a and some other stuff. Use
925  dap-config --help for a listing of all the options. Finally, the deflate
926  program, which is used by some servers to provide compressed responses and
927  is called by the library is not stored in $prefix/sbin (except on win32
928  where it's stored in $prefix/bin).
929
930  The usage program is not currently installed; once we complete the
931  reorganization process it will find a good home.
932
933Other changes to libdap++:
934
935* The library now uses a factory class to determine how to instantiate
936  specializations of Byte, Int32, et cetera. The class BaseTypeFactory
937  defines the interface for the factory and provides a default implementation
938  of the class. This implementation instantiates Byte, ..., Grid. Also
939  supplied with the library is TestTypeFactory which instantiates the Test
940  type classes (TestByte, ..., TestGrid). If your use of the library requires
941  that the type classes be specialized, then you must modify your software so
942  that it includes a factory class that specializes BaseTypeFactory. Then,
943  when you create a DDS (or DataDDS) pass a pointer to an instance of your
944  factory to the DDS constructor (or use the new DDS::set_factory() method).
945  Look at BaseTypeFactory and the example specialization TestTypeFactory.
946  It's very straightforward to make the change.
947
948  For applications which don't specialize the type classes, the default
949  factory should be fine. To avoid using the new DDS constructor (which
950  requires that a pointer to an instance of BaseTypeFactory be supplied), your
951  code must #define the symbol DEFAULT_BASETYPE_FACTORY. If this symbol is
952  not defined (at compile time) then various compile-time errors will occur
953  (the idea being this will prevent software from building and silently
954  ignoring specializations of the type classes). If defined, this use the
955  default factory class.
956
957  The documentation for the DDS constructor has some more information.
958
959* The library contains support for the DDX object. The DDX will become the
960  foundation of the DAP3 protocol. It uses XML to describe the information
961  currently represented using our 'curly-brace' notation and also bundles
962  the attributes along with the variables they describe. This will simplify
963  many processing tasks for clients. The software provided simplifies
964  generating the DDX by building it from existing DAS and DDS objects.
965
966* There has also been some significant re-factoring in DDS and DAS: The
967  DDS:send() method has been copied over to DODSFilter and the version in DDS
968  has been deprecated and will be removed in a future version of the library.
969  The library uses STL iterators almost exclusively and the next version will
970  eliminate the ancient Pix class.
971
972* The function dods_root() is now called libdap_root() and tests the
973  environment variable LIBDAP_ROOT. If that variable is not set,
974  libdap_root() returns the value passed to the --prefix option of configure
975  or /usr/local if the option was not used. Added to libdap++ is a function
976  libdap_version() which returns the version number of the library. Note that
977  libdap_version() is declared as extern "C" so that it can be used in
978  configure tests to check for the library.
979
980* The servers no longer provide three programs to handle the das, dds and
981  data requests. Instead one *_handler is provided. This reduces the size of
982  the servers by a factor of three and paves the way toward integration of
983  the HTML and ASCII code into the server binary, which will improve the
984  performance and security of those features.
985