nsresult nsAbLDAPProcessReplicationData::DoTask() { if (!mInitialized) return NS_ERROR_NOT_INITIALIZED; nsresult rv = OpenABForReplicatedDir(true); if (NS_FAILED(rv)) // do not call done here since it is called by OpenABForReplicationDir return rv; mOperation = do_CreateInstance(NS_LDAPOPERATION_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); rv = mOperation->Init(mConnection, this, nullptr); NS_ENSURE_SUCCESS(rv, rv); // get the relevant attributes associated with the directory server url nsCAutoString urlFilter; rv = mDirectoryUrl->GetFilter(urlFilter); if (NS_FAILED(rv)) return rv; nsCAutoString dn; rv = mDirectoryUrl->GetDn(dn); if (NS_FAILED(rv)) return rv; if (dn.IsEmpty()) return NS_ERROR_UNEXPECTED; int32_t scope; rv = mDirectoryUrl->GetScope(&scope); if (NS_FAILED(rv)) return rv; nsCAutoString attributes; rv = mDirectoryUrl->GetAttributes(attributes); if (NS_FAILED(rv)) return rv; mState = kReplicatingAll; if (mListener && NS_SUCCEEDED(rv)) // XXX Cast from bool to nsresult mListener->OnStateChange(nullptr, nullptr, nsIWebProgressListener::STATE_START, static_cast<nsresult>(true)); return mOperation->SearchExt(dn, scope, urlFilter, attributes, 0, 0); }
nsresult nsAbLDAPProcessChangeLogData::OnLDAPSearchResult(nsILDAPMessage *aMessage) { NS_ENSURE_ARG_POINTER(aMessage); if (!mInitialized) return NS_ERROR_NOT_INITIALIZED; PRInt32 errorCode; nsresult rv = aMessage->GetErrorCode(&errorCode); if(NS_SUCCEEDED(rv)) { if(errorCode == nsILDAPErrors::SUCCESS || errorCode == nsILDAPErrors::SIZELIMIT_EXCEEDED) { switch(mState) { case kSearchingAuthDN : rv = OnSearchAuthDNDone(); break; case kSearchingRootDSE: { // Before starting the changeLog check the DB file, if its not there or bogus // we need to create a new one and set to all. nsCOMPtr<nsIAddrBookSession> abSession = do_GetService(NS_ADDRBOOKSESSION_CONTRACTID, &rv); if (NS_FAILED(rv)) break; nsCOMPtr<nsILocalFile> dbPath; rv = abSession->GetUserProfileDirectory(getter_AddRefs(dbPath)); if (NS_FAILED(rv)) break; nsCAutoString fileName; rv = mDirectory->GetReplicationFileName(fileName); if (NS_FAILED(rv)) break; rv = dbPath->AppendNative(fileName); if (NS_FAILED(rv)) break; bool fileExists; rv = dbPath->Exists(&fileExists); if (NS_FAILED(rv)) break; PRInt64 fileSize; rv = dbPath->GetFileSize(&fileSize); if(NS_FAILED(rv)) break; if (!fileExists || !fileSize) mUseChangeLog = PR_FALSE; // Open / create the AB here since it calls Done, // just return from here. if (mUseChangeLog) rv = OpenABForReplicatedDir(PR_FALSE); else rv = OpenABForReplicatedDir(PR_TRUE); if (NS_FAILED(rv)) return rv; // Now start the appropriate query rv = OnSearchRootDSEDone(); break; } case kFindingChanges: rv = OnFindingChangesDone(); // If success we return from here since // this changes state to kReplicatingChanges // and it falls thru into the if clause below. if (NS_SUCCEEDED(rv)) return rv; break; case kReplicatingAll : return nsAbLDAPProcessReplicationData::OnLDAPSearchResult(aMessage); } // end of switch } else rv = NS_ERROR_FAILURE; // If one of the changed entry in changelog is not found, // continue with replicating the next one. if(mState == kReplicatingChanges) rv = OnReplicatingChangeDone(); } // end of outer if if(NS_FAILED(rv)) Abort(); return rv; }