aboutsummaryrefslogtreecommitdiffstats
path: root/camel
diff options
context:
space:
mode:
Diffstat (limited to 'camel')
-rw-r--r--camel/ChangeLog11
-rw-r--r--camel/camel-folder.c8
-rw-r--r--camel/camel-mime-message.c61
-rw-r--r--camel/camel-mime-message.h2
-rw-r--r--camel/camel-mime-part.c2
-rw-r--r--camel/camel.c4
-rw-r--r--camel/providers/imap/camel-imap-folder.c13
7 files changed, 92 insertions, 9 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 0d284bc912..66a11c947d 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,5 +1,16 @@
2004-03-15 Not Zed <NotZed@Ximian.com>
+ * providers/imap/camel-imap-folder.c (get_content, get_message):
+ set the mime-type field on the content the same way as
+ construct_from_stream does. Bug #55472.
+
+ * camel-mime-message.c (camel_mime_message_dump): utility function
+ to dump message content to stdout.
+ (camel_mime_message_init): default mime type to message/rfc822.
+
+ * camel.c (camel_init): change camel verbose debug to be an int, a
+ bitmask of debug options.
+
* camel-mime-utils.c (camel_header_location_decode): drop embedded
whitespace characters, and don't do unquoting, etc. See rfc2557
4.4.2 and rfc2017 3.1.
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
index bf9bd13763..5e971667c4 100644
--- a/camel/camel-folder.c
+++ b/camel/camel-folder.c
@@ -46,6 +46,8 @@
#define d(x)
#define w(x)
+extern int camel_verbose_debug;
+
static CamelObjectClass *parent_class = NULL;
/* Returns the class for a CamelFolder */
@@ -1015,6 +1017,12 @@ camel_folder_get_message (CamelFolder *folder, const gchar *uid, CamelException
CAMEL_FOLDER_UNLOCK(folder, lock);
+ /* FIXME: need a better verbose debug framework */
+ if (ret && (camel_verbose_debug & 2)) {
+ printf("CamelFolder:get_message('%s', '%s') =\n", folder->full_name, uid);
+ camel_mime_message_dump(ret, FALSE);
+ }
+
return ret;
}
diff --git a/camel/camel-mime-message.c b/camel/camel-mime-message.c
index bc2a418af5..16b58d991a 100644
--- a/camel/camel-mime-message.c
+++ b/camel/camel-mime-message.c
@@ -49,6 +49,8 @@
#define d(x)
+extern int camel_verbose_debug;
+
/* these 2 below should be kept in sync */
typedef enum {
HEADER_UNKNOWN,
@@ -112,11 +114,10 @@ camel_mime_message_class_init (CamelMimeMessageClass *camel_mime_message_class)
camel_medium_class->add_header = add_header;
camel_medium_class->set_header = set_header;
camel_medium_class->remove_header = remove_header;
-
+
camel_mime_part_class->construct_from_parser = construct_from_parser;
}
-
static void
camel_mime_message_init (gpointer object, gpointer klass)
{
@@ -128,6 +129,10 @@ camel_mime_message_init (gpointer object, gpointer klass)
g_hash_table_insert(mime_message->recipients, recipient_names[i], camel_internet_address_new());
}
+ if (((CamelDataWrapper *)mime_message)->mime_type)
+ camel_content_type_unref(((CamelDataWrapper *)mime_message)->mime_type);
+ ((CamelDataWrapper *)mime_message)->mime_type = camel_content_type_new("message", "rfc822");
+
mime_message->subject = NULL;
mime_message->reply_to = NULL;
mime_message->from = NULL;
@@ -157,7 +162,6 @@ camel_mime_message_finalize (CamelObject *object)
g_hash_table_destroy (message->recipients);
}
-
CamelType
camel_mime_message_get_type (void)
{
@@ -961,3 +965,54 @@ camel_mime_message_build_mbox_from (CamelMimeMessage *message)
return ret;
}
+
+static void
+cmm_dump_rec(CamelMimeMessage *msg, CamelMimePart *part, int body, int depth)
+{
+ CamelDataWrapper *containee;
+ int parts, i;
+ int go = TRUE;
+ char *s;
+
+ s = alloca(depth+1);
+ memset(s, ' ', depth);
+ s[depth] = 0;
+ /* yes this leaks, so what its only debug stuff */
+ printf("%sclass: %s\n", s, ((CamelObject *)part)->klass->name);
+ printf("%smime-type: %s\n", s, camel_content_type_format(((CamelDataWrapper *)part)->mime_type));
+
+ containee = camel_medium_get_content_object((CamelMedium *)part);
+
+ if (containee == NULL)
+ return;
+
+ printf("%scontent class: %s\n", s, ((CamelObject *)containee)->klass->name);
+ printf("%scontent mime-type: %s\n", s, camel_content_type_format(((CamelDataWrapper *)containee)->mime_type));
+
+ /* using the object types is more accurate than using the mime/types */
+ if (CAMEL_IS_MULTIPART(containee)) {
+ parts = camel_multipart_get_number((CamelMultipart *)containee);
+ for (i = 0; go && i < parts; i++) {
+ CamelMimePart *part = camel_multipart_get_part((CamelMultipart *)containee, i);
+
+ cmm_dump_rec(msg, part, body, depth+2);
+ }
+ } else if (CAMEL_IS_MIME_MESSAGE(containee)) {
+ cmm_dump_rec(msg, (CamelMimePart *)containee, body, depth+2);
+ }
+}
+
+/**
+ * camel_mime_message_dump:
+ * @msg:
+ * @body:
+ *
+ * Dump information about the mime message to stdout.
+ *
+ * If body is TRUE, then dump body content of the message as well (currently unimplemented).
+ **/
+void
+camel_mime_message_dump(CamelMimeMessage *msg, int body)
+{
+ cmm_dump_rec(msg, (CamelMimePart *)msg, body, 0);
+}
diff --git a/camel/camel-mime-message.h b/camel/camel-mime-message.h
index c1149d5ef5..d420c48676 100644
--- a/camel/camel-mime-message.h
+++ b/camel/camel-mime-message.h
@@ -133,6 +133,8 @@ CamelMimePart *camel_mime_message_get_part_by_content_id (CamelMime
char *camel_mime_message_build_mbox_from (CamelMimeMessage *mime_message);
+void camel_mime_message_dump(CamelMimeMessage *msg, int body);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/camel/camel-mime-part.c b/camel/camel-mime-part.c
index e48ea4adc9..b87beca370 100644
--- a/camel/camel-mime-part.c
+++ b/camel/camel-mime-part.c
@@ -469,6 +469,7 @@ camel_mime_part_get_content_MD5 (CamelMimePart *mime_part)
void
camel_mime_part_set_content_location (CamelMimePart *mime_part, const char *location)
{
+ /* FIXME: this should perform content-location folding */
camel_medium_set_header (CAMEL_MEDIUM (mime_part), "Content-Location", location);
}
@@ -534,7 +535,6 @@ camel_mime_part_get_content_type (CamelMimePart *mime_part)
return ((CamelDataWrapper *) mime_part)->mime_type;
}
-
static void
set_content_object (CamelMedium *medium, CamelDataWrapper *content)
{
diff --git a/camel/camel.c b/camel/camel.c
index e926203732..8241b5b0ac 100644
--- a/camel/camel.c
+++ b/camel/camel.c
@@ -40,7 +40,7 @@
#include "camel-mime-utils.h"
#include "camel-provider.h"
-gboolean camel_verbose_debug = FALSE;
+int camel_verbose_debug = 0;
static int initialised = FALSE;
@@ -78,7 +78,7 @@ camel_init (const char *configdir, gboolean nss_init)
return 0;
if (getenv ("CAMEL_VERBOSE_DEBUG"))
- camel_verbose_debug = TRUE;
+ camel_verbose_debug = atoi(getenv("CAMEL_VERBOSE_DEBUG"));
/* initialise global camel_object_type */
camel_object_get_type();
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c
index c0f49e7194..0835534ea1 100644
--- a/camel/providers/imap/camel-imap-folder.c
+++ b/camel/providers/imap/camel-imap-folder.c
@@ -1745,7 +1745,9 @@ get_content (CamelImapFolder *imap_folder, const char *uid,
char *part_spec;
part_spec = content_info_get_part_spec (ci);
-
+
+ d(printf("get content '%s' '%s'\n", part_spec, camel_content_type_format(ci->type)));
+
/* There are three cases: multipart/signed, multipart, message/rfc822, and "other" */
if (camel_content_type_is (ci->type, "multipart", "signed")) {
CamelMultipartSigned *body_mp;
@@ -1826,8 +1828,10 @@ get_content (CamelImapFolder *imap_folder, const char *uid,
return NULL;
}
+ camel_data_wrapper_set_mime_type_field(content, camel_mime_part_get_content_type(part));
camel_medium_set_content_object (CAMEL_MEDIUM (part), content);
camel_object_unref (CAMEL_OBJECT (content));
+
camel_multipart_add_part (body_mp, part);
camel_object_unref (CAMEL_OBJECT (part));
@@ -1869,7 +1873,9 @@ get_message (CamelImapFolder *imap_folder, const char *uid,
g_free (section_text);
if (!stream)
return NULL;
-
+
+ d(printf("get message '%s'\n", part_spec));
+
msg = camel_mime_message_new ();
ret = camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (msg), stream);
camel_object_unref (CAMEL_OBJECT (stream));
@@ -1883,7 +1889,8 @@ get_message (CamelImapFolder *imap_folder, const char *uid,
camel_object_unref (CAMEL_OBJECT (msg));
return NULL;
}
-
+
+ camel_data_wrapper_set_mime_type_field(content, camel_mime_part_get_content_type((CamelMimePart *)msg));
camel_medium_set_content_object (CAMEL_MEDIUM (msg), content);
camel_object_unref (CAMEL_OBJECT (content));