author | alwin <alwin> | 2003-12-18 01:52:02 (UTC) |
---|---|---|
committer | alwin <alwin> | 2003-12-18 01:52:02 (UTC) |
commit | 77e353da0c33bbfabf1b919e25008d62581bf164 (patch) (side-by-side diff) | |
tree | ed9d2ccc255de8159598a647a39f31399568cbb9 | |
parent | e996a7b13e2860280a63d089716958c7886cdc8d (diff) | |
download | opie-77e353da0c33bbfabf1b919e25008d62581bf164.zip opie-77e353da0c33bbfabf1b919e25008d62581bf164.tar.gz opie-77e353da0c33bbfabf1b919e25008d62581bf164.tar.bz2 |
nothing much.
just only check in my tries to finish the pop3 stuff
and found another bug inside libetpan.
when decoding text with fun "mailmime_encoded_phrase_parse" it
works fine on i386 machines but not on arm (segmentation fault inside
this fun) - it has to be resolved.
-rw-r--r-- | noncore/net/mail/abstractmail.cpp | 23 | ||||
-rw-r--r-- | noncore/net/mail/abstractmail.h | 1 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/abstractmail.cpp | 23 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/abstractmail.h | 1 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/pop3wrapper.cpp | 49 | ||||
-rw-r--r-- | noncore/net/mail/pop3wrapper.cpp | 49 |
6 files changed, 130 insertions, 16 deletions
diff --git a/noncore/net/mail/abstractmail.cpp b/noncore/net/mail/abstractmail.cpp index 92a46f1..b7e5eaa 100644 --- a/noncore/net/mail/abstractmail.cpp +++ b/noncore/net/mail/abstractmail.cpp @@ -48 +48,24 @@ encodedString* AbstractMail::decode_String(const encodedString*text,const QStrin } + +QString AbstractMail::convert_String(const char*text) +{ +#if 0 + size_t index = 0; + char*res = 0; + + qDebug("encode start %s",text); + /* attention - doesn't work with arm systems! */ + int err = mailmime_encoded_phrase_parse("iso-8859-1", + text, strlen(text),&index, "iso-8859-1",&res); + qDebug("encode end"); + if (err != MAILIMF_NO_ERROR) { + if (res) free(res); + return QString(text); + } + QString result(res); + free(res); + return result; +#else + return QString(text); +#endif +} diff --git a/noncore/net/mail/abstractmail.h b/noncore/net/mail/abstractmail.h index f1a8468..c16e9c0 100644 --- a/noncore/net/mail/abstractmail.h +++ b/noncore/net/mail/abstractmail.h @@ -33,2 +33,3 @@ public: static encodedString*decode_String(const encodedString*text,const QString&enc); + static QString convert_String(const char*text); }; diff --git a/noncore/net/mail/libmailwrapper/abstractmail.cpp b/noncore/net/mail/libmailwrapper/abstractmail.cpp index 92a46f1..b7e5eaa 100644 --- a/noncore/net/mail/libmailwrapper/abstractmail.cpp +++ b/noncore/net/mail/libmailwrapper/abstractmail.cpp @@ -48 +48,24 @@ encodedString* AbstractMail::decode_String(const encodedString*text,const QStrin } + +QString AbstractMail::convert_String(const char*text) +{ +#if 0 + size_t index = 0; + char*res = 0; + + qDebug("encode start %s",text); + /* attention - doesn't work with arm systems! */ + int err = mailmime_encoded_phrase_parse("iso-8859-1", + text, strlen(text),&index, "iso-8859-1",&res); + qDebug("encode end"); + if (err != MAILIMF_NO_ERROR) { + if (res) free(res); + return QString(text); + } + QString result(res); + free(res); + return result; +#else + return QString(text); +#endif +} diff --git a/noncore/net/mail/libmailwrapper/abstractmail.h b/noncore/net/mail/libmailwrapper/abstractmail.h index f1a8468..c16e9c0 100644 --- a/noncore/net/mail/libmailwrapper/abstractmail.h +++ b/noncore/net/mail/libmailwrapper/abstractmail.h @@ -33,2 +33,3 @@ public: static encodedString*decode_String(const encodedString*text,const QString&enc); + static QString convert_String(const char*text); }; diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp index 30f80ff..22a4c70 100644 --- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp +++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp @@ -5,4 +5,8 @@ #include <libetpan/mailmime.h> +#include <libetpan/data_message_driver.h> #include <qfile.h> +/* we don't fetch messages larger than 5 MB */ +#define HARD_MSG_SIZE_LIMIT 5242880 + POP3wrapper::POP3wrapper( POP3account *a ) @@ -39,2 +43,3 @@ RecBody POP3wrapper::fetchBody( const RecMail &mail ) } + RecBody body; @@ -43,2 +48,6 @@ RecBody POP3wrapper::fetchBody( const RecMail &mail ) + if (mail.Msgsize()>HARD_MSG_SIZE_LIMIT) { + qDebug("Message to large: %i",mail.Msgsize()); + return body; + } if (mail.getNumber()!=last_msg_id) { @@ -81,2 +90,6 @@ RecBody POP3wrapper::parseMail( char *message ) mailimf_message *result = 0; + mailmessage * msg=0; + struct mailmime * mime=0; + struct mailmime_single_fields fields; + RecBody body; @@ -89,7 +102,27 @@ RecBody POP3wrapper::parseMail( char *message ) } - - struct mailimf_body * b = 0; - struct mailimf_fields * f = 0; - - + +#if 0 + char*body_msg = message; + if ( result && result->msg_body && result->msg_body->bd_text ) { + body_msg = (char*)result->msg_body->bd_text; + result->msg_body->bd_text = 0; + } + + msg = mailmessage_new(); + mailmessage_init(msg, NULL, data_message_driver, 0, strlen(body_msg)); + generic_message_t * msg_data; + msg_data = (generic_message_t *)msg->msg_data; + msg_data->msg_fetched = 1; + msg_data->msg_message = body_msg; + msg_data->msg_length = strlen(body_msg); + memset(&fields, 0, sizeof(struct mailmime_single_fields)); + err = mailmessage_get_bodystructure(msg,&mime); + + if (mime->mm_mime_fields != NULL) { + mailmime_single_fields_init(&fields, mime->mm_mime_fields, + mime->mm_content_type); + } +#endif + +#if 1 if ( result && result->msg_body && result->msg_body->bd_text ) { @@ -110,2 +143,3 @@ RecBody POP3wrapper::parseMail( char *message ) } +#endif return body; @@ -174,3 +208,3 @@ RecMail *POP3wrapper::parseHeader( const char *header ) case MAILIMF_FIELD_SUBJECT: - mail->setSubject( QString( field->fld_data.fld_subject->sbj_value ) ); + mail->setSubject(convert_String( field->fld_data.fld_subject->sbj_value ) ); break; @@ -205,3 +239,2 @@ RecMail *POP3wrapper::parseHeader( const char *header ) if (value.lower()=="a") { - mFlags.setBit(FLAG_ANSWERED); @@ -286,3 +319,3 @@ QString POP3wrapper::parseMailbox( mailimf_mailbox *box ) } else { - result.append( box->mb_display_name ); + result.append( convert_String(box->mb_display_name).latin1() ); result.append( " <" ); diff --git a/noncore/net/mail/pop3wrapper.cpp b/noncore/net/mail/pop3wrapper.cpp index 30f80ff..22a4c70 100644 --- a/noncore/net/mail/pop3wrapper.cpp +++ b/noncore/net/mail/pop3wrapper.cpp @@ -5,4 +5,8 @@ #include <libetpan/mailmime.h> +#include <libetpan/data_message_driver.h> #include <qfile.h> +/* we don't fetch messages larger than 5 MB */ +#define HARD_MSG_SIZE_LIMIT 5242880 + POP3wrapper::POP3wrapper( POP3account *a ) @@ -39,2 +43,3 @@ RecBody POP3wrapper::fetchBody( const RecMail &mail ) } + RecBody body; @@ -43,2 +48,6 @@ RecBody POP3wrapper::fetchBody( const RecMail &mail ) + if (mail.Msgsize()>HARD_MSG_SIZE_LIMIT) { + qDebug("Message to large: %i",mail.Msgsize()); + return body; + } if (mail.getNumber()!=last_msg_id) { @@ -81,2 +90,6 @@ RecBody POP3wrapper::parseMail( char *message ) mailimf_message *result = 0; + mailmessage * msg=0; + struct mailmime * mime=0; + struct mailmime_single_fields fields; + RecBody body; @@ -89,7 +102,27 @@ RecBody POP3wrapper::parseMail( char *message ) } - - struct mailimf_body * b = 0; - struct mailimf_fields * f = 0; - - + +#if 0 + char*body_msg = message; + if ( result && result->msg_body && result->msg_body->bd_text ) { + body_msg = (char*)result->msg_body->bd_text; + result->msg_body->bd_text = 0; + } + + msg = mailmessage_new(); + mailmessage_init(msg, NULL, data_message_driver, 0, strlen(body_msg)); + generic_message_t * msg_data; + msg_data = (generic_message_t *)msg->msg_data; + msg_data->msg_fetched = 1; + msg_data->msg_message = body_msg; + msg_data->msg_length = strlen(body_msg); + memset(&fields, 0, sizeof(struct mailmime_single_fields)); + err = mailmessage_get_bodystructure(msg,&mime); + + if (mime->mm_mime_fields != NULL) { + mailmime_single_fields_init(&fields, mime->mm_mime_fields, + mime->mm_content_type); + } +#endif + +#if 1 if ( result && result->msg_body && result->msg_body->bd_text ) { @@ -110,2 +143,3 @@ RecBody POP3wrapper::parseMail( char *message ) } +#endif return body; @@ -174,3 +208,3 @@ RecMail *POP3wrapper::parseHeader( const char *header ) case MAILIMF_FIELD_SUBJECT: - mail->setSubject( QString( field->fld_data.fld_subject->sbj_value ) ); + mail->setSubject(convert_String( field->fld_data.fld_subject->sbj_value ) ); break; @@ -205,3 +239,2 @@ RecMail *POP3wrapper::parseHeader( const char *header ) if (value.lower()=="a") { - mFlags.setBit(FLAG_ANSWERED); @@ -286,3 +319,3 @@ QString POP3wrapper::parseMailbox( mailimf_mailbox *box ) } else { - result.append( box->mb_display_name ); + result.append( convert_String(box->mb_display_name).latin1() ); result.append( " <" ); |