Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Fixed cleaning of old object files
[xestiaab/.git] / source / carddav / carddav.cpp
index a7cc43d..52ae03a 100644 (file)
@@ -28,7 +28,7 @@
 #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
@@ -37,6 +37,41 @@ size_t WritebackFunc(char *ptr, size_t size, size_t nmemb, wxString *stream){
        \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
@@ -92,6 +127,16 @@ 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
@@ -239,23 +284,6 @@ bool CardDAV::IsSelfSigned(){
 \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
@@ -337,13 +365,13 @@ 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
@@ -475,4 +503,61 @@ wxString CardDAV::GetErrorMessage(){
        \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