X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2FCalDAV%2FCalDAV.cpp;h=256bc2580c6e1707acec3a4892a81b11130cacdc;hb=fa5d5c7e130a79c0ace4da537746ab42234f8c9e;hp=21e8ddcfb68959e1a67ffc0f1ff0e9e0ad412fc1;hpb=dae9e1905adedbc2462ba3f869453d10642722b9;p=xestiacalendar%2F.git diff --git a/source/objects/CalDAV/CalDAV.cpp b/source/objects/CalDAV/CalDAV.cpp index 21e8ddc..256bc25 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 = ""; @@ -133,6 +133,133 @@ CalDAVServerResult CalDAV::Connect(){ } +CalDAVServerSupport CalDAV::GetServerSupport(){ + + CalDAVServerSupport ServerStatus; + + // Setup the server connection. + + curl_easy_setopt(ConnectionHandle, CURLOPT_CUSTOMREQUEST, "OPTIONS"); + + CURLcode ServerResult = curl_easy_perform(ConnectionHandle); + + if (ServerResult != CURLE_OK){ + return ServerStatus; + } + + // Check that the server header has data in, + // otherwise return an "empty" CalDAVServerSupport. + + if (ServerHeader.size() == 0){ + return ServerStatus; + } + + // Process each line looking for the first DAV header + // line. + + bool NewlineMode = true; + + string DAVLine; + + for (int CharSeek = 0; CharSeek < ServerHeader.size(); CharSeek++){ + + if (NewlineMode == true){ + + // Check if we have reached the end of the string. + + if (CharSeek >= ServerHeader.size()){ + + break; + + } + + // Check the first four letters to make sure + // they are 'DAV:'. + + string DAVHeaderCheck = ""; + + try { + DAVHeaderCheck = ServerHeader.substr(CharSeek, 4); + } + + catch (out_of_range &oor){ + break; + } + + if (DAVHeaderCheck == "DAV:"){ + + CharSeek += 5; + + for (; CharSeek < ServerHeader.size(); CharSeek++){ + + if (ServerHeader[CharSeek] == '\n'){ + + break; + + } + + DAVLine.push_back(ServerHeader[CharSeek]); + + } + + break; + + } + + NewlineMode = false; + + } + + if (ServerHeader[CharSeek] == '\n'){ + + NewlineMode = true; + + } + + } + + // Process the DAV line. + + vector DAVLineData; + string DAVSegmentString; + + for (int CharSeek = 0; CharSeek < DAVLine.size(); CharSeek++){ + + if (DAVLine[CharSeek] == ' '){ + continue; + } + + if (DAVLine[CharSeek] == ','){ + + DAVLineData.push_back(DAVSegmentString); + DAVSegmentString.clear(); + continue; + + } + + DAVSegmentString += DAVLine[CharSeek]; + + } + + // Process the DAV values and set each value + // to true as required. + + for (int DAVItemSeek = 0; + DAVItemSeek < DAVLineData.size(); + DAVItemSeek++){ + + if (DAVLineData.at(DAVItemSeek) == "calendar-access"){ + + ServerStatus.BasicSupport = true; + + } + + } + + return ServerStatus; + +} + bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData){ // Check if the passed CalDAV Connection Data is has