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