X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;ds=sidebyside;f=source%2Fobjects%2FCalDAV%2FCalDAV.cpp;h=dfddd87d8777a9abf2a6790dd0eafe802c31a525;hb=703ade69af31d2e1eeb3a9d39f96a85fccfc0f76;hp=38c5bdb5fc1330c5951c290753fb947198b1837a;hpb=6db84a2ded5a6d8f10b341965e303f329588f293;p=xestiacalendar%2F.git
diff --git a/source/objects/CalDAV/CalDAV.cpp b/source/objects/CalDAV/CalDAV.cpp
index 38c5bdb..dfddd87 100644
--- a/source/objects/CalDAV/CalDAV.cpp
+++ b/source/objects/CalDAV/CalDAV.cpp
@@ -23,10 +23,7 @@ using namespace std;
size_t CalDAVReceive(char *ReceivedBuffer, size_t Size, size_t NewMemoryBytes, string *StringPointer)
{
- string ReceivedBufferString = "";
- ReceivedBufferString.append(ReceivedBuffer, NewMemoryBytes);
-
- StringPointer->append(ReceivedBufferString);
+ StringPointer->append(ReceivedBuffer, NewMemoryBytes);
return Size * NewMemoryBytes;
@@ -545,6 +542,288 @@ CalDAVCalendarList CalDAV::GetCalendars(){
}
+CalDAVEntryList CalDAV::GetEntryList(string *CalendarHREF){
+
+ CalDAVEntryList EntryList;
+ CalDAVSendData EntryListSendData;
+
+ if (CalendarHREF->size() == 0){
+
+ return EntryList;
+
+ }
+
+ string EntryListURLAddress = BuildServerAddress(&ConnectionData, *CalendarHREF);
+
+ string EntryListRequest = "\n";
+
+ /*if (CalendarTag == nullptr){*/
+
+ EntryListRequest += "\n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ "";
+
+ /*} else {
+
+ EntryListRequest += "\n"
+ " ";
+ EntryListRequest += *CalendarTag;
+ EntryListRequest += "\n"
+ " 1\n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ "";
+
+ }*/
+
+ 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 = "\n";
+
+ EntryListRequest += "\n"
+ " ";
+
+ if (CalendarTag != nullptr){
+
+ EntryListRequest += *CalendarTag;
+
+ } else {
+
+ EntryListRequest += "";
+
+ }
+
+ EntryListRequest += "\n"
+ " 1\n"
+ " \n"
+ " \n"
+ " \n"
+ "";
+
+ 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 EntryList;
+
+ }
+
+ EntryList = ProcessXMLSyncTokenList();
+
+ // 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 = "\n";
+
+ EntryListRequest += "\n"
+ " \n"
+ " \n"
+ " \n"
+ " \n";
+
+ for (std::map::iterator HREFIter = EntryList.HREF.begin();
+ HREFIter != EntryList.HREF.end(); HREFIter++){
+
+ string EntryListHREFString = HREFIter->second;
+
+ EntryListRequest += " ";
+ EntryListRequest += EntryListHREFString;
+ EntryListRequest += "\n";
+
+ }
+
+ EntryListRequest += "";
+
+ 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;