<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body smarttemplateinserted="true" text="#000000" bgcolor="#FFFFFF">
    Hi All,<br>
    <br>
    I'm trying to understand the code responsible for enumerating user
    calendars (and xDAV resources in general) to try to make the
    discovery work for shared resources too (currently there's no way to
    access shared resources with Apple xDAV client implementation, yes
    with Thunderbird as it doesn't use the discovery mechanism, but
    instead should be pointed to the exact URL for each calendar). If I
    understand it correctly, the functionality is in imap/http_caldav.c.<br>
    <br>
    Could you please point me to the place where the enumeration occurs
    and briefly mention how the general workflow looks like?<br>
    <br>
    The client asks for:<br>
    <br>
    <font face="Courier New">PROPFIND
      /dav/calendars/user/<user@domain>/<br>
      <br>
      <A:propfind xmlns:A="DAV:"><br>
      ...</font><br>
    <br>
    The server responds with:<br>
    <br>
    <font face="Courier New">HTTP/1.1 207 Multi-Status<br>
      <br>
      <A:multistatus xmlns:A="DAV:" ...><br>
        <A:response><br>
         
      <A:href>/dav/calendars/user/<user@domain>/</A:href><br>
          <A:propstat><br>
      ...<br>
        </A:response><br>
        <A:response><br>
         
<A:href>/dav/calendars/user/<user@domain>/Default/</A:href><br>
          <A:propstat><br>
            <A:prop><br>
      ...</font><br>
    <br>
    The idea is to include in the returned lists the shared calendars
    too with the discovery logic based on the IMAP shared folders.<br>
    <br>
    Below goes the initial exchange between the calendar app on iOS
    10.2.6 and Cyrus 3.0.5 when the exact URL (/dav/calendars/shared/)
    for the shared calendar is provided in the advanced settings of the
    app (the URL finally resets to the user principals folder
    (/dav/principals/user/t3@domain.com/) as iOS is pointed to it by
    Cyrus). In the attached file goes the telemetry for the rest of the
    communication.<br>
    <br>
    Thanks,<br>
    Anatoli<br>
    <br>
    <font face="Courier New">---------- <a
        class="moz-txt-link-abbreviated" href="mailto:t3@domain.com">t3@domain.com</a>
      Sun Mar 25 06:05:36 2018<br>
      <br>
      <1521968736<<b>PROPFIND</b> <b>/dav/calendars/shared/</b>
      HTTP/1.1<br>
      Accept: */*<br>
      Content-type: text/xml<br>
      Connection: keep-alive<br>
      Content-length: 181<br>
      Host: mail.domain.com<br>
      User-agent: iOS/11.2.6 (15D100) accountsd/1.0<br>
      Prefer: return=minimal<br>
      Depth: 0<br>
      Brief: t<br>
      Accept-language: en-us<br>
      Authorization: Basic ...<br>
      Accept-encoding: br, gzip, deflate<br>
      <br>
      <1521968736<<?xml version="1.0" encoding="UTF-8"?><br>
      <A:propfind xmlns:A="DAV:"><br>
        <A:prop><br>
          <A:current-user-principal/><br>
          <A:principal-URL/><br>
          <A:resourcetype/><br>
        </A:prop><br>
      </A:propfind><br>
      <br>
      <br>
      >1521968736>HTTP/1.1 207 Multi-Status<br>
      Date: Sun, 25 Mar 2018 09:05:36 GMT<br>
      Strict-Transport-Security: max-age=600<br>
      Vary: Accept-Encoding, Brief, Prefer<br>
      Preference-Applied: return=minimal<br>
      Content-Type: application/xml; charset=utf-8<br>
      Content-Length: 546<br>
      <br>
      <?xml version="1.0" encoding="utf-8"?><br>
      <A:multistatus xmlns:A="DAV:"
      xmlns:C="urn:ietf:params:xml:ns:caldav"><br>
        <A:response><br>
          <A:href><b>/dav/calendars/shared/</b></A:href><br>
          <A:propstat><br>
            <A:prop><br>
              <A:current-user-principal><br>
                <A:href><b>/dav/principals/user/t3@domain.com/</b></A:href><br>
              </A:current-user-principal><br>
              <A:resourcetype><br>
                <A:collection/><br>
                <C:calendar/><br>
              </A:resourcetype><br>
            </A:prop><br>
            <A:status>HTTP/1.1 200 OK</A:status><br>
          </A:propstat><br>
        </A:response><br>
      </A:multistatus><br>
      <br>
      <1521968736<OPTIONS /dav/principals/user/t3%40domain.com/
      HTTP/1.1<br>
      Host: mail.domain.com<br>
      Connection: keep-alive<br>
      Accept: */*<br>
      User-Agent: iOS/11.2.6 (15D100) accountsd/1.0<br>
      Accept-Language: en-us<br>
      Content-Length: 0<br>
      Accept-Encoding: br, gzip, deflate<br>
      <br>
      >1521968736>HTTP/1.1 200 OK<br>
      Date: Sun, 25 Mar 2018 09:05:36 GMT<br>
      Strict-Transport-Security: max-age=600<br>
      Cache-Control: no-cache<br>
      Link: </dav/principals/.server-info>; rel="server-info";
      token="80769c2c66d340ecd178710db26d56b9c4699e3e"<br>
      DAV: 1, 2, 3, access-control, extended-mkcol, resource-sharing<br>
      DAV: calendar-access, calendar-auto-schedule<br>
      DAV: calendar-query-extended, calendar-availability,
      calendar-managed-attachments<br>
      DAV: calendarserver-sharing, inbox-availability<br>
      DAV: addressbook<br>
      Allow: OPTIONS, GET, HEAD<br>
      Allow: PROPFIND, REPORT, COPY<br>
      Content-Length: 0</font>
  </body>
</html>