X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Factmgr%2FfrmActivityMgr.cpp;h=9c1e2a41514dbc8b96eba05e340529daf88ddacd;hb=ff65774611d82f2bdbb6cb5c34829cc2e922cf68;hp=9bef583ca91d4b8fd1b5c516c087191413531016;hpb=3159f45b9111138301b288e6de30e158933cec88;p=xestiaab%2F.git diff --git a/source/actmgr/frmActivityMgr.cpp b/source/actmgr/frmActivityMgr.cpp index 9bef583..9c1e2a4 100644 --- a/source/actmgr/frmActivityMgr.cpp +++ b/source/actmgr/frmActivityMgr.cpp @@ -323,16 +323,15 @@ void frmActivityMgr::ProcessTasksThread() while (ExitLoop == FALSE){ - ConnHandle.SetUploadMode(TRUE); - ConnHandle.SetupData(wxT("PUT"), StringURLIter->second, StringDataIter->second); - ConnHandle.SetEditMode(EditMode); - ConnHandle.ProcessData(); - - int ErrorCode = ConnHandle.GetResultCode(); + // Verify that we have a trusted SSL connection first. - if (ErrorCode != 0){ + int ErrorCode = ConnHandle.SSLVerifyTest(); + + if (ErrorCode != CURLE_OK){ - if (ErrorCode == 60 || ErrorCode == 51){ + if (ErrorCode == CURLE_SSL_CACERT || + ErrorCode == CURLE_PEER_FAILED_VERIFICATION || + ErrorCode == CURLE_SSL_CONNECT_ERROR){ // Invalid SSL certificate so bring up a dialog to the user // explaining what has happened and the options available. @@ -361,14 +360,37 @@ void frmActivityMgr::ProcessTasksThread() frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject()); + + } + +#elif defined(__WIN32__) + + BOOL ModifiedCertificateData; + CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&ConnHandle, (HWND)frmMainPtrGet->GetHandle()); + + if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){ + wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog")); + } + + if (ModifiedCertificateData == FALSE){ + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateContextPointer()); + iter->second = 2; + break; + + } else { + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer()); + } + #else // Setup the data to be sent in the wxPostEvent command. SSLInvalidCertNotifObj SSLICNProcData; - SSLCertCollection certcol = ConnHandle.GetCertificateData(); + SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults(); bool *PauseMode = new bool; QRNotif qrn; @@ -446,13 +468,31 @@ void frmActivityMgr::ProcessTasksThread() #if defined(__APPLE__) frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject()); - + +#elif defined(__WIN32__) + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer()); + #else frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData()); #endif + ConnHandle.SetUploadMode(TRUE); + ConnHandle.SetupData(wxT("PUT"), StringURLIter->second, StringDataIter->second); + ConnHandle.SetEditMode(EditMode); + ConnHandle.ProcessData(); + + int ErrorCode = ConnHandle.GetResultCode(); + + if (ErrorCode != CURLE_OK){ + + iter->second = 4; + break; + + } + // Add contact to the ETag DB. ConnHandle.GetServerETagValueThread(); @@ -460,7 +500,6 @@ void frmActivityMgr::ProcessTasksThread() ETagDBPtr->AddETag(ContactFilename, ETagServer, ETagServer); iter->second = 4; - CardDAVIter->second = NULL; break; } @@ -510,18 +549,14 @@ void frmActivityMgr::ProcessTasksThread() bool ExitLoop = FALSE; while (ExitLoop == FALSE){ + + int ErrorCode = ConnHandle.SSLVerifyTest(); - ConnHandle.SetUploadMode(TRUE); - ConnHandle.SetupData(wxT("PUT"), StringURLIter->second, StringDataIter->second); - ConnHandle.SetEditMode(EditMode); - ConnHandle.GetServerETagValueThread(); - ETagServer = ConnHandle.ETagValueResult(); - - int ErrorCode = ConnHandle.GetResultCode(); - - if (ErrorCode != 0){ + if (ErrorCode != CURLE_OK){ - if (ErrorCode == 60 || ErrorCode == 51){ + if (ErrorCode == CURLE_SSL_CACERT || + ErrorCode == CURLE_PEER_FAILED_VERIFICATION || + ErrorCode == CURLE_SSL_CONNECT_ERROR){ // Invalid SSL certificate so bring up a dialog to the user // explaining what has happened and the options available. @@ -551,13 +586,35 @@ void frmActivityMgr::ProcessTasksThread() frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject()); } + +#elif defined(__WIN32__) + + BOOL ModifiedCertificateData; + CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&ConnHandle, (HWND)frmMainPtrGet->GetHandle()); + + if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){ + wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog")); + } + + if (ModifiedCertificateData == FALSE){ + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateContextPointer()); + iter->second = 2; + break; + + } else { + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer()); + + } + #else // Setup the data to be sent in the wxPostEvent command. SSLInvalidCertNotifObj SSLICNProcData; - SSLCertCollection certcol = ConnHandle.GetCertificateData(); + SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults(); bool *PauseMode = new bool; QRNotif qrn; @@ -586,14 +643,14 @@ void frmActivityMgr::ProcessTasksThread() // Accept the certificate. Write the certificate into the account // directory (as server.crt) - will overwrite old certificate. - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData()); - WriteServerCertificate(AccountDir, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults()); + WriteServerCertificate(AccountDir, ConnHandle.GetSSLVerifyResults()); } else if (SSLResult == 2){ // Reject the certificate, abort the task and mark as failed. - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults()); iter->second = 2; break; @@ -628,13 +685,30 @@ void frmActivityMgr::ProcessTasksThread() #if defined(__APPLE__) frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject()); - + +#elif defined(__WIN32__) + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer()); + #else - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults()); #endif + ConnHandle.SetUploadMode(TRUE); + ConnHandle.SetupData(wxT("PUT"), StringURLIter->second, StringDataIter->second); + ConnHandle.SetEditMode(EditMode); + ConnHandle.GetServerETagValueThread(); + ETagServer = ConnHandle.ETagValueResult(); + + int ErrorCode = ConnHandle.GetResultCode(); + + if (ErrorCode != CURLE_OK){ + iter->second = 2; + break; + } + // Compare the ETag with the Server ETag. if (ETagOriginal != ETagServer){ @@ -780,18 +854,13 @@ void frmActivityMgr::ProcessTasksThread() while (ExitLoop == FALSE){ - ConnHandle.SetUploadMode(FALSE); - ConnHandle.SetupData(wxT("DELETE"), ContactFilename, wxT("")); - ConnHandle.ProcessData(); - SSLCertCollection certcol = ConnHandle.GetCertificateData(); - - // Check if any errors have occured whilst getting the data. - - int ErrorCode = ConnHandle.GetResultCode(); - - if (ErrorCode != 0){ + int ErrorCode = ConnHandle.SSLVerifyTest(); + + if (ErrorCode != CURLE_OK){ - if (ErrorCode == 60 || ErrorCode == 51){ + if (ErrorCode == CURLE_SSL_CACERT || + ErrorCode == CURLE_PEER_FAILED_VERIFICATION || + ErrorCode == CURLE_SSL_CONNECT_ERROR){ // Invalid SSL certificate so bring up a dialog to the user // explaining what has happened and the options available. @@ -821,12 +890,36 @@ void frmActivityMgr::ProcessTasksThread() frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject()); } + +#elif defined(__WIN32__) + + BOOL ModifiedCertificateData; + CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&ConnHandle, (HWND)frmMainPtrGet->GetHandle()); + + if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){ + wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog")); + } + + if (ModifiedCertificateData == FALSE){ + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateContextPointer()); + iter->second = 2; + break; + + } else { + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer()); + + } + #else // Setup the data to be sent in the wxPostEvent command. SSLInvalidCertNotifObj SSLICNProcData; + SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults(); + bool *PauseMode = new bool; QRNotif qrn; @@ -861,14 +954,14 @@ void frmActivityMgr::ProcessTasksThread() // Accept the certificate. Write the certificate into the account // directory (as server.crt) - will overwrite old certificate. - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData()); - WriteServerCertificate(AccountDir, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults()); + WriteServerCertificate(AccountDir, ConnHandle.GetSSLVerifyResults()); } else if (SSLResult == 2){ // Reject the certificate, abort the task and mark as failed. - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults()); iter->second = 2; break; @@ -903,13 +996,31 @@ void frmActivityMgr::ProcessTasksThread() #if defined(__APPLE__) frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject()); - + +#elif defined(__WIN32__) + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer()); + #else - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults()); #endif + ConnHandle.SetUploadMode(FALSE); + ConnHandle.SetupData(wxT("DELETE"), ContactFilename, wxT("")); + ConnHandle.ProcessData(); + + SSLCertCollection certcol = ConnHandle.GetCertificateData(); + + // Check if any errors have occured whilst getting the data. + + int ErrorCode = ConnHandle.GetResultCode(); + + if (ErrorCode != CURLE_OK){ + iter->second = 2; + break; + } ETagDBPtr->RemoveETag(ContactFilename); @@ -1052,12 +1163,35 @@ void frmActivityMgr::ProcessTasksThread() frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject()); } + +#elif defined(__WIN32__) + + BOOL ModifiedCertificateData; + CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&ConnHandle, (HWND)frmMainPtrGet->GetHandle()); + + if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){ + wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog")); + } + + if (ModifiedCertificateData == FALSE){ + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateContextPointer()); + iter->second = 2; + break; + + } else { + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer()); + + } #else // Setup the data to be sent in the wxPostEvent command. SSLInvalidCertNotifObj SSLICNProcData; + SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults(); + bool *PauseMode = new bool; QRNotif qrn; @@ -1092,14 +1226,14 @@ void frmActivityMgr::ProcessTasksThread() // Accept the certificate. Write the certificate into the account // directory (as server.crt) - will overwrite old certificate. - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData()); - WriteServerCertificate(AccountDir, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults()); + WriteServerCertificate(AccountDir, ConnHandle.GetSSLVerifyResults()); } else if (SSLResult == 2){ // Reject the certificate, abort the task and mark as failed. - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults()); iter->second = 2; break; @@ -1134,10 +1268,14 @@ void frmActivityMgr::ProcessTasksThread() #if defined(__APPLE__) frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject()); - + +#elif defined(__WIN32__) + + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer()); + #else - frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData()); + frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults()); #endif @@ -1155,6 +1293,16 @@ void frmActivityMgr::ProcessTasksThread() bool ContinueProcess = AccDir.GetFirst(&AccDirFilename, wxEmptyString, wxDIR_DEFAULT); ServerContactList = ConnHandle.GetContactList(SyncTokenLoad.ToUTF8()); + + int ErrorCode = ConnHandle.GetResultCode(); + + if (ErrorCode != CURLE_OK){ + + iter->second = 4; + break; + + } + SSLCertCollection certcol = ConnHandle.GetCertificateData(); // Create a pointer for the std::map.