SMTP works again.
* The message to send the mails never made it to the add-on looper. * Mail protocol threads now have names. * Added a "public" BOutboundMailProtocol::SendMessages() call that sends itself a message (even the correct one this time).
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2004-2013, Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2004-2015, Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2001 Dr. Zoidberg Enterprises. All rights reserved.
|
||||
* Copyright 2011 Clemens Zeidler. All rights reserved.
|
||||
*
|
||||
@@ -52,7 +52,7 @@ typedef status_t BMailFilterAction;
|
||||
|
||||
class BMailProtocol : public BLooper {
|
||||
public:
|
||||
BMailProtocol(
|
||||
BMailProtocol(const char* name,
|
||||
const BMailAccountSettings& settings);
|
||||
virtual ~BMailProtocol();
|
||||
|
||||
@@ -109,6 +109,8 @@ protected:
|
||||
const BMailProtocolSettings& settings);
|
||||
|
||||
private:
|
||||
static BString _LooperName(const char* name,
|
||||
const BMailAccountSettings& settings);
|
||||
BMailFilter* _LoadFilter(const BMailAddOnSettings& settings);
|
||||
BMailFilterAction _ProcessHeaderFetched(entry_ref& ref,
|
||||
BFile& mail, BMessage& attributes);
|
||||
@@ -127,7 +129,7 @@ private:
|
||||
|
||||
class BInboundMailProtocol : public BMailProtocol {
|
||||
public:
|
||||
BInboundMailProtocol(
|
||||
BInboundMailProtocol(const char* name,
|
||||
const BMailAccountSettings& settings);
|
||||
virtual ~BInboundMailProtocol();
|
||||
|
||||
@@ -147,13 +149,17 @@ protected:
|
||||
|
||||
class BOutboundMailProtocol : public BMailProtocol {
|
||||
public:
|
||||
BOutboundMailProtocol(
|
||||
BOutboundMailProtocol(const char* name,
|
||||
const BMailAccountSettings& settings);
|
||||
virtual ~BOutboundMailProtocol();
|
||||
|
||||
virtual status_t SendMessages(const BMessage& message,
|
||||
off_t totalBytes);
|
||||
|
||||
virtual void MessageReceived(BMessage* message);
|
||||
|
||||
virtual status_t SendMessages(const BMessage& message,
|
||||
protected:
|
||||
virtual status_t HandleSendMessages(const BMessage& message,
|
||||
off_t totalBytes) = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
IMAPProtocol::IMAPProtocol(const BMailAccountSettings& settings)
|
||||
:
|
||||
BInboundMailProtocol(settings),
|
||||
BInboundMailProtocol("IMAP", settings),
|
||||
fSettings(settings.Name(), settings.InboundSettings()),
|
||||
fWorkers(5, false)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2007-2013, Haiku, Inc. All rights reserved.
|
||||
* Copyright 2007-2015, Haiku, Inc. All rights reserved.
|
||||
* Copyright 2001-2002 Dr. Zoidberg Enterprises. All rights reserved.
|
||||
* Copyright 2011, Clemens Zeidler <[email protected]>
|
||||
*
|
||||
@@ -69,7 +69,7 @@ NotHere(BStringList& that, BStringList& otherList, BStringList* results)
|
||||
|
||||
POP3Protocol::POP3Protocol(const BMailAccountSettings& settings)
|
||||
:
|
||||
BInboundMailProtocol(settings),
|
||||
BInboundMailProtocol("POP3", settings),
|
||||
fNumMessages(-1),
|
||||
fMailDropSize(0),
|
||||
fServerConnection(NULL)
|
||||
|
||||
@@ -248,7 +248,7 @@ SplitChallengeIntoMap(BString str, map<BString,BString>& m)
|
||||
|
||||
SMTPProtocol::SMTPProtocol(const BMailAccountSettings& settings)
|
||||
:
|
||||
BOutboundMailProtocol(settings),
|
||||
BOutboundMailProtocol("SMTP", settings),
|
||||
fAuthType(0)
|
||||
{
|
||||
fSettingsMessage = settings.OutboundSettings();
|
||||
@@ -329,7 +329,7 @@ SMTPProtocol::Disconnect()
|
||||
|
||||
//! Process EMail to be sent
|
||||
status_t
|
||||
SMTPProtocol::SendMessages(const BMessage& message, off_t totalBytes)
|
||||
SMTPProtocol::HandleSendMessages(const BMessage& message, off_t totalBytes)
|
||||
{
|
||||
type_code type;
|
||||
int32 count;
|
||||
@@ -337,6 +337,9 @@ SMTPProtocol::SendMessages(const BMessage& message, off_t totalBytes)
|
||||
if (status != B_OK)
|
||||
return status;
|
||||
|
||||
// TODO: sort out already sent messages -- the request could
|
||||
// be issued while we're busy sending them already
|
||||
|
||||
SetTotalItems(count);
|
||||
SetTotalItemsSize(totalBytes);
|
||||
|
||||
|
||||
@@ -27,10 +27,11 @@ public:
|
||||
const BMailAccountSettings& settings);
|
||||
virtual ~SMTPProtocol();
|
||||
|
||||
protected:
|
||||
status_t Connect();
|
||||
void Disconnect();
|
||||
|
||||
virtual status_t SendMessages(const BMessage& message,
|
||||
virtual status_t HandleSendMessages(const BMessage& message,
|
||||
off_t totalBytes);
|
||||
|
||||
status_t Open(const char *server, int port, bool esmtp);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2011-2013, Haiku, Inc. All rights reserved.
|
||||
* Copyright 2011-2015, Haiku, Inc. All rights reserved.
|
||||
* Copyright 2001-2003 Dr. Zoidberg Enterprises. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -43,11 +43,11 @@ using namespace BPrivate;
|
||||
const uint32 kMsgDeleteMessage = '&DeM';
|
||||
const uint32 kMsgAppendMessage = '&ApM';
|
||||
|
||||
const uint32 kMsgSendMessage = '&SeM';
|
||||
|
||||
|
||||
BMailProtocol::BMailProtocol(const BMailAccountSettings& settings)
|
||||
BMailProtocol::BMailProtocol(const char* name,
|
||||
const BMailAccountSettings& settings)
|
||||
:
|
||||
BLooper(_LooperName(name, settings)),
|
||||
fAccountSettings(settings),
|
||||
fMailNotifier(NULL)
|
||||
{
|
||||
@@ -273,6 +273,20 @@ BMailProtocol::LoadFilters(const BMailProtocolSettings& settings)
|
||||
}
|
||||
|
||||
|
||||
/*static*/ BString
|
||||
BMailProtocol::_LooperName(const char* addOnName,
|
||||
const BMailAccountSettings& settings)
|
||||
{
|
||||
BString name = addOnName;
|
||||
|
||||
const char* accountName = settings.Name();
|
||||
if (accountName != NULL && accountName[0] != '\0')
|
||||
name << " " << accountName;
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
BMailFilter*
|
||||
BMailProtocol::_LoadFilter(const BMailAddOnSettings& settings)
|
||||
{
|
||||
@@ -374,9 +388,10 @@ BMailProtocol::_NotifyBodyFetched(const entry_ref& ref, BFile& file,
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
BInboundMailProtocol::BInboundMailProtocol(const BMailAccountSettings& settings)
|
||||
BInboundMailProtocol::BInboundMailProtocol(const char* name,
|
||||
const BMailAccountSettings& settings)
|
||||
:
|
||||
BMailProtocol(settings)
|
||||
BMailProtocol(name, settings)
|
||||
{
|
||||
LoadFilters(fAccountSettings.InboundSettings());
|
||||
}
|
||||
@@ -472,10 +487,10 @@ BInboundMailProtocol::NotiyMailboxSynchronized(status_t status)
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
BOutboundMailProtocol::BOutboundMailProtocol(
|
||||
BOutboundMailProtocol::BOutboundMailProtocol(const char* name,
|
||||
const BMailAccountSettings& settings)
|
||||
:
|
||||
BMailProtocol(settings)
|
||||
BMailProtocol(name, settings)
|
||||
{
|
||||
LoadFilters(fAccountSettings.OutboundSettings());
|
||||
}
|
||||
@@ -486,12 +501,23 @@ BOutboundMailProtocol::~BOutboundMailProtocol()
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
BOutboundMailProtocol::SendMessages(const BMessage& files, off_t totalBytes)
|
||||
{
|
||||
BMessage message(kMsgSendMessages);
|
||||
message.Append(files);
|
||||
message.AddInt64("bytes", totalBytes);
|
||||
|
||||
return BMessenger(this).SendMessage(&message);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
BOutboundMailProtocol::MessageReceived(BMessage* message)
|
||||
{
|
||||
switch (message->what) {
|
||||
case kMsgSendMessage:
|
||||
SendMessages(*message, message->FindInt64("bytes"));
|
||||
case kMsgSendMessages:
|
||||
HandleSendMessages(*message, message->FindInt64("bytes"));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -94,25 +94,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class OutboundMessenger : public BMessenger {
|
||||
public:
|
||||
OutboundMessenger(BOutboundMailProtocol* protocol)
|
||||
:
|
||||
BMessenger(protocol)
|
||||
{
|
||||
}
|
||||
|
||||
status_t SendMessages(const BMessage& files, off_t totalBytes)
|
||||
{
|
||||
BMessage message(kMsgSendMessages);
|
||||
message.Append(files);
|
||||
message.AddInt64("bytes", totalBytes);
|
||||
|
||||
return SendMessage(&message);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
@@ -498,12 +479,8 @@ MailDaemonApplication::SendPendingMessages(BMessage* msg)
|
||||
{
|
||||
BVolumeRoster roster;
|
||||
BVolume volume;
|
||||
|
||||
std::map<int32, send_mails_info> messages;
|
||||
|
||||
int32 account = -1;
|
||||
if (msg->FindInt32("account", &account) != B_OK)
|
||||
account = -1;
|
||||
int32 account = msg->GetInt32("account", -1);
|
||||
|
||||
if (!msg->HasString("message_path")) {
|
||||
while (roster.GetNextVolume(&volume) == B_OK) {
|
||||
@@ -564,7 +541,7 @@ MailDaemonApplication::SendPendingMessages(BMessage* msg)
|
||||
if (info.bytes == 0)
|
||||
continue;
|
||||
|
||||
OutboundMessenger(protocol).SendMessages(info.files, info.bytes);
|
||||
protocol->SendMessages(info.files, info.bytes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user