X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2FCalDAV%2FCalDAV.cpp;h=38c5bdb5fc1330c5951c290753fb947198b1837a;hb=6db84a2ded5a6d8f10b341965e303f329588f293;hp=acb5321cbb92ac15057aac5cf303fcc372ad8d59;hpb=5fbb925d877d6820fcdc1cb42d59438e71ffa1df;p=xestiacalendar%2F.git
diff --git a/source/objects/CalDAV/CalDAV.cpp b/source/objects/CalDAV/CalDAV.cpp
index acb5321..38c5bdb 100644
--- a/source/objects/CalDAV/CalDAV.cpp
+++ b/source/objects/CalDAV/CalDAV.cpp
@@ -437,12 +437,13 @@ string CalDAV::GetCalendarHome(string UserPrincipalURI){
// Reset the changed 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_UPLOAD, 0L);
curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, NULL);
curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, NULL);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, NULL);
return CalendarHomeURI;
@@ -451,11 +452,736 @@ string CalDAV::GetCalendarHome(string UserPrincipalURI){
CalDAVCalendarList CalDAV::GetCalendars(){
CalDAVCalendarList ServerList;
+ CalDAVSendData CalendarListSendData;
+
+ // Build the server address.
+
+ string UserPrincipalURI = "";
+ UserPrincipalURI = GetUserPrincipal();
+
+ if (UserPrincipalURI.size() == 0){
+
+ return ServerList;
+
+ }
+
+ string CalendarHomeURI = "";
+ CalendarHomeURI = GetCalendarHome(UserPrincipalURI);
+
+ string CalendarListURLAddress = BuildServerAddress(&ConnectionData, CalendarHomeURI);
+
+ string CalendarListRequest = "\n"
+ "\n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ "";
+
+ CalendarListSendData.readptr = &CalendarListRequest;
+ CalendarListSendData.sizeleft = CalendarListRequest.size();
+
+ // Setup the header.
+
+ struct curl_slist *CalendarListRequestHeader = NULL;
+
+ CalendarListRequestHeader = curl_slist_append(CalendarListRequestHeader, "Depth: 1");
+ CalendarListRequestHeader = curl_slist_append(CalendarListRequestHeader, "Prefer: return-minimal");
+ CalendarListRequestHeader = curl_slist_append(CalendarListRequestHeader, "Content-Type: application/xml; charset=utf-8");
+
+ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, CalendarListRequestHeader);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, CalendarListURLAddress.c_str());
+ curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "PROPFIND");
+ curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &CalendarListSendData);
+ 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 ServerList;
+
+ }
+
+ // Process the received XML data into a list of calendars
+ // and locations.
+
+ ServerList = ProcessXMLCalendarList();
+
+ // 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 ServerList;
}
+CalDAVServerResult CalDAV::AddCalendar(string CalendarName){
+
+ CalDAVServerResult ServerResult;
+
+ AddCalendar(&CalendarName, nullptr);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::AddCalendar(string *CalendarName, string *CalendarShortName){
+
+ CalDAVServerResult ServerResult;
+ CalDAVSendData CalendarAddSendData;
+
+ // Build the server address.
+
+ string UserPrincipalURI = "";
+ UserPrincipalURI = GetUserPrincipal();
+
+ if (UserPrincipalURI.size() == 0){
+
+ return ServerResult;
+
+ }
+
+ string CalendarHomeURI = "";
+ CalendarHomeURI = GetCalendarHome(UserPrincipalURI);
+
+ // Generate the UUID.
+
+ string UUIDValue = "";
+
+ if (CalendarShortName == nullptr){
+
+ UUIDValue = GenerateUUID();
+ UUIDValue.erase(UUIDValue.end()-1);
+
+ } else {
+
+ UUIDValue = *CalendarShortName;
+
+ }
+
+ string CalendarHomeURL = CalendarHomeURI;
+ CalendarHomeURL.append(UUIDValue);
+ CalendarHomeURL.append("/");
+
+ // Build the calendar list address.
+
+ string CalendarListURLAddress = BuildServerAddress(&ConnectionData, CalendarHomeURL);
+
+ string CalendarAddRequest = "\n"
+ "\n"
+ " \n"
+ " \n"
+ " ";
+ CalendarAddRequest += *CalendarName;
+ CalendarAddRequest += "\n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ "";
+
+ CalendarAddSendData.readptr = &CalendarAddRequest;
+ CalendarAddSendData.sizeleft = CalendarAddRequest.size();
+
+ // Setup the header.
+
+ struct curl_slist *CalendarRequestHeader = NULL;
+
+ //curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, CalendarRequestHeader);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, CalendarListURLAddress.c_str());
+ curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "MKCALENDAR");
+ curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &CalendarAddSendData);
+ 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);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::EditCalendarProcess(string *CalendarHREF,
+ string *CalendarName,
+ Colour *CalendarColour,
+ string *CalendarDescription,
+ int *CalendarOrder){
+
+ CalDAVServerResult ServerResult;
+ CalDAVSendData CalendarEditSendData;
+
+ // Build the server address.
+
+ string UserPrincipalURI = "";
+ UserPrincipalURI = GetUserPrincipal();
+
+ if (UserPrincipalURI.size() == 0){
+
+ return ServerResult;
+
+ }
+
+ string CalendarHomeURI = "";
+ CalendarHomeURI = GetCalendarHome(UserPrincipalURI);
+
+ // Generate the UUID.
+
+ string UUIDValue = GenerateUUID();
+ UUIDValue.erase(UUIDValue.end()-1);
+
+ string CalendarHomeURL = CalendarHomeURI;
+ CalendarHomeURL.append(UUIDValue);
+ CalendarHomeURL.append("/");
+
+ // Build the calendar list address.
+
+ string CalendarEditURLAddress = BuildServerAddress(&ConnectionData, (*CalendarHREF));
+
+ string CalendarEditRequest = "\n"
+ "\n"
+ " \n"
+ " \n";
+
+ // Update the calendar name.
+
+ if (CalendarName != nullptr){
+
+ CalendarEditRequest += "";
+ CalendarEditRequest += (*CalendarName);
+ CalendarEditRequest += "\n";
+
+ }
+
+ // Update the calendar colour.
+
+ if (CalendarColour != nullptr){
+
+ CalendarEditRequest += "";
+ CalendarEditRequest += (*CalendarColour);
+ CalendarEditRequest += "\n";
+
+ }
+
+ // Update the calendar description.
+
+ if (CalendarDescription != nullptr){
+
+ CalendarEditRequest += "";
+ CalendarEditRequest += (*CalendarDescription);
+ CalendarEditRequest += "\n";
+
+ }
+
+ // Update the calendar order.
+
+ if (CalendarOrder != nullptr){
+
+ CalendarEditRequest += "";
+ CalendarEditRequest += to_string((*CalendarOrder));
+ CalendarEditRequest += "\n";
+
+ }
+
+ CalendarEditRequest += " \n"
+ " \n"
+ "";
+
+ CalendarEditSendData.readptr = &CalendarEditRequest;
+ CalendarEditSendData.sizeleft = CalendarEditRequest.size();
+
+ // Setup the header.
+
+ struct curl_slist *CalendarRequestHeader = NULL;
+
+ //curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, CalendarRequestHeader);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, CalendarEditURLAddress.c_str());
+ curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "PROPPATCH");
+ curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &CalendarEditSendData);
+ 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);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::EditCalendar(string *CalendarHREF,
+ string *CalendarName,
+ Colour *CalendarColour,
+ string *CalendarDescription,
+ int *CalendarOrder){
+
+ CalDAVServerResult ServerResult;
+
+ ServerResult = EditCalendarProcess(CalendarHREF,
+ CalendarName,
+ CalendarColour,
+ CalendarDescription,
+ CalendarOrder);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::EditCalendar(string *CalendarHREF,
+ Colour *CalendarColour){
+
+
+ CalDAVServerResult ServerResult;
+
+ ServerResult = EditCalendarProcess(CalendarHREF,
+ nullptr,
+ CalendarColour,
+ nullptr,
+ nullptr);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::EditCalendar(string *CalendarHREF,
+ string *CalendarName){
+
+ CalDAVServerResult ServerResult;
+
+ ServerResult = EditCalendarProcess(CalendarHREF,
+ CalendarName,
+ nullptr,
+ nullptr,
+ nullptr);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::EditCalendar(string *CalendarHREF,
+ int *CalendarOrder){
+
+ CalDAVServerResult ServerResult;
+
+ ServerResult = EditCalendarProcess(CalendarHREF,
+ nullptr,
+ nullptr,
+ nullptr,
+ CalendarOrder);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::EditCalendarDescription(string *CalendarHREF,
+ string *CalendarDescription){
+
+ CalDAVServerResult ServerResult;
+
+ ServerResult = EditCalendarProcess(CalendarHREF,
+ nullptr,
+ nullptr,
+ CalendarDescription,
+ nullptr);
+
+ return ServerResult;
+
+}
+
+CalDAVServerResult CalDAV::DeleteCalendar(string *CalendarHREF){
+
+ CalDAVServerResult ServerResult;
+
+ // Build the server address.
+
+ string UserPrincipalURI = "";
+ UserPrincipalURI = GetUserPrincipal();
+
+ if (UserPrincipalURI.size() == 0){
+
+ return ServerResult;
+
+ }
+
+ string CalendarHomeURI = "";
+ CalendarHomeURI = GetCalendarHome(UserPrincipalURI);
+
+ // Generate the UUID.
+
+ string UUIDValue = GenerateUUID();
+ UUIDValue.erase(UUIDValue.end()-1);
+
+ string CalendarHomeURL = CalendarHomeURI;
+ CalendarHomeURL.append(UUIDValue);
+ CalendarHomeURL.append("/");
+
+ // Build the calendar list address.
+
+ struct curl_slist *DeleteRequestHeader = NULL;
+
+ DeleteRequestHeader = curl_slist_append(DeleteRequestHeader, "Depth: infinity");
+
+ string CalendarDeleteURLAddress = BuildServerAddress(&ConnectionData, (*CalendarHREF));
+
+ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, DeleteRequestHeader);
+ curl_easy_setopt(ConnectionHandle, CURLOPT_URL, CalendarDeleteURLAddress.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;
+
+}
+
+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 = "\n"
+ "\n"
+ " \n"
+ " \n"
+ " \n"
+ " ";
+ EntryETagRequest += (*CalendarEntryHREF);
+ EntryETagRequest += "\n"
+ "";
+
+ 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