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