2009-06-04  Michael Bell <michael.bell@web.de>
  * Released 0.5.4
  * All header files of the high level API are missing
    the extern "C" declarations for C++ (ticket #240).
    The patch was supplied by Sascha Peilicke.

2009-05-15  Michael Bell <michael.bell@web.de>
  * Released 0.5.3
  * Added a first implementation of the function smlDataSyncAbort.
    This function can be called if the synchronization must be abortedi
    (e.g. because of another external error like a full disk).
  * HTTP transport is now supported for old Solaris libsoup 2.2 packages
  * Added a missing SmlDevInf reference which causes a segmentation
    fault if a cached SmlDevInf object is used by OpenSync's SyncML
    plugin
  * Added support for the case that a client sends alert 200 and
    receives alert 200 but needs to update to a SLOW-SYNC alert 201
    because of an internal problem like wrong anchors (NOTE: This code
    is untested because I failed to simulate this until now.)
  * Fixed bugs related to Funambol/ScheduleWorld:
     * Fixed wrong vCal 1.0 device information.
       If the default format of a datastore is iCal 2.0
       then the content type for vCal 1.0 was wrong.
       Old (buggy): text/calendar 1.0
       New (correct): text/x-vcalendar 1.0
     * The Funambol server on scheduleworld.com returned error code 511.
       So the error code is supported now too.
     * The requested remote alert type is unknown and so let's signal
       this to the library user.
     * The getAlertTypeCallback should only be called once per
       data store.
     * Fixed return value of smlDataSyncClientSendAlert.
       If a slow-sync alert is initiated and the remote peer did not
       request it then the function must return false to trigger a
       status 508 (REFRESH_REQUIRED).
       If the requested alert type is not known then there is no need
       for a status and the function returns true. This can happen
       if the remote peer did not trigger the client via a SAN
       (e.g. OMA DS client over HTTP). 
  * Added support for a separate mapping callback 
  * Added better cleanup code for the transport layer in
    smlDataSyncObjectUnref
  * Fixed several comments
  * Added some trace statements
  * Several fixes for libsoup
     * Added tests to validate libsoup
     * Several fixes for the asynchronous http client
     * Added timeout to asynchronous http client session
     * Fixed client callback for libsoup 2.2
     * Own thread and ctx for HTTP client
     * Added workaround for libsoup 2.2 http clients under Solaris
       (asynchronous http client support does not work under Solaris)
     * some cosmetical changes for http server code
       (traces, comments, assertions)
     * Added an internal function to run a function in a special thread.
       This feature is necessary because some libaries like libsoup are
       only designed for single-threaded applications. This means that
       every function must be called from the same thread. Otherwise
       there is no guarantee about the behaviour of the library.
     * libsoup_async respects now that SoupSessionAsync was designed for
       single-threaded applications. 
  * Multi session fixes
     * Added multi session safe SAN callback
     * Fixed device information agent to be multi session safe.
       The old code only works if the manager manages exactly one
       session. If there is more than one session then the agent must
       take care about the different remote device capabilities.
     * Fixed remote device handling to be multi session safe.
       This is important if you ever implement long living processes or
       if you implement a client which wants to use its own session ID.
     * use new SAN callback which provides the session too which avoids
       race conditions (alternatively you can block the thread until the
       event SESSION_NEW will be dispatched) 
  * Transport layer fixes:
     * Added code to test the transport layer context management
     * If a transport implementation has no public connect function
       then it cannot send a connect event.
     * smlTransportFinalize calls the finalize function of the transport
       implementations directly. The HTTP implementations depend on the
       correct thread because libsoup is single-threaded. This means
       that the worker thread must be available until all connections
       are closed (disconnected or finalized).
       Therefore the finalize function of a transport implementation
       must be called within the worker thread and the thread must be
       shut down after the finalize function was called. 
  * Device Information fixes:
     * Added automatic localtime enforcement if the remote device sends
       a device information without UTC support
     * Ensure that the device information is always at the end of the
       message
     * If the alerts and the device information are in the same SyncML
       message then the alerts are dispatched faster. So it is necessary
       to check manually for an available remote device information. 
  * Made smlQueueDetach of sml_queue.c thread safe
  * Made pendingMaps of objects/sml_ds_server.c thread safe
  * Added support for coverage analysis
  * Introduced internal mapping function.
    A change can now be freed after the status was received. 
  * Fixed incorrect use of pthread_self (ticket #222).
    The patch was supplied by Henrik Kaare Poulsen.
  * Added missing @ONLY which reduces the memory usage from cmake
    (ticket #223).
  * Fixed wrong g_error usage (ticket #224).
    The patch was supplied by Henrik Kaare Poulsen.
  * Added default XML encoding explicitly because Sync4j requires it
    (ticket #225).
  * Abort more carefully
    (ticket #226 - does not affect 0.5.2 or earlier).
  * Added missing OBEX_TransportDisconnect in transport/obex_client.c
    (ticket #227). The original patch was supplied by Patrick Pfeifer.
  * Fixed some Windows/MinGW issues (ticket #228).
    The patch was supplied by Henrik Kaare Poulsen.
  * Fixed the target and source setting in change commands
    (ticket #229).
  * Google related fixes (ticket #230):
     * The HTTP client of DS API must support WBXML too.
       Google only supports WBXML today.
       (https://m.google.com/syncml is still a beta.)
     * Google has a wrong implementation of Alert Status.
       The Item Data is the Next Anchor. 
                <Status>
                  <CmdID>5</CmdID>
                  <MsgRef>2</MsgRef>
                  <CmdRef>3</CmdRef>
                  <Cmd>Alert</Cmd>  
                  <SourceRef>contacts</SourceRef>
                  <TargetRef>contacts</TargetRef>
                  <Data>200</Data>               
                  <Item>                         
                    <Data><![CDATA[20090417T112101Z]]></Data>
                  </Item>                                    
                </Status>                                    
  * If an Item is deleted then it is not necessary to add a Data tag
    (ticket #232). The patch was supplied by Kwan hong Lee.
  * Sanitized UIDs (ticket #233).
  * Fixed DS API HTTP client inital allert which always sent a SLOW-SYNC
    alert (ticket #234).
  * Fixed skipping of Ext element (#235).
    The original patch was modified because the end of the new function
    could be reached without a return statement.
    The original patch was supplied by Kwan hong Lee.
  * Ticket #236 is a duplicate of ticket #232.
  * Fixed the handling of empty Data elements (ticket #237).
    The original patch was supplied by Kwan hong Lee.

2009-03-10  Michael Bell <michael.bell@web.de>
  * Released 0.5.2
  * Used SourceForge.net FRS for the first time
  * Discovered that xmlInitParser and especially xmlCleanupParser must
    be handled and called by the library user.
  * Added support for automatic Bluetooth channel detection
  * Added support for generic content-types
  * Added automatic base64 conversion for binary data types
    which are prefixed with application, audio, image, message and video
    (ticket #185)
  * Added IRDA support to OBEX client transport (ticket #212).
    The patch was supplied by Peter Collingbourne.
  * Added a test for the high level DS API
  * Added automatic UTF-16 to UTF-8 conversion for wrongly embedded SMS
    which is used bei Nokia S60 platform (ticket #217)
  * Added OMA DS 1.2 SAN support for content-types without an OMNA WSP
    number (ticket #217)
  * Added support for OMA DS 1.2 SAN without any data store. Mobiles
    which receive such a SAN should answer with alerts for all
    configured data stores. The problem is the term ''SHOULD''.
    Nokia S60 mobiles do not work this way for example.
  * Fixed string representation in OMA DS 1.2 SAN implementation
    (trailing NULL bytes must not be copied).
    Nokia S60 platform mobiles work now with OMA DS 1.2 over OBEX.
  * Fixed build environment to build correctly if OpenOBEX or libsoup
    are missing (ticket #211)
  * If a SAN is received then the remote location must be taken from
    the SAN alert.
  * DS API should only set configuration options if they are present.
  * Added support for receiving SANs to DS API
  * The target of an alert can now be different from the source in
    the DS API (e.g. source = Contacts, target = Addressbook).
  * syncml-ds-tool supports device faking.
  * Fixed wrong return value for vendor detection via AT commands
    (ticket #213). The patch was supplied by Frederic Brin.
  * Added Samsung SGH-F480 to the list of the supported models
    (ticket #214). The patch was supplied by Frederic Brin.
  * Added an assertion to smlDataSyncInit which checks for a non-NULL
    dsObject (ticket #215)
  * Fixed code to handle specific Samsung AT commands
    (ticket #216 - still open). A patch was supplied by Frederic Brin.
  * Added support for SourceParent and SourceTarget in XML parser and
    assembler (ticket #217 and #218)
  * Added support for SupportHierarchicalSync of OMA DS 1.2 DevInf
    (ticket #217 and #218)
  * Added some new content-types which were registered by OMA DS WG
  * Added support for authenticated OMA DS 1.2 SANs
  * If an enum type will be changed in the future then the order is
    critical. Hard coded values of the elements makes enums robust
    against re-ordering.
  * The HTTP client transport of the DS API does no longer instantiate a
    link object because the HTTP client transport does not support this.
  * If an error is dereferenced by smlErrorDeref then the caller can no
    longer access the object. (This makes sense because otherwise the
    caller should not dereference the object.)
  * smlTransportSetConfigOption traces no longer PASSWORD options.
  * If a link of a server is requested to be disconnected but it is
    already disconnected then this is sometimes no error when a very
    fast client disconnects before the server.
  * If the server closes the connection before the client can do this
    then the disconnect command of the client fails
    but the client is disconnected.
  * Fixed wrong interpretation of return value from smlTransportFinalize
    in data_sync.c
  * Fixed wrong handling of REPLACE command during SLOW SYNC
  * Fixed wrong context free of OBEX server transport finalize.
  * Fixed error handling and reference counting of smlCredNewAuth
  * Fixed again several memory leaks and removed all suppressions for
    libxml from valgrind.supp.
  * Added some code to handle the not thread safe check library

