NS_IMETHODIMP nsSmtpService::GetDefaultServer(nsISmtpServer **aServer) { NS_ENSURE_ARG_POINTER(aServer); loadSmtpServers(); *aServer = nsnull; // always returns NS_OK, just leaving *aServer at nsnull if (!mDefaultSmtpServer) { nsresult rv; nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); if (NS_FAILED(rv)) return rv; // try to get it from the prefs nsCString defaultServerKey; rv = prefBranch->GetCharPref(PREF_MAIL_SMTP_DEFAULTSERVER, getter_Copies(defaultServerKey)); if (NS_SUCCEEDED(rv) && !defaultServerKey.IsEmpty()) { nsCOMPtr<nsISmtpServer> server; rv = GetServerByKey(defaultServerKey.get(), getter_AddRefs(mDefaultSmtpServer)); } else { // no pref set, so just return the first one, and set the pref // Ensure the list of servers is loaded loadSmtpServers(); // nothing in the array, we had better create a new server // (which will add it to the array & prefs anyway) if (mSmtpServers.Count() == 0) // if there are no smtp servers then don't create one for the default. return nsnull; mDefaultSmtpServer = mSmtpServers[0]; NS_ENSURE_TRUE(mDefaultSmtpServer, NS_ERROR_NULL_POINTER); // now we have a default server, set the prefs correctly nsCString serverKey; mDefaultSmtpServer->GetKey(getter_Copies(serverKey)); if (NS_SUCCEEDED(rv)) prefBranch->SetCharPref(PREF_MAIL_SMTP_DEFAULTSERVER, serverKey.get()); } } // at this point: // * mDefaultSmtpServer has a valid server // * the key has been set in the prefs NS_IF_ADDREF(*aServer = mDefaultSmtpServer); return NS_OK; }
NS_IMETHODIMP nsSmtpService::CreateSmtpServer(nsISmtpServer **aResult) { if (!aResult) return NS_ERROR_NULL_POINTER; loadSmtpServers(); nsresult rv; PRInt32 i = 0; PRBool unique = PR_FALSE; findServerByKeyEntry entry; nsCAutoString key; do { key = "smtp"; key.AppendInt(++i); entry.key = key.get(); entry.server = nsnull; mSmtpServers.EnumerateForwards(findServerByKey, (void *)&entry); if (!entry.server) unique=PR_TRUE; } while (!unique); rv = createKeyedServer(key.get(), aResult); saveKeyList(); return rv; }
NS_IMETHODIMP nsSmtpService::CreateServer(nsISmtpServer **aResult) { if (!aResult) return NS_ERROR_NULL_POINTER; loadSmtpServers(); nsresult rv; int32_t i = 0; bool unique = false; findServerByKeyEntry entry; nsAutoCString key; do { key = "smtp"; key.AppendInt(++i); entry.key = key.get(); entry.server = nullptr; mSmtpServers.EnumerateForwards(findServerByKey, (void *)&entry); if (!entry.server) unique=true; } while (!unique); rv = createKeyedServer(key.get(), aResult); NS_ENSURE_SUCCESS(rv, rv); return saveKeyList(); }
NS_IMETHODIMP nsSmtpService::GetSmtpServers(nsISimpleEnumerator **aResult) { NS_ENSURE_ARG_POINTER(aResult); // now read in the servers from prefs if necessary PRUint32 serverCount = mSmtpServers.Count(); if (serverCount <= 0) loadSmtpServers(); return NS_NewArrayEnumerator(aResult, mSmtpServers); }