DEFINE_EVENT_TYPE(ACTMGR_STARTPROCESSTIMER);
DEFINE_EVENT_TYPE(ACTMGR_STOPPROCESSTIMER);
DEFINE_EVENT_TYPE(ACTMGR_UPDATESTATUSLABEL);
+DEFINE_EVENT_TYPE(ACTMGR_STARTANIMATIONTIMER);
BEGIN_EVENT_TABLE(frmActivityMgr, wxWindow)
EVT_COMMAND(wxID_ANY, ACTMGR_RESUMEPROC, frmActivityMgr::ResumeProcessing)
EVT_COMMAND(wxID_ANY, ACTMGR_STARTPROCESSTIMER, frmActivityMgr::StartProcessTimer)
EVT_COMMAND(wxID_ANY, ACTMGR_STOPPROCESSTIMER, frmActivityMgr::StopProcessTimer)
EVT_COMMAND(wxID_ANY, ACTMGR_UPDATESTATUSLABEL, frmActivityMgr::UpdateStatusLabel)
+ EVT_COMMAND(wxID_ANY, ACTMGR_STARTANIMATIONTIMER, frmActivityMgr::StartAnimationTimer)
END_EVENT_TABLE()
frmActivityMgr::frmActivityMgr( wxWindow* parent )
}
+ if (ApplicationSleepMode == TRUE){
+
+ return;
+
+ }
+
std::map<int,int>::iterator TypeIter;
std::map<int,wxString>::iterator StringIter;
std::map<int,wxString>::iterator StringDataIter;
std::map<int,wxString>::iterator StringETagIter;
std::map<int,wxString>::iterator StringETagOrigIter;
std::map<int,CardDAV*>::iterator CardDAVIter;
+ std::map<int,ConnectionObject*>::iterator ConnObjectIter;
std::map<int,ActivityMgrAccountSettings>::iterator AccountSettingsIter;
std::map<int,long>::iterator LongIter;
bool TasksFoundProc = FALSE;
continue;
}
+ wxCommandEvent StartAnimationEvent(ACTMGR_STARTANIMATIONTIMER);
+
+ wxPostEvent(this, StartAnimationEvent);
+
+ // Start the animation timer if it hasn't started.
+
CardDAVIter = ActivityListConn.find(iter->first);
+ ConnObjectIter = ActivityListConnObject.find(iter->first);
TypeIter = ActivityListType.find(iter->first);
StringETagIter = ActivityListETag.find(iter->first);
StringETagOrigIter = ActivityListETagOriginal.find(iter->first);
FullFilename = StringFullFilenameIter->second;
EditMode = ActivityListEditMode.find(iter->first)->second;
- bool KeepUpdating = TRUE;
+ bool KeepUpdating = true;
- while(KeepUpdating == TRUE){
+ while(KeepUpdating == true){
- bool ExitLoop = FALSE;
+ COConnectResult ConnectResponse = ConnObjectIter->second->Connect(false);
- while (ExitLoop == FALSE){
+ bool ExitLoop = false;
+
+ while (ExitLoop == false){
+
+ if (ConnObjectIter->second->SSLVerify() == COSSL_UNABLETOVERIFY){
+
+ frmMainPtrGet->PauseAllTimers();
+
+#if defined(__APPLE__)
+#elif defined(__WIN32__)
+#else
+
+ bool UsingSSLBypass = false;
+ int SSLResult = 0;
+
+ // Connect again and fetch SSL certificate information.
+
+ ConnObjectIter->second->BypassSSLVerification(true);
+
+ COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+
+ ConnObjectIter->second->BypassSSLVerification(false);
+
+ SSLInvalidCertNotifObjString SSLICNProcData;
+
+ SSLCertCollectionString certcol = ConnObjectIter->second->BuildSSLCollection();
+
+ bool *PauseMode = new bool;
+ QRNotif qrn;
+
+ *PauseMode = TRUE;
+ qrn.QResponse = &SSLResult;
+ qrn.PausePtr = PauseMode;
+
+ SSLICNProcData.CertCollection = certcol;
+ SSLICNProcData.QRNotifData = &qrn;
+ SSLICNProcData.AccountName = AccountNameFriendly;
+
+ wxCommandEvent event(INVALIDSSLCERTSTRING);
+ event.SetClientData(&SSLICNProcData);
+ wxPostEvent(frmMainPtrGet, event);
+
+ while (*PauseMode == TRUE){
+ //nanosleep(&n1, &n2);
+ SleepFor(250000000);
+ }
+
+ // Process the response from the user.
+
+ if (SSLResult == 1){
+
+ // Accept the Certificate.
+
+ UsingSSLBypass = true;
+ ConnObjectIter->second->BypassSSLVerification(true);
+
+ COConnectResult TestConnectionResult = ConnObjectIter->second->Connect(true);
+ WriteServerCertificate(AccountDir, certcol);
+
+ ConnObjectIter->second->BypassSSLVerification(false);
+
+ } else if (SSLResult == 2){
+
+ // Reject the certificate, abort the task and mark as failed.
+
+ iter->second = 2;
+ break;
+
+ }
+
+#endif
+
+ frmMainPtrGet->ResumeAllTimers();
+ ExitLoop = true;
+
+ } else if (ConnectResponse == COCONNECT_AUTHFAIL){
+
+ ConnectResponse = ConnObjectIter->second->Connect(true);
+
+ if (ConnectResponse == COCONNECT_OK){
+
+ ExitLoop = true;
+ break;
+
+ } else {
+
+ ExitLoop = true;
+ iter->second = 2;
+ break;
+
+ }
+
+ } else if (ConnectResponse == COCONNECT_OK){
+
+ ConnectResponse = ConnObjectIter->second->Connect(true);
+
+ ExitLoop = true;
+ break;
+
+ } else {
+
+ ExitLoop = true;
+ iter->second = 2;
+ break;
+
+ }
+
+ }
+
+ if (iter->second == 2 || iter->second == 3 || iter->second == 4){
+ break;
+ }
+
+#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
+
+ COServerResponse AddContactResponse = ConnObjectIter->second->AddContact(StringURLIter->second.ToStdString(),
+ StringDataIter->second.ToStdString());
+
+ if (AddContactResponse.RequestResult != COREQUEST_OK){
+ iter->second = 2;
+ break;
+ }
+
+ /*while (ExitLoop == FALSE){
// Verify that we have a trusted SSL connection first.
SSLInvalidCertNotifObj SSLICNProcData;
- SSLCertCollection certcol = ConnHandle.GetCertificateData();
+ SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults();
bool *PauseMode = new bool;
QRNotif qrn;
event.SetClientData(&SSLICNProcData);
wxPostEvent(frmMainPtrGet, event);
- /*timespec n1, n2;
-
- // Fall asleep until we get an response.
-
- n1.tv_sec = 0;
- n1.tv_nsec = 250000000L;*/
-
while (*PauseMode == TRUE){
//nanosleep(&n1, &n2);
SleepFor(250000000);
// Add contact to the ETag DB.
ConnHandle.GetServerETagValueThread();
- ETagServer = ConnHandle.ETagValueResult();
- ETagDBPtr->AddETag(ContactFilename, ETagServer, ETagServer);
+ ETagServer = ConnHandle.ETagValueResult();*/
+
+ // TODO: Get the entity tag for the new contact.
+
+ COServerResponse ETagGetResponse = ConnObjectIter->second->GetServerEntityTagValue(StringURLIter->second.ToStdString());
+
+ if (AddContactResponse.RequestResult != COREQUEST_OK){
+ iter->second = 2;
+ break;
+ }
+
+ ETagDBPtr->AddETag(ContactFilename, ETagGetResponse.EntityTag, ETagGetResponse.EntityTag);
iter->second = 4;
break;
SSLInvalidCertNotifObj SSLICNProcData;
- SSLCertCollection certcol = ConnHandle.GetCertificateData();
+ SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults();
bool *PauseMode = new bool;
QRNotif qrn;
// 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;
#else
- frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData());
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
#endif
SSLInvalidCertNotifObj SSLICNProcData;
+ SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults();
+
bool *PauseMode = new bool;
QRNotif qrn;
// 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;
#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.
SSLInvalidCertNotifObj SSLICNProcData;
+ SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults();
+
bool *PauseMode = new bool;
QRNotif qrn;
// 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;
#else
- frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData());
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
#endif
//ActListProcTimer.Start();
}
-
+
wxCommandEvent event(ACTMGR_STARTPROCESSTIMER);
wxPostEvent(this, event);
void frmActivityMgr::ProcessTasks()
{
-
+
std::thread ProcessThread(&frmActivityMgr::ProcessTasksThread, this);
ProcessThread.detach();
wxCommandEvent connevent(CONNSTAT_UPDATE);
- if (SleepMode == FALSE){
+ if (ApplicationSleepMode == FALSE){
connevent.SetInt(1);
- SleepMode = TRUE;
+ ApplicationSleepMode = TRUE;
+ mnuSleepMode->Check(true);
} else {
connevent.SetInt(0);
- SleepMode = FALSE;
+ ApplicationSleepMode = FALSE;
+ mnuSleepMode->Check(false);
+
+ wxCommandEvent event(ACTMGR_STARTTIMER);
+ wxPostEvent(this, event);
+
+ wxCommandEvent eventp(ACTMGR_STARTPROCESSTIMER);
+ wxPostEvent(this, eventp);
}
}
+void frmActivityMgr::SleepMode( wxCommandEvent &event ){
+
+ wxCommandEvent connevent(ACTMGR_TOGGLECONN);
+
+ wxPostEvent(this, connevent);
+
+}
+
void frmActivityMgr::WriteServerCertificate(wxString AccountName, SSLCertCollection SSLCertInc){
wxString ServerCertFinal;
}
+void frmActivityMgr::WriteServerCertificate(wxString AccountName, SSLCertCollectionString SSLCertInc){
+
+ wxString ServerCertFinal;
+
+ // Get the Cert section of the certificate and write it to the file.
+
+ ServerCertFinal = GetAccountDir(AccountName, TRUE);
+
+ wxFile CertFile;
+
+ std::map<int, SSLCertDataString>::iterator SSLCDIter = SSLCertInc.SSLCollection.find(0);
+ std::multimap<string,string>::iterator SSLDataIter = SSLCDIter->second.CertData.find("Cert");
+
+ CertFile.Open(ServerCertFinal, wxFile::write);
+
+ CertFile.Write(SSLDataIter->second, wxConvUTF8);
+ CertFile.Close();
+
+}
+
void frmActivityMgr::StartTimer(wxCommandEvent& event){
ActListProcTimer.Start(1000, FALSE);
}
+void frmActivityMgr::StartAnimationTimer(wxCommandEvent& event){
+
+ AnimationTimer.StartAnimation();
+
+}
+
void frmActivityMgr::UpdateStatusLabel(wxCommandEvent& event){
ActivityMgrLabelUpdate *actmgrudata = (ActivityMgrLabelUpdate*)event.GetClientData();