From abd054f4244d020873c031bdc8de0cb7c57ca2c2 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Mon, 27 Mar 2000 21:37:49 +0000 Subject: keep separate input and output streams so the output doesn't end up being * providers/pop3/camel-pop3-store.c: keep separate input and output streams so the output doesn't end up being buffered. * providers/pop3/camel-pop3-folder.c (get_message_by_number): finish implementing this. * providers/Makefile.am (SUBDIRS): Add pop3. svn path=/trunk/; revision=2196 --- camel/providers/pop3/camel-pop3-folder.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'camel/providers/pop3/camel-pop3-folder.c') diff --git a/camel/providers/pop3/camel-pop3-folder.c b/camel/providers/pop3/camel-pop3-folder.c index e87cd97f4d..ad856cc2be 100644 --- a/camel/providers/pop3/camel-pop3-folder.c +++ b/camel/providers/pop3/camel-pop3-folder.c @@ -26,6 +26,8 @@ #include "camel-pop3-folder.h" #include "camel-pop3-store.h" #include "camel-exception.h" +#include "camel-stream-mem.h" +#include "camel-mime-message.h" #include @@ -118,6 +120,8 @@ get_message_by_number (CamelFolder *folder, gint number, CamelException *ex) { int status; char *result, *body; + CamelStream *msgstream; + CamelMimeMessage *msg; status = camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store), &result, "RETR %d", number); @@ -133,8 +137,22 @@ get_message_by_number (CamelFolder *folder, gint number, CamelException *ex) } g_free (result); - /* XXX finish this */ - return NULL; + body = camel_pop3_command_get_additional_data (CAMEL_POP3_STORE (folder->parent_store)); + if (!body) { + CamelService *service = CAMEL_SERVICE (folder->parent_store); + camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, + "Could not retrieve message from POP " + "server %s.", service->url->host); + return NULL; + } + + msgstream = camel_stream_mem_new_with_buffer (body, strlen (body), + CAMEL_STREAM_MEM_READ); + msg = camel_mime_message_new_with_session (camel_service_get_session (CAMEL_SERVICE (folder->parent_store))); + camel_data_wrapper_set_input_stream (CAMEL_DATA_WRAPPER (msg), + msgstream); + + return msg; } -- cgit v1.2.3