// ConnectionObject.h - ConnectionObject interface header file. // // (c) 2012-2015 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" enum COConnectResult { COCONNECT_UNITTESTFAIL = -1, COCONNECT_OK, COCONNECT_SSLFAIL, COCONNECT_INVALID, COCONNECT_TIMEOUT, COCONNECT_AUTHFAIL }; enum CORequestResult { COREQUEST_UNITTESTFAIL = -1, COREQUEST_OK, COREQUEST_ERROR_NOTCONNECTED, COREQUEST_ERROR_SERVER, }; 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; std::string EntityTag; int SessionCode; int ResultCode; 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: ConnectionObject(std::string ServerAddress, int ServerPort, std::string ServerUser, std::string ServerPass, bool ServerSSL); ConnectionObject(std::string ServerAddress, int ServerPort, std::string ServerUser, std::string ServerPass, bool ServerSSL, std::string ServerPrefix, std::string ServerAccount); // Virtual functions to be setup by the inheriting classes. virtual void SetupConnectionObject() { }; //virtual ~ConnectionObject() {}; virtual bool IsTaskCompleted() {}; virtual COConnectResult Connect(bool DoAuthentication) {}; virtual void BypassSSLVerification(bool EnableBypass) {}; virtual COServerResponse GetDefaultPrefix(std::string *ServerPrefix) {}; virtual COServerResponse AddContact(std::string Location, std::string Data) {}; virtual COServerResponse EditContact(std::string Location, std::string Data) {}; virtual COServerResponse DeleteContact(std::string Location) {}; virtual COServerResponse GetServerEntityTagValue(std::string Location) {}; virtual COServerResponse GetContact(std::string Location, std::string *PageData) {}; virtual COContactList GetContactList(std::string SyncToken) {}; virtual bool CanDoProcessing() {}; virtual bool CanDoSSL() {}; virtual COSSLVerified SSLVerify() {}; virtual bool AbleToLogin() {}; virtual bool HasValidResponse() {}; virtual bool IsSelfSigned() {}; virtual std::string GetErrorMessage() {}; // OS specific functions. #if defined(__APPLE__) #elif defined(__WIN32__) #else virtual SSLCertCollectionString BuildSSLCollection() {}; #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