Synthesis' changes to SyncML RTK - History
------------------------------------------


2002-09-03  - changed message size calculation from inaccurate estimation
              to RTK's built-in space_evaluation method. This is accurate,
              but RTK code had a few nasty bug that took many hours to
              find and fix.

2002-11-27  - fixed bug in sml which prevented creating CTCap without Properties
              (but e.g. P800 email sends this).

2003-04-24  - Fixed RTK to generate MaxObjSize
            - Fixed to send namespace according to SyncML version
              and accept all namespaces beginning with "SYNCML:SYNCML"
              as namespace for document.

2003-04-28  - Fixed a zillion bugs in the RTK that made SyncML 1.1
              fail (Nokia 7250). Encoder support for new DevInf
              flags (NOC, UTC, LargeObjSupport) was completely
              missing (interestingly, the TN_DEVINF_xx were defined
              but not listed in the tag table). Hopefully corrected
              all these now.

            - engine/rtk: RTK was using incorrect FPI's in WBXML when using
              SyncML 1.1. Introduced "vers" parameter for
              encoder to handle all these version dependencies neatly

            - SyncML RTK PPC: xptitcp.c for PocketPC did rely on send()
              to send the entire buffer, which is not something that
              can be guaranteed (altough it is normally the case).

            - SyncML RTK PPC: xptitcp.c tcpSendData() allowed a
              timeout of only 5 seconds for the socket to get ready
              for send(). In the HTC SmartPhone2003 this timeout gets
              exhaused after around 20k of data sent over GPRS, so
              sending failed. Now added a loop retrying the select()
              for about 4 minutes (interruptable). Made HTC work!

2003-06-26  - Reorganized xpt-tcp.c/h and xptitcp.c/h to have all platform-specific
              code in xptitcp.c. Standard (generic) implementation of TCP read and
              write is still in xpt-tcp.c but can be disabled if xptitcp.h
              defines PLATFORM_TCPxxxx symbols. A tcpEnableSSL() dummy is now
              also in xpt-tcp.c, so for a 100% standard xpt the xptitcp.c (which
              we added to the toolkit) is not a requirement any more.

            - Moved WINCE-specific timeout extensions for tcp read/write to
              win/xptitcp.c

2003-09-03  - Palm: Fixed bug in xptitcp.c: when send() did not send all
              bytes at once (PalmOS seems to send only 16k per call)
              we got a "Sending Error...". Now implemented a loop
              that send()s until all data is transmitted.

2003-11-12  - PalmOS client: Fixed problem in xptitcp.c which caused the net
              connection to be shut down even if it was already open
              when starting the client.

2004-02-23  - XPT: HTTP send was moving data in the send buffer (copyBlock(),
              called by encodeData()). Changed to only update the buffer
              pointer instead - send buffer should REALLY be read-only for
              sending routines!!

2004-04-28  - xpt-http: implemented CONNECT for proxy with SSL case.

            - PALM: implemented new stuff in xptitcp.c to allow deferred
              SSL handshake for SSL/Proxy case. Could not be fully tested
              because Palm emulator occasionally crashes on SslRead and
              SslReceive, however we could run one SSL session through the
              proxy so we assume its ok. Needs testing on real PalmOS >=5.2
              device to verify.

2004-10-12  - working gzip (receiving only!) support now in xpt.

2005-01-10  - Added new error codes in xpt to pass through user abort from
              TCP level down to xptclientbase: TCP_TC_USER_ABORT in TCP,
              HTTP_RC_USERABORT in HTTP.

2005-01-11  - Made sure USER ABORT condition is also checked when opening
              connection, not only in message exchange.

2005-03-07  - RTK: Found catastropic bug in xltdec.c in routine concatPCData(), which
              was called only when (WB)XML contents were encoded not as a single
              string, but consisting of multiple, adjacent strings. The routine just
              did it plain wrong by using strcat into a buffer that did not have
              correct size allocated first.

            - RTK: Added #ifdef to RTK sml part to include the strings for the XML
              tags even if only WBXML is included in a client to allow decoding
              tags that are not represented by their WBXML token but by their
              XML tag string.

2005-04-29  - xpt http: Added HTTP_KEEP_CONNECTION #define

2005-05-18  - xpt: finished HTTP 1.1 "Connection: keep-alive". Now both XPT servers
              and XPT clients support this. The #define HTTP_KEEP_CONNECTION now
              only affects the config default for clients. For XPT servers, keep
              connection is always supported.

2005-06-07  - PalmOS: fixed error checking in xptitcp.c when sending or receiving data
              which caused that the app did not notice when the socket closed early
              (e.g. due to SSL timeout in HTTP 1.1 keepalive case) and then hung in
              waiting for receive on a closed socket.

2005-08-16  - Updated sml part of RTK from current sourceforce version - mainly change
              to doxygen style docs, no substantial code changes at all.

2005-08-17  - Many changes to adapt RTK for DS 1.2.

2005-09-29  - RTK: missing VerCT for CTCap, now added it.

2005-11-11  - SyncML RTK: made xml parser understand xml where metInf tags are used w/o
              namespace attribute (as in sync4j PDA clients).

2006-07-11  - xpt: Made HTTP auth support work in Basic and Digest mode
              (various little problems in xpt).

2006-09-07  - xltenc(XML): Finally implemented a real safe (= XML nestable) <![CDATA[
              implementation that works without any restrictions: "]]>" in input
              string is escaped by exiting and re-entering CDATA and becomes
              "]]>]<![CDATA[]>". This breaks the contained ]]> sequence so it is
              no longer visible to the surrounding CDATA parsing process.

            - xltenc(XML): Now checking strings passed as SML_PCDATA_STRING for invalid
              XML chars (&,<,>) and auto-switch to SML_PCDATA_CDATA generation mode if so.
              This mostly because of filter strings which now often contain pseudo-entities
              like "&iCON;" or "&NULL;".

            - xltdec(XML): Made parsing PCDATA sections that contain normal PCDATA and CDATA
              mixed actually work. The design was prepared for it, but was apparently not
              properly debugged.

            - Fixed bugs in xltdevinf, FilterRx parsing was missing, FilterCap
              parsing did not really work.

            - Added workaround in xltdevinf.c to allow extra rx-pref
              and tx-pref (as some clients send these).

2006-11-02  - Added detail parsing error logging for sml toolkit decoder.

2006-11-08  - xpt: gzip receiving did not work correctly when sender did not
              use chunked transfer, but sent gzipped message in a normal
              response (where content-length is the size of the compressed data).

2006-12-06  - XPT: fixed httpRead to make sure it always waits until it
              can return some data except if connection or document ends.
              This is important for chunked mode, because there are cases where the server
              sends some data (e.g. a chunk header only) that does not
              decode to any output of data. In this case, httpRead now
              repeats reading from the TCP socket until data arrives or
              connection ends.

2007-06-20  - xpt/http: Enhanced parsing of Connection: header, must be prepared for
              multiple tokens in http 1.1, of which only one might be the "close" token.

2007-08-14  - Made SML generator accept a <Property> with <ValEnum>s AND a <DataType>,
              when the latter is an empty string. Still, only ValEnums will be generated.
              This is to correctly translate WBXML back to XML from devices like E90.

