X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fobjects%2FCalDAV%2FCalDAV.cpp;h=545c10808110b5725122b84aeefd729bc6858a93;hb=ddd1ca72930b22d2dc221b1e315789b14f0ca837;hp=ec931d4426772f7c7877a9cc05cb42064dba6739;hpb=36ec8307a98290296724b301b098116fa0f3dc7c;p=xestiacalendar%2F.git diff --git a/source/objects/CalDAV/CalDAV.cpp b/source/objects/CalDAV/CalDAV.cpp index ec931d4..545c108 100644 --- a/source/objects/CalDAV/CalDAV.cpp +++ b/source/objects/CalDAV/CalDAV.cpp @@ -1,2 +1,200 @@ +// CalDAV.cpp - CalDAV Connection Object. +// +// (c) 2016 Xestia Software Development. +// +// This file is part of Xestia Calendar. +// +// Xestia Address Book is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by the +// Free Software Foundation, version 3 of the license. +// +// Xestia Address Book is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// 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){ + + // Check if the passed CalDAV Connection Data is has + // an address set. Return false if nullptr is used. + + if (ConnData == nullptr){ + + return false; + + } + + // Check the server hostname. Return false + // if no value has been set. + + if (ConnData->Hostname.size() == 0){ + + return false; + + } + + // Check the server port. Return false if + // no value has been set or the port number + // is less than 1 or higher than 65535. + + if (ConnData->Port < 1 || ConnData->Port > 65535){ + + return false; + + } + + // Check the server username. Return false + // if no value has been set. + + if (ConnData->Username.size() == 0){ + + return false; + + } + + // Check the server password. Return false + // if no value has been set. + + if (ConnData->Password.size() == 0){ + + return false; + + } + + // Cannot check UseSSL: It is either true + // or false. + + // Cannot check Prefix: The prefix may need + // to be worked out first. + + // No errors were found whilst checking so + // return true. + + return true; +} \ No newline at end of file