Web Client SyncML

From Kolab Wiki

Jump to: navigation, search

The Kolab Web Client, based on Horde offers a SyncML-Interface. In Server Distribution 2.2.2, if the web client is installed, the URL to access the interface is


Also check out http://wiki.horde.org/SyncHowTo .

Events and contacts are known to work in beta quality. The quality of the service will depend on the features of the used SyncML client. Managed Funds The Kolab Web Client and Horde developers welcome any help in getting more devices supported.


Compatibility List

Device / Software Connector License How To Supported Features
Microsoft Outlook 2007 Funambol Outlook Client (Version 7.2.1) AGPLv3 (How Sync Outlook 2007 via the Funambol SyncML Client) Calender, Contacts, Tasks, Notes
Mozilla Thunderbird Managed Funds Australia Funambol Thunderbird Client (Version 0.9.1) GPLv2 (How Sync Thunderbird via the Funambol SyncML Client) Calendar, Contacts, Tasks
Nokia E71 Internal Synchronisation Application (How to sync Nokia E71) Calendar (incl. Tasks), Contacts, Notes; beware! and beware!
Nokia E90 Internal Syncronisations (How Sync Nokia E90) Calendar (for the moment)
Blackberry 8310 alias Curve Funambol Blackberry Client (Version 7.2) (How Sync Blackberry 8310) Calendar, Contacts
IPhone SyncML plug-in from Synthesis synthesis.ch The iPhone can synchronise calendars, contacts and todo's with Kolab 2.2.3. Didn't try shared resources yet.
IPhone kolabiphone by Stefan Zimmermann Best Investment sourceforge.net The iPhone can directly use contacts on the Kolab 2.x server. Reads Kolab.xml
Xperia X1 SyncML plug-in from Synthesis synthesis.ch The Sony Ericsson Xperia X1 seems to work nearly perfect except one Thing (See WinMobile specials)
Samsung Omnia i900 SyncML plug-in from Synthesis synthesis.ch The Samsung Omnia i900 seems to work nearly perfect except one Thing (See WinMobile specials)
Sony Ericsson G705 Internal Synchronisation Application Doesn't work.
Sony Ericsson G700 Internal Synchronisation Application Seems to work perfectly

iphone & synthesis

The Synthesis Todo+Cal as well as the contacts app work great but there is one important remark and you might need to patch Horde for Kolab versions prior to 2.3.

Remark: Although this might be valid for all syncML clients you must set the contact source to be synced and to receive changes. This is per-user setting, accessible via the web page (only?). You find it at Horder->Options->Adress book->Adress Books. Here there is a setting "This will be the default address book when adding or importing contacts". The Global Address Book is provided by the read-only LDAP, so here (one of) your local contacts folder is the right choice to be able to sync.

Patch For a bigger number of elements to be synced there is a bug in current Horde in Kolab 2.2.4 handling big amounts of data (but I can't find it right now). Since it is fixed in the repository you can simply patch one file to make it working:

wget -O - 'http://git.horde.org/diff.php/framework/SyncML/SyncML/Command/Map.php?rt=horde&r1=' |patch /kolab/var/kolab/www/client/lib/SyncML/Command/Map.php

WinMobile special

Using Kolab 2.2.3 and Synthesis SyncML Client (Basic) for PDA.
- Entering Dates in Horde with PARTICIPANTS and REMINDER works great! Sync is done perfectly.
- Entering Dates on mobile devices with PARTICIPANTS behaves strange: Date is synchronised perfectly, but the PARTICIPANTS are LOST! Synthesis told us it must be a Server issue, could not find an error within the logs.

Contacts and Tasks are PERFECT!

Funambol, WinMobile,and Kolab

Using Kolab 2.2.4 and Funambol SyncML Client There's apparently a problem with the way Funambol works now. See this Horde bug. It appears to have been patched upstream, so hopefully this will eventually resolve itself.

 # /kolab/bin/openpkg rc all stop

Files to edit (patch):

  • /kolab/var/kolab/www/client/lib/SyncML/Command/Alert.php
*** /kolab/var/kolab/www/client/lib/SyncML/Command/Alert.php    2010-07-05 11:32:54.000000000 -0500
--- Alert.php   2010-08-30 17:54:13.000000000 -0500
*** 152,157 ****
--- 152,162 ----
              // @TODO: proper error handling!
+       //adding next 4 lines for funambol
+       if ($database == 'configuration') {
+             $this->_outputHandler->outputStatus($this->_cmdID, $this->_cmdName,
+                                                 RESPONSE_OK);
+         }

          $clientAnchorNext = $this->_metaAnchorNext;

  • /kolab/var/kolab/www/client/lib/SyncML/Backend.php
*** /kolab/var/kolab/www/client/lib/SyncML/Backend.php  2010-07-05 11:32:54.000000000 -0500
--- Backend.php 2010-08-30 17:54:03.000000000 -0500
*** 446,462 ****
      function isValidDatabaseURI($databaseURI)
          $database = $this->_normalize($databaseURI);
          switch($database) {
!         case 'tasks';
!         case 'calendar';
!         case 'notes';
!         case 'contacts';
              return true;

!             $this->logMessage('Invalid database ' . $database
!                               . '. Try tasks, calendar, notes or contacts.',
                                __FILE__, __LINE__, PEAR_LOG_ERR);
              return false;
--- 446,467 ----
      function isValidDatabaseURI($databaseURI)
          $database = $this->_normalize($databaseURI);
!       //add case configuration for funambol
!       //change semi-colons to colons in tasks calendar notes contacts
          switch($database) {
!         case 'tasks':
!         case 'calendar':
!         case 'notes':
!         case 'contacts':
!       case 'configuration':
              return true;

!             //$this->logMessage('Invalid database ' . $database
!             //                  . '. Try tasks, calendar, notes or contacts.',
!               //next two lines added for funambol
!               $this->logMessage('Invalid database "' . $database
!                               . '". Try tasks, calendar, notes or contacts.',
                                __FILE__, __LINE__, PEAR_LOG_ERR);
              return false;
  • /kolab/var/kolab/www/client/lib/SyncML/Sync.php
*** /kolab/var/kolab/www/client/lib/SyncML/Sync.php     2010-07-05 11:32:53.000000000 -0500
--- Sync.php    2010-08-30 17:53:37.000000000 -0500
*** 624,629 ****
--- 624,633 ----
      function _retrieveChanges($syncDB, &$adds, &$replaces, &$deletes)
          $adds = $replaces = $deletes = array();
+       //next 3 lines added for funambol
+       if ($syncDB == 'configuration') {
+             return;
+         }
          $result = $GLOBALS['backend']->getServerChanges($syncDB,

 # /kolab/bin/openpkg rc all start

It should work fine now; however, you may have to do the same to the following files:

  • /kolab/var/kolab/www/fbview/lib/SyncML/Sync.php
  • /kolab/var/kolab/www/fbview/lib/SyncML/Backend.php
  • /kolab/var/kolab/www/fbview/lib/SyncML/Command/Alert.php

Known Issues

Unable to Sync Calendar / PHP Fatal error compareDateTime()

Open the file /kolab/var/kolab/www/client/kronolith/lib/Driver/kolab.php and edit according to the following lines.

Replace "if (is_null($startDate)) {" with "if (empty($startDate)) {"


Replace "if (is_null($endDate)) {" with "if (empty($endDate)) {"

Solution from the Kolab Mailinglist

Double Sync with SyncML when using external client

Horde is currently agnostic of external clients to the storage backend used by Horde/Kolab. For SyncML any storage changes need to get logged in order to be exchanged with the mobile clients.

Currently the Kolab drivers within Horde will create the necessary changelog. But this currently only happens after synchronization started. Which means that you need to syncronize twice in order to get changes from an external client if you did not log in via Horde after changing something with an external client.

The attached patch has been provided by Univention but needs some cleanup to go in upstream. We mainly need a clean library call in the Horde application libraries that will be called for synchronization.

Double Sync Patch

Solution from the Intevation Mailinglist

Clearing the SyncML info

It could be necessary to clear all the sync info. F.e. if you cleared your phone and want to resync all the info. In my case the synchronisation went wrong and clearing the syncml info in the database helped. So how to do on a openpkg kolab 2.2.2 installation.
Warning You CAN destroy all info allthough Kolab info should be untouched
These instructions delete ALL syncml data for ALL phones

  • Become root
  • go to the right folder: cd /kolab/var/kolab/www/client/storage
  • open the database: /kolab/bin/sqlite horde.db
  • delete all info from horde_syncml_anchors: delete from horde_syncml_anchors;
  • delete all info from horde_syncml_map: delete from horde_syncml_map;
  • quit the database: .quit
Personal tools