// CalDAV.h - CalDAV Connection Object header. // // (c) 2016-2017 Xestia Software Development. // // This file is part of Xestia Calendar. // // Xestia Calendar 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 Calendar 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 #include #include "../../common/colour.h" #include "../../common/text.h" #include "../../common/uuid.h" using namespace std; // CalDAVConnectionData: used for // connecting to the server. enum CalDAVQueryResult { CALDAVQUERYRESULT_UNITTESTFAIL = -1, CALDAVQUERYRESULT_OK, CALDAVQUERYRESULT_NOTRUN, CALDAVQUERYRESULT_SERVERERROR }; struct CalDAVCalendarList { map Name; map HREF; map Order; map Description; map CalColour; map Tag; map TagURL; }; struct CalDAVEntryList { map HREF; map Data; map Tag; }; 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(); CalDAVCalendarList ProcessXMLCalendarList(); CalDAVEntryList ProcessXMLEntryList(); CalDAVEntryList ProcessXMLSyncTokenList(); string ProcessXMLEntryETag(); bool MatchXMLNameTransverse(xmlNodePtr *NodePtr, string NodeName); bool MatchXMLName(xmlNodePtr *NodePtrOriginal, string NodeName); string FetchXMLData(xmlNodePtr *NodePtr); CalDAVServerResult EditCalendarProcess(string *CalendarHREF, string *CalendarName, Colour *CalendarColour, string *CalendarDescription, int *CalendarOrder); 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(); CalDAVEntryList GetEntryList(string *CalendarHREF); CalDAVEntryList GetEntryList(string *CalendarHREF, string *CalendarTag); CalDAVServerResult AddCalendar(string CalendarName); CalDAVServerResult AddCalendar(string *CalendarName, string *CalendarShortName); CalDAVServerResult EditCalendar(string *CalendarHREF, string *CalendarName, Colour *CalendarColour, string *CalendarDescription, int *CalendarOrder); CalDAVServerResult EditCalendar(string *CalendarHREF, Colour *CalendarColour); CalDAVServerResult EditCalendar(string *CalendarHREF, string *CalendarName); CalDAVServerResult EditCalendar(string *CalendarHREF, int *CalendarOrder); CalDAVServerResult EditCalendarDescription(string *CalendarHREF, string *CalendarDescription); CalDAVServerResult DeleteCalendar(string *CalendarHREF); CalDAVServerResult AddEntry(string *CalendarEntryHREF, string *EntryData); CalDAVServerResult EditEntry(string *CalendarEntryHREF, string *EntryData, string *EntryETag); CalDAVServerResult DeleteEntry(string *CalendarEntryHREF); string GetUserPrincipal(); string GetCalendarHome(string UserPrincipalURI); CalDAVServerResult GetEntryETag(string *CalendarEntryHREF, string *ETagValue); }; // Subroutines that are used with the // CalDAVConnectionData struct. bool CalDAVObjectValidSettings(CalDAVConnectionData *ConnData); string BuildServerAddress(CalDAVConnectionData *ConnData, string URIAddress); #endif