From 39170edf0dd21e9ab01541d3308b73cefa2bf7c2 Mon Sep 17 00:00:00 2001 From: Steve Brokenshire Date: Sun, 24 Apr 2016 21:52:58 +0100 Subject: [PATCH] Added code and unit tests for AddEntry in the CalDAV object. --- source/objects/CalDAV/CalDAV.cpp | 53 ++++++++++++++++++++++++++++++++ source/objects/CalDAV/CalDAV.h | 5 +++ 2 files changed, 58 insertions(+) diff --git a/source/objects/CalDAV/CalDAV.cpp b/source/objects/CalDAV/CalDAV.cpp index a2bb856..467f3e1 100644 --- a/source/objects/CalDAV/CalDAV.cpp +++ b/source/objects/CalDAV/CalDAV.cpp @@ -908,6 +908,59 @@ CalDAVServerResult CalDAV::DeleteCalendar(string *CalendarHREF){ } +CalDAVServerResult CalDAV::AddEntry(string *CalendarEntryHREF, string *EntryData){ + + // Add an entry to the calendar collection. + + CalDAVServerResult ServerResult; + CalDAVSendData EntryAddSendData; + + // Build the calendar list address. + + string EntryAddURLAddress = BuildServerAddress(&ConnectionData, (*CalendarEntryHREF)); + + EntryAddSendData.readptr = EntryData; + EntryAddSendData.sizeleft = EntryData->size(); + + struct curl_slist *CalendarRequestHeader = NULL; + + CalendarRequestHeader = curl_slist_append(CalendarRequestHeader, "Content-Type: text/calendar; charset=utf-8"); + + curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, CalendarRequestHeader); + curl_easy_setopt(ConnectionHandle, CURLOPT_URL, EntryAddURLAddress.c_str()); + curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "PUT"); + curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L); + curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &EntryAddSendData); + curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, CalDAVSend); + + // Process the data. + + ServerData.clear(); + ServerHeader.clear(); + + CURLcode ServerConnectionResult = curl_easy_perform(ConnectionHandle); + + if (ServerConnectionResult == CURLE_OK){ + ServerResult.Result = CALDAVQUERYRESULT_OK; + } else { + ServerResult.Result = CALDAVQUERYRESULT_SERVERERROR; + } + ServerResult.Code = ServerConnectionResult; + curl_easy_getinfo(ConnectionHandle, CURLINFO_RESPONSE_CODE, &ServerResult.HTTPCode); + + // Restore the original settings. + + string OriginalServerAddress = BuildServerAddress(&ConnectionData, "/principals/"); + curl_easy_setopt(ConnectionHandle, CURLOPT_URL, OriginalServerAddress.c_str()); + curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, NULL); + curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 0L); + curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, NULL); + curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, NULL); + curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, NULL); + + return ServerResult; + +} bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData){ // Check if the passed CalDAV Connection Data is has diff --git a/source/objects/CalDAV/CalDAV.h b/source/objects/CalDAV/CalDAV.h index 208d11b..0774cc0 100644 --- a/source/objects/CalDAV/CalDAV.h +++ b/source/objects/CalDAV/CalDAV.h @@ -146,7 +146,9 @@ class CalDAV{ CalDAVServerResult Connect(); CalDAVServerResult GetServerResult(); CalDAVServerSupport GetServerSupport(); + CalDAVCalendarList GetCalendars(); + CalDAVServerResult AddCalendar(string CalendarName); CalDAVServerResult EditCalendar(string *CalendarHREF, @@ -162,7 +164,10 @@ class CalDAV{ int *CalendarOrder); CalDAVServerResult EditCalendarDescription(string *CalendarHREF, string *CalendarDescription); + CalDAVServerResult DeleteCalendar(string *CalendarHREF); + + CalDAVServerResult AddEntry(string *CalendarEntryHREF, string *EntryData); string GetUserPrincipal(); string GetCalendarHome(string UserPrincipalURI); -- 2.39.5