summaryrefslogtreecommitdiff
path: root/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
authorjgf <jgf>2003-12-11 17:21:41 (UTC)
committer jgf <jgf>2003-12-11 17:21:41 (UTC)
commitefa09eadddc16220cc1e8a55da93115538b091bb (patch) (side-by-side diff)
treef8186f84bd107c388507cc6a69ce5f6ce1aaccc9 /noncore/net/mail/libmailwrapper/pop3wrapper.cpp
parenta54fcb766991ed3d813be5f0b066998082378933 (diff)
downloadopie-efa09eadddc16220cc1e8a55da93115538b091bb.zip
opie-efa09eadddc16220cc1e8a55da93115538b091bb.tar.gz
opie-efa09eadddc16220cc1e8a55da93115538b091bb.tar.bz2
fetchBody in POP3 & weird segfault
Diffstat (limited to 'noncore/net/mail/libmailwrapper/pop3wrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.cpp111
1 files changed, 69 insertions, 42 deletions
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
index 633faf6..abb5a42 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
@@ -19,6 +19,46 @@ void POP3wrapper::pop3_progress( size_t current, size_t maximum )
qDebug( "POP3: %i of %i", current, maximum );
}
+RecBody POP3wrapper::fetchBody( const RecMail &mail )
+{
+ int err = MAILPOP3_NO_ERROR;
+ char *message;
+ size_t length;
+
+ login();
+ if ( !m_pop3 ) return RecBody();
+
+ err = mailpop3_retr( m_pop3, mail.getNumber(), &message, &length );
+ if ( err != MAILPOP3_NO_ERROR ) {
+ qDebug( "POP3: error retrieving body with index %i", mail.getNumber() );
+ logout();
+ return RecBody();
+ }
+
+ logout();
+
+ return parseBody( message );
+}
+
+RecBody POP3wrapper::parseBody( const char *message )
+{
+ int err = MAILIMF_NO_ERROR;
+ size_t curTok;
+ mailimf_message *result;
+ RecBody body;
+
+ err = mailimf_message_parse( (char *) message, strlen( message ), &curTok, &result );
+ if ( err != MAILIMF_NO_ERROR ) return body;
+
+ if ( result && result->msg_body && result->msg_body->bd_text ) {
+ qDebug( "POP3: bodytext found" );
+ // TODO: why does this line segfault???? gdb says segfault in strlen(), maybe a bug in libetpan.
+ body.setBodytext( QString( result->msg_body->bd_text ) );
+ }
+
+ return body;
+}
+
void POP3wrapper::listMessages( QList<RecMail> &target )
{
int err = MAILPOP3_NO_ERROR;
@@ -59,22 +99,22 @@ RecMail *POP3wrapper::parseHeader( const char *header )
mailimf_field *field = (mailimf_field *) current->data;
switch ( field->fld_type ) {
case MAILIMF_FIELD_FROM:
- mail->setFrom( *parseMailboxList( field->fld_data.fld_from->frm_mb_list ) );
+ mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) );
break;
case MAILIMF_FIELD_TO:
- mail->setTo( *parseAddressList( field->fld_data.fld_to->to_addr_list ) );
+ mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) );
break;
case MAILIMF_FIELD_CC:
- mail->setCC( *parseAddressList( field->fld_data.fld_cc->cc_addr_list ) );
+ mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) );
break;
case MAILIMF_FIELD_BCC:
- mail->setBcc( *parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) );
+ mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) );
break;
case MAILIMF_FIELD_SUBJECT:
mail->setSubject( QString( field->fld_data.fld_subject->sbj_value ) );
break;
case MAILIMF_FIELD_ORIG_DATE:
- mail->setDate( *parseDateTime( field->fld_data.fld_orig_date->dt_date_time ) );
+ mail->setDate( parseDateTime( field->fld_data.fld_orig_date->dt_date_time ) );
break;
default:
break;
@@ -84,44 +124,36 @@ RecMail *POP3wrapper::parseHeader( const char *header )
return mail;
}
-QString *POP3wrapper::parseDateTime( mailimf_date_time *date )
+QString POP3wrapper::parseDateTime( mailimf_date_time *date )
{
char tmp[23];
snprintf( tmp, 23, "%02i.%02i.%04i %02i:%02i:%02i %+05i",
date->dt_day, date->dt_month, date->dt_year, date->dt_hour, date->dt_min, date->dt_sec, date->dt_zone );
- QString *result = new QString( tmp );
-
- return result;
+ return QString( tmp );
}
-QString *POP3wrapper::parseAddressList( mailimf_address_list *list )
+QString POP3wrapper::parseAddressList( mailimf_address_list *list )
{
- QString *result = new QString( "" );
+ QString result( "" );
bool first = true;
for ( clistiter *current = clist_begin( list->ad_list ); current != NULL; current = current->next ) {
mailimf_address *addr = (mailimf_address *) current->data;
if ( !first ) {
- result->append( "," );
+ result.append( "," );
} else {
first = false;
}
- QString *tmp;
-
switch ( addr->ad_type ) {
case MAILIMF_ADDRESS_MAILBOX:
- tmp = parseMailbox( addr->ad_data.ad_mailbox );
- result->append( *tmp );
- delete tmp;
+ result.append( parseMailbox( addr->ad_data.ad_mailbox ) );
break;
case MAILIMF_ADDRESS_GROUP:
- tmp = parseGroup( addr->ad_data.ad_group );
- result->append( *tmp );
- delete tmp;
+ result.append( parseGroup( addr->ad_data.ad_group ) );
break;
default:
qDebug( "POP3: unkown mailimf address type" );
@@ -132,57 +164,53 @@ QString *POP3wrapper::parseAddressList( mailimf_address_list *list )
return result;
}
-QString *POP3wrapper::parseGroup( mailimf_group *group )
+QString POP3wrapper::parseGroup( mailimf_group *group )
{
- QString *result = new QString( "" );
+ QString result( "" );
- result->append( group->grp_display_name );
- result->append( ": " );
+ result.append( group->grp_display_name );
+ result.append( ": " );
if ( group->grp_mb_list != NULL ) {
- QString *tmp = parseMailboxList( group->grp_mb_list );
- result->append( *tmp );
- delete tmp;
+ result.append( parseMailboxList( group->grp_mb_list ) );
}
- result->append( ";" );
+ result.append( ";" );
return result;
}
-QString *POP3wrapper::parseMailbox( mailimf_mailbox *box )
+QString POP3wrapper::parseMailbox( mailimf_mailbox *box )
{
- QString *result = new QString( "" );
+ QString result( "" );
if ( box->mb_display_name == NULL ) {
- result->append( box->mb_addr_spec );
+ result.append( box->mb_addr_spec );
} else {
- result->append( box->mb_display_name );
- result->append( " <" );
- result->append( box->mb_addr_spec );
- result->append( ">" );
+ result.append( box->mb_display_name );
+ result.append( " <" );
+ result.append( box->mb_addr_spec );
+ result.append( ">" );
}
return result;
}
-QString *POP3wrapper::parseMailboxList( mailimf_mailbox_list *list )
+QString POP3wrapper::parseMailboxList( mailimf_mailbox_list *list )
{
- QString *result = new QString( "" );
+ QString result( "" );
bool first = true;
for ( clistiter *current = clist_begin( list->mb_list ); current != NULL; current = current->next ) {
mailimf_mailbox *box = (mailimf_mailbox *) current->data;
if ( !first ) {
- result->append( "," );
+ result.append( "," );
} else {
first = false;
}
- QString *tmp = parseMailbox( box );
- result->append( *tmp );
- delete tmp;
+ result.append( parseMailbox( box ) );
}
return result;
@@ -240,4 +268,3 @@ void POP3wrapper::logout()
m_pop3 = NULL;
}
-