NS_IMETHODIMP nsPop3Service::VerifyLogon(nsIMsgIncomingServer *aServer, nsIUrlListener *aUrlListener, nsIMsgWindow *aMsgWindow, nsIURI **aURL) { NS_ENSURE_ARG_POINTER(aServer); nsCString popHost; nsCString popUser; PRInt32 popPort = -1; nsresult rv = aServer->GetHostName(popHost); NS_ENSURE_SUCCESS(rv, rv); if (popHost.IsEmpty()) return NS_MSG_INVALID_OR_MISSING_SERVER; rv = aServer->GetPort(&popPort); NS_ENSURE_SUCCESS(rv, rv); rv = aServer->GetUsername(popUser); NS_ENSURE_SUCCESS(rv, rv); if (popUser.IsEmpty()) return NS_MSG_SERVER_USERNAME_MISSING; nsCString escapedUsername; MsgEscapeString(popUser, nsINetUtil::ESCAPE_XALPHAS, escapedUsername); nsCOMPtr<nsIPop3IncomingServer> popServer = do_QueryInterface(aServer, &rv); NS_ENSURE_SUCCESS(rv, rv); // now construct a pop3 url... // we need to escape the username because it may contain // characters like / % or @ char *urlSpec = PR_smprintf("pop3://%s@%s:%d/?verifyLogon", escapedUsername.get(), popHost.get(), popPort); NS_ENSURE_TRUE(urlSpec, NS_ERROR_OUT_OF_MEMORY); nsCOMPtr<nsIURI> url; rv = BuildPop3Url(urlSpec, nsnull, popServer, aUrlListener, getter_AddRefs(url), aMsgWindow); PR_smprintf_free(urlSpec); if (NS_SUCCEEDED(rv) && url) { rv = RunPopUrl(aServer, url); if (NS_SUCCEEDED(rv) && aURL) url.forget(aURL); } return rv; }
nsresult nsPop3Service::GetMail(PRBool downloadNewMail, nsIMsgWindow* aMsgWindow, nsIUrlListener * aUrlListener, nsIMsgFolder *aInbox, nsIPop3IncomingServer *aPopServer, nsIURI ** aURL) { NS_ENSURE_ARG_POINTER(aInbox); nsXPIDLCString popHost; nsXPIDLCString popUser; PRInt32 popPort = -1; nsCOMPtr<nsIMsgIncomingServer> server; nsCOMPtr<nsIURI> url; server = do_QueryInterface(aPopServer); nsCOMPtr <nsIMsgLocalMailFolder> destLocalFolder = do_QueryInterface(aInbox); if (destLocalFolder) { PRBool destFolderTooBig; destLocalFolder->WarnIfLocalFileTooBig(aMsgWindow, &destFolderTooBig); if (destFolderTooBig) return NS_MSG_ERROR_WRITING_MAIL_FOLDER; } if (!server) return NS_MSG_INVALID_OR_MISSING_SERVER; nsresult rv = server->GetHostName(getter_Copies(popHost)); NS_ENSURE_SUCCESS(rv, rv); if (!((const char *)popHost)) return NS_MSG_INVALID_OR_MISSING_SERVER; rv = server->GetPort(&popPort); NS_ENSURE_SUCCESS(rv, rv); rv = server->GetUsername(getter_Copies(popUser)); NS_ENSURE_SUCCESS(rv, rv); if (!((const char *)popUser)) return NS_MSG_SERVER_USERNAME_MISSING; nsXPIDLCString escapedUsername; *((char**)getter_Copies(escapedUsername)) = nsEscape(popUser, url_XAlphas); if (NS_SUCCEEDED(rv) && aPopServer) { // now construct a pop3 url... // we need to escape the username because it may contain // characters like / % or @ char * urlSpec = (downloadNewMail) ? PR_smprintf("pop3://%s@%s:%d", (const char *)escapedUsername, (const char *)popHost, popPort) : PR_smprintf("pop3://%s@%s:%d/?check", (const char *)escapedUsername, (const char *)popHost, popPort); rv = BuildPop3Url(urlSpec, aInbox, aPopServer, aUrlListener, getter_AddRefs(url), aMsgWindow); PR_Free(urlSpec); } if (NS_SUCCEEDED(rv) && url) rv = RunPopUrl(server, url); if (aURL && url) // we already have a ref count on pop3url... NS_IF_ADDREF(*aURL = url); return rv; }
nsresult nsPop3Service::GetMail(bool downloadNewMail, nsIMsgWindow *aMsgWindow, nsIUrlListener *aUrlListener, nsIMsgFolder *aInbox, nsIPop3IncomingServer *aPopServer, nsIURI **aURL) { NS_ENSURE_ARG_POINTER(aInbox); PRInt32 popPort = -1; nsCOMPtr<nsIMsgIncomingServer> server; nsCOMPtr<nsIURI> url; server = do_QueryInterface(aPopServer); NS_ENSURE_TRUE(server, NS_MSG_INVALID_OR_MISSING_SERVER); nsCOMPtr<nsIMsgLocalMailFolder> destLocalFolder = do_QueryInterface(aInbox); if (destLocalFolder) { bool destFolderTooBig; destLocalFolder->WarnIfLocalFileTooBig(aMsgWindow, &destFolderTooBig); if (destFolderTooBig) return NS_MSG_ERROR_WRITING_MAIL_FOLDER; } nsCString popHost; nsCString popUser; nsresult rv = server->GetHostName(popHost); NS_ENSURE_SUCCESS(rv, rv); if (popHost.IsEmpty()) return NS_MSG_INVALID_OR_MISSING_SERVER; rv = server->GetPort(&popPort); NS_ENSURE_SUCCESS(rv, rv); rv = server->GetUsername(popUser); NS_ENSURE_SUCCESS(rv, rv); if (popUser.IsEmpty()) return NS_MSG_SERVER_USERNAME_MISSING; nsCString escapedUsername; MsgEscapeString(popUser, nsINetUtil::ESCAPE_XALPHAS, escapedUsername); if (NS_SUCCEEDED(rv) && aPopServer) { // now construct a pop3 url... // we need to escape the username because it may contain // characters like / % or @ char * urlSpec = (downloadNewMail) ? PR_smprintf("pop3://%s@%s:%d", escapedUsername.get(), popHost.get(), popPort) : PR_smprintf("pop3://%s@%s:%d/?check", escapedUsername.get(), popHost.get(), popPort); rv = BuildPop3Url(urlSpec, aInbox, aPopServer, aUrlListener, getter_AddRefs(url), aMsgWindow); PR_smprintf_free(urlSpec); NS_ENSURE_SUCCESS(rv, rv); } NS_ENSURE_TRUE(url, rv); if (NS_SUCCEEDED(rv)) rv = RunPopUrl(server, url); if (aURL) // we already have a ref count on pop3url... NS_IF_ADDREF(*aURL = url); return rv; }