[cosmo-dev] RFC4791 HTTP REPORT and Cosmo

Sam Halliday sam.halliday at gmail.com
Sun Aug 17 06:32:39 PDT 2008


Hi all,

Frustrated with the lack of open standards on my new HTC Touch Diamond  
mobile phone (which runs Windows Mobile 6.1) and the complete lack of  
usability of the PIM software, I am embarking on the mission of  
creating a CalDAV-aware J2ME client that will focus entirely on Tasks  
(VTODO items) from a CalDAV server. I was shocked to discover that  
nobody has yet written a CalDAV-aware mobile client!

I've been reading up on CalDAV at http://tools.ietf.org/html/rfc4791  
and am somewhat annoyed that almost everything uses HTTP REPORT, which  
of course is not supported by any of the Java Connection libraries and  
it means going back to basics with raw HTTP access over a socket (oh  
joy!). I don't see why they didn't just use POST...

I have been able to successfully work out how to do BASIC  
authentication over HTTP and am able to send some of the example  
requests in the RFC to Cosmo. However, I am getting errors on these  
textbook requests. I have Cosmo installed at the Context "/webcal/"  
and when I send the request (which is straight from http://tools.ietf.org/html/rfc4791#section-7.8.9 
  to retrieve all pending VTODO items)

=========================================
REPORT /webcal/dav/users/myusername/ HTTP/1.1
Authorization: Basic mybase64usernamepasswordpair
Host: myhost.com
Content-Type: text/xml;charset=UTF-8
Depth: 0
Content-Length: 463

<?xml version="1.0" encoding="utf-8"?><C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav 
"><D:prop xmlns:D="DAV:"><D:getetag/><C:calendar-data/></ 
D:prop><C:filter><C:comp-filter name="VCALENDAR"><C:comp-filter  
name="VTODO"><C:prop-filter name="COMPLETED"><C:is-not-defined/></ 
C:prop-filter><C:prop-filter name="STATUS"><C:text-match negate- 
condition="yes">CANCELLED</C:text-match></C:prop-filter></C:comp- 
filter></C:comp-filter></C:filter></C:calendar-query>
=========================================
I get the response
=========================================
<?xml version='1.0' encoding='UTF-8'?><D:error xmlns:D="DAV:"  
xmlns:cosmo="http://osafoundation.org/cosmo/DAV"><cosmo:unprocessable- 
entity>Unknown report {urn:ietf:params:xml:ns:caldav}calendar-query</ 
cosmo:unprocessable-entity></D:error>
=========================================

I've tried with different paths, including "/webcal/dav/myusername",  
but to no avail. If I use GET, on these URLs, then I do get sensible  
HTML responses... but as far as I am aware, that is not a part of the  
CalDAV specification! (It certainly doesn't result in a response from  
Google Calendar which is an independent implementation).

I get similar responses for every single example that I have tried  
from the RFC, the only request that has resulted in a sensible  
response has been
=========================================
REPORT /webcal/dav/users/samuel/ HTTP/1.1
Authorization: Basic mybase64usernamepasswordpair
Host: myhost.com
Content-Type: text/xml;charset=UTF-8
Depth: 0
Content-Length: 180

<?xml version="1.0" encoding="utf-8"?><D:principal-match  
xmlns:D="DAV:"><D:self/><D:prop><C:calendar-home-set xmlns:C="urn:ietf:params:xml:ns:caldav 
"/></D:prop></D:principal-match>
=========================================
With response
=========================================
<?xml version="1.0" encoding="UTF-8"?>
<D:multistatus xmlns:D="DAV:">
     <D:response>
         <D:href>/webcal/dav/users/samuel</D:href>
         <D:propstat>
             <D:prop>
                 <C:calendar-home-set xmlns:C="urn:ietf:params:xml:ns:caldav 
">
                     <D:href>/webcal/dav/samuel/</D:href>
                 </C:calendar-home-set>
             </D:prop>
             <D:status>HTTP/1.1 200 OK</D:status>
         </D:propstat>
     </D:response>
</D:multistatus>
=========================================
But when I do that request on Google Calendar, I get a "Method Not  
Allowed" error! Is it possible that Google have decided to scrap the  
HTTP REPORT method in preference of something more sane (but non- 
compliant)?

My goal is to be able to provide CalDAV read and write access to VTODO  
items... therefore I would require the following:-

- given a valid CalDAV URL, find the user's collections (and the base  
URLs for making the following requests)
- CRUD on VTODO items in all user's collections (and for specified  
collections)

does anybody here have any advice on the best way to do this? If there  
is a way to avoid having to use HTTP REPORT, I'm all ears (but please  
stick to the RFC, I don't want to lock this to Cosmo).

Incidentally, where is the DTD for the "DAV" and "urn:ietf:params:xml:ns:caldav 
" namespaces? Note also that http://osafoundation.org/cosmo/DAV  
doesn't exist anymore!

-- 
Sam


-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2443 bytes
Desc: not available
Url : http://lists.osafoundation.org/pipermail/cosmo-dev/attachments/20080817/85e218ac/smime.bin


More information about the cosmo-dev mailing list