<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div style="font-family:Arial;">Hi David,<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Yes, it's not so much this particular bug (thanks for prodding the right people for me) - I only just discovered that bug today.  I have much more experience in the IMAP world...<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">It's that new features are generally less stable - see the Microsoft Exchange MOVE command issue with IMAP for a fine case of unreliable new protocol additions:<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;"><a href="http://mailman13.u.washington.edu/pipermail/imap-protocol/2015-November/002559.html">http://mailman13.u.washington.edu/pipermail/imap-protocol/2015-November/002559.html</a><br></div>
<div><br></div>
<div style="font-family:Arial;">The easy solution is: just don't use MOVE even if the server advertises it - especially since COPY + EXPUNGE still works fine, and also works with older servers that don't know about MOVE.<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">So trying to get support for an optional extension is hard... because the incentives for clients to support it are not there unless they get a massive benefit.<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">I just rewrote the JMAP-Proxy sync code in Net::CalDAVTalk and Net::CardDAVTalk perl modules today, which is how I discovered this bug with Google CardDAV :)  I was making our code do what you want people to do - use sync-collection!<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Anyway - hopefully I'll see you at a CalConnect some time.  I haven't been making it the last few because I'm busy with IETF and M3AAWG, but I might make Japan next year.  Robert S tells me he met you at the last one, just finished a call with him and the rest of the Cyrus IMAPd project team.<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Cheers,<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Bron.<br></div>
<div style="font-family:Arial;"><br></div>
<div><br></div>
<div>On Mon, 13 Nov 2017, at 21:14, David Given wrote:<br></div>
<blockquote type="cite"><div dir="ltr"><div style="font-family:Arial;">I'm involved with CalDAV rather than CardDAV, which is a different team and a different technology stack, but I'm well aware that this is not really an important difference from the outside... that definitely looks like a bug; I will escalate it to the appropriate people.<br></div>
<div><br></div>
<div>(Incidentally, if anyone observes any other similar oddities, please get in touch.)<br></div>
<div><br></div>
</div>
<div style="font-family:Arial;"><br></div>
<div defang_data-gmailquote="yes"><div dir="ltr">On Mon, 13 Nov 2017 at 09:10 Bron Gondwana <<a href="mailto:brong@fastmailteam.com">brong@fastmailteam.com</a>> wrote:<br></div>
<blockquote defang_data-gmailquote="yes" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204, 204, 204);padding-left:1ex;"><div style="font-family:Arial;"><u></u><br></div>
<div><div style="font-family:Arial;">Hi David,<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">I know this is contacts rather than calendars, but here's a perspective from the other side about why people don't support optional/extended standards in their clients:<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;"><<<<<<<< REPORT <a href="https://www.googleapis.com:443/carddav/v1/principals/brongondwana%40gmail.com/lists/default/">https://www.googleapis.com:443/carddav/v1/principals/brongondwana%40gmail.com/lists/default/</a> HTTP/1.1<br></div>
<div style="font-family:Arial;"><D:sync-collection xmlns:C='urn:ietf:params:xml:ns:carddav' xmlns:CY='<a href="http://cyrusimap.org/ns/">http://cyrusimap.org/ns/</a>' xmlns:D='DAV:'><D:sync-token/><D:sync-level>1</D:sync-level><D:prop><D:getetag/></D:prop></D:sync-collection><br></div>
<div style="font-family:Arial;">>>>>>>>> HTTP/1.1 400 Bad Request<br></div>
</div>
<div><div style="font-family:Arial;"><?xml version="1.0" encoding="UTF-8"?><br></div>
</div>
<div><div style="font-family:Arial;"><d:error xmlns:d="DAV:"/><br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Of course this is carddav rather than caldav, but if you're building a general client library, you quickly wind up chasing the lowest common denominator rather than writing two different codepaths, one for modern/correct servers and one for old servers that only support the base standard or have buggy newer behaviour.<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;"><div style="font-family:Arial;">Particularly when docs lie:<br></div>
<div style="font-family:Arial;"><br></div>
</div>
<div style="font-family:Arial;"><a href="https://developers.google.com/google-apps/carddav/">https://developers.google.com/google-apps/carddav/</a><br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Here's what I got back from a PROPFIND:<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;"><d:response><br></div>
<div style="font-family:Arial;">  <d:href>/carddav/v1/principals/<a href="mailto:brongondwana@gmail.com">brongondwana@gmail.com</a>/lists/default/</d:href><br></div>
<div style="font-family:Arial;">  <d:propstat><br></div>
<div style="font-family:Arial;">   <d:status>HTTP/1.1 200 OK</d:status><br></div>
<div style="font-family:Arial;">   <d:prop><br></div>
<div style="font-family:Arial;">    <d:displayname>Address Book</d:displayname><br></div>
<div style="font-family:Arial;">    <d:current-user-privilege-set><br></div>
<div style="font-family:Arial;">     <d:privilege><br></div>
<div style="font-family:Arial;">      <d:read/><br></div>
<div style="font-family:Arial;">     </d:privilege><br></div>
<div style="font-family:Arial;">     <d:privilege><br></div>
<div style="font-family:Arial;">      <d:read-acl/><br></div>
<div style="font-family:Arial;">     </d:privilege><br></div>
<div style="font-family:Arial;">     <d:privilege><br></div>
<div style="font-family:Arial;">      <d:read-current-user-privilege-set/><br></div>
<div style="font-family:Arial;">     </d:privilege><br></div>
<div style="font-family:Arial;">     <d:privilege><br></div>
<div style="font-family:Arial;">      <d:unlock/><br></div>
<div style="font-family:Arial;">     </d:privilege><br></div>
<div style="font-family:Arial;">     <d:privilege><br></div>
<div style="font-family:Arial;">      <d:write/><br></div>
<div style="font-family:Arial;">     </d:privilege><br></div>
<div style="font-family:Arial;">     <d:privilege><br></div>
<div style="font-family:Arial;">      <d:write-acl/><br></div>
<div style="font-family:Arial;">     </d:privilege><br></div>
<div style="font-family:Arial;">    </d:current-user-privilege-set><br></div>
<div style="font-family:Arial;">    <d:supported-report-set><br></div>
<div style="font-family:Arial;">     <d:supported-report><br></div>
<div style="font-family:Arial;">      <d:report><br></div>
<div style="font-family:Arial;">       <d:principal-search-property-set/><br></div>
<div style="font-family:Arial;">      </d:report><br></div>
<div style="font-family:Arial;">     </d:supported-report><br></div>
<div style="font-family:Arial;">     <d:supported-report><br></div>
<div style="font-family:Arial;">      <d:report><br></div>
<div style="font-family:Arial;">       <card:addressbook-query/><br></div>
<div style="font-family:Arial;">      </d:report><br></div>
<div style="font-family:Arial;">     </d:supported-report><br></div>
<div style="font-family:Arial;">     <d:supported-report><br></div>
<div style="font-family:Arial;">      <d:report><br></div>
<div style="font-family:Arial;">       <d:expand-property/><br></div>
<div style="font-family:Arial;">      </d:report><br></div>
<div style="font-family:Arial;">     </d:supported-report><br></div>
<div style="font-family:Arial;">     <d:supported-report><br></div>
<div style="font-family:Arial;">      <d:report><br></div>
<div style="font-family:Arial;">       <d:principal-property-search/><br></div>
<div style="font-family:Arial;">      </d:report><br></div>
<div style="font-family:Arial;">     </d:supported-report><br></div>
<div style="font-family:Arial;">     <d:supported-report><br></div>
<div style="font-family:Arial;">      <d:report><br></div>
<div style="font-family:Arial;">       <d:acl-principal-prop-set/><br></div>
<div style="font-family:Arial;">      </d:report><br></div>
<div style="font-family:Arial;">     </d:supported-report><br></div>
<div style="font-family:Arial;">     <d:supported-report><br></div>
<div style="font-family:Arial;">      <d:report><br></div>
<div style="font-family:Arial;">       <card:addressbook-multiget/><br></div>
<div style="font-family:Arial;">      </d:report><br></div>
<div style="font-family:Arial;">     </d:supported-report><br></div>
<div style="font-family:Arial;">     <d:supported-report><br></div>
<div style="font-family:Arial;">      <d:report><br></div>
<div style="font-family:Arial;">       <d:principal-match/><br></div>
<div style="font-family:Arial;">      </d:report><br></div>
<div style="font-family:Arial;">     </d:supported-report><br></div>
<div style="font-family:Arial;">     <d:supported-report><br></div>
<div style="font-family:Arial;">      <d:report><br></div>
<div style="font-family:Arial;">       <d:sync-collection/><br></div>
<div style="font-family:Arial;">      </d:report><br></div>
<div style="font-family:Arial;">     </d:supported-report><br></div>
<div style="font-family:Arial;">    </d:supported-report-set><br></div>
<div style="font-family:Arial;">    <d:resourcetype><br></div>
<div style="font-family:Arial;">     <d:collection/><br></div>
<div style="font-family:Arial;">     <card:addressbook/><br></div>
<div style="font-family:Arial;">    </d:resourcetype><br></div>
<div style="font-family:Arial;">   </d:prop><br></div>
<div style="font-family:Arial;">  </d:propstat><br></div>
<div style="font-family:Arial;">  <d:propstat><br></div>
<div style="font-family:Arial;">   <d:status>HTTP/1.1 404 Not Found</d:status><br></div>
<div style="font-family:Arial;">   <d:prop><br></div>
<div style="font-family:Arial;">    <d:acl/><br></div>
<div style="font-family:Arial;">    <d:sync-token/><br></div>
<div style="font-family:Arial;">   </d:prop><br></div>
<div style="font-family:Arial;">  </d:propstat><br></div>
<div style="font-family:Arial;"></d:response><br></div>
<div style="font-family:Arial;"></d:multistatus><br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">RFC6578 is pretty clear:<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;"><span class="font" style="font-family:menlo,consolas,monospace,sans-serif">3.2.  DAV:sync-collection Report</span><br></div>
<div style="font-family:Arial;"><br></div>
<pre>   If the DAV:sync-collection report is implemented by a WebDAV server,
   then the server MUST list the report in the
   "DAV:supported-report-set" property on any collection that supports
   synchronization.<br></pre><pre><br></pre><div style="font-family:Arial;">The server claims to support sync-collection, but it actually doesn't.<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">It doesn't take dealing with many bogus servers like this and you just give up on the more efficient method.<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Do you have any contacts in the contacts team you could pass this on to?  I guess I'll make my code check for sync-token existing as well as for the standard supported-report-set.<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Cheers,<br></div>
<div style="font-family:Arial;"><br></div>
<div style="font-family:Arial;">Bron.<br></div>
</div>
<div><div><br></div>
<div>On Wed, 8 Nov 2017, at 03:38, David Given wrote:<br></div>
</div>
<div><blockquote type="cite"><div dir="ltr"><div style="font-family:Arial;">Hello everybody,<br></div>
<div><br></div>
<div>I have an RFC question I'd appreciate some feedback on...<br></div>
<div><br></div>
<div>We have a situation where a Calendar client is trying to get the etags of every event in an enormous calendar in a single query. Naturally, this isn't working.<br></div>
<div><br></div>
<div>They're doing this:<br></div>
<div><br></div>
<div>PROPFIND /caldav/v2/$USERNAME/events<br></div>
<div><div><?xml version="1.0" encoding="UTF-8"?><br></div>
<div><A:propfind xmlns:A="DAV:"><br></div>
<div>  <A:prop><br></div>
<div>    <A:getcontenttype/><br></div>
<div>    <A:getetag/><br></div>
<div>  </A:prop><br></div>
<div></A:propfind><br></div>
</div>
<div><br></div>
<div>As you can see, they're not asking for a sync token.<br></div>
<div><br></div>
<div>RFC6578 section 3.6 provides a mechanism where clients can ask for paginated responses, where the server returns partial data with a 507 status code, and a new sync token so they can continue the query. It is a, however, a bit ambiguous as to whether this is supported for methods other than REPORT. The interwebs suggest it is (but I'd appreciate a clarification here).<br></div>
<div><br></div>
<div>My question is. however:<br></div>
<div><br></div>
<div>Is it permissable to return a sync-token (and expect the client to honour it) <i>even if the client's original query didn't ask for it</i>?<br></div>
<div><br></div>
<div>I'm hoping the answer is going to be yes, but if it's no --- any suggestions?<br></div>
<div><br></div>
<div>Thanks!<br></div>
<div><br></div>
<div>David Given<br></div>
<div><a href="mailto:dtrg@google.com">dtrg@google.com</a><br></div>
<div><br></div>
</div>
</blockquote></div>
<div><blockquote type="cite"><div><u>_______________________________________________</u><br></div>
<div>caldeveloper-l mailing list<br></div>
<div><a href="mailto:caldeveloper-l@lists.calconnect.org">caldeveloper-l@lists.calconnect.org</a><br></div>
<div><a href="http://lists.calconnect.org/listinfo.cgi/caldeveloper-l-calconnect.org">http://lists.calconnect.org/listinfo.cgi/caldeveloper-l-calconnect.org</a><br></div>
</blockquote></div>
<div><blockquote type="cite"><br></blockquote><div style="font-family:Arial;"><br></div>
<div><div>--<br></div>
<div>  Bron Gondwana, CEO, FastMail Pty Ltd<br></div>
<div>  <a href="mailto:brong@fastmailteam.com">brong@fastmailteam.com</a><br></div>
<div><br></div>
</div>
<div style="font-family:Arial;"><br></div>
</div>
<div style="font-family:Arial;">_______________________________________________<br></div>
<div style="font-family:Arial;"> caldeveloper-l mailing list<br></div>
<div style="font-family:Arial;"> <a href="mailto:caldeveloper-l@lists.calconnect.org">caldeveloper-l@lists.calconnect.org</a><br></div>
<div style="font-family:Arial;"> <a href="http://lists.calconnect.org/listinfo.cgi/caldeveloper-l-calconnect.org">http://lists.calconnect.org/listinfo.cgi/caldeveloper-l-calconnect.org</a><br></div>
</blockquote></div>
</blockquote><div style="font-family:Arial;"><br></div>
<div id="sig56629417"><div class="signature">--<br></div>
<div class="signature">  Bron Gondwana, CEO, FastMail Pty Ltd<br></div>
<div class="signature">  brong@fastmailteam.com<br></div>
<div class="signature"><br></div>
</div>
<div style="font-family:Arial;"><br></div>
</body>
</html>