Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Fixed cleaning of old object files
[xestiaab/.git] / source / carddav / carddav.cpp
index d10530b..52ae03a 100644 (file)
 #include "../vcard/vcard.h"\r
 #include "../common/dirs.h"\r
 \r
-size_t WritebackFunc(char *ptr, size_t size, size_t nmemb, wxString *stream){\r
+size_t CardDAV::WritebackFunc(char *ptr, size_t size, size_t nmemb, wxString *stream){\r
+       \r
+       // Writeback function for the CardDAV object.\r
        \r
        wxString Data;\r
        Data = wxString::FromUTF8((char *)ptr);\r
        \r
        stream->Append(Data);\r
        \r
+       // Get the SSL engine pointer and trust if required on certain operating systems.\r
+       \r
+#if defined(__APPLE__)\r
+       \r
+       const struct curl_tlssessioninfo *TLSInfo;\r
+       CURLcode TLSCode;\r
+       CURL *Connection = GetConnectionObject();\r
+       TLSCode = curl_easy_getinfo(Connection, CURLINFO_TLS_SSL_PTR, &TLSInfo);\r
+       \r
+       if (TLSInfo->internals != nullptr && TLSCode == CURLE_OK){\r
+               SSLCopyPeerTrust((SSLContext*)TLSInfo->internals, &SecTrustObject);\r
+       }\r
+       \r
+#elif defined(__WIN32__)\r
+\r
+       const struct curl_tlssessioninfo *TLSInfo;\r
+       CURLcode TLSCode;\r
+       CURL *Connection = GetConnectionObject();\r
+       TLSCode = curl_easy_getinfo(Connection, CURLINFO_TLS_SSL_PTR, &TLSInfo);\r
+\r
+       std::string CertName;\r
+\r
+       if (TLSInfo->internals != nullptr && TLSCode == CURLE_OK){\r
+\r
+               // Free the previous certificate data.\r
+\r
+               CertFreeCertificateContext(CertificateData);\r
+\r
+               PCtxtHandle SSLHandle = (PCtxtHandle)TLSInfo->internals;\r
+               SECURITY_STATUS GetData = QueryContextAttributes(SSLHandle, SECPKG_ATTR_REMOTE_CERT_CONTEXT, &CertificateData);\r
+\r
+       }\r
+\r
+#endif\r
+       \r
        return size * nmemb;\r
 \r
 }\r
 \r
 int ProgressFunc(void *clientdata, double TTDown, double NDown, double TTUp, double NUp){\r
 \r
+       // Progress function for the CardDAV object.\r
+       \r
        int ProgressRet;\r
        \r
        CardDAV *IncCardDAV = static_cast<CardDAV*>(clientdata);\r
@@ -88,8 +127,21 @@ int CardDAV::HTTPErrorCode;
 wxString CardDAV::ErrorMessage;\r
 SSLCertCollection CardDAV::VerifyCertCollection;\r
 bool CardDAV::AllowSelfSign;\r
+#if defined(__APPLE__)\r
+SSLContext *CardDAV::SSLContextPointer;\r
+SecTrustRef CardDAV::SecTrustObject;\r
+#endif\r
+#if defined(__WIN32__)\r
+PCCERT_CONTEXT CardDAV::CertificateData;\r
+#endif\r
+#if defined(__APPLE__) || defined(__WIN32__)\r
+CURL *CardDAV::ConnectionObject;\r
+#endif\r
 \r
 CardDAV::CardDAV(){\r
+       \r
+       // Setup the CardDAV object.\r
+       \r
        ServerPort = 8080;\r
        SSLStatus = FALSE;\r
        SSLVerified = FALSE;\r
@@ -103,14 +155,20 @@ CardDAV::CardDAV(){
        UploadMode = FALSE;\r
        EditMode = FALSE;\r
        HTTPErrorCode = 0;\r
+       \r
 }\r
 \r
 CardDAV::~CardDAV(){\r
 \r
+       // Destroy the CardDAV object.\r
+       \r
 }\r
 \r
 size_t UploadReadFunc(void *ptr, size_t size, size_t nmemb, void *userdata){\r
 \r
+       \r
+       // Upload function for the CardDAV object.\r
+       \r
        struct UploadDataStruc *UploadPtr = (struct UploadDataStruc *)userdata;\r
 \r
        if (UploadPtr->sizeleft){\r
@@ -139,6 +197,8 @@ size_t UploadReadFunc(void *ptr, size_t size, size_t nmemb, void *userdata){
 \r
 bool CardDAV::SetupConnection(wxString SvrAddress, int SvrPort, wxString SvrUser, wxString SvrPass, bool SvrSSL){\r
 \r
+       // Setup the CardDAV connection without the prefix/account.\r
+       \r
        ServerAddress = SvrAddress;\r
        ServerPort = SvrPort;\r
        ServerUser = SvrUser;\r
@@ -151,6 +211,8 @@ bool CardDAV::SetupConnection(wxString SvrAddress, int SvrPort, wxString SvrUser
 \r
 bool CardDAV::SetupConnection(wxString SvrAddress, int SvrPort, wxString SvrUser, wxString SvrPass, bool SvrSSL, wxString SvrPrefix, wxString SvrAccount){\r
 \r
+       // Setup the CardDAV connection with the prefix/account.\r
+       \r
        ServerAddress = SvrAddress;\r
        ServerPort = SvrPort;\r
        ServerUser = SvrUser;\r
@@ -165,6 +227,8 @@ bool CardDAV::SetupConnection(wxString SvrAddress, int SvrPort, wxString SvrUser
 \r
 bool CardDAV::SetupResultBools(bool *SvrResult, bool *SvrMonitor){\r
 \r
+       // Setup the result booleans.\r
+       \r
        ServerResult = SvrResult;\r
        ServerMonitor = SvrMonitor;\r
 \r
@@ -174,59 +238,56 @@ bool CardDAV::SetupResultBools(bool *SvrResult, bool *SvrMonitor){
 \r
 bool CardDAV::HasValidResponse(){\r
 \r
+       // Check that CardDAV server gave a valid response.\r
+       \r
        return ValidResponse;\r
 \r
 }\r
 \r
 bool CardDAV::CanDoCardDAV(){\r
 \r
+       // Check that the server has CardDAV support.\r
+       \r
        return HasCalDAVSupport;\r
 \r
 }\r
 \r
 bool CardDAV::CanDoSSL(){\r
 \r
+       // Check that the server can do SSL.\r
+       \r
        return SSLStatus;\r
 \r
 }\r
 \r
 bool CardDAV::SSLVerify(){\r
 \r
+       // Check that the server can verify SSL.\r
+       \r
        return SSLVerified;\r
 \r
 }\r
 \r
 bool CardDAV::AbleToLogin(){\r
 \r
+       // Check that the user is able to login.\r
+       \r
        return AuthPassed;\r
 \r
 }\r
 \r
 bool CardDAV::IsSelfSigned(){\r
 \r
+       // Check that self-signed certificates are allowed.\r
+       \r
        return AllowSelfSign;\r
 \r
 }\r
 \r
-/*\r
-\r
-size_t CardDAV::WritebackFunc(char *ptr, size_t size, size_t nmemb, FILE *stream){\r
-\r
-       wxString Data;\r
-       Data = wxString::FromUTF8((char *)ptr);\r
-       if ((bool)stream == TRUE){\r
-               PageHeader.Append(Data);\r
-       } else {\r
-               PageData.Append(Data);\r
-       }\r
-       return size * nmemb;\r
-\r
-}\r
-\r
-*/\r
-\r
 int CardDAV::ProgressFuncProc(void *clientdata, double TTUp, double NUp, double TTDown, double NDown){\r
 \r
+       // Progress function processing.\r
+       \r
        if (AbortConnection == TRUE){\r
        \r
                return -1;\r
@@ -241,26 +302,37 @@ int CardDAV::ProgressFuncProc(void *clientdata, double TTUp, double NUp, double
 \r
 void CardDAV::Abort(){\r
 \r
+       // Abort (close) the connection.\r
+       \r
        AbortConnection = TRUE;\r
 \r
 }\r
 \r
 SSLCertCollection CardDAV::GetSSLVerifyResults(){\r
+       \r
+       // Get the SSL verification results.\r
+       \r
        return VerifyCertCollection;\r
+       \r
 }\r
 \r
 void CardDAV::AllowSelfSignTest(bool AllowSelfSignIn){\r
+       \r
+       // Set the value to enable/disable SSL self-signed certificates.\r
+       \r
        AllowSelfSign = AllowSelfSignIn;\r
 }\r
 \r
 void CardDAV::GetSSLResults(){\r
 \r
-       \r
+       // Get the SSL results.\r
 \r
 }\r
 \r
 void CardDAV::SetServerFilename(wxString Filename){\r
 \r
+       // Set the server filename.\r
+       \r
        ServerFilenameLocation = Filename;\r
 \r
 }\r
@@ -268,18 +340,24 @@ void CardDAV::SetServerFilename(wxString Filename){
 wxString CardDAV::GetPageData()\r
 {\r
 \r
+       // Get the server page data.\r
+       \r
        return PageData;\r
 \r
 }\r
 \r
 wxString CardDAV::ETagValueResult(){\r
 \r
+       // Get the ETag Result value.\r
+       \r
        return ETagResult;\r
 \r
 }\r
 \r
 void CardDAV::SetupData(wxString Method, wxString FilenameLocation, wxString UploadData){\r
 \r
+       // Setup the data to use with the CardDAV connection.\r
+       \r
        ServerMethod = Method;\r
        ServerFilenameLocation = FilenameLocation;\r
        ServerUploadData = UploadData;\r
@@ -287,18 +365,20 @@ void CardDAV::SetupData(wxString Method, wxString FilenameLocation, wxString Upl
        // Check if ServerFilenameLocation has a / at \r
        // the start and if not then append it.\r
        \r
-       if (ServerFilenameLocation.Left(1) != wxT("/")){\r
+       /*if (ServerFilenameLocation.Left(1) != wxT("/")){\r
        \r
                // Not there so insert.\r
                \r
                ServerFilenameLocation = wxT("/") + ServerFilenameLocation;\r
        \r
-       }\r
+       }*/\r
 \r
 }\r
 \r
 void CardDAV::SetupVariables(std::map<int, int> *actlist, int actindex){\r
 \r
+       // Setup the variable pointers.\r
+       \r
        ActivityListPtr = actlist;\r
        ItemIndex = actindex;\r
 \r
@@ -306,36 +386,48 @@ void CardDAV::SetupVariables(std::map<int, int> *actlist, int actindex){
 \r
 wxString CardDAV::GetETagData(){\r
 \r
+       // Get the ETag data.\r
+       \r
        return ETagData;\r
 \r
 }\r
 \r
 void CardDAV::SetUploadMode(bool IncMode){\r
 \r
+       // Set the upload mode.\r
+       \r
        UploadMode = IncMode;\r
 \r
 }\r
 \r
 void CardDAV::SetEditMode(bool EditModeInc){\r
 \r
+       // Set the edit mode.\r
+       \r
        EditMode = EditModeInc;\r
 \r
 }\r
 \r
 int CardDAV::GetResultCode(){\r
 \r
+       // Get the result code.\r
+       \r
        return (int)claconncode;\r
 \r
 }\r
 \r
 int CardDAV::GetHTTPCode(){\r
 \r
+       // Get the HTTP error code.\r
+       \r
        return HTTPErrorCode;\r
 \r
 }\r
 \r
 wxString CardDAV::GetErrorBuffer(){\r
 \r
+       // Get the error buffer.\r
+       \r
        wxString ErrorBuffer = wxString::FromUTF8(curlerrbuffer);\r
 \r
        return ErrorBuffer;\r
@@ -344,6 +436,8 @@ wxString CardDAV::GetErrorBuffer(){
 \r
 SSLCertCollection CardDAV::BuildSSLCollection(CURL *conn){\r
 \r
+       // Build and return the SSL collection.\r
+       \r
        SSLCertCollection SSLCertInfo;\r
 \r
        // Grab the certificate data.\r
@@ -405,6 +499,65 @@ SSLCertCollection CardDAV::GetCertificateData(){
 \r
 wxString CardDAV::GetErrorMessage(){\r
 \r
+       // Get the error message.\r
+       \r
        return ErrorMessage;\r
 \r
-}
\ No newline at end of file
+}\r
+\r
+#if defined(__APPLE__) || defined(__WIN32__)\r
+\r
+CURL* CardDAV::GetConnectionObject(){\r
+       \r
+       // Get the CardDAV connection object.\r
+       \r
+       return ConnectionObject;\r
+       \r
+}\r
+\r
+void CardDAV::SetConnectionObject(CURL *ConnectionObjectIn){\r
+\r
+       // Set the connection object.\r
+       \r
+       ConnectionObject = ConnectionObjectIn;\r
+       \r
+}\r
+\r
+#endif\r
+\r
+#if defined(__WIN32__)\r
+\r
+PCCERT_CONTEXT CardDAV::GetCertificateContextPointer(){\r
+\r
+       // Check that the PCCERT_CONTEXT has an address\r
+       // other than NULL. Return nullptr if this is the\r
+       // case.\r
+\r
+       if (CertificateData == NULL){\r
+               return NULL;\r
+       }\r
+\r
+       // Get the certificate data.\r
+\r
+       return CertificateData;\r
+\r
+}\r
+\r
+CERT_CONTEXT CardDAV::GetCertificateContext(){\r
+\r
+       // Check that the PCCERT_CONTEXT has an address\r
+       // other than NULL. Return nullptr if this is the\r
+       // case.\r
+\r
+       if (CertificateData == NULL){\r
+               CERT_CONTEXT EmptyCertificateData = { 0 };\r
+               return EmptyCertificateData;\r
+       }\r
+\r
+       // Get the certificate data.\r
+\r
+       return *CertificateData;\r
+\r
+}\r
+\r
+#endif
\ No newline at end of file
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy