X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2FCalDAV%2FCalDAV.cpp;h=ea578a9ae0924608e2cd9bffcfea2505877ac19a;hb=6013b76daf2e9e2cf790584aea18a6f2a5bf1aa8;hp=bcd710a12af712db2ff083909f53a934c6124dda;hpb=ea9eaed7642efe480c3c79944d2f771f2ef51d54;p=xestiacalendar%2F.git diff --git a/source/objects/CalDAV/CalDAV.cpp b/source/objects/CalDAV/CalDAV.cpp index bcd710a..ea578a9 100644 --- a/source/objects/CalDAV/CalDAV.cpp +++ b/source/objects/CalDAV/CalDAV.cpp @@ -20,7 +20,7 @@ using namespace std; -size_t CalDAVOutput(char *ReceivedBuffer, size_t Size, size_t NewMemoryBytes, string *StringPointer) +size_t CalDAVReceive(char *ReceivedBuffer, size_t Size, size_t NewMemoryBytes, string *StringPointer) { string ReceivedBufferString = ""; @@ -32,6 +32,29 @@ size_t CalDAVOutput(char *ReceivedBuffer, size_t Size, size_t NewMemoryBytes, st } +size_t CalDAVSend(char *SendBuffer, size_t Size, size_t NewMemoryBytes, void *DataStruct){ + + struct CalDAVSendData *UploadPtr = (struct CalDAVSendData *)DataStruct; + + if (UploadPtr->sizeleft){ + + UploadPtr->sizeleft--; + char CharSend; + + CharSend = (*UploadPtr->readptr)[UploadPtr->seek]; + + *SendBuffer = CharSend; + + UploadPtr->seek++; + + return 1; + + } + + return 0; + +} + CalDAV::CalDAV(){ // Setup the objects within the CalDAV connection @@ -105,7 +128,7 @@ CalDAVServerResult CalDAV::Connect(){ curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); curl_easy_setopt(ConnectionHandle, CURLOPT_FAILONERROR, 1L); curl_easy_setopt(ConnectionHandle, CURLOPT_TIMEOUT, ConnectionData.Timeout); - curl_easy_setopt(ConnectionHandle, CURLOPT_WRITEFUNCTION, CalDAVOutput); + curl_easy_setopt(ConnectionHandle, CURLOPT_WRITEFUNCTION, CalDAVReceive); curl_easy_setopt(ConnectionHandle, CURLOPT_WRITEDATA, &ServerData); curl_easy_setopt(ConnectionHandle, CURLOPT_WRITEHEADER, &ServerHeader); @@ -133,6 +156,12 @@ CalDAVServerResult CalDAV::Connect(){ } +CalDAVServerResult CalDAV::GetServerResult(){ + + return ConnectionServerResult; + +} + CalDAVServerSupport CalDAV::GetServerSupport(){ CalDAVServerSupport ServerStatus; @@ -143,6 +172,16 @@ CalDAVServerSupport CalDAV::GetServerSupport(){ CURLcode ServerResult = curl_easy_perform(ConnectionHandle); + // Set the results. + + 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 ServerStatus; } @@ -256,10 +295,89 @@ CalDAVServerSupport CalDAV::GetServerSupport(){ } + // Reset the connection status. + + curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, NULL); + return ServerStatus; } +string CalDAV::GetUserPrincipal(){ + + string CurrentUserPrincipal = ""; + string UserPrincipalRequest = ""; + CalDAVSendData UserPrincipalSendData; + + UserPrincipalRequest = "\n" + "\n" + " \n" + " \n" + " \n" + ""; + + UserPrincipalSendData.readptr = &UserPrincipalRequest; + UserPrincipalSendData.sizeleft = UserPrincipalRequest.size(); + + // Setup the header. + + struct curl_slist *UserPrincipalRequestHeader = NULL; + + UserPrincipalRequestHeader = curl_slist_append(UserPrincipalRequestHeader, "Depth: 0"); + UserPrincipalRequestHeader = curl_slist_append(UserPrincipalRequestHeader, "Prefer: return-minimal"); + UserPrincipalRequestHeader = curl_slist_append(UserPrincipalRequestHeader, "Content-Type: application/xml; charset=utf-8"); + + curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPHEADER, UserPrincipalRequestHeader); + + curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "PROPFIND"); + curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 1L); + curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, &UserPrincipalSendData); + curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, CalDAVSend); + + // Process the data. + + ServerData.clear(); + ServerHeader.clear(); + + CURLcode ServerResult = curl_easy_perform(ConnectionHandle); + + // Set the results. + + 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 CurrentUserPrincipal; + + } + + // Process the User Principal from the ServerData. + + CurrentUserPrincipal = ProcessXMLUserPrincipal(); + + // Reset the changed settings. + + curl_easy_setopt(ConnectionHandle, CURLOPT_UPLOAD, 0L); + curl_easy_setopt(ConnectionHandle, CURLOPT_READDATA, NULL); + curl_easy_setopt(ConnectionHandle, CURLOPT_READFUNCTION, NULL); + + return CurrentUserPrincipal; +} + +CalDAVCalendarList CalDAV::GetCalendars(){ + + CalDAVCalendarList ServerList; + + return ServerList; + +} + bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData){ // Check if the passed CalDAV Connection Data is has