From 8dd5e178c9d453c814b5817a0ac120c483813a92 Mon Sep 17 00:00:00 2001 From: mguessan Date: Tue, 23 Dec 2008 21:34:39 +0000 Subject: [PATCH] build inbox responses for iCal git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@247 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/caldav/CaldavConnection.java | 52 +++++++++++++++++-- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/src/java/davmail/caldav/CaldavConnection.java b/src/java/davmail/caldav/CaldavConnection.java index b31d4e98..7bda35bb 100644 --- a/src/java/davmail/caldav/CaldavConnection.java +++ b/src/java/davmail/caldav/CaldavConnection.java @@ -111,9 +111,9 @@ public class CaldavConnection extends AbstractConnection { // first check network connectivity ExchangeSessionFactory.checkConfig(); try { - session = ExchangeSessionFactory.getInstance(userName, password); + session = ExchangeSessionFactory.getInstance(userName, password); } catch (AuthenticationException e) { - sendErr(HttpStatus.SC_UNAUTHORIZED, e.getMessage()); + sendErr(HttpStatus.SC_UNAUTHORIZED, e.getMessage()); } } handleRequest(command, path, headers, content); @@ -202,7 +202,7 @@ public class CaldavConnection extends AbstractConnection { sendHttpResponse(HttpStatus.SC_MULTI_STATUS, null, "text/xml;charset=UTF-8", buffer.toString(), true); } else if ("PROPFIND".equals(command) - && ("/calendar/".equals(path) || "/calendar".equals(path)) + && ("/calendar/".equals(path) || "/calendar".equals(path)) && body != null) { CaldavRequest request = new CaldavRequest(body); @@ -239,8 +239,39 @@ public class CaldavConnection extends AbstractConnection { HashMap responseHeaders = new HashMap(); sendHttpResponse(HttpStatus.SC_MULTI_STATUS, responseHeaders, "text/xml;charset=UTF-8", buffer.toString(), true); + // inbox is always empty + } else if ("PROPFIND".equals(command) + && ("/inbox/".equals(path) || "/inbox".equals(path)) + && body != null) { + CaldavRequest request = new CaldavRequest(body); + + StringBuilder buffer = new StringBuilder(); + buffer.append("\n"); + buffer.append("\n"); + buffer.append(" \n"); + buffer.append(" /inbox\n"); + buffer.append(" \n"); + buffer.append(" \n"); + + if (request.hasProperty("resourcetype")) { + buffer.append(" \n"); + buffer.append(" \n"); + buffer.append(" \n"); + buffer.append(" \n"); + } + if (request.hasProperty("getctag")) { + buffer.append(" 0\n"); + } + buffer.append(" \n"); + buffer.append(" HTTP/1.1 200 OK\n"); + buffer.append(" \n"); + buffer.append(" \n"); + buffer.append("\n"); + + HashMap responseHeaders = new HashMap(); + sendHttpResponse(HttpStatus.SC_MULTI_STATUS, responseHeaders, "text/xml;charset=UTF-8", buffer.toString(), true); } else if ("REPORT".equals(command) - && ("/calendar/".equals(path) || "/calendar".equals(path)) + && ("/calendar/".equals(path) || "/calendar".equals(path)) && depth == 1 && body != null) { CaldavRequest request = new CaldavRequest(body); @@ -300,6 +331,17 @@ public class CaldavConnection extends AbstractConnection { buffer.append(""); sendHttpResponse(HttpStatus.SC_MULTI_STATUS, null, "text/xml;charset=UTF-8", buffer.toString(), true); + + } else if ("REPORT".equals(command) + && ("/inbox/".equals(path) || "/inbox".equals(path))) { + // inbox is always empty + StringBuilder buffer = new StringBuilder(); + buffer.append("\n" + + "\n"); + buffer.append(""); + + sendHttpResponse(HttpStatus.SC_MULTI_STATUS, null, "text/xml;charset=UTF-8", buffer.toString(), true); + } else if ("PUT".equals(command) && path.startsWith("/calendar/")) { String etag = headers.get("if-match"); int status = session.createOrUpdateEvent(path.substring("/calendar/".length()), body, etag); @@ -362,7 +404,7 @@ public class CaldavConnection extends AbstractConnection { int status = session.deleteEvent(path.substring("/calendar/".length())); sendHttpResponse(status, true); } else { - DavGatewayTray.error("Unsupported command: " + command + " " + path + " Depth: "+depth+"\n" + body); + DavGatewayTray.error("Unsupported command: " + command + " " + path + " Depth: " + depth + "\n" + body); sendErr(HttpStatus.SC_BAD_REQUEST, "Unsupported command: " + command); }