X-Git-Url: http://Server1/repobrowser/?p=xestiaab%2F.git;a=blobdiff_plain;f=source%2Factmgr%2FfrmActivityMgr.cpp;h=606b9f1cfbac3a6ceed148e0ad3b973938b38131;hp=fef672f44ff9b26a13d91107e4874d1407ef178d;hb=d269801e3d32dbbea14af5f261190ef097635fce;hpb=22cf85aa4e55ff649647b36c5455db507104cd7c diff --git a/source/actmgr/frmActivityMgr.cpp b/source/actmgr/frmActivityMgr.cpp index fef672f..606b9f1 100644 --- a/source/actmgr/frmActivityMgr.cpp +++ b/source/actmgr/frmActivityMgr.cpp @@ -646,7 +646,7 @@ void frmActivityMgr::ProcessTasksThread() COServerResponse ETagGetResponse = ConnObjectIter->second->GetServerEntityTagValue(StringURLIter->second.ToStdString()); - if (AddContactResponse.RequestResult != COREQUEST_OK){ + if (ETagGetResponse.RequestResult != COREQUEST_OK){ iter->second = 2; break; } @@ -696,13 +696,240 @@ void frmActivityMgr::ProcessTasksThread() 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; + } + + COServerResponse ETagGetResponse = ConnObjectIter->second->GetServerEntityTagValue(StringURLIter->second.ToStdString()); + + if (ETagGetResponse.RequestResult != COREQUEST_OK){ + iter->second = 2; + break; + } + + ETagServer = ETagGetResponse.EntityTag; + + // Compare the ETag with the Server ETag. + + std::cout << ETagOriginal << std::endl; + std::cout << ETagServer << std::endl; + + if (ETagOriginal != ETagServer){ + + // Server ETag is different from original ETag. + // This is a conflict which the user will now + // need to resolve. + + frmMain *frmMainPtrGet = static_cast(frmMainPtr); + + vCard34Conv vCard34Obj; + + std::string ServerContactData; + wxString wxStringServerContactData; + vCard ClientData; + vCard ConvertedV4Data; + + // Load the client data from the filename given. + + //ConnHandle.GetServerContactData(); + //ServerContactData = ConnHandle.GetPageData(); + + COServerResponse GetContactResponse = ConnObjectIter->second->GetContact(StringURLIter->second.ToStdString(), + &ServerContactData); + + if (GetContactResponse.RequestResult != COREQUEST_OK){ + iter->second = 2; + break; + } + + wxStringServerContactData = wxString::FromUTF8((const char*)ServerContactData.c_str()); + + // Process v3 version into v4 version. + + vCard34Obj.ConvertToV4(&wxStringServerContactData, &ConvertedV4Data); + + vCardConflictObj vCardProcData; + + vCardProcData.vCardLocalData = &ClientData; + vCardProcData.vCardServerData = &ConvertedV4Data; + ClientData.LoadFile(FullFilename); + + // Setup Conflict Resolution Dialog. + + // Fetch Data from Server and convert. + + bool *PauseMode = new bool; + int ConflictResult; + QRNotif qrn; + + *PauseMode = TRUE; + qrn.QResponse = &ConflictResult; + qrn.PausePtr = PauseMode; + + vCardProcData.QRNotifData = &qrn; + + wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED); + event.SetClientData(&vCardProcData); + wxPostEvent(frmMainPtrGet, event); + + while (*PauseMode == TRUE){ + SleepFor(250000000); + } + + delete PauseMode; + PauseMode = NULL; + + if (ConflictResult == 0){ + + // Decide Later. + + iter->second = 4; + break; + + } else if (ConflictResult == 1){ + + // Decided to use client version. + + } else if (ConflictResult == 2){ + + // Decided to use server version. + + // Download server version. + + ConvertedV4Data.WriteFile(FullFilename); + + } + + } else { + + // Upload the data to the server. + + COServerResponse EditContactResponse = ConnObjectIter->second->EditContact(StringURLIter->second.ToStdString(), + StringDataIter->second.ToStdString()); + + if (EditContactResponse.RequestResult != COREQUEST_OK){ + iter->second = 2; + break; + } + + } + + /*while (ExitLoop == FALSE){ int ErrorCode = ConnHandle.SSLVerifyTest(); @@ -941,7 +1168,7 @@ void frmActivityMgr::ProcessTasksThread() // Decided to use client version. - ConnHandle.ProcessData(); + //ConnHandle.ProcessData(); } else if (ConflictResult == 2){ @@ -959,13 +1186,24 @@ void frmActivityMgr::ProcessTasksThread() ConnHandle.ProcessData(); - } + }*/ // Update the ETag DB. - ConnHandle.GetServerETagValueThread(); - ETagServer = ConnHandle.ETagValueResult(); - ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer); + //ConnHandle.GetServerETagValueThread(); + //ETagServer = ConnHandle.ETagValueResult(); + + ETagGetResponse = ConnObjectIter->second->GetServerEntityTagValue(StringURLIter->second.ToStdString()); + + if (ETagGetResponse.RequestResult != COREQUEST_OK){ + iter->second = 2; + break; + } + + std::cout << "Etag Update!" << std::endl; + std::cout << ETagGetResponse.EntityTag << std::endl; + + ETagDBPtr->UpdateETag(ContactFilename, ETagGetResponse.EntityTag, ETagGetResponse.EntityTag); iter->second = 4; break; @@ -2214,12 +2452,12 @@ void frmActivityMgr::ProcessTasksThread() while (iter->second == 1){ - SleepFor(250000000); + SleepFor(125000000); //nanosleep(&n1, &n2); } - if ((iter->second == 4 && TypeIter->second == 0) || + /*if ((iter->second == 4 && TypeIter->second == 0) || (iter->second == 8 && TypeIter->second == 0)){ AccountDir = StringAccountIter->second; @@ -2241,7 +2479,7 @@ void frmActivityMgr::ProcessTasksThread() ETagServer = ConnHandle.ETagValueResult(); ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer); - } + }*/ break;