Z-Push Zimbra Backend Release 54 uploaded to SourceForge
Release 54 of the z-push zimbra backend has just been uploaded to SourceForge (https://sourceforge.net/projects/zimbrabackend/)
Code:
============== Z-Push Zimbra Backend - Release Notes - Release 54 ==============
THESE RELEASE NOTES ARE FOR RELEASE 54 CHANGES
PLEASE READ THESE RELEASE NOTES COMPLETELY BEFORE IMPLEMENTING RELEASE 54
NOTE THAT THE RELEASE NOTES FOR 49-53 ARE ALSO CONTAINED BELOW AND SHOULD
ALSO BE READ FULLY WHEN UPGRADING FROM A RELEASE 48 OR EARLIER.
THIS IS ESPECIALLY CRITICAL IF YOU ARE TURNING ON ANY OF THE NEW FEATURES
AND ARE UPGRADING AN EXISTING INSTALLATION FROM RELEASE 48 OR EARLIER.
NOTE THAT MANY OF THE CHANGES RELATE TO THE Z-PUSH-2 VERSION OF THE BACKEND ONLY
ZIMBRA 6.0.4 AND EARLIER - NOT SUPPORTED WITH z-push-2
These releases of zimbra have a bug in the JSON output of commands that breaks the
json_decode parser. If you wish to use z-push-2 with the zimbra backend you must update
to a newer zimbra release. See zimbra bugzilla for details :-
http://bugzilla.zimbra.com/show_bug.cgi?id=42867
Changes Made To Revision 54:
- Use session context refresh to populate _folders and _usertags during Logon
to minimise the number of SOAP requests for setup
- Change GetMpBodyRecursive to search for the part identified by zimbra as
containing the body text instead of piecing together body/inline text parts
- Change GetMessage to group Soap Request/Response into a single switch block
- Removed forcing parent to '0' for Calendars/Tasks
- Updated mime.php and mimePart.php in line with mail_mime 1.8.5 which contains
a fix for a bug we reported upstream concerning decoding headers
- Fixed messageclass for Meeting Replies/Cancellation
- Fixed timezone object creation issue that broke timezone matching on android
and resulted in DST changes moving recurring appointments
- Added sendasemail directive, and fixed regression in SendMail to force use of
_SendAsEmailOverride when configured by the user (directive or XML)
- Change SendMail to pass through encoded headers
- Fix regression regarding inline image only emails introduced in 53.7.z-push-2
- Added code to allow for not receiving a From: header from the (HTC) device
- Added code to encode From: header - if not encoded in _SendAsNameOverride
- Added basic check for incompatability between z-push and backend versions
- For z-push-2 fix truncation logic for BodyPreference[1] and [2]
- For z-push-2 BatchRequest plain and/or html bodies into a single SOAP Request
- For z-push-2 change to JSON for SOAP response processing - with the exception
of non SmartFolders folder initialization which uses a linear array to process
folders instead of a nested one. The MakeXMLTree function was mangling HTML
contained within XML nodes, and making it difficult to process.
- For z-push-2 remove Provisioning support code
- For z-push-2 remove AlterPing support code - replaced with ChangesSink
- For z-push-2 remove getSettings/setSettings - add Settings
- For z-push-2 report protocol version supported as 14 (ZPush::ASV_14;) even
though SMS sync is not supported - this version is needed for attendee
status updates to be shown on the device
- For z-push-2 rename function ItemOperationsEmptyFolderContent to EmptyFolder
- For z-push-2 fixed SendMail to check for content before setting parameters to
avoid "SyncMail: parameter 'reply_to' contains an invalid email address ''"
- For z-push-2 attachment->filereference has to be bin2hex encoded so that part
numbers for subparts/attachments do not lose their "." separators in the new
"evil" filters in request.php
- For z-push-2 add Utils:: prefix to call to function GetOLUidFromICalUid
- For z-push-2 fix notes handling for AS12+ appointments/tasks - keep original
notes if not updated (or update not sent - WM6.5)
- For z-push-2 add function GetUserInfo and move code from Logon into it to
ensure user profile info is known prior to calling GetUserProfileXML
- For z-push-2 Fixed extract of $id on contact creation to stop looping on
new contact created on the device.
- For z-push-2 refactored GetMessageList into a single switch block
- For z-push-2 added local caching of MessageLists to reduce server load on
initial sync where the same unchanged lists will be queried repeatedly
- For z-push-2 changed debugLog to ZLog::Write and adjusted logging levels for
errors in Logon so that obvious issues are highlighted without debug being on
- For z-push-2 added delay logic to ChangesSink in event of loss of connectivity
to the host
Synching of Calendar Folders with Z-Push and iOS? Scalability?
Hi,
First, thanks so much for creating the Zimbra backend for Z-Push, it's been great.
I've setup the latest versions of Z-Push and the Zimbra Backend and in general it seems to work quite well! One function that I'm still trying to figure out has to do with the synchronization of calendar folders on iOS devices. We are trying to enable users to synchronize multiple calendars between their Zimbra install (7.x) and their iOS devices.
Right now we can synchronize events between existing calendars, but it seems that when the user adds a new calendar it's not being propagated down to the phone. I've done a decent amount of testing and I see the following in the log file. In this excerpt it appears that Zimbra is aware of the new folder, but for some reason it's not being pushed down. Any ideas?
Also, any feel for how scalable the Z-Push/Zimbra Backend solution might be? 10 users? 100 users? 10,000 users?
Thanks!
Pete
24/10/2012 17:26:50 [ 6711] [DEBUG] [9yjfdujg4e@m.curveos.com] Zimbra->ChangesSink(): Got a FOLDER MODIFIED notification - Folders changed=1
24/10/2012 17:26:50 [ 6711] [DEBUG] [9yjfdujg4e@m.curveos.com] Zimbra->(): SOAP Message: <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header><context xmlns="urn:zimbra">
<authToken>0_81a0ddc8149da2230f13431d1fa562b71a2eb b3c_69643d33363a61626530373963632d346266372d343539 372d623933662d3762376532353965643233363b6578703d31 333a313335313238393934323038313b747970653d363a7a69 6d6272613b</authToken>
<session id="152153" /><format type="js" /></context></soap:Header>
<soap:Body><DestroyWaitSetRequest waitSet="WaitSet-3d111714-7ac9-487e-ab4a-18b4f1e76620" xmlns="urn:zimbraMail" /></soap:Body>
</soap:Envelope>
24/10/2012 17:26:50 [ 6711] [DEBUG] [9yjfdujg4e@m.curveos.com] Zimbra->(): SOAP response: {"Header":{"context":{"session":{"id":"152153","_c ontent":"152153"},"change":{"token":29551},"_jsns" :"urn:zimbra"}},"Body":{"DestroyWaitSetResponse":{ "waitSet":"WaitSet-3d111714-7ac9-487e-ab4a-18b4f1e76620","_jsns":"urn:zimbraMail"}},"_jsns":" urn:zimbraSoap"}
24/10/2012 17:26:50 [ 6711] [DEBUG] [9yjfdujg4e@m.curveos.com] Zimbra->ChangesSink(): Got a creation notification for a APPT/TASK/CONTACT - Delay notification by [1000000] microseconds
24/10/2012 17:26:51 [ 6711] [DEBUG] [9yjfdujg4e@m.curveos.com] Zimbra->(): SOAP Message: <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header><context xmlns="urn:zimbra">
<authToken>0_81a0ddc8149da2230f13431d1fa562b71a2eb b3c_69643d33363a61626530373963632d346266372d343539 372d623933662d3762376532353965643233363b6578703d31 333a313335313238393934323038313b747970653d363a7a69 6d6272613b</authToken>
<session id="152153" /><format type="js" /></context></soap:Header>
<soap:Body><CreateWaitSetRequest defTypes="all" xmlns="urn:zimbraMail" >
<add><a id="abe079cc-4bf7-4597-b93f-7b7e259ed236" /></add>
</CreateWaitSetRequest></soap:Body>
</soap:Envelope>
24/10/2012 17:26:51 [ 6711] [DEBUG] [9yjfdujg4e@m.curveos.com] Zimbra->(): SOAP response: {"Header":{"context":{"session":{"id":"152153","_c ontent":"152153"},"change":{"token":29551},"_jsns" :"urn:zimbra"}},"Body":{"CreateWaitSetResponse":{" waitSet":"WaitSet-de344356-c369-43fd-9731-e16b32fae75d","defTypes":"m,c,a","seq":0,"_jsns":" urn:zimbraMail"}},"_jsns":"urn:zimbraSoap"}
24/10/2012 17:26:51 [ 6711] [DEBUG] [9yjfdujg4e@m.curveos.com] Zimbra->ChangesSink(): Session ID [ 152153] *Waiting* [WaitSet-de344356-c369-43fd-9731-e16b32fae75d] for [26] Seconds, with Highest SEQ [0] and Token [29551]
24/10/2012 17:26:51 [ 6711] [DEBUG] [9yjfdujg4e@m.curveos.com] Zimbra->(): SOAP Message: <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header><context xmlns="urn:zimbra">
<authToken>0_81a0ddc8149da2230f13431d1fa562b71a2eb b3c_69643d33363a61626530373963632d346266372d343539 372d623933662d3762376532353965643233363b6578703d31 333a313335313238393934323038313b747970653d363a7a69 6d6272613b</authToken>
<session id="152153" /><format type="js" /></context></soap:Header>
<soap:Body><WaitSetRequest waitSet="WaitSet-de344356-c369-43fd-9731-e16b32fae75d" defTypes="all" seq="0" block="1" timeout="26" xmlns="urn:zimbraMail" >
<update>
<a id="abe079cc-4bf7-4597-b93f-7b7e259ed236" token="29551" />
</update>
</WaitSetRequest></soap:Body>
</soap:Envelope>