================================================================================
Changelog
================================================================================

The following page describes all of the changes that were made for specific
versions of pysiriproxy.

----------------------------------------
Release 0.0.7
----------------------------------------

1. Created a configuration section called 'Debug'. This section contains a
   single configuration property called 'ExitOnConnectionLost' which, when
   set to True, forces the pysiriproxy server to exit completely when an
   established connection to the iPhone is lost. This allows an external script
   to monitor the server and restart it when it crashes allowing the
   connections to be cleanly re-established.

2. Catching and handling the StopIteration exception which is raised when a
   speech rule function uses some form of 'yield' such that the yield is
   sometimes not called. Since yield is not called the generator is empty
   and throws the StopIteration exception when next() is called.

3. Updated the UnicodeItems list in the plist module to include the 'Title'
   key. This fixed the 'Cancel Alarm' request. The response (list of
   alarms) contained unicode data in the 'Title' entry and thus caused the
   iPhone to crash when it was displayed. This fixes that issue.

4. Merged iOS 6 bug fix from SiriProxy into our branch. This handles a new
   type of packet used to clear the context which is similar to a Ping or
   Pong message.

5. Fixed issue 10. When an unknown packet was encountered it was trying to
   convert the packet to a hexadecimal string, however, the function did
   not exist and thus caused an exception.

6. Added version key ('v') to all returned objects. Currently set to a
   constant value of '2.0' which can be configured in the SiriObject class.

7. Removed all instances of Guzzoni within the code when refering to Apple's
   web server by name. This is due to the fact that, as of iOS 6, there is
   another web server (kryten.apple.com) which means referring to the
   server as 'Guzzoni' is both confusing and incorrect.

8. Using the hostname base (e.g., Kryten for kryten.apple.com, or Guzzoni
   for guzzoni.apple.com) as the name of the Server connection class. This
   string will appear in all data logged by this class making it clear
   which of Apple's servers is actually being used during testing.

----------------------------------------
Release 0.0.6
----------------------------------------

1. Fixed bug with conversion from Python dictionary into a plist object.
   Currently there is an issue with the text to speech (tts) tags causing
   the iPhone to crash when sent to the phone (the hex characters in the
   tags are not being properly handled at this point in time). The current
   solution is to remove tts tags from the dictionary entries that contain
   tts tags. There was a bug in the previous version that only removed the
   first tts tag -- rather than all of them. With this update all of the
   tts tags are removed from the strings. This should fix queries such as
   "What time is it in New York?".

2. The server has been updated to better handle dates. In the previous version
   the server was replacing any time related dictionary entry with the current
   date and time of the server. The server has been updated to try to convert
   the time values given (number of seconds since the epoch) into the correct
   date. When doing this it seemed that the resulting date was usually thirty
   one years in the past from its actual date. The current solution (read:
   hack) is to simply add thirty one years to the resulting date. This seems
   to have worked for almost all of my tests, but I have noticed that it
   resulted in Siri speaking a date that was one day before the correct date
   (which was being displayed on the phone). This requires further
   investigation.

3. The Python object dictionaries that are recieved from the iPhone and the
   Guzzoni server often contain entries that have hexadecimal values within
   the strings. Sending these strings to the iPhone typically results in the
   iPhone crashing and rebooting. The current solution is to replace the
   common hexadecimal values in the strings with their ascii equivalent.
   The speakableSelectionResponse and selectionResponse keys sometimes
   contain hexadecimal values, but were not being replaced. This update
   makes sure to replace the hexadecimal characters in these entries as
   well. This fixes queries that involve button presses to disambiguate
   a specific query.

4. Added instructions to the online documentation for configuring
   pysiriproxy to use the iOS 6 server (kryten.apple.com).

5. Updated gen_certs.sh to take a "-v" argument which allows the user to
   specify the version of iOS the generated certificate should support.
   The default is for the certificate to support ``*.apple.com`` which will 
   support both iOS 5 and iOS 6.
   
   Example usage: ./gen_certs.sh -v iOS6

6. Updated the setDnsmasq.sh script to add dnsmasq support for both the
   guzzoni and kryten webservers (which are iOS 5 and iOS 6 servers
   respectively). This allows the server to accept connections from
   iPhones with either version without being re-configured.

7. Updated the default pysiriproxy.cfg file to connect to the
   iOS 6 server at kryten.apple.com rather than the iOS 5 server
   at guzzoni.apple.com.

8. Updated the utf module to support replacing the hexadecimal
   characters representing a degree symbol. Currently the hex
   characters will be replaced by the string " degrees" which
   is semantically the same string.

9. Updated the setup.py script to add setup dependencies for specific
   version of: biplist, twisted, and pyamp. This should allow the
   setup script to handle downloading and installing the necessary
   versions of each of these modules.

10. Fixed the installation setup procedure. The previous version had an
    error due to the update to using setuptools rather than disttools.
    The default configuration files were no longer located in the
    expected directory and thus could not be copied to the user's
    home configuration directory. This has been fixed in this version.

11. Updated the documentation to explain modifications to support
    using iOS 5 and iOS 6 versions.

12. Created the **Timestamp** configuration property under the
    Logging section. This variable contains the format string which
    will be used to apply a date to all logged messages.

    Example format: "%Y-%m-%d" yields 2012-08-04

    For more details on the format string see the man page for the
    date command. No timestamp will be applied to logged messages 
    if this property is an empty string.

13. Moved config folder and files underneath the pysiriproxy source
    directory so that the setup script can include them automatically.
    Setuptools provides the ability to install any SVN controlled
    data files it finds with one line. This removed some unnecessary
    code in the setup script.

14. Added step to install python*-dev to the installation
    instructions for twisted. Without this easy_install fails to
    install twisted.

15. Fixed bug with converting specific object keys to unicode. In
    previous versions this was not functioning correctly, and thus
    text to speech (TTS) tags would cause the iPhone to crash. Now
    the strings are being converted to unicode properly which allows
    the TTS tags to function as expected. These strings no longer
    need to have special hexadecimal characters replaced either.

----------------------------------------
Release 0.0.5
----------------------------------------

1. Using StringIO to send a string containing plist data to CFPropertyList
   instead of writing a file and deleting the file afterward.

----------------------------------------
Release 0.0.4
----------------------------------------

1. Using the biplist module to convert plist objects created by
   CFPropertyList into binary plists. The previous method was to call the
   external plutil Perl script. This was reported as causing significant
   delays (0.5 to 1.5 seconds) while running pysiriproxy on an iPhone. This
   change solves that issue by doing the conversion in Python rather than
   using the Perl script.

2. Updated setup.py script to allow distributions to be created and uploaded
   to the Python Package Index.

3. Updated the documentation to include installation instructions for biplist,
   and for using setuptools to install pysiriproxy.

----------------------------------------
Release 0.0.3
----------------------------------------

1. The connection to the Guzzoni web server is now tied to the iPhone
   connection. The Guzzoni connection is only established once the iPhone
   connection is finished, and both are closed when the iPhone connection
   is lost. This resolves an issue where the server was no longer usable
   after a long period of inactivity -- the Guzzoni connection was closed
   and not being re-established.
2. Added the ability to create map locations and send them to the iPhone
   user so that they are displayed in a list of locations.
3. Added the ability to send directions between two locations to the
   iPhone user which are displayed in the map. The directions can be:
   walking, driving, or public transportation directions.
4. Created a new plugin to demonstrate how to create locations and
   directions.

----------------------------------------
Release 0.0.2
----------------------------------------

1. Documentation updated to fix small mistakes in installation instructions on
   Ubuntu 11.10, and 12.04.
2. The siriproxy script has been made executable to persist through the SVN
   checkout.
3. Added documentation on the changes made to each version of pysiriproxy.
4. Fixed issue with sequential requests not working. The new requests were
   blocked by the previously matched plugin causing the Siri button to continuously
   spin. Now the context is reset on a request completed message (which should
   be sent at the completion of all Plugins). This keeps new requests from being
   blocked, and allows Siri to properly respond to a series of questions.

----------------------------------------
Release 0.0.1
----------------------------------------

Initial release of pysiriproxy.
