diff --git a/src/java/davmail/caldav/CaldavConnection.java b/src/java/davmail/caldav/CaldavConnection.java index c2c21bf2..391f872f 100644 --- a/src/java/davmail/caldav/CaldavConnection.java +++ b/src/java/davmail/caldav/CaldavConnection.java @@ -220,7 +220,8 @@ public class CaldavConnection extends AbstractConnection { // only current user for now && session.getEmail().equalsIgnoreCase(paths[2])) { String etag = headers.get("if-match"); - int status = session.createOrUpdateEvent(paths[4], body, etag); + String noneMatch = headers.get("if-none-match"); + int status = session.createOrUpdateEvent(paths[4], body, etag, noneMatch); sendHttpResponse(status, true); } else if ("DELETE".equals(command) && "users".equals(paths[1]) && paths.length == 5 && "calendar".equals(paths[3]) diff --git a/src/java/davmail/exchange/ExchangeSession.java b/src/java/davmail/exchange/ExchangeSession.java index 39a70b89..d18dfc3a 100644 --- a/src/java/davmail/exchange/ExchangeSession.java +++ b/src/java/davmail/exchange/ExchangeSession.java @@ -1027,7 +1027,7 @@ public class ExchangeSession { return line.substring(0, keyIndex) + ";VALUE=DATE:" + line.substring(valueIndex + 1, valueEndIndex); } - public int createOrUpdateEvent(String path, String icsBody, String etag) throws IOException { + public int createOrUpdateEvent(String path, String icsBody, String etag, String noneMatch) throws IOException { String messageUrl = URIUtil.encodePathQuery(calendarUrl + "/" + URIUtil.decode(path)); String uid = path.substring(0, path.lastIndexOf(".")); PutMethod putmethod = new PutMethod(messageUrl); @@ -1036,6 +1036,9 @@ public class ExchangeSession { if (etag != null) { putmethod.setRequestHeader("If-Match", etag); } + if (noneMatch != null) { + putmethod.setRequestHeader("If-None-Match", noneMatch); + } putmethod.setRequestHeader("Content-Type", "message/rfc822"); StringBuilder body = new StringBuilder(); body.append("Content-Transfer-Encoding: 7bit\n" +