#include "carddav2.h"
-#include <iostream>
-
using namespace std;
CardDAV2::CardDAV2(string ServerAddress, int ServerPort, string ServerUser, string ServerPass, bool ServerSSL){
const struct curl_tlssessioninfo *TLSInfo;
CURLcode TLSCode;
- CURL *Connection = GetConnectionObject();
- TLSCode = curl_easy_getinfo(Connection, CURLINFO_TLS_SSL_PTR, &TLSInfo);
+ TLSCode = curl_easy_getinfo(data->ConnectionSessionObject, CURLINFO_TLS_SSL_PTR, &TLSInfo);
+ SecTrustRef CertificateData;
+
if (TLSInfo->internals != nullptr && TLSCode == CURLE_OK) {
- SSLCopyPeerTrust((SSLContext*)TLSInfo->internals, &SecTrustObject);
+ SSLCopyPeerTrust((SSLContext*)TLSInfo->internals, &CertificateData);
+ data->SSLContext = CertificateData;
}
#elif defined(__WIN32__)
#if defined(__APPLE__)
+SecTrustRef CardDAV2::BuildSSLCollection(){
+
+ return CertificateData;
+
+}
+
#elif defined(__WIN32__)
PCCERT_CONTEXT CardDAV2::BuildSSLCollection(){
certptr.certdata = NULL;
- curl_easy_getinfo(ConnectionSession, CURLINFO_CERTINFO, &certptr.certinfo);
-
+ CURLcode result = curl_easy_getinfo(ConnectionSession, CURLINFO_CERTINFO, &certptr.certinfo);
+
std::string CertPropName;
std::string CertPropValue;
-
+
for (int i = 0; i < certptr.certinfo->num_of_certs; i++){
-
+
struct curl_slist *slist;
SSLCertDataString SSLCertDataInc;
COConnectResult ConnectResult = COCONNECT_UNITTESTFAIL;
string ServerAddressURL = BuildURL("/principals/");
-
+
curl_easy_setopt(ConnectionSession, CURLOPT_URL, ServerAddressURL.c_str());
if (TestMode == true){
} else {
SessionResult = curl_easy_perform(ConnectionSession);
}
-
+
switch(SessionResult){
case CURLE_OK:
case CURLE_HTTP_RETURNED_ERROR:
// Set the certificate data (if required).
-#if defined(__WIN32__)
+#if defined(__APPLE__)
+
+ if (ServerSSL) {
+
+ CertificateData = PageHeaderObject.SSLContext;
+
+ }
+
+#elif defined(__WIN32__)
if (ServerSSL) {
string ServerAddressURL = BuildURL(ServerPrefix);
- std::cout << SyncData << std::endl;
-
curl_easy_setopt(ConnectionSession, CURLOPT_URL, ServerAddressURL.c_str());
curl_easy_setopt(ConnectionSession, CURLOPT_POSTFIELDS, SyncData.c_str());
curl_easy_setopt(ConnectionSession, CURLOPT_POSTFIELDSIZE, strlen(SyncData.c_str()));
PageHeaderObject.ConnectionSessionObject = ConnectionSession;
PageHeaderObject.DataSetting = &PageHeader;
PageHeaderObject.ServerUsingSSL = false;
-
+
curl_easy_setopt(ConnectionSession, CURLOPT_URL, ServerAddress.c_str());
curl_easy_setopt(ConnectionSession, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(ConnectionSession, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST|CURLAUTH_BASIC);
curl_easy_setopt(ConnectionSession, CURLOPT_WRITEFUNCTION, CardDAV2::WritebackFunc);
curl_easy_setopt(ConnectionSession, CURLOPT_WRITEDATA, &PageDataObject);
curl_easy_setopt(ConnectionSession, CURLOPT_WRITEHEADER, &PageHeaderObject);
- curl_easy_setopt(ConnectionSession, CURLOPT_NOSIGNAL, 1);
+ curl_easy_setopt(ConnectionSession, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt(ConnectionSession, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(ConnectionSession, CURLOPT_HTTPHEADER, nullptr);
curl_easy_setopt(ConnectionSession, CURLOPT_POSTFIELDS, nullptr);
PageHeaderObject.ConnectionSessionObject = ConnectionSession;
PageHeaderObject.DataSetting = &PageHeader;
PageHeaderObject.ServerUsingSSL = true;
-
+
curl_easy_setopt(ConnectionSession, CURLOPT_URL, ServerAddressURL.c_str());
curl_easy_setopt(ConnectionSession, CURLOPT_NOPROGRESS, 1L);
+ curl_easy_setopt(ConnectionSession, CURLOPT_CERTINFO, 1L);
curl_easy_setopt(ConnectionSession, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST|CURLAUTH_BASIC);
curl_easy_setopt(ConnectionSession, CURLOPT_TIMEOUT, 60);
- curl_easy_setopt(ConnectionSession, CURLOPT_FAILONERROR, true);
+ curl_easy_setopt(ConnectionSession, CURLOPT_FAILONERROR, 0L);
curl_easy_setopt(ConnectionSession, CURLOPT_USERAGENT, XSDAB_USERAGENT);
curl_easy_setopt(ConnectionSession, CURLOPT_WRITEFUNCTION, CardDAV2::WritebackFunc);
curl_easy_setopt(ConnectionSession, CURLOPT_WRITEDATA, &PageDataObject);
curl_easy_setopt(ConnectionSession, CURLOPT_WRITEHEADER, &PageHeaderObject);
curl_easy_setopt(ConnectionSession, CURLOPT_ERRORBUFFER, SessionErrorBuffer);
- curl_easy_setopt(ConnectionSession, CURLOPT_NOSIGNAL, 1);
- curl_easy_setopt(ConnectionSession, CURLOPT_CERTINFO, 1);
- curl_easy_setopt(ConnectionSession, CURLOPT_VERBOSE, 1);
curl_easy_setopt(ConnectionSession, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(ConnectionSession, CURLOPT_HTTPHEADER, nullptr);
curl_easy_setopt(ConnectionSession, CURLOPT_POSTFIELDS, nullptr);
curl_easy_setopt(ConnectionSession, CURLOPT_USERPWD, NULL);
}
-#if !defined(__APPLE__)
-
if (EnableSSLBypass == true){
- curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYHOST, 0);
- curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYPEER, 0);
+ curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYHOST, 0L);
+ curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYPEER, 0L);
+ curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYSTATUS, 0L);
} else {
- curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYHOST, 2);
- curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYPEER, 1);
+ curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYHOST, 2L);
+ curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYPEER, 1L);
+ curl_easy_setopt(ConnectionSession, CURLOPT_SSL_VERIFYSTATUS, 1L);
}
-
-#endif
+
+#if !defined(__APPLE__) || defined(__WIN32__)
if (TestMode == false && ServerAccount.size() > 0){
}
}
+
+#endif
}
string ServerAddressURL;
- if (SSLStatus == true){
+ if (ServerSSL == true){
ServerAddressURL = "https://" + ServerAddress + ":" + to_string(ServerPort) + URI;
} else {
- ServerAddressURL = "https://" + ServerAddress + ":" + to_string(ServerPort) + URI;
+ ServerAddressURL = "http://" + ServerAddress + ":" + to_string(ServerPort) + URI;
}
return ServerAddressURL;
return;
-}
\ No newline at end of file
+}