resistance is obsolete ™ ;-)

SyncML support for OGo

SyncML is an XML based standard for data synchronization. For example its supported on a lot of mobile phones and would allow OGo to sync calendering and contact information with the PIM software of your phone or handheld.

Update 2005-05-17

This project as an Objective-C implementation of SyncML is currently stalled though parts (like the iCalendar and vCard parsers) are actively continued as part of SOPE.

On the server side two companies are known to work on Sync4J plugins, but no results are available yet.

On the client side, OGo already has SyncML support by supporting MultiSync/EDS as part of the Noodle project.
An Apple iSync plugin is under consideration.
Finally a native GroupDAV plugin for MultiSync was made available today (thanks to Johannes Schneider).

Old Roadmap

These are the planned steps to get a complete SyncML support into OGo:

  1. Work with the OGo Code, especially the ZideStore code a little to undestand where best to link in the SyncML framework (done)
  2. Implement Authentication to OGo via SyncML (done)
  3. Write an program that recevies the Addressbook from OGo, One-Way-Only, using the same SyncML library (done)
  4. Write an OSX program that syncronizes OSX Addressbook with OGo, One-Way-Only, using the same SyncML library (done)
  5. Implement Slow two-way sync (done)
  6. Implement regular Two-Way Sync (in progress)
  7. Implement ALL other Features required by the SyncML specification
  8. Implement other features optional within the SynCML specification

As this is a free time project, there is no telling how and when things will work the way they should or when things are completed. If you would like to help out, please contact us. (see above)

Requirements elicitation
  • The SyncML Framework should be a seperate library
  • It should work with libFoundation or with Apples Foundation Classes
  • It should compile with gcc 2.95 and 3.3
  • The protocol should fully comply with the SyncML 1.1 specs
Current/Old Status

The SyncML vCardReceiver is finished! It can receive the OGo Contacts database, and uses fully SyncML compliant messages.

The AddressBookSync Application for OS X now works! It is able to receive the OGo Contact database and overwrites the local Address Book. It can also do a slow sync.

Warning: Although the vCardReceiver is fully implemented and uses fully SyncML compliant messages, there is still a lot of code missing. Therefore it will probably not work with any other SyncML products, produce strange results, or might even crash.

Howto get/build/install it?

The instructions below are outdated. The versitSaxDriver is now the standard iCal/vCard driver in SOPE 4.5. All the sourcecode lives in Subversion, not in CVS.

  1. check out the syncml module from opengroupwares cvs: cvs checkout syncml
  2. build libsyncml:
    cd syncml/libSyncML;make -s debug=yes install; cd ../..
  3. build versitSaxDriver:
    cd syncml/versitSaxDriver; make -s debug=yes install; cd ../..
  4. build the ZideStore plugin:
    cd syncml/SyncMLZSAdapter;make -s debug=yes install ; cd ../..
  5. (re)start ZideStore
  6. You may now acces the SyncML plugin at http://[yourserver]:23000/zidestore/SyncML
  7. If you have Mac OS X you can use the vCardReceiver XCode project. You Currently need: Mac OS 10.2 with Safari 1.0, MacOS 10.2.7 or higher and XCode. You also need some of the Frameworks (Foundation, DOM, SaxObjC, NGExtensions) in a place where OS X finds them. Last, but not least you have manually copy SyncMLSaxMap.xmap to you ~/Library/SaxMappings directory.
  8. If you don't have MAC OS X you can use the vCardReceiver command line tool:
    cd syncml/vCardRecevier;make -s debug=yes install; cd ../..
  9. The correct way to call it is
    vCardReceiver -u [username] -p [password] http://[youserver]:23000/zidestore/SyncML
  10. If you have Mac OS X you can also try out the AddressBookSync Application. You need 10.3 and XCode. It will receive your contacts and overwrite your local AddressBook.
Warning: Currently only basic authentication is implemented! This means you password is sent unencrypted through the line and anyone might be able to read it. You have been warned!

If you like to see whats going on try this:
Defaults write NSGlobalDomain OGoDebugSyncMLConnectionLogStream 1 (or 0 to turn it off again)

Howto does it work?

The basic architecture of the library is working with callbacks, providing a framework for synchronization

Architectural Image

Related Links

  • SyncML
  • Max Bergers paper on SyncML (online, pdf)
    Some "Semi" FAQ on SyncML...

    Questions asked by Helge and answered by Max ;-)

    Q: Is a SyncML transaction bound to a single URL? (eg all requests on /SyncML like in XML-RPC where all requests go to /RPC2)

    A: Yes.

    Q: Is a SyncML transaction bound to a single "data store", like a calendar or an addressbook, or does a single SyncML transaction involve all "folders" at the same time?

    A: Could involve all data stores.

    Q: Do you need a session / is SyncML stateful?

    A: Yes. And even worse: I need data stored between Sessions.

    Q: Can it use HTTP basic-authentication for authentication?

    A: Yes - but It should not. It includes its own authentication.

    Q: If you need a session, how is the SID transferred, can we change the URL? Or do we use a Cookie?

    A: Its inside the SyncML message.

    Q: can you summarize the kinds of actions a client may trigger?

    A: delete (soft delete or hard delete), add, copy, replace, search

    Q: In what kind of format is the data (eg a contact) transferred - does it really use XML for everything or is the XML just for the SyncML envelope - if so, how do you transfer contacts, using vCard?

    A: Yes. The SyncML is a container which includes other formats, such as vCard. If an Application supports syncing:
    Contacts: It must be able to produce vCard 2.1 and optionaly vCard 3.0 data.
    Calendar: It must be able to produce vCalendar 1.0 and optionally iCalendar 2.0.
    Memos: It must support text/plain.
    Tasks: It must support vTodo 1.0.
    Email: It must support message/rfc822, message/rfc2822 and message/rfc2045.

    Q: Could you please give an example of a very simple and basic SyncML HTTP transaction (HTTP methods, headers, body)?

    A: A SyncML Transaction, tunneled via HTTP always uses a POST to the same URL: ...
    Look at the complete example.

  • We welcome your feedback!
    This site is sponsored by
    SKYRIX Software AG
    ZideOne GmbH