* Removed BONE PPP detection support.

* Style cleanup, no functional change intended.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42253 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2011-06-19 20:11:10 +00:00
parent dcb652ca5a
commit cd591eca19

View File

@ -27,21 +27,6 @@
#include <ctype.h> #include <ctype.h>
#include <parsedate.h> #include <parsedate.h>
#ifndef HAIKU_TARGET_PLATFORM_BEOS
#include <sys/socket.h>
#define BONE_SERIAL_PPP_GET_STATUS 0xbe230501
#define BSPPP_CONNECTED 4
typedef struct {
char if_name[32];
int connection_status;
status_t last_error;
int connect_speed;
} bsppp_status_t;
#include <unistd.h>
#endif
class _EXPORT BEmailMessage;
#include <MailMessage.h> #include <MailMessage.h>
#include <MailAttachment.h> #include <MailAttachment.h>
#include <MailSettings.h> #include <MailSettings.h>
@ -49,6 +34,7 @@ class _EXPORT BEmailMessage;
#include <mail_util.h> #include <mail_util.h>
#include <StringList.h> #include <StringList.h>
//-------Change the following!---------------------- //-------Change the following!----------------------
#define mime_boundary "----------Zoidberg-BeMail-temp--------" #define mime_boundary "----------Zoidberg-BeMail-temp--------"
#define mime_warning "This is a multipart message in MIME format." #define mime_warning "This is a multipart message in MIME format."
@ -114,12 +100,12 @@ BEmailMessage *
BEmailMessage::ReplyMessage(mail_reply_to_mode replyTo, bool accountFromMail, BEmailMessage::ReplyMessage(mail_reply_to_mode replyTo, bool accountFromMail,
const char *quoteStyle) const char *quoteStyle)
{ {
BEmailMessage *to_return = new BEmailMessage; BEmailMessage *reply = new BEmailMessage;
// Set ReplyTo: // Set ReplyTo:
if (replyTo == B_MAIL_REPLY_TO_ALL) { if (replyTo == B_MAIL_REPLY_TO_ALL) {
to_return->SetTo(From()); reply->SetTo(From());
BList list; BList list;
get_address_list(list, CC(), extract_address); get_address_list(list, CC(), extract_address);
@ -150,35 +136,36 @@ BEmailMessage::ReplyMessage(mail_reply_to_mode replyTo, bool accountFromMail,
} }
if (cc.Length() > 0) if (cc.Length() > 0)
to_return->SetCC(cc.String()); reply->SetCC(cc.String());
} else if (replyTo == B_MAIL_REPLY_TO_SENDER || ReplyTo() == NULL) } else if (replyTo == B_MAIL_REPLY_TO_SENDER || ReplyTo() == NULL)
to_return->SetTo(From()); reply->SetTo(From());
else else
to_return->SetTo(ReplyTo()); reply->SetTo(ReplyTo());
// Set special "In-Reply-To:" header (used for threading) // Set special "In-Reply-To:" header (used for threading)
const char *messageID = _body ? _body->HeaderField("Message-Id") : NULL; const char *messageID = _body ? _body->HeaderField("Message-Id") : NULL;
if (messageID != NULL) if (messageID != NULL)
to_return->SetHeaderField("In-Reply-To", messageID); reply->SetHeaderField("In-Reply-To", messageID);
// quote body text // quote body text
to_return->SetBodyTextTo(BodyText()); reply->SetBodyTextTo(BodyText());
if (quoteStyle) if (quoteStyle)
to_return->Body()->Quote(quoteStyle); reply->Body()->Quote(quoteStyle);
// Set the subject (and add a "Re:" if needed) // Set the subject (and add a "Re:" if needed)
BString string = Subject(); BString string = Subject();
if (string.ICompare("re:", 3) != 0) if (string.ICompare("re:", 3) != 0)
string.Prepend("Re: "); string.Prepend("Re: ");
to_return->SetSubject(string.String()); reply->SetSubject(string.String());
// set the matching outbound chain // set the matching outbound chain
if (accountFromMail) if (accountFromMail)
to_return->SendViaAccountFrom(this); reply->SendViaAccountFrom(this);
return to_return; return reply;
} }
BEmailMessage * BEmailMessage *
BEmailMessage::ForwardMessage(bool accountFromMail, bool includeAttachments) BEmailMessage::ForwardMessage(bool accountFromMail, bool includeAttachments)
{ {
@ -221,7 +208,6 @@ BEmailMessage::ForwardMessage(bool accountFromMail, bool includeAttachments)
io.Seek(0, SEEK_SET); io.Seek(0, SEEK_SET);
clone->SetToRFC822(&io, io.BufferLength(), true); clone->SetToRFC822(&io, io.BufferLength(), true);
message->AddComponent(clone); message->AddComponent(clone);
//---
} }
} }
if (accountFromMail) if (accountFromMail)
@ -255,7 +241,8 @@ BEmailMessage::ReplyTo()
const char * const char *
BEmailMessage::CC() BEmailMessage::CC()
{ {
return HeaderField("Cc"); // Note case of CC is "Cc" in our internal headers. return HeaderField("Cc");
// Note case of CC is "Cc" in our internal headers.
} }
@ -272,10 +259,11 @@ BEmailMessage::Date()
return HeaderField("Date"); return HeaderField("Date");
} }
int int
BEmailMessage::Priority() BEmailMessage::Priority()
{ {
int priorityNumber; int priorityNumber;
const char *priorityString; const char *priorityString;
/* The usual values are a number from 1 to 5, or one of three words: /* The usual values are a number from 1 to 5, or one of three words:
@ -299,44 +287,66 @@ BEmailMessage::Priority()
priorityNumber = 1; priorityNumber = 1;
return priorityNumber; return priorityNumber;
} }
if (strcasecmp (priorityString, "Low") == 0 || if (strcasecmp (priorityString, "Low") == 0
strcasecmp (priorityString, "non-urgent") == 0) || strcasecmp (priorityString, "non-urgent") == 0)
return 5; return 5;
if (strcasecmp (priorityString, "High") == 0 || if (strcasecmp (priorityString, "High") == 0
strcasecmp (priorityString, "urgent") == 0) || strcasecmp (priorityString, "urgent") == 0)
return 1; return 1;
return 3; return 3;
} }
void BEmailMessage::SetSubject(const char *subject, uint32 charset, mail_encoding encoding) {
void
BEmailMessage::SetSubject(const char *subject, uint32 charset,
mail_encoding encoding)
{
SetHeaderField("Subject", subject, charset, encoding); SetHeaderField("Subject", subject, charset, encoding);
} }
void BEmailMessage::SetReplyTo(const char *reply_to, uint32 charset, mail_encoding encoding) {
void
BEmailMessage::SetReplyTo(const char *reply_to, uint32 charset,
mail_encoding encoding)
{
SetHeaderField("Reply-To", reply_to, charset, encoding); SetHeaderField("Reply-To", reply_to, charset, encoding);
} }
void BEmailMessage::SetFrom(const char *from, uint32 charset, mail_encoding encoding) {
void
BEmailMessage::SetFrom(const char *from, uint32 charset, mail_encoding encoding)
{
SetHeaderField("From", from, charset, encoding); SetHeaderField("From", from, charset, encoding);
} }
void BEmailMessage::SetTo(const char *to, uint32 charset, mail_encoding encoding) {
void
BEmailMessage::SetTo(const char *to, uint32 charset, mail_encoding encoding)
{
SetHeaderField("To", to, charset, encoding); SetHeaderField("To", to, charset, encoding);
} }
void BEmailMessage::SetCC(const char *cc, uint32 charset, mail_encoding encoding) {
void
BEmailMessage::SetCC(const char *cc, uint32 charset, mail_encoding encoding)
{
// For consistency with our header names, use Cc as the name. // For consistency with our header names, use Cc as the name.
SetHeaderField("Cc", cc, charset, encoding); SetHeaderField("Cc", cc, charset, encoding);
} }
void BEmailMessage::SetBCC(const char *bcc) {
free(_bcc);
void
BEmailMessage::SetBCC(const char *bcc)
{
free(_bcc);
_bcc = strdup(bcc); _bcc = strdup(bcc);
} }
void BEmailMessage::SetPriority(int to) {
char tempString [20]; void
BEmailMessage::SetPriority(int to)
{
char tempString [20];
if (to < 1) if (to < 1)
to = 1; to = 1;
@ -364,12 +374,13 @@ BEmailMessage::GetName(char *name, int32 maxLength) const
return B_BAD_VALUE; return B_BAD_VALUE;
if (BFile *file = dynamic_cast<BFile *>(fData)) { if (BFile *file = dynamic_cast<BFile *>(fData)) {
status_t status = file->ReadAttr(B_MAIL_ATTR_NAME,B_STRING_TYPE,0,name,maxLength); status_t status = file->ReadAttr(B_MAIL_ATTR_NAME, B_STRING_TYPE, 0,
name, maxLength);
name[maxLength - 1] = '\0'; name[maxLength - 1] = '\0';
return status >= 0 ? B_OK : status; return status >= 0 ? B_OK : status;
} }
// ToDo: look at From header? But usually there is // TODO: look at From header? But usually there is
// a file since only the BeMail GUI calls this. // a file since only the BeMail GUI calls this.
return B_ERROR; return B_ERROR;
} }
@ -438,7 +449,7 @@ status_t
BEmailMessage::GetAccountName(BString& accountName) const BEmailMessage::GetAccountName(BString& accountName) const
{ {
BFile *file = dynamic_cast<BFile *>(fData); BFile *file = dynamic_cast<BFile *>(fData);
if (!file) if (file == NULL)
return B_ERROR; return B_ERROR;
int32 accountId; int32 accountId;
@ -466,15 +477,18 @@ BEmailMessage::AddComponent(BMailComponent *component)
if (_num_components == 0) if (_num_components == 0)
_body = component; _body = component;
else if (_num_components == 1) { else if (_num_components == 1) {
BMIMEMultipartMailContainer *container = new BMIMEMultipartMailContainer ( BMIMEMultipartMailContainer *container
mime_boundary, mime_warning, _charSetForTextDecoding); = new BMIMEMultipartMailContainer(
if ((status = container->AddComponent(_body)) == B_OK) mime_boundary, mime_warning, _charSetForTextDecoding);
status = container->AddComponent(_body);
if (status == B_OK)
status = container->AddComponent(component); status = container->AddComponent(component);
_body = container; _body = container;
} else { } else {
BMIMEMultipartMailContainer *container = dynamic_cast<BMIMEMultipartMailContainer *>(_body); BMIMEMultipartMailContainer *container
= dynamic_cast<BMIMEMultipartMailContainer *>(_body);
if (container == NULL) if (container == NULL)
return B_MISMATCHED_VALUES; //---This really needs a B_WTF constant... return B_MISMATCHED_VALUES;
status = container->AddComponent(component); status = container->AddComponent(component);
} }
@ -503,10 +517,11 @@ BEmailMessage::RemoveComponent(int32 /*index*/)
BMailComponent * BMailComponent *
BEmailMessage::GetComponent(int32 i, bool parse_now) BEmailMessage::GetComponent(int32 i, bool parseNow)
{ {
if (BMIMEMultipartMailContainer *container = dynamic_cast<BMIMEMultipartMailContainer *>(_body)) if (BMIMEMultipartMailContainer *container
return container->GetComponent(i, parse_now); = dynamic_cast<BMIMEMultipartMailContainer *>(_body))
return container->GetComponent(i, parseNow);
if (i < _num_components) if (i < _num_components)
return _body; return _body;
@ -541,9 +556,10 @@ BEmailMessage::IsComponentAttachment(int32 i)
if (_num_components == 1) if (_num_components == 1)
return _body->IsAttachment(); return _body->IsAttachment();
BMIMEMultipartMailContainer *container = dynamic_cast<BMIMEMultipartMailContainer *>(_body); BMIMEMultipartMailContainer *container
= dynamic_cast<BMIMEMultipartMailContainer *>(_body);
if (container == NULL) if (container == NULL)
return false; //-----This should never, ever, ever, ever, happen return false;
BMailComponent *component = container->GetComponent(i); BMailComponent *component = container->GetComponent(i);
if (component == NULL) if (component == NULL)
@ -616,9 +632,10 @@ BEmailMessage::RetrieveTextBody(BMailComponent *component)
switch (component->ComponentType()) { switch (component->ComponentType()) {
case B_MAIL_PLAIN_TEXT_BODY: case B_MAIL_PLAIN_TEXT_BODY:
// AttributedAttachment returns the MIME type of its contents, so // AttributedAttachment returns the MIME type of its
// we have to use dynamic_cast here // contents, so we have to use dynamic_cast here
body = dynamic_cast<BTextMailComponent *>(container->GetComponent(i)); body = dynamic_cast<BTextMailComponent *>(
container->GetComponent(i));
if (body != NULL) if (body != NULL)
return body; return body;
break; break;
@ -662,15 +679,15 @@ BEmailMessage::SetToRFC822(BPositionIO *mail_file, size_t length,
//------------Move headers that we use to us, everything else to _body //------------Move headers that we use to us, everything else to _body
const char *name; const char *name;
for (int32 i = 0; (name = _body->HeaderAt(i)) != NULL; i++) { for (int32 i = 0; (name = _body->HeaderAt(i)) != NULL; i++) {
if ((strcasecmp(name,"Subject") != 0) if (strcasecmp(name,"Subject") != 0
&& (strcasecmp(name,"To") != 0) && strcasecmp(name,"To") != 0
&& (strcasecmp(name,"From") != 0) && strcasecmp(name,"From") != 0
&& (strcasecmp(name,"Reply-To") != 0) && strcasecmp(name,"Reply-To") != 0
&& (strcasecmp(name,"Cc") != 0) && strcasecmp(name,"Cc") != 0
&& (strcasecmp(name,"Priority") != 0) && strcasecmp(name,"Priority") != 0
&& (strcasecmp(name,"X-Priority") != 0) && strcasecmp(name,"X-Priority") != 0
&& (strcasecmp(name,"X-Msmail-Priority") != 0) && strcasecmp(name,"X-Msmail-Priority") != 0
&& (strcasecmp(name,"Date") != 0)) { && strcasecmp(name,"Date") != 0) {
RemoveHeader(name); RemoveHeader(name);
} }
} }
@ -686,7 +703,8 @@ BEmailMessage::SetToRFC822(BPositionIO *mail_file, size_t length,
_body->RemoveHeader("Date"); _body->RemoveHeader("Date");
_num_components = 1; _num_components = 1;
if (BMIMEMultipartMailContainer *container = dynamic_cast<BMIMEMultipartMailContainer *>(_body)) if (BMIMEMultipartMailContainer *container
= dynamic_cast<BMIMEMultipartMailContainer *>(_body))
_num_components = container->CountComponents(); _num_components = container->CountComponents();
return B_OK; return B_OK;
@ -799,7 +817,7 @@ BEmailMessage::RenderToRFC822(BPositionIO *file)
attributed->WriteAttrString(B_MAIL_ATTR_STATUS, &attr); attributed->WriteAttrString(B_MAIL_ATTR_STATUS, &attr);
attr = "1.0"; attr = "1.0";
attributed->WriteAttrString(B_MAIL_ATTR_MIME, &attr); attributed->WriteAttrString(B_MAIL_ATTR_MIME, &attr);
attributed->WriteAttr(B_MAIL_ATTR_ACCOUNT, B_INT32_TYPE, 0, attributed->WriteAttr(B_MAIL_ATTR_ACCOUNT, B_INT32_TYPE, 0,
&_account_id, sizeof(int32)); &_account_id, sizeof(int32));
@ -820,10 +838,10 @@ BEmailMessage::RenderToRFC822(BPositionIO *file)
status_t status_t
BEmailMessage::RenderTo(BDirectory *dir, BEntry *msg) BEmailMessage::RenderTo(BDirectory *dir, BEntry *msg)
{ {
time_t currentTime; time_t currentTime;
char numericDateString [40]; char numericDateString [40];
struct tm timeFields; struct tm timeFields;
BString worker; BString worker;
// Generate a file name for the outgoing message. See also // Generate a file name for the outgoing message. See also
// FolderFilter::ProcessMailMessage which does something similar for // FolderFilter::ProcessMailMessage which does something similar for
@ -871,8 +889,7 @@ BEmailMessage::RenderTo(BDirectory *dir, BEntry *msg)
int32 tries = 30; int32 tries = 30;
bool exists; bool exists;
while (((exists = dir->Contains(worker.String())) == true) /* pacify mwcc */ && while ((exists = dir->Contains(worker.String())) && --tries > 0) {
(--tries > 0)) {
srand(rand()); srand(rand());
uniquer += (rand() >> 16) - 16384; uniquer += (rand() >> 16) - 16384;
@ -896,7 +913,7 @@ BEmailMessage::RenderTo(BDirectory *dir, BEntry *msg)
status_t status_t
BEmailMessage::Send(bool send_now) BEmailMessage::Send(bool sendNow)
{ {
BMailAccounts accounts; BMailAccounts accounts;
BMailAccountSettings* account = accounts.AccountByID(_account_id); BMailAccountSettings* account = accounts.AccountByID(_account_id);
@ -910,7 +927,7 @@ BEmailMessage::Send(bool send_now)
BString path; BString path;
if (account->OutboundSettings().Settings().FindString("path", &path) if (account->OutboundSettings().Settings().FindString("path", &path)
!= B_OK) { != B_OK) {
BPath defaultMailOutPath; BPath defaultMailOutPath;
if (find_directory(B_USER_DIRECTORY, &defaultMailOutPath) != B_OK if (find_directory(B_USER_DIRECTORY, &defaultMailOutPath) != B_OK
|| defaultMailOutPath.Append("mail/out") != B_OK) || defaultMailOutPath.Append("mail/out") != B_OK)
@ -925,28 +942,10 @@ BEmailMessage::Send(bool send_now)
BEntry message; BEntry message;
status_t status = RenderTo(&directory, &message); status_t status = RenderTo(&directory, &message);
if (status >= B_OK && send_now) { if (status >= B_OK && sendNow) {
BMailSettings settings_file; BMailSettings settings_file;
if (settings_file.SendOnlyIfPPPUp()) { if (settings_file.SendOnlyIfPPPUp()) {
#ifndef HAIKU_TARGET_PLATFORM_BEOS // TODO!
int s = socket(AF_INET, SOCK_DGRAM, 0);
bsppp_status_t ppp_status;
strcpy(ppp_status.if_name, "ppp0");
if (ioctl(s, BONE_SERIAL_PPP_GET_STATUS, &ppp_status, sizeof(ppp_status)) != 0) {
close(s);
return B_OK;
} else {
if (ppp_status.connection_status != BSPPP_CONNECTED) {
close(s);
return B_OK;
}
}
close(s);
#else
if (find_thread("tty_thread") <= 0)
return B_OK;
#endif
} }
BMessenger daemon("application/x-vnd.Be-POST"); BMessenger daemon("application/x-vnd.Be-POST");
@ -964,7 +963,7 @@ BEmailMessage::Send(bool send_now)
return status; return status;
} }
void BEmailMessage::_ReservedMessage1() {} void BEmailMessage::_ReservedMessage1() {}
void BEmailMessage::_ReservedMessage2() {} void BEmailMessage::_ReservedMessage2() {}
void BEmailMessage::_ReservedMessage3() {} void BEmailMessage::_ReservedMessage3() {}