aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBertrand Guiheneuf <bertrand@src.gnome.org>1999-05-13 03:07:54 +0800
committerBertrand Guiheneuf <bertrand@src.gnome.org>1999-05-13 03:07:54 +0800
commitcee85091a8782ef3921c1e1e775d9dcf99e0ce9e (patch)
treec8098d13d2f8a6fe8e563542dbc8fd01538690bf
parentbd3559cdf211fbc4ba3a87e3a8a3237bc0be5e1c (diff)
downloadgsoc2013-evolution-cee85091a8782ef3921c1e1e775d9dcf99e0ce9e.tar.gz
gsoc2013-evolution-cee85091a8782ef3921c1e1e775d9dcf99e0ce9e.tar.zst
gsoc2013-evolution-cee85091a8782ef3921c1e1e775d9dcf99e0ce9e.zip
disposition is now a full GMimeContentField object.
* camel/camel-mime-part.h (struct ): disposition is now a full GMimeContentField object. * camel/gmime-content-field.c: new file handle "type/subtype ;parameter=value ; parameter=value ..." BNF grammar elements (gmime_content_field_write_to_file): new func * camel/gmime-utils.c (gmime_write_header_pair_to_file): namespace change Some work on mime stuff. Mime part can save itself into a file. This stuff is boring. svn path=/trunk/; revision=921
-rw-r--r--camel/Makefile.am6
-rw-r--r--camel/camel-data-wrapper.h4
-rw-r--r--camel/camel-mime-part.c47
-rw-r--r--camel/camel-mime-part.h2
-rw-r--r--camel/gmime-content-field.c91
-rw-r--r--camel/gmime-content-field.h54
-rw-r--r--camel/gmime-utils.c4
-rw-r--r--camel/gmime-utils.h8
8 files changed, 200 insertions, 16 deletions
diff --git a/camel/Makefile.am b/camel/Makefile.am
index bf82c40452..67278258cb 100644
--- a/camel/Makefile.am
+++ b/camel/Makefile.am
@@ -16,11 +16,12 @@ libcamel_la_SOURCES = \
camel-data-wrapper.c \
camel-folder.c \
camel-mime-part.c \
- camel-mime-utils.c \
camel-provider.c \
camel-service.c \
camel-session.c \
camel-store.c \
+ gmime-content-field.c \
+ gmime-utils.c \
gstring-util.c \
url-util.c
@@ -29,11 +30,12 @@ libcamelinclude_HEADERS = \
camel-data-wrapper.h \
camel-folder.h \
camel-mime-part.h \
- camel-mime-utils.c \
camel-provider.h \
camel-service.h \
camel-session.h \
camel-store.h \
+ gmime-content-field.h \
+ gmime-utils.h \
gstring-util.h \
url-util.h
diff --git a/camel/camel-data-wrapper.h b/camel/camel-data-wrapper.h
index a4ec0220e2..7dc4be2cea 100644
--- a/camel/camel-data-wrapper.h
+++ b/camel/camel-data-wrapper.h
@@ -33,7 +33,7 @@ extern "C" {
#include <gtk/gtk.h>
#include <stdio.h>
-
+#include "gmime-content-field.h"
@@ -47,7 +47,7 @@ typedef struct
{
GtkObject parent_object;
- GString *mime_type;
+ GMimeContentField *content_type;
} CamelDataWrapper;
diff --git a/camel/camel-mime-part.c b/camel/camel-mime-part.c
index 3427dccf8f..35fd0279ed 100644
--- a/camel/camel-mime-part.c
+++ b/camel/camel-mime-part.c
@@ -26,6 +26,8 @@
#include "camel-mime-part.h"
#include <stdio.h>
+#include "gmime-content-field.h"
+
static CamelDataWrapperClass *parent_class=NULL;
@@ -233,8 +235,11 @@ camel_mime_part_get_description (CamelMimePart *mime_part)
static void
_set_disposition (CamelMimePart *mime_part, GString *disposition)
{
- if (mime_part->disposition) g_free(mime_part->disposition);
- mime_part->disposition = disposition;
+ //if (mime_part->disposition) g_free(mime_part->disposition);
+ if (!mime_part->disposition)
+ mime_part->disposition = g_new (GMimeContentField,1);
+ if ((mime_part->disposition)->type) g_free ((mime_part->disposition)->type);
+ (mime_part->disposition)->type = disposition;
}
@@ -249,7 +254,8 @@ camel_mime_part_set_disposition (CamelMimePart *mime_part, GString *disposition)
static GString *
_get_disposition (CamelMimePart *mime_part)
{
- return mime_part->disposition;
+ if (!mime_part->disposition) return NULL;
+ return (mime_part->disposition)->type;
}
@@ -444,14 +450,45 @@ camel_mime_part_get_content_object(CamelMimePart *mime_part)
#ifdef WHPTF
#warning : WHPTF is already defined !!!!!!
#endif
-#define WHPTF camel_mime_utils_write_header_pair_to_file
+#define WHPTF gmime_write_header_pair_to_file
+
+
+static void
+_write_content_to_file (CamelMimePart *mime_part, FILE *file)
+{
+ guint buffer_size;
+ gchar *buffer;
+ gchar *encoded_buffer;
+
+ CamelDataWrapper *content = mime_part->content;
+ // buffer_size = camel_data_wrapper_size (content);
+ buffer = g_malloc (buffer_size);
+ camel_data_wrapper_write_to_buffer (content, buffer);
+
+ if (mime_part->encoding) {
+ // encoded_buffer_size = gmime_encoded_size(buffer, buffer_size, encoding);
+ // encoded_buffer = g_malloc (encoded_buffer_size);
+ // gmime_encode_buffer (buffer, encoded_buffer, encoding);
+ // fwrite (encoded_buffer, encoded_buffer_size, 1, file);
+ // g_free (encoded_buffer);
+ } else
+ fwrite (buffer, buffer_size, 1, file);
+ g_free (buffer);
+}
+
static void
_write_to_file(CamelDataWrapper *data_wrapper, FILE *file)
{
CamelMimePart *mp = CAMEL_MIME_PART (data_wrapper);
- WHPTF (file, "Content-type", CAMEL_DATA_WRAPPER(mp)->mime_type);
+ gmime_content_field_write_to_file(data_wrapper->content_type, file);
+ gmime_content_field_write_to_file(mp->disposition, file);
+ WHPTF (file, "Content-Transfer-Encoding:", mp->encoding);
WHPTF (file, "Content-Description", mp->description);
+ WHPTF (file, "Content-MD5", mp->content_MD5);
+ WHPTF (file, "Content-id", mp->content_id);
+ fprintf(file,"\n");
+ camel_data_wrapper_write_to_file (mp->content, file);
}
diff --git a/camel/camel-mime-part.h b/camel/camel-mime-part.h
index 8f067fd403..0e6f1a0b4d 100644
--- a/camel/camel-mime-part.h
+++ b/camel/camel-mime-part.h
@@ -49,7 +49,7 @@ typedef struct
GHashTable *headers;
GString *description;
- GString *disposition;
+ GMimeContentField *disposition;
GString *content_id;
GString *content_MD5;
GList *content_languages;
diff --git a/camel/gmime-content-field.c b/camel/gmime-content-field.c
new file mode 100644
index 0000000000..e5eb81155e
--- /dev/null
+++ b/camel/gmime-content-field.c
@@ -0,0 +1,91 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* mime-content_field.c : mime content type field utilities */
+
+/*
+ *
+ * Copyright (C) 1999 Bertrand Guiheneuf <Bertrand.Guiheneuf@inria.fr> .
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+
+
+
+#include "gmime-content-field.h"
+#include "gstring-util.h"
+
+GMimeContentField *
+gmime_content_field_new (GString *type, GString *subtype)
+{
+ GMimeContentField *ct;
+
+ 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);
+
+}
+
+
+void
+gmime_content_field_set_parameter(GMimeContentField *content_field, GString *attribute, GString *value)
+{
+ gboolean attribute_exists;
+ GString *old_attribute;
+ GString *old_value;
+
+ attribute_exists = g_hash_table_lookup_extended (content_field->parameters,
+ attribute,
+ (gpointer *) &old_attribute,
+ (gpointer *) &old_value);
+ if (attribute_exists) {
+ g_string_assign(old_value, value->str);
+ g_string_free (value, TRUE);
+ g_string_free (attribute, TRUE);
+ } else
+ g_hash_table_insert (content_field->parameters, attribute, value);
+}
+
+
+static void
+_print_parameter (gpointer name, gpointer value, gpointer user_data)
+{
+ FILE *file = (FILE *)user_data;
+
+ fprintf (file, "; \n %s=%s", ((GString *)name)->str, ((GString *)value)->str);
+}
+
+/**
+ * gmime_content_field_write_to_file: write a mime content type to a file
+ * @content_field: content type object
+ * @file: file to write the content type field
+ *
+ *
+ **/
+void
+gmime_content_field_write_to_file(GMimeContentField *content_field, FILE *file)
+{
+ g_assert(content_field);
+ if ((content_field->type) && ((content_field->type)->str)) {
+ fprintf (file, "Content-Type: %s", content_field->type->str);
+ if ((content_field->subtype) && ((content_field->subtype)->str)) {
+ fprintf (file, "/%s", content_field->subtype->str);
+ }
+ /* print all parameters */
+ g_hash_table_foreach (content_field->parameters, _print_parameter, file);
+ fprintf (file, "\n");
+ }
+}
diff --git a/camel/gmime-content-field.h b/camel/gmime-content-field.h
new file mode 100644
index 0000000000..92328dcb2a
--- /dev/null
+++ b/camel/gmime-content-field.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* mime-content_field.h : mime content type field utilities */
+
+/*
+ *
+ * Copyright (C) 1999 Bertrand Guiheneuf <Bertrand.Guiheneuf@inria.fr> .
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+
+#ifndef GMIME_CONTENT_FIELD_H
+#define GMIME_CONTENT_FIELD_H 1
+
+
+#ifdef __cplusplus
+extern "C" {
+#pragma }
+#endif /* __cplusplus }*/
+
+#include <glib.h>
+#include <stdio.h>
+
+typedef struct {
+
+ GString *type;
+ GString *subtype;
+ GHashTable *parameters;
+
+} GMimeContentField;
+
+GMimeContentField *gmime_content_field_new (GString *type, GString *subtype);
+void gmime_content_field_set_parameter(GMimeContentField *content_field, GString *attribute, GString *value);
+void gmime_content_field_write_to_file(GMimeContentField *content_field, FILE *file);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* GMIME_CONTENT_FIELD_H */
diff --git a/camel/gmime-utils.c b/camel/gmime-utils.c
index fde9202730..b2ead8310c 100644
--- a/camel/gmime-utils.c
+++ b/camel/gmime-utils.c
@@ -23,9 +23,9 @@
-#include "camel-mime-utils.h"
+#include "gmime-utils.h"
void
-camel_mime_utils_write_header_pair_to_file(FILE* file, gchar* name, GString *value)
+gmime_write_header_pair_to_file(FILE* file, gchar* name, GString *value)
{
g_assert(name);
diff --git a/camel/gmime-utils.h b/camel/gmime-utils.h
index acc86de26e..ca175f4120 100644
--- a/camel/gmime-utils.h
+++ b/camel/gmime-utils.h
@@ -22,8 +22,8 @@
*/
-#ifndef CAMEL_MIME_UTILS_H
-#define CAMEL_MIME_UTILS_H 1
+#ifndef GMIME_UTILS_H
+#define GMIME_UTILS_H 1
#ifdef __cplusplus
@@ -34,7 +34,7 @@ extern "C" {
#include <glib.h>
#include <stdio.h>
-void camel_mime_utils_write_header_pair_to_file(FILE* file, gchar* name, GString *value);
+void gmime_write_header_pair_to_file(FILE* file, gchar* name, GString *value);
@@ -43,4 +43,4 @@ void camel_mime_utils_write_header_pair_to_file(FILE* file, gchar* name, GString
}
#endif /* __cplusplus */
-#endif /* CAMEL_MIME_UTILS_H */
+#endif /* GMIME_UTILS_H */