// 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 = "";
+
+ // 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){
// Check the server hostname. Return false
// if no value has been set.
- if (ConnData->Hostname.size() > 0){
+ if (ConnData->Hostname.size() == 0){
return false;
// 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