X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2FCalDAV%2FCalDAV.cpp;h=545c10808110b5725122b84aeefd729bc6858a93;hb=ddd1ca72930b22d2dc221b1e315789b14f0ca837;hp=6a5c70beebd6b388fbad4ccc568356a1fc8f73c1;hpb=731991ccc529af88d8b90bedfbec2e3541bc46e1;p=xestiacalendar%2F.git diff --git a/source/objects/CalDAV/CalDAV.cpp b/source/objects/CalDAV/CalDAV.cpp index 6a5c70b..545c108 100644 --- a/source/objects/CalDAV/CalDAV.cpp +++ b/source/objects/CalDAV/CalDAV.cpp @@ -17,6 +17,126 @@ // with Xestia Calendar. If not, see #include "CalDAV.h" +#include + +using namespace std; + +CalDAV::CalDAV(){ + + // Setup the objects within the CalDAV connection + // object. + + ConnectionHandle = curl_easy_init(); + +} + +CalDAV::~CalDAV(){ + + // Destory the objects within the CalDAV connection + // object. + + curl_easy_cleanup(ConnectionHandle); + ConnectionHandle = nullptr; + +} + +void CalDAV::SetupConnectionData(CalDAVConnectionData *ConnData){ + + // Check if ConnData is a nullptr, return if it is. + + if (ConnData == nullptr){ + return; + } + + // Set the connection settings to the values from ConnData. + + ConnectionData = (*ConnData); + +} + +CalDAVStatus CalDAV::GetConnectionData(){ + + // Get the current connection settings for the CalDAV + // connection object and return a CalDAVStatus object. + + CalDAVStatus ConnectionStatus; + + ConnectionStatus.Hostname = ConnectionData.Hostname; + ConnectionStatus.Port = ConnectionData.Port; + ConnectionStatus.Username = ConnectionData.Username; + ConnectionStatus.Prefix = ConnectionData.Prefix; + ConnectionStatus.UseSSL = ConnectionData.UseSSL; + + return ConnectionStatus; + +} + +CalDAVServerResult CalDAV::Connect(){ + + CalDAVServerResult ServerResult; + + string ServerAddress = ""; + string ServerUserPass = ""; + string ServerData = ""; + string ServerHeader = ""; + + // Setup the server address. + + if (ConnectionData.UseSSL == true){ + ServerAddress += "https://"; + } else { + ServerAddress += "http://"; + } + + ServerAddress += ConnectionData.Hostname; + + // Check if server port is 80, otherwise + // specifiy the port number in the address. + + if (ConnectionData.Port != 80){ + ServerAddress += ":"; + ServerAddress += to_string(ConnectionData.Port); + } + + ServerAddress += "/principals/"; + + // Setup the server password. + + ServerUserPass += ConnectionData.Username; + ServerUserPass += ":"; + ServerUserPass += ConnectionData.Password; + + curl_easy_setopt(ConnectionHandle, CURLOPT_URL, ServerAddress.c_str()); + curl_easy_setopt(ConnectionHandle, CURLOPT_USERPWD, ServerUserPass.c_str()); + curl_easy_setopt(ConnectionHandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); + curl_easy_setopt(ConnectionHandle, CURLOPT_FAILONERROR, 1L); + curl_easy_setopt(ConnectionHandle, CURLOPT_WRITEFUNCTION, CalDAVOutput); + curl_easy_setopt(ConnectionHandle, CURLOPT_WRITEDATA, &ServerData); + curl_easy_setopt(ConnectionHandle, CURLOPT_WRITEHEADER, &ServerHeader); + + // Connect to the CalDAV server. + + ServerResult.Code = curl_easy_perform(ConnectionHandle); + + // Process the result received from the server. + + if (ServerResult.Code != CURLE_OK){ + + ServerResult.Result = CALDAVQUERYRESULT_SERVERERROR; + + } else { + + ServerResult.Result = CALDAVQUERYRESULT_OK; + + } + + // Get the HTTP code. + + curl_easy_getinfo(ConnectionHandle, CURLINFO_RESPONSE_CODE, &ServerResult.HTTPCode); + + return ServerResult; + +} bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData){ @@ -32,7 +152,7 @@ bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData){ // Check the server hostname. Return false // if no value has been set. - if (ConnData->Hostname.size() > 0){ + if (ConnData->Hostname.size() == 0){ return false; @@ -50,16 +170,20 @@ bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData){ // Check the server username. Return false // if no value has been set. - - if (ConnData->Username.size() > 0){ + + if (ConnData->Username.size() == 0){ + return false; - } - + + } + // Check the server password. Return false // if no value has been set. - - if (ConnData->Password.size() > 0){ + + if (ConnData->Password.size() == 0){ + return false; + } // Cannot check UseSSL: It is either true