" <d:prop>\n"
" <d:resourcetype />\n"
" <d:displayname />\n"
+ " <d:sync-token />\n"
" <x0:calendar-color />\n"
" <x0:calendar-order />\n"
" <cs:getctag />\n"
//ServerList = ProcessXMLCalendarList();
+ if (ServerResult == CURLE_OK){
+ ConnectionServerResult.Result = CALDAVQUERYRESULT_OK;
+ } else {
+ ConnectionServerResult.Result = CALDAVQUERYRESULT_SERVERERROR;
+ }
+ ConnectionServerResult.Code = ServerResult;
+ curl_easy_getinfo(ConnectionHandle, CURLINFO_RESPONSE_CODE, &ConnectionServerResult.HTTPCode);
+
+ if (ServerResult != CURLE_OK){
+
+ return ServerList;
+
+ }
+
+ // Process the received XML data into a list of calendars
+ // and locations.
+
+ ServerList = ProcessXMLCalendarList();
+
// Restore the original settings.
- string OriginalServerAddress = BuildServerAddress(&ConnectionData, "/principals");
+ 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);
+ return ServerList;
+
+}
+
+CalDAVEntryList CalDAV::GetEntryList(string *CalendarHREF){
+
+ CalDAVEntryList EntryList;
+ CalDAVSendData EntryListSendData;
+
+ if (CalendarHREF->size() == 0){
+
+ return EntryList;
+
+ }
+
+ string EntryListURLAddress = BuildServerAddress(&ConnectionData, *CalendarHREF);
+
+ string EntryListRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+
+ /*if (CalendarTag == nullptr){*/
+
+ EntryListRequest += "<c:calendar-query xmlns:d=\"DAV:\" xmlns:cs=\"http://calendarserver.org/ns/\""
+ " xmlns:c=\"urn:ietf:params:xml:ns:caldav\" xmlns:x0=\"http://apple.com/ns/ical/\">\n"
+ " <d:prop>\n"
+ " <d:getetag />\n"
+ " <c:calendar-data />\n"
+ " </d:prop>\n"
+ " <c:filter>\n"
+ " <c:comp-filter name=\"VCALENDAR\" />\n"
+ " </c:filter>\n"
+ "</c:calendar-query>";
+
+ /*} else {
+
+ EntryListRequest += "<d:sync-collection xmlns:d=\"DAV:\" xmlns:cs=\"http://calendarserver.org/ns/\""
+ " xmlns:c=\"urn:ietf:params:xml:ns:caldav\" xmlns:x0=\"http://apple.com/ns/ical/\">\n"
+ " <d:sync-token>";
+ EntryListRequest += *CalendarTag;
+ EntryListRequest += "</d:sync-token>\n"
+ " <d:sync-level>1</d:sync-level>\n"
+ " <d:prop>\n"
+ " <d:getetag />\n"
+ " <c:calendar-data />\n"
+ " </d:prop>\n"
+ "</d:sync-collection>";
+
+ }*/
+
+ EntryListSendData.readptr = &EntryListRequest;
+ EntryListSendData.sizeleft = EntryListRequest.size();
+
+ struct curl_slist *EntryListRequestHeader = NULL;
+
+ EntryListRequestHeader = curl_slist_append(EntryListRequestHeader, "Content-Type: application/xml; charset=utf-8");
+
+ /*if (CalendarTag != nullptr){
+
+ EntryListRequestHeader = curl_slist_append(EntryListRequestHeader, "Content-Type: application/xml; charset=utf-8");
+ EntryListRequestHeader = curl_slist_append(EntryListRequestHeader, "Content-Type: application/xml; charset=utf-8");
+
+ }*/
+
+ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, EntryListRequestHeader);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, EntryListURLAddress.c_str());
+ curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "REPORT");
+ curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &EntryListSendData);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, CalDAVSend);
+
+ // Process the data.
+
+ ServerData.clear();
+ ServerHeader.clear();
+
+ CURLcode ServerResult = curl_easy_perform(ConnectionHandle);
+
+ //ServerList = ProcessXMLCalendarList();
+
+ if (ServerResult == CURLE_OK){
+ ConnectionServerResult.Result = CALDAVQUERYRESULT_OK;
+ } else {
+ ConnectionServerResult.Result = CALDAVQUERYRESULT_SERVERERROR;
+ }
+ ConnectionServerResult.Code = ServerResult;
+ curl_easy_getinfo(ConnectionHandle, CURLINFO_RESPONSE_CODE, &ConnectionServerResult.HTTPCode);
+
+ if (ServerResult != CURLE_OK){
+
+ return EntryList;
+
+ }
+
// Process the received XML data into a list of calendars
// and locations.
+ EntryList = ProcessXMLEntryList();
+
+ // 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);
+
+ return EntryList;
+
+}
+
+CalDAVEntryList CalDAV::GetEntryList(string *CalendarHREF, string *CalendarTag){
+
+ CalDAVEntryList EntryList;
+ CalDAVSendData EntryListSendData;
+
+ if (CalendarHREF->size() == 0){
+
+ return EntryList;
+
+ }
+
+ string EntryListURLAddress = BuildServerAddress(&ConnectionData, *CalendarHREF);
+
+ // First query: Get the list of contacts that need to be updated.
+
+ string EntryListRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+
+ EntryListRequest += "<d:sync-collection xmlns:d=\"DAV:\" xmlns:cs=\"http://calendarserver.org/ns/\""
+ " xmlns:c=\"urn:ietf:params:xml:ns:caldav\" xmlns:x0=\"http://apple.com/ns/ical/\">\n"
+ " <d:sync-token>";
+
+ if (CalendarTag != nullptr){
+
+ EntryListRequest += *CalendarTag;
+
+ } else {
+
+ EntryListRequest += "";
+
+ }
+
+ EntryListRequest += "</d:sync-token>\n"
+ " <d:sync-level>1</d:sync-level>\n"
+ " <d:prop>\n"
+ " <d:getetag />\n"
+ " </d:prop>\n"
+ "</d:sync-collection>";
+
+ EntryListSendData.readptr = &EntryListRequest;
+ EntryListSendData.sizeleft = EntryListRequest.size();
+
+ struct curl_slist *EntryListRequestHeader = NULL;
+
+ EntryListRequestHeader = curl_slist_append(EntryListRequestHeader, "Content-Type: application/xml; charset=utf-8");
+
+ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, EntryListRequestHeader);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, EntryListURLAddress.c_str());
+ curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "REPORT");
+ curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &EntryListSendData);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, CalDAVSend);
+
+ // Process the data.
+
+ ServerData.clear();
+ ServerHeader.clear();
+
+ CURLcode ServerResult = curl_easy_perform(ConnectionHandle);
+
+ if (ServerResult == CURLE_OK){
+ ConnectionServerResult.Result = CALDAVQUERYRESULT_OK;
+ } else {
+ ConnectionServerResult.Result = CALDAVQUERYRESULT_SERVERERROR;
+ }
+ ConnectionServerResult.Code = ServerResult;
+ curl_easy_getinfo(ConnectionHandle, CURLINFO_RESPONSE_CODE, &ConnectionServerResult.HTTPCode);
+
if (ServerResult != CURLE_OK){
- return ServerList;
+ return EntryList;
}
- ServerList = ProcessXMLCalendarList();
+ EntryList = ProcessXMLSyncTokenList();
- return ServerList;
+ // Check the last entry matches the HREF and if it
+ // does then delete it.
+
+ if (EntryList.HREF.size() > 0) {
+
+ if (EntryList.HREF.rbegin()->second == *CalendarHREF){
+
+ EntryList.HREF.erase((EntryList.HREF.size() - 1));
+ EntryList.Tag.erase((EntryList.HREF.size() - 1));
+ EntryList.Data.erase((EntryList.HREF.size() - 1));
+
+ }
+
+ }
+
+ // Build the list into a new list for getting the new
+ // calendar data with.
+
+ EntryListRequest.clear();
+
+ EntryListRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+
+ EntryListRequest += "<c:calendar-multiget xmlns:d=\"DAV:\" "
+ " xmlns:c=\"urn:ietf:params:xml:ns:caldav\">\n"
+ " <d:prop>\n"
+ " <d:getetag />\n"
+ " <c:calendar-data />\n"
+ " </d:prop>\n";
+
+ for (std::map<int,string>::iterator HREFIter = EntryList.HREF.begin();
+ HREFIter != EntryList.HREF.end(); HREFIter++){
+
+ string EntryListHREFString = HREFIter->second;
+
+ EntryListRequest += " <d:href>";
+ EntryListRequest += EntryListHREFString;
+ EntryListRequest += "</d:href>\n";
+
+ }
+
+ EntryListRequest += "</c:calendar-multiget>";
+
+ CalDAVSendData UpdatedEntryListSendData;
+
+ UpdatedEntryListSendData.readptr = &EntryListRequest;
+ UpdatedEntryListSendData.sizeleft = EntryListRequest.size();
+
+ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, EntryListRequestHeader);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, EntryListURLAddress.c_str());
+ curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "REPORT");
+ curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &UpdatedEntryListSendData);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, CalDAVSend);
+
+ // Get the updated calendar data.
+
+ ServerData.clear();
+ ServerHeader.clear();
+ EntryList.HREF.clear();
+ EntryList.Tag.clear();
+ EntryList.Data.clear();
+
+ ServerResult = curl_easy_perform(ConnectionHandle);
+
+ // Check the last entry matches the HREF and if it
+ // does then delete it.
+
+ if (ServerResult == CURLE_OK){
+ ConnectionServerResult.Result = CALDAVQUERYRESULT_OK;
+ } else {
+ ConnectionServerResult.Result = CALDAVQUERYRESULT_SERVERERROR;
+ }
+ ConnectionServerResult.Code = ServerResult;
+ curl_easy_getinfo(ConnectionHandle, CURLINFO_RESPONSE_CODE, &ConnectionServerResult.HTTPCode);
+
+ if (ServerResult != CURLE_OK){
+
+ return EntryList;
+
+ }
+
+ EntryList = ProcessXMLEntryList();
+
+ // Second query: Get the list of contact data for the contacts that have
+ // beenchanged.
+
+ // 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);
+
+ return EntryList;
}
CalDAVServerResult CalDAV::AddCalendar(string CalendarName){
+ CalDAVServerResult ServerResult;
+
+ AddCalendar(&CalendarName, nullptr);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::AddCalendar(string *CalendarName, string *CalendarShortName){
+
CalDAVServerResult ServerResult;
CalDAVSendData CalendarAddSendData;
// Generate the UUID.
- string UUIDValue = GenerateUUID();
- UUIDValue.erase(UUIDValue.end()-1);
+ string UUIDValue = "";
+
+ if (CalendarShortName == nullptr){
+
+ UUIDValue = GenerateUUID();
+ UUIDValue.erase(UUIDValue.end()-1);
+
+ } else {
+ UUIDValue = *CalendarShortName;
+
+ }
+
string CalendarHomeURL = CalendarHomeURI;
CalendarHomeURL.append(UUIDValue);
CalendarHomeURL.append("/");
" <d:set>\n"
" <d:prop>\n"
" <d:displayname>";
- CalendarAddRequest += CalendarName;
+ CalendarAddRequest += *CalendarName;
CalendarAddRequest += "</d:displayname>\n"
" <c:supported-calendar-component-set>\n"
" <c:comp name=\"VTODO\"/>\n"
}
+CalDAVServerResult CalDAV::GetEntryETag(string *CalendarEntryHREF, string *ETagValue){
+
+ CalDAVServerResult ServerResult;
+ CalDAVSendData EntryETagGetData;
+
+ // Build the server address.
+
+ string UserPrincipalURI = "";
+ UserPrincipalURI = GetUserPrincipal();
+
+ if (UserPrincipalURI.size() == 0){
+
+ return ServerResult;
+
+ }
+
+ string CalendarHomeURI = "";
+ CalendarHomeURI = GetCalendarHome(UserPrincipalURI);
+
+ // Split the path and filename.
+
+ string EntryURIPath;
+ string EntryFilename;
+
+ SplitPathFilename(CalendarEntryHREF, &EntryURIPath, &EntryFilename);
+
+ // Build the request for the server.
+
+ string EntryETagRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<c:calendar-multiget xmlns:d=\"DAV:\" xmlns:c=\"urn:ietf:params:xml:ns:caldav\">\n"
+ " <d:prop>\n"
+ " <d:getetag />\n"
+ " </d:prop>\n"
+ " <d:href>";
+ EntryETagRequest += (*CalendarEntryHREF);
+ EntryETagRequest += "</d:href>\n"
+ "</c:calendar-multiget>";
+
+ EntryETagGetData.readptr = &EntryETagRequest;
+ EntryETagGetData.sizeleft = EntryETagRequest.size();
+
+ // Build the calendar list address.
+
+ struct curl_slist *GetETagRequestHeader = NULL;
+
+ GetETagRequestHeader = curl_slist_append(GetETagRequestHeader, "Depth: 1");
+ GetETagRequestHeader = curl_slist_append(GetETagRequestHeader, "Prefer: return-minimal");
+ GetETagRequestHeader = curl_slist_append(GetETagRequestHeader, "Content-Type: application/xml; charset=utf-8");
+
+ string GetETagURLAddress = BuildServerAddress(&ConnectionData, EntryURIPath);
+
+ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, GetETagRequestHeader);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, GetETagURLAddress.c_str());
+ curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "REPORT");
+ curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &EntryETagGetData);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, CalDAVSend);
+
+ // Attempt to get the entity tag.
+
+ 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);
+
+ if (ServerConnectionResult != CURLE_OK){
+ return ServerResult;
+ }
+
+ // Get the entity tag from the result.
+
+ *ETagValue = ProcessXMLEntryETag();
+
+ // 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;
+
+}
+
+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;
+
+}
+
+CalDAVServerResult CalDAV::EditEntry(string *CalendarEntryHREF, string *EntryData, string *EntryETag){
+
+ // Edit an entry in the calendar collection.
+
+ // 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();
+
+ string IfMatchHeader = "If-Match: \"";
+ IfMatchHeader.append(*EntryETag);
+ IfMatchHeader.append("\"");
+
+ struct curl_slist *CalendarRequestHeader = NULL;
+
+ CalendarRequestHeader = curl_slist_append(CalendarRequestHeader, "Content-Type: text/calendar; charset=utf-8");
+ CalendarRequestHeader = curl_slist_append(CalendarRequestHeader, IfMatchHeader.c_str());
+
+ 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;
+
+}
+
+CalDAVServerResult CalDAV::DeleteEntry(string *CalendarEntryHREF){
+
+ // Delete an entry in the calendar collection.
+
+ CalDAVServerResult ServerResult;
+
+ // Build the calendar list address.
+
+ string EntryDeleteURLAddress = BuildServerAddress(&ConnectionData, (*CalendarEntryHREF));
+
+ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, NULL);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, EntryDeleteURLAddress.c_str());
+ curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "DELETE");
+
+ // Delete the calendar.
+
+ 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