aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--camel/camel-data-wrapper.c49
-rw-r--r--camel/camel-data-wrapper.h4
-rw-r--r--camel/camel-log.h6
-rw-r--r--camel/camel-mime-part.c44
-rw-r--r--camel/camel-mime-part.h5
-rw-r--r--camel/gmime-content-field.c30
-rw-r--r--camel/gmime-utils.c4
-rw-r--r--camel/gmime-utils.h2
-rw-r--r--camel/gstring-util.c2
10 files changed, 95 insertions, 63 deletions
diff --git a/ChangeLog b/ChangeLog
index 7d5bb1e32a..2424975050 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,14 @@
-1999-06-22 root <guiheneu@jean.joudboeuf.fr>
+1999-06-22 bertrand <Bertrand.Guiheneuf@inria.fr>
+
+ * camel/camel-data-wrapper.c (_get_content_type):
+ moved all the content-type stuff here.
+ (camel_data_wrapper_init): initialize the instance
+ content-type field.
+
+ * camel/camel-mime-part.c (_parse_header_pair):
+ parse Content-Type stuff in header.
+ (_write_to_stream): write the content type stuff to
+ the stream.
* camel/gmime-content-field.c (gmime_content_field_get_mime_type):
new function, returns "type/subtype" mime type string.
diff --git a/camel/camel-data-wrapper.c b/camel/camel-data-wrapper.c
index c7793403b4..f885e8a0a6 100644
--- a/camel/camel-data-wrapper.c
+++ b/camel/camel-data-wrapper.c
@@ -29,10 +29,12 @@
static GtkObjectClass *parent_class=NULL;
/* Returns the class for a CamelDataWrapper */
-#define CDH_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (GTK_OBJECT(so)->klass)
+#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (GTK_OBJECT(so)->klass)
static void _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream, guint size);
static void _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream);
+static void _set_content_type (CamelDataWrapper *data_wrapper, GString *content_type);
+static GString *_get_content_type (CamelDataWrapper *data_wrapper);
static void
camel_data_wrapper_class_init (CamelDataWrapperClass *camel_data_wrapper_class)
@@ -42,6 +44,8 @@ camel_data_wrapper_class_init (CamelDataWrapperClass *camel_data_wrapper_class)
/* virtual method definition */
camel_data_wrapper_class->write_to_stream = _write_to_stream;
camel_data_wrapper_class->construct_from_stream = _construct_from_stream;
+ camel_data_wrapper_class->set_content_type = _set_content_type;
+ camel_data_wrapper_class->get_content_type = _get_content_type;
/* virtual method overload */
}
@@ -50,6 +54,14 @@ camel_data_wrapper_class_init (CamelDataWrapperClass *camel_data_wrapper_class)
+static void
+camel_data_wrapper_init (gpointer object, gpointer klass)
+{
+ CamelDataWrapper *camel_data_wrapper = CAMEL_DATA_WRAPPER (object);
+
+ camel_data_wrapper->content_type = gmime_content_field_new (NULL, NULL);
+}
+
GtkType
@@ -64,7 +76,7 @@ camel_data_wrapper_get_type (void)
sizeof (CamelDataWrapper),
sizeof (CamelDataWrapperClass),
(GtkClassInitFunc) camel_data_wrapper_class_init,
- (GtkObjectInitFunc) NULL,
+ (GtkObjectInitFunc) camel_data_wrapper_init,
/* reserved_1 */ NULL,
/* reserved_2 */ NULL,
(GtkClassInitFunc) NULL,
@@ -78,7 +90,6 @@ camel_data_wrapper_get_type (void)
-
/**
* _write_to_stream: write data content in a byte stream
* @data_wrapper: the data wrapper object
@@ -113,7 +124,7 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
void
camel_data_wrapper_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
{
- CDH_CLASS(data_wrapper)->write_to_stream (data_wrapper, stream);
+ CDW_CLASS(data_wrapper)->write_to_stream (data_wrapper, stream);
}
@@ -130,7 +141,35 @@ _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream, gui
void
camel_data_wrapper_construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream, guint size)
{
- CDH_CLASS(data_wrapper)->construct_from_stream (data_wrapper, stream, size);
+ CDW_CLASS(data_wrapper)->construct_from_stream (data_wrapper, stream, size);
}
+
+static void
+_set_content_type (CamelDataWrapper *data_wrapper, GString *content_type)
+{
+ g_assert (content_type);
+ gmime_content_field_construct_from_string (data_wrapper->content_type, content_type);
+}
+
+void
+camel_data_wrapper_set_content_type (CamelDataWrapper *data_wrapper, GString *content_type)
+{
+ CDW_CLASS(data_wrapper)->set_content_type (data_wrapper, content_type);
+}
+
+static GString *
+_get_content_type (CamelDataWrapper *data_wrapper)
+{
+ GString *mime_type;
+
+ mime_type = gmime_content_field_get_mime_type (data_wrapper->content_type);
+ return mime_type;
+}
+
+static GString *
+camel_data_wrapper_get_content_type (CamelDataWrapper *data_wrapper)
+{
+ return CDW_CLASS(data_wrapper)->get_content_type (data_wrapper);
+}
diff --git a/camel/camel-data-wrapper.h b/camel/camel-data-wrapper.h
index a7b9dbbff1..a0bb859f3b 100644
--- a/camel/camel-data-wrapper.h
+++ b/camel/camel-data-wrapper.h
@@ -60,6 +60,8 @@ typedef struct {
/* Virtual methods */
void (*write_to_stream) (CamelDataWrapper *data_wrapper, CamelStream *stream);
void (*construct_from_stream) (CamelDataWrapper *data_wrapper, CamelStream *stream, guint size);
+ void (*set_content_type) (CamelDataWrapper *data_wrapper, GString *content_type);
+ GString * (*get_content_type) (CamelDataWrapper *data_wrapper);
} CamelDataWrapperClass;
@@ -73,6 +75,8 @@ GtkType camel_data_wrapper_get_type (void);
void camel_data_wrapper_write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream);
void camel_data_wrapper_construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream, guint size);
+void camel_data_wrapper_set_content_type (CamelDataWrapper *data_wrapper, GString *content_type);
+static GString *camel_data_wrapper_get_content_type (CamelDataWrapper *data_wrapper);
#ifdef __cplusplus
}
diff --git a/camel/camel-log.h b/camel/camel-log.h
index dfe023cc3c..5ab9f8f405 100644
--- a/camel/camel-log.h
+++ b/camel/camel-log.h
@@ -34,11 +34,12 @@ extern FILE *camel_log_file_descriptor;
typedef enum {
NO_LOG = 0,
STRANGE = 5,
- WARNING = 7,
+ WARNING = 6,
+ TRACE = 8,
FULL_DEBUG = 10
} CamelLogLevel;
-#define HARD_LOG_LEVEL FULL_DEBUG
+#define HARD_LOG_LEVEL TRACE
/* the idea here is to be able to have a hard maximum log
level, given at compilation time, and a soft one, given at
@@ -46,6 +47,7 @@ runtime (with camel_debug_level). For the moment, only
soft level is implmented, but one day, when performance
become important, I will set the hard one too */
+
#define CAMEL_LOG(level, args...) camel_log(level,##args)
extern void camel_log(CamelLogLevel level, const gchar *format, ... );
diff --git a/camel/camel-mime-part.c b/camel/camel-mime-part.c
index 489e6d0d27..8e187a8eac 100644
--- a/camel/camel-mime-part.c
+++ b/camel/camel-mime-part.c
@@ -68,8 +68,6 @@ static void _set_content_languages (CamelMimePart *mime_part, GList *content_lan
static GList *_get_content_languages (CamelMimePart *mime_part);
static void _set_header_lines (CamelMimePart *mime_part, GList *header_lines);
static GList *_get_header_lines (CamelMimePart *mime_part);
-static void _set_content_type (CamelMimePart *mime_part, GString *content_type);
-static GString *_get_content_type (CamelMimePart *mime_part);
static CamelDataWrapper *_get_content_object(CamelMimePart *mime_part);
static void _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream);
@@ -122,8 +120,6 @@ camel_mime_part_class_init (CamelMimePartClass *camel_mime_part_class)
camel_mime_part_class->get_header_lines=_get_header_lines;
camel_mime_part_class->parse_header_pair = _parse_header_pair;
camel_mime_part_class->get_content_object = _get_content_object;
- camel_mime_part_class->set_content_type = _set_content_type;
- camel_mime_part_class->get_content_type = _get_content_type;
@@ -137,7 +133,6 @@ camel_mime_part_init (gpointer object, gpointer klass)
CamelMimePart *camel_mime_part = CAMEL_MIME_PART (object);
camel_mime_part->headers = g_hash_table_new (g_string_hash, g_string_equal_for_hash);
- camel_mime_part->content_type_field = gmime_content_field_new (NULL, NULL);
}
@@ -497,34 +492,6 @@ camel_mime_part_get_content_object(CamelMimePart *mime_part)
}
-static void
-_set_content_type (CamelMimePart *mime_part, GString *content_type)
-{
- g_assert (content_type);
- gmime_content_field_construct_from_string (mime_part->content_type_field, content_type);
-}
-
-void
-camel_mime_part_set_content_type (CamelMimePart *mime_part, GString *content_type)
-{
- CMP_CLASS(mime_part)->set_content_type (mime_part, content_type);
-}
-
-static GString *
-_get_content_type (CamelMimePart *mime_part)
-{
- GString *mime_type;
-
- mime_type = gmime_content_field_get_mime_type (mime_part->content_type_field);
- return mime_type;
-}
-
-static GString *
-camel_mime_part_get_content_type (CamelMimePart *mime_part)
-{
- return CMP_CLASS(mime_part)->get_content_type (mime_part);
-}
-
/**********************************************************************/
@@ -570,8 +537,6 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
CAMEL_LOG (FULL_DEBUG, "Entering CamelMimePart::write_to_stream\n");
- CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-type\n");
- gmime_content_field_write_to_stream(data_wrapper->content_type, stream);
CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-disposition\n");
gmime_content_field_write_to_stream(mp->disposition, stream);
CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-transfer-encoding\n");
@@ -583,9 +548,14 @@ _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-id\n");
WHPT (stream, "Content-id", mp->content_id);
CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-languages\n");
- write_header_with_glist_to_stream (stream, "Content-Language", mp->content_languages);
+ write_header_with_glist_to_stream (stream, "Content-Language", mp->content_languages,", ");
+
CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing other headers\n");
write_header_table_to_stream (stream, mp->headers);
+
+ CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-type\n");
+ gmime_content_field_write_to_stream(data_wrapper->content_type, stream);
+
camel_stream_write_string(stream,"\n");
if (mp->content) camel_data_wrapper_write_to_stream (mp->content, stream);
@@ -656,7 +626,7 @@ _parse_header_pair (CamelMimePart *mime_part, GString *header_name, GString *hea
"CamelMimePart::parse_header_pair found HEADER_CONTENT_TYPE: %s\n",
header_value->str );
- /* CMP_CLASS(mime_part)->set_content_MD5 (mime_part, header_value); */
+ gmime_content_field_construct_from_string (CAMEL_DATA_WRAPPER(mime_part)->content_type, header_value);
header_handled = TRUE;
break;
diff --git a/camel/camel-mime-part.h b/camel/camel-mime-part.h
index 8ab5fc152c..eadf65ce68 100644
--- a/camel/camel-mime-part.h
+++ b/camel/camel-mime-part.h
@@ -58,7 +58,6 @@ typedef struct
GString *encoding;
GString *filename;
GList *header_lines;
- GMimeContentField *content_type_field;
CamelDataWrapper *content; /* part real content */
@@ -89,8 +88,6 @@ typedef struct {
GList * (*get_content_languages) (CamelMimePart *mime_part);
void (*set_header_lines) (CamelMimePart *mime_part, GList *header_lines);
GList * (*get_header_lines) (CamelMimePart *mime_part);
- void (*set_content_type) (CamelMimePart *mime_part, GString *content_type);
- GString * (*get_content_type) (CamelMimePart *mime_part);
gboolean (*parse_header_pair) (CamelMimePart *mime_part, GString *header_name, GString *header_value);
@@ -121,8 +118,6 @@ void camel_mime_part_set_content_languages (CamelMimePart *mime_part, GList *con
GList *camel_mime_part_get_content_languages (CamelMimePart *mime_part);
void camel_mime_part_set_header_lines (CamelMimePart *mime_part, GList *header_lines);
GList *camel_mime_part_get_header_lines (CamelMimePart *mime_part);
-void camel_mime_part_set_content_type (CamelMimePart *mime_part, GString *content_type);
-static GString *camel_mime_part_get_content_type (CamelMimePart *mime_part);
#ifdef __cplusplus
}
diff --git a/camel/gmime-content-field.c b/camel/gmime-content-field.c
index a22bbe2979..06e4384437 100644
--- a/camel/gmime-content-field.c
+++ b/camel/gmime-content-field.c
@@ -26,18 +26,20 @@
#include "gmime-content-field.h"
#include "gstring-util.h"
+#include "camel-log.h"
GMimeContentField *
gmime_content_field_new (GString *type, GString *subtype)
{
- GMimeContentField *ct;
+ GMimeContentField *ctf;
- ct = g_new (GMimeContentField,1);
- ct->type = type;
- ct->subtype = subtype;
- ct->parameters = g_hash_table_new(g_string_hash, g_string_equal_for_hash);
+ ctf = g_new (GMimeContentField,1);
+ ctf->type = type;
+ ctf->subtype = subtype;
+ ctf->parameters = g_hash_table_new(g_string_hash, g_string_equal_for_hash);
+ return ctf;
}
@@ -122,16 +124,25 @@ gmime_content_field_construct_from_string (GMimeContentField *content_field, GSt
GString *param_name, *param_value;
gboolean param_end;
+ CAMEL_LOG (TRACE, "Entering gmime_content_field_construct_from_string\n");
g_assert (string);
g_assert (string->str);
-
- if (content_field->type) g_string_free (content_field->type, FALSE);
- if (content_field->subtype) g_string_free (content_field->subtype, FALSE);
+ g_assert (content_field);
+
+ if (content_field->type) {
+ CAMEL_LOG (FULL_DEBUG, "Freeing old mime type string\n");
+ g_string_free (content_field->type, FALSE);
+ }
+ if (content_field->subtype) {
+ CAMEL_LOG (FULL_DEBUG, "Freeing old mime type substring\n");
+ g_string_free (content_field->subtype, FALSE);
+ }
str = string->str;
first = 0;
len = string->len;
if (!len) return;
+ CAMEL_LOG (TRACE, "All checks done\n");
/* find the type */
while ( (i<len) && (!strchr ("/;", str[i])) ) i++;
@@ -140,7 +151,7 @@ gmime_content_field_construct_from_string (GMimeContentField *content_field, GSt
type = g_string_new (g_strndup (str, i));
content_field->type = type;
-
+ CAMEL_LOG (TRACE, "Found mime type : %s\n", type->str);
if (i == len) {
content_field->subtype = NULL;
return;
@@ -178,6 +189,7 @@ gmime_content_field_construct_from_string (GMimeContentField *content_field, GSt
}
} while ((!param_end) && (first < len));
+
}
diff --git a/camel/gmime-utils.c b/camel/gmime-utils.c
index 917c426801..1555d27e7b 100644
--- a/camel/gmime-utils.c
+++ b/camel/gmime-utils.c
@@ -71,7 +71,7 @@ write_header_table_to_stream (CamelStream *stream, GHashTable *header_table)
void
-write_header_with_glist_to_stream (CamelStream *stream, gchar *header_name, GList *header_values)
+write_header_with_glist_to_stream (CamelStream *stream, gchar *header_name, GList *header_values, gchar *separator)
{
GString *current;
@@ -86,7 +86,7 @@ write_header_with_glist_to_stream (CamelStream *stream, gchar *header_name, GLis
while (header_values) {
current = (GString *)header_values->data;
if ( (current) && (current->str) ) {
- if (!first) camel_stream_write (stream, ", ", 2);
+ if (!first) camel_stream_write_string (stream, separator);
else first = FALSE;
camel_stream_write (stream, current->str, strlen (current->str));
}
diff --git a/camel/gmime-utils.h b/camel/gmime-utils.h
index 6ed47b816c..a8ff6094e9 100644
--- a/camel/gmime-utils.h
+++ b/camel/gmime-utils.h
@@ -37,7 +37,7 @@ extern "C" {
void gmime_write_header_pair_to_stream (CamelStream *stream, gchar* name, GString *value);
void write_header_table_to_stream (CamelStream *stream, GHashTable *header_table);
-void write_header_with_glist_to_stream (CamelStream *stream, gchar *header_name, GList *header_values);
+void write_header_with_glist_to_stream (CamelStream *stream, gchar *header_name, GList *header_values, gchar *separator);
GHashTable *get_header_table_from_stream (CamelStream *stream);
diff --git a/camel/gstring-util.c b/camel/gstring-util.c
index b8a92ce10f..c48a98d410 100644
--- a/camel/gstring-util.c
+++ b/camel/gstring-util.c
@@ -318,7 +318,7 @@ g_string_trim (GString *string, gchar *chars, TrimOption options)
CAMEL_LOG (FULL_DEBUG,"g_string_trim:: trim_options:%d\n", options);
if (options & TRIM_STRIP_LEADING)
- while ( (first_ok <= last_ok) && (strchr (chars, str[first_ok]) != NULL) )
+ while ( (first_ok <= last_ok) && (strchr (chars, str[first_ok])) )
first_ok++;
if (options & TRIM_STRIP_TRAILING)