Add ActiveSync support to Horde for allowing Horde to sync with mobile devices using the mobile device's support for Microsoft Exchange/ActiveSync. Use Z-Push library (http://z-push.sourceforge.net) for handling ActiveSync protocol communication.
Integrate the Z-Push library into Horde. Provide the ability for Horde to provide over the air synchronization of email, contacts, and calendar data to devices such as the iPhone/iPod Touch, Android and any other system supporting ActiveSync.
The ActiveSync code has been merged into git master, but is not active by default. You should be aware that this code is still very experimental. While it mostly works for me in my tests, on my test devices, there are likely still many bugs. It may work, it might not, or it might make your iPod grow legs and run for higher ground. You have been warned.
To activate the server, you need to enable it in Horde's configuration. You will see an ActiveSync tab. Right now, the only thing configurable is the directory you would like to store the state files in.
You will also need to configure your webserver to redirect the URL Microsoft-Server-ActiveSync to your horde/rpc.php file. How you do this depends on your webserver and it's configuration. For Apache, something like:
Alias /Microsoft-Server-ActiveSync /var/www/html/horde/rpc.php
or for lighttpd:
alias.url = ("/Microsoft-Server-ActiveSync" => "/var/www/html/horde/rpc.php");
Contacts and Calendar syncing is mostly working. The most notable issue is with recurring event exceptions. Exceptions created on the PIM work to a point, exceptions created in Kronolith, well, not so much.This code has been tested to some degree on the following devices:
|Android SDK Emulator||2.0.1 and 2.1||Contacts only as the emulator does not have a native calendar application|
|Motorola Droid||Android 2.0.1||Contacts and Calendar data (Native calendar still has some issues)|
|TouchDown For Droid||Version 5.1.0028||Contacts and Calendar|
|iPod Touch||3.1.3||Contacts and Calendar|
Horde_History state driver. Currently, ActiveSync support uses a file-based state driver to persist the PIM state so we know what changes. This is a refactored implementation of what the Z-Push library does. For Horde, this is inefficient, as we have the data needed to know what has changed and when. Once the majority of the feature set is working, a Horde_History driver should be written to replace the file based driver when syncing contacts, calendar, and todo data. We might still need it if/when push email is implemented. The backend drivers are able to specify a particular state storage to enable this functionality if it is needed.
Need to implement ghosted properties / SUPPORTED tag. Currently, each message that is sent from PIM -> Server is overwritten and replaced with only what the PIM sends. It's possible for some PIMS to ghost contact and calendar properties so that only the supplied tags are changed and missing, ghosted, properties are retained on the server. When a PIM supports this, it sends a SUPPORTED tag with children representing the NON-ghosted properties. The absence of the SUPPORTED tag would indicate that any property not transmitted should be handled as a ghosted property.
Configurable heartbeat interval range: The protocol allows for rejecting heartbeat intervals that fall outside a specific range, and send back a suggested heartbeat interval to the client. This should be implemented as a configuration value.
Support for provisioning is already implemented, but we still need to figure out all the possible policies available, and the values to use to set them etc... Once more are available, they should be added as configuration parameters.
Todo syncing: Neither the iPod/iPhone or Android have a native Todo application. TouchDown does provide one, but backend support still needs to be added.
Some discussion/issues/info on calendar sycing
Some discussion on remote wipe issues with various devices
Another AS implementation in PHP - there is some good implementation information there for the taking.
Back to the Project List