diff options
Diffstat (limited to 'camel')
-rw-r--r-- | camel/ChangeLog | 10 | ||||
-rw-r--r-- | camel/camel-mime-part-utils.c | 3 | ||||
-rw-r--r-- | camel/camel-multipart.c | 29 |
3 files changed, 37 insertions, 5 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index e7fb8aac8f..c9e7424a50 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,13 @@ +2000-05-26 Dan Winship <danw@helixcode.com> + + * camel-multipart.c (camel_multipart_init): Don't set a default + boundary. Require the caller to do that. + (set_boundary): if boundary is NULL, generate a "random" boundary. + + * camel-mime-part-utils.c + (camel_mime_part_construct_content_from_parser): Add a call to + camel_multipart_set_boundary after creating a new multipart. + 2000-05-25 Jeffrey Stedfast <fejj@helixcode.com> * providers/imap/camel-imap-store.c (try_connect): Removed diff --git a/camel/camel-mime-part-utils.c b/camel/camel-mime-part-utils.c index 94bef5e587..f2b67416ac 100644 --- a/camel/camel-mime-part-utils.c +++ b/camel/camel-mime-part-utils.c @@ -191,7 +191,8 @@ camel_mime_part_construct_content_from_parser(CamelMimePart *dw, CamelMimeParser d(printf("Creating multi-part\n")); content = (CamelDataWrapper *)camel_multipart_new(); - /* get/set boundary? */ + /* FIXME: use the real boundary? */ + camel_multipart_set_boundary((CamelMultipart *)content, NULL); while (camel_mime_parser_step(mp, &buf, &len) != HSCAN_MULTIPART_END) { camel_mime_parser_unstep(mp); diff --git a/camel/camel-multipart.c b/camel/camel-multipart.c index ea1f7d356f..e28c6542bf 100644 --- a/camel/camel-multipart.c +++ b/camel/camel-multipart.c @@ -32,6 +32,10 @@ #include "camel-multipart.h" #include "camel-mime-part.h" #include "camel-exception.h" +#include "md5-utils.h" + +#include <unistd.h> /* for getpid */ +#include <time.h> /* for time */ #define d(x) @@ -98,7 +102,6 @@ camel_multipart_init (gpointer object, gpointer klass) camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (multipart), "multipart/mixed"); - camel_multipart_set_boundary (multipart, "=-=-=-="); multipart->preface = NULL; multipart->postface = NULL; } @@ -356,9 +359,27 @@ static void set_boundary (CamelMultipart *multipart, gchar *boundary) { CamelDataWrapper *cdw = CAMEL_DATA_WRAPPER (multipart); + char *bgen, digest[16], bbuf[27], *p; + int state, save; g_return_if_fail (cdw->mime_type != NULL); + if (!boundary) { + /* Generate a fairly random boundary string. */ + bgen = g_strdup_printf ("%p:%lu:%lu", multipart, + (unsigned long) getpid(), + (unsigned long) time(0)); + md5_get_digest (bgen, strlen (bgen), digest); + g_free (bgen); + strcpy (bbuf, "=-"); + p = bbuf + 2; + state = save = 0; + p += base64_encode_step (digest, 16, p, &state, &save); + *p = '\0'; + + boundary = bbuf; + } + gmime_content_field_set_parameter (cdw->mime_type, "boundary", boundary); } @@ -366,17 +387,17 @@ set_boundary (CamelMultipart *multipart, gchar *boundary) /** * camel_multipart_set_boundary: * @multipart: a CamelMultipart - * @boundary: the message boundary + * @boundary: the message boundary, or %NULL * * Sets the message boundary for @multipart to @boundary. This should * be a string which does not occur anywhere in any of @multipart's - * subparts. + * subparts. If @boundary is %NULL, a randomly-generated boundary will + * be used. **/ void camel_multipart_set_boundary (CamelMultipart *multipart, gchar *boundary) { g_return_if_fail (CAMEL_IS_MULTIPART (multipart)); - g_return_if_fail (boundary != NULL); CMP_CLASS (multipart)->set_boundary (multipart, boundary); } |