// CalDAV.h - CalDAV Connection Object header.
//
// (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
#ifndef __OBJECTS_CALDAV_CALDAV_H__
#define __OBJECTS_CALDAV_CALDAV_H__
#include
#include
#include
#include
#include
#include
#include
using namespace std;
// CalDAVConnectionData: used for
// connecting to the server.
enum CalDAVQueryResult {
CALDAVQUERYRESULT_UNITTESTFAIL = -1,
CALDAVQUERYRESULT_OK,
CALDAVQUERYRESULT_NOTRUN,
CALDAVQUERYRESULT_SERVERERROR
};
struct CalDAVCalendarList {
};
struct CalDAVConnectionData{
string Hostname = "";
int Port = 8008;
string Username = "";
string Password = "";
string Prefix = "";
bool UseSSL = true;
int Timeout = 60;
};
// CalDAVStatusData: used for
// getting the current server
// settings for the CalDAV
// object.
struct CalDAVStatus{
string Hostname;
int Port;
string Username;
string Prefix;
bool UseSSL;
int Timeout;
};
// CalDAVServerSupport: used for
// getting what the server supports
// from the CalDAV specification.
struct CalDAVServerSupport{
// Variable name. Name in CalDAV header.
bool BasicSupport = false; // calendar-access
};
// CalDAVServerResult: used for
// getting the result of the
// request made via the CalDAV
// object.
struct CalDAVServerResult{
CalDAVQueryResult Result = CALDAVQUERYRESULT_NOTRUN;
CURLcode Code = CURLE_OK;
long HTTPCode = 0;
};
// CalDAVSendData: used for
// sending data to the CaLDAV
// server.
struct CalDAVSendData{
string *readptr;
long sizeleft;
int seek = 0;
};
class CalDAV{
private:
string ProcessXMLUserPrincipal();
string ProcessXMLCalendarHome();
bool MatchXMLNameTransverse(xmlNodePtr *NodePtr, string NodeName);
string FetchXMLData(xmlNodePtr *NodePtr);
CalDAVConnectionData ConnectionData;
CalDAVServerResult ConnectionServerResult;
CURL *ConnectionHandle = nullptr;
string ServerData = "";
string ServerHeader = "";
public:
CalDAV();
~CalDAV();
void SetupConnectionData(CalDAVConnectionData *ConnData);
CalDAVStatus GetConnectionData();
CalDAVServerResult Connect();
CalDAVServerResult GetServerResult();
CalDAVServerSupport GetServerSupport();
CalDAVCalendarList GetCalendars();
string GetUserPrincipal();
string GetCalendarHome(string UserPrincipalURI);
};
// Subroutines that are used with the
// CalDAVConnectionData struct.
bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData);
string BuildServerAddress(CalDAVConnectionData *ConnData, string URIAddress);
#endif