// ConnectionObject.h - ConnectionObject interface header file. // // (c) 2012-2016 Xestia Software Development. // // This file is part of Xestia Address Book. // // 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 Address Book. If not, see #ifndef __CONNOBJECT_CONNECTIONOBJECT_H__ #define __CONNOBJECT_CONNECTIONOBJECT_H__ #include #include #include #include "../common/sslcertstructs.h" #if defined (__APPLE__) #import #import #endif #if defined (__WIN32__) #include #include #include #include #include #include #include #endif enum COConnectResult { COCONNECT_UNITTESTFAIL = -1, COCONNECT_OK, COCONNECT_SSLFAIL, COCONNECT_INVALID, COCONNECT_TIMEOUT, COCONNECT_AUTHFAIL, COCONNECT_NOCONNECTION, }; enum CORequestResult { COREQUEST_UNITTESTFAIL = -1, COREQUEST_OK, COREQUEST_ERROR_NOTCONNECTED, COREQUEST_ERROR_SERVER, COREQUEST_NOCONNECTION, }; enum COSSLVerified { COSSL_UNITTESTFAIL = -1, COSSL_VERIFIED, COSSL_VERIFIED_USER, COSSL_UNABLETOVERIFY, COSSL_NOTAPPLICABLE, COSSL_NORESULT }; enum COContactStatus { COCS_UNKNOWN, COCS_UPDATED, COCS_DELETED }; struct COServerResponse { CORequestResult RequestResult = COREQUEST_NOCONNECTION; std::string EntityTag = ""; int SessionCode = 0; int ResultCode = 0; std::string ResultMessage = ""; }; struct COContactData { std::string Location = ""; std::string Data = ""; COContactStatus Status = COCS_UNKNOWN; }; struct COContactList { COServerResponse ServerResponse; std::vector ListData; std::string SyncToken; }; class ConnectionObject{ public: // Virtual functions to be setup by the inheriting classes. virtual void SetupConnectionObject() = 0; virtual bool IsTaskCompleted() = 0; virtual COConnectResult Connect(bool DoAuthentication) = 0; virtual void BypassSSLVerification(bool EnableBypass) = 0; virtual COServerResponse GetDefaultPrefix(std::string *ServerPrefix) = 0; virtual COServerResponse AddContact(std::string Location, std::string Data) = 0; virtual COServerResponse EditContact(std::string Location, std::string Data) = 0; virtual COServerResponse DeleteContact(std::string Location) = 0; virtual COServerResponse GetServerEntityTagValue(std::string Location) = 0; virtual COServerResponse GetContact(std::string Location, std::string *PageData) = 0; virtual COContactList GetContactList(std::string SyncToken) = 0; virtual bool CanDoProcessing() = 0; virtual bool CanDoSSL() = 0; virtual COSSLVerified SSLVerify() = 0; virtual bool AbleToLogin() = 0; virtual bool HasValidResponse() = 0; virtual bool IsSelfSigned() = 0; virtual std::string GetErrorMessage() = 0; // OS specific functions. #if defined(__APPLE__) virtual SecTrustRef BuildSSLCollection() = 0; #elif defined(__WIN32__) virtual PCCERT_CONTEXT BuildSSLCollection() = 0; #else virtual SSLCertCollectionString BuildSSLCollection() = 0; #endif protected: // Test Mode. bool TestMode = false; // Server variables. std::string ServerAddress = ""; unsigned int ServerPort = 8080; std::string ServerUser = ""; std::string ServerPass = ""; std::string ServerPrefix = ""; std::string ServerAccount = ""; bool ServerSSL = true; std::string ErrorMessage = ""; // Connect results. bool SSLStatus = false; COSSLVerified SSLVerified = COSSL_NORESULT; bool ValidResponse = false; bool AuthPassed = false; bool CanProcess = false; bool SSLSelfSigned = false; bool TaskCompleted = false; private: }; #endif