From: Steve Brokenshire Date: Sun, 28 Feb 2016 23:50:37 +0000 (+0000) Subject: Added initial functions for CardDAV X-Git-Tag: release-0.02~334 X-Git-Url: http://Server1/repobrowser/?a=commitdiff_plain;h=4814657c80f09987a02c7842af6386fa33210c98;p=xestiacalendar%2F.git Added initial functions for CardDAV --- diff --git a/source/objects/CalDAV/CalDAV.cpp b/source/objects/CalDAV/CalDAV.cpp index 0e39c7e..f0f8dc8 100644 --- a/source/objects/CalDAV/CalDAV.cpp +++ b/source/objects/CalDAV/CalDAV.cpp @@ -17,6 +17,121 @@ // 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 = ""; + + // 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); + + // 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){ diff --git a/source/objects/CalDAV/CalDAV.h b/source/objects/CalDAV/CalDAV.h index 31e5c3b..5e8622d 100644 --- a/source/objects/CalDAV/CalDAV.h +++ b/source/objects/CalDAV/CalDAV.h @@ -29,17 +29,19 @@ using namespace std; enum CalDAVQueryResult { CALDAVQUERYRESULT_UNITTESTFAIL = -1, - CALDAVQUERYRESULT_OK + CALDAVQUERYRESULT_OK, + CALDAVQUERYRESULT_NOTRUN, + CALDAVQUERYRESULT_SERVERERROR }; struct CalDAVConnectionData{ - string Hostname; - int Port; - string Username; - string Password; - string Prefix; - bool UseSSL; + string Hostname = ""; + int Port = 8008; + string Username = ""; + string Password = ""; + string Prefix = ""; + bool UseSSL = true; }; @@ -65,13 +67,24 @@ struct CalDAVStatus{ struct CalDAVServerResult{ + CalDAVQueryResult Result = CALDAVQUERYRESULT_NOTRUN; + CURLcode Code = CURLE_OK; + long HTTPCode = 0; - }; class CalDAV{ + private: + CalDAVConnectionData ConnectionData; + CURL *ConnectionHandle = nullptr; + public: + void SetupConnectionData(CalDAVConnectionData *ConnData); + CalDAVStatus GetConnectionData(); + CalDAVServerResult Connect(); + CalDAV(); + ~CalDAV(); };