[sync] Synthesis iPhone SyncML Client

Stefan Knöß stefan at knoess.se
Mon Aug 25 22:12:05 UTC 2008


Hi there,

as the iPhone 3G was released I started to experiment with Horde 3.2.1, 
Turba 2.2.1, a LDAP address server and the brand new Synthesis iPhone 
SyncML client (1.0.1). Everything ran astonishingly smooth, more or less 
out of the box (some tuning of the fields to have a good match for LDAP, 
Turba and SyncML was necessary though). Synchronizing and editing of the 
address book stored in a ldap backend was working perfectly fine.

But the amazing setup suddenly broke down after the latest update of the 
Synthesis iPhone Client (1.0.4). After some discussion with Lukas Zeller 
from Synthesis the picture got clear. The client 1.0.4 switched to 
preferred vCard v3.0 that the horde SyncML server announces to support. 
But the datastore section of the server_*.wbxml looks like this:

<DataStore>
<SourceRef>contacts</SourceRef>
<Rx-Pref>
* <CTType>text/**x-**vcard</CTType>*
<VerCT>3.0</VerCT>
</Rx-Pref>
<Rx>
<CTType>text/x-vcard</CTType>
<VerCT>2.1</VerCT>
</Rx>
<Tx-Pref>
* <CTType>text/**x-**vcard</CTType>*
<VerCT>3.0</VerCT>
</Tx-Pref>
<Tx>
<CTType>text/x-vcard</CTType>
<VerCT>2.1</VerCT>
</Tx>
<SyncCap>
<SyncType>1</SyncType>
<SyncType>2</SyncType>
<SyncType>3</SyncType>
<SyncType>4</SyncType>
<SyncType>5</SyncType>
<SyncType>6</SyncType>
</DataStore>

The <CTType>text/x-vcard</CTType> section for vCard version 3.0 seems to 
be wrong. Could it be the type should read "text/vcard" and not 
"text/x-vcard"? Please correct me if I am wrong.
The synthesis client simply rejects all entries from now. I located the 
responsible line in horde3/lib/SyncML/XMLoutput.php and changed it from

$this->_writeDataStore('contacts', 'text/x-vcard', '3.0', $devinfoutput,
array('text/x-vcard' => '2.1'));

into

$this->_writeDataStore('contacts', 'text/vcard', '3.0', $devinfoutput,
array('text/x-vcard' => '2.1'));

Suddenly, everything seemed to be fine again. Thanks to vCard 3.0 as the 
new communication protocol some more fields even were synchronised.
But then I detected a new problem. Most of the address fields are now 
truncated and look like this in the data.txt protocol:

output converted for client (text/vcard):
BEGIN:VCARD
VERSION:3.0
NICKNAME:
EMAIL;TYPE=HOME:
EMAIL;TYPE=WORK:email at here.dot
URL;TYPE=HOME:
TEL;TYPE=HOME:+491234512345
TEL;TYPE=WORK:+491234512345
TEL;TYPE=WORK:+491234512345
TEL;TYPE=CELL:
TITLE:Teamleader
URL;TYPE=WORK:http://www.web.com/
BDAY:
TEL;TYPE=HOME:
X-SYNCJE-ANNIVERSARY:
NOTE:
TEL;TYPE=PAGER:
X-WV-ID:
N:Lastname;Surname;;;
FN:Surname Lastname
ORG:TRW Automotive GmbH;
ADR;TYPE=HOME:;;StrasseStrasseStrasse_StrasseStrasseStrasse;Schorndorf;Bade
n-Württemberg;73614;Deutschland
ADR;TYPE=WORK:;;IndustriestraÃ<9F>e
20;Alfdorf;Baden-Württemberg;73553;Deutschland
BODY:
END:VCARD

If the ADR;TYPE=HOME or ADR;TYPE=WORK field exceeds a certain length, 
not entered linefeeds and spaces are inserted into the address 
structure. As I mentioned before, everything was fine with vCard 2.1. 
What am I doing wrong? Is there a way to force Horde to communicate in 
2.1 as a workaround? I am not familar with PHP so I have no idea how to 
debug that issue.
The problem of the iPhone and the software distribution by the AppStore 
simply is the missing possibility of a downgrade. So I am stuck with a 
"better SyncML client", not working with Horde anymore ... :-(

I appreciate every comment.

Best regards
Stefan




More information about the sync mailing list