rewrite message obtained via parsing into a file. Actually, it works
* tests/test2.c (main): rewrite message obtained via parsing into a file. Actually, it works pretty well :)) * camel/camel-mime-message.c (_set_recipient_list_from_string): create recipient list form a comma separated string. (_parse_header_pair): added recipient lists parsing. * camel/camel-mime-part.c (_parse_header_pair): new (protected) method. Parse a head pair and decides what to do with it. (_add_header): Call in _parse_header_pair * camel/camel-mime-message.c (_parse_header_pair): overload header parsing MimePart mthod. * camel/gstring-util.c (g_string_split): new func: split a gstring into a GList of substring. svn path=/trunk/; revision=950
This commit is contained in:
22
ChangeLog
22
ChangeLog
@ -1,3 +1,25 @@
|
||||
1999-05-27 bertrand <Bertrand.Guiheneuf@inria.fr>
|
||||
|
||||
* tests/test2.c (main): rewrite message obtained via
|
||||
parsing into a file. Actually, it works pretty well :))
|
||||
|
||||
* camel/camel-mime-message.c (_set_recipient_list_from_string):
|
||||
create recipient list form a comma separated string.
|
||||
(_parse_header_pair): added recipient lists parsing.
|
||||
|
||||
* camel/camel-mime-part.c (_parse_header_pair):
|
||||
new (protected) method. Parse a head pair and
|
||||
decides what to do with it.
|
||||
|
||||
(_add_header): Call in _parse_header_pair
|
||||
|
||||
* camel/camel-mime-message.c (_parse_header_pair):
|
||||
overload header parsing MimePart mthod.
|
||||
|
||||
* camel/gstring-util.c (g_string_split):
|
||||
new func: split a gstring into a GList of
|
||||
substring.
|
||||
|
||||
1999-05-26 bertrand <Bertrand.Guiheneuf@inria.fr>
|
||||
|
||||
* camel/gmime-utils.c (get_header_lines_from_file):
|
||||
|
||||
@ -30,8 +30,14 @@
|
||||
|
||||
typedef enum {
|
||||
HEADER_UNKNOWN,
|
||||
HEADER_FROM
|
||||
HEADER_FROM,
|
||||
HEADER_REPLY_TO,
|
||||
HEADER_SUBJECT,
|
||||
HEADER_TO,
|
||||
HEADER_CC,
|
||||
HEADER_BCC
|
||||
} CamelHeaderType;
|
||||
|
||||
static GHashTable *header_name_table;
|
||||
|
||||
|
||||
@ -77,6 +83,11 @@ _init_header_name_table()
|
||||
{
|
||||
header_name_table = g_hash_table_new (g_string_hash, g_string_equal_for_hash);
|
||||
g_hash_table_insert (header_name_table, g_string_new ("From"), (gpointer)HEADER_FROM);
|
||||
g_hash_table_insert (header_name_table, g_string_new ("Reply-To"), (gpointer)HEADER_REPLY_TO);
|
||||
g_hash_table_insert (header_name_table, g_string_new ("Subject"), (gpointer)HEADER_SUBJECT);
|
||||
g_hash_table_insert (header_name_table, g_string_new ("To"), (gpointer)HEADER_TO);
|
||||
g_hash_table_insert (header_name_table, g_string_new ("Cc"), (gpointer)HEADER_CC);
|
||||
g_hash_table_insert (header_name_table, g_string_new ("Bcc"), (gpointer)HEADER_BCC);
|
||||
|
||||
}
|
||||
|
||||
@ -542,28 +553,90 @@ _write_to_file (CamelDataWrapper *data_wrapper, FILE *file)
|
||||
/*******************************/
|
||||
/* mime message header parsing */
|
||||
|
||||
static void
|
||||
_set_recipient_list_from_string (CamelMimeMessage *message, GString *recipient_type, GString *recipients_string)
|
||||
{
|
||||
GList *recipients_list;
|
||||
CAMEL_LOG (FULL_DEBUG,"CamelMimeMessage::_set_recipient_list_from_string parsing ##%s##\n", recipients_string->str);
|
||||
recipients_list = g_string_split (recipients_string, ',');
|
||||
g_hash_table_insert (message->recipients, recipient_type, recipients_list);
|
||||
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_parse_header_pair (CamelMimePart *mime_part, GString *header_name, GString *header_value)
|
||||
{
|
||||
CamelHeaderType header_type;
|
||||
CamelMimeMessage *message = CAMEL_MIME_MESSAGE (mime_part);
|
||||
gboolean header_handled = FALSE;
|
||||
|
||||
|
||||
header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, header_name);
|
||||
switch (header_type) {
|
||||
|
||||
case HEADER_FROM:
|
||||
camel_log(FULL_DEBUG,
|
||||
CAMEL_LOG (FULL_DEBUG,
|
||||
"CamelMimeMessage::parse_header_pair found HEADER_FROM : %s\n",
|
||||
header_value->str );
|
||||
|
||||
camel_mime_message_set_from (message, header_value);
|
||||
g_string_free (header_name, TRUE);
|
||||
return TRUE;
|
||||
header_handled = TRUE;
|
||||
break;
|
||||
|
||||
case HEADER_REPLY_TO:
|
||||
CAMEL_LOG (FULL_DEBUG,
|
||||
"CamelMimeMessage::parse_header_pair found HEADER_REPLY_YO : %s\n",
|
||||
header_value->str );
|
||||
|
||||
camel_mime_message_set_reply_to (message, header_value);
|
||||
header_handled = TRUE;
|
||||
break;
|
||||
|
||||
case HEADER_SUBJECT:
|
||||
CAMEL_LOG (FULL_DEBUG,
|
||||
"CamelMimeMessage::parse_header_pair found HEADER_SUBJECT : %s\n",
|
||||
header_value->str );
|
||||
|
||||
camel_mime_message_set_subject (message, header_value);
|
||||
header_handled = TRUE;
|
||||
break;
|
||||
|
||||
case HEADER_TO:
|
||||
CAMEL_LOG (FULL_DEBUG,
|
||||
"CamelMimeMessage::parse_header_pair found HEADER_TO : %s\n",
|
||||
header_value->str );
|
||||
|
||||
_set_recipient_list_from_string (message, g_string_new ("To"), header_value);
|
||||
g_string_free (header_value, TRUE);
|
||||
header_handled = TRUE;
|
||||
break;
|
||||
|
||||
case HEADER_CC:
|
||||
CAMEL_LOG (FULL_DEBUG,
|
||||
"CamelMimeMessage::parse_header_pair found HEADER_CC : %s\n",
|
||||
header_value->str );
|
||||
|
||||
_set_recipient_list_from_string (message, g_string_new ("Cc"), header_value);
|
||||
g_string_free (header_value, TRUE);
|
||||
header_handled = TRUE;
|
||||
break;
|
||||
|
||||
case HEADER_BCC:
|
||||
CAMEL_LOG (FULL_DEBUG,
|
||||
"CamelMimeMessage::parse_header_pair found HEADER_BCC : %s\n",
|
||||
header_value->str );
|
||||
|
||||
_set_recipient_list_from_string (message, g_string_new ("Bcc"), header_value);
|
||||
g_string_free (header_value, TRUE);
|
||||
header_handled = TRUE;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return parent_class->parse_header_pair (mime_part, header_name, header_value);
|
||||
}
|
||||
if (header_handled) {
|
||||
g_string_free (header_name, TRUE);
|
||||
return TRUE;
|
||||
} else
|
||||
return parent_class->parse_header_pair (mime_part, header_name, header_value);
|
||||
|
||||
}
|
||||
|
||||
@ -110,6 +110,7 @@ GtkType camel_mime_message_get_type (void);
|
||||
/* public methods */
|
||||
CamelMimeMessage *camel_mime_message_new_with_session (CamelSession *session);
|
||||
|
||||
|
||||
void camel_mime_message_set_received_date (CamelMimeMessage *mime_message, GString *received_date);
|
||||
GString *camel_mime_message_get_received_date (CamelMimeMessage *mime_message);
|
||||
GString *camel_mime_message_get_sent_date (CamelMimeMessage *mime_message);
|
||||
|
||||
@ -246,3 +246,49 @@ g_string_list_free (GList *string_list)
|
||||
g_list_foreach(string_list, __g_string_list_free_string, NULL);
|
||||
g_list_free(string_list);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
GList *
|
||||
g_string_split (GString *string, char sep)
|
||||
{
|
||||
GList *result = NULL;
|
||||
gint first, last, pos;
|
||||
gchar *str;
|
||||
gchar *new_str;
|
||||
GString *new_gstring;
|
||||
|
||||
g_assert (string);
|
||||
str = string->str;
|
||||
if (!str) return NULL;
|
||||
|
||||
first = 0;
|
||||
last = strlen(str) - 1;
|
||||
|
||||
/* strip leading and trailing separators */
|
||||
while ( (first<=last) && (str[first]==sep) )
|
||||
first++;
|
||||
|
||||
while ( (first<=last) && (str[last]==sep) )
|
||||
last--;
|
||||
|
||||
CAMEL_LOG(FULL_DEBUG,"g_string_split:: stripping done\n");
|
||||
|
||||
while (first<=last) {
|
||||
pos = first;
|
||||
/* find next separator */
|
||||
while ((pos<=last) && (str[pos]!=sep)) pos++;
|
||||
if (first != pos) {
|
||||
new_str = g_strndup (str+first, pos-first);
|
||||
new_gstring = g_string_new (new_str);
|
||||
g_free (new_str);
|
||||
result = g_list_append (result, new_gstring);
|
||||
}
|
||||
first = pos + 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -52,6 +52,7 @@ gboolean g_string_equal_for_hash (gconstpointer v, gconstpointer v2);
|
||||
gboolean g_string_equal_for_glist (gconstpointer v, gconstpointer v2);
|
||||
guint g_string_hash (gconstpointer v);
|
||||
void g_string_list_free (GList *string_list);
|
||||
GList *g_string_split (GString *string, char sep);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -29,6 +29,7 @@ void
|
||||
main (int argc, char**argv)
|
||||
{
|
||||
FILE *input_file;
|
||||
FILE *output_file;
|
||||
GHashTable *header_table;
|
||||
CamelMimeMessage *message;
|
||||
|
||||
@ -36,7 +37,7 @@ main (int argc, char**argv)
|
||||
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
camel_debug_level = WARNING;
|
||||
camel_debug_level = FULL_DEBUG;
|
||||
message = camel_mime_message_new_with_session( (CamelSession *)NULL);
|
||||
|
||||
input_file = fopen ("mail.test", "r");
|
||||
@ -51,6 +52,15 @@ main (int argc, char**argv)
|
||||
else printf("header is empty, no header line present\n");
|
||||
|
||||
fclose (input_file);
|
||||
|
||||
output_file = fopen ("mail2.test", "w");
|
||||
if (!output_file) {
|
||||
perror("could not open output file");
|
||||
exit(2);
|
||||
}
|
||||
camel_data_wrapper_write_to_file (CAMEL_DATA_WRAPPER (message), output_file);
|
||||
fclose (output_file);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user