Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Added code for getting ServerData and ServerHeader in CalDAV::Connect()
[xestiacalendar/.git] / source / objects / CalDAV / CalDAV.cpp
index ec931d4..545c108 100644 (file)
@@ -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 <http://www.gnu.org/licenses/>
+
 #include "CalDAV.h"
+#include <iostream>
+
+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
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy