mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 09:36:46 +00:00
add libetpan 0.48 to in tree libs
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3763 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
317
libs/libetpan/tests/compose-msg.c
Normal file
317
libs/libetpan/tests/compose-msg.c
Normal file
@@ -0,0 +1,317 @@
|
||||
#include <libetpan/libetpan.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define DEST_CHARSET "iso-8859-1"
|
||||
|
||||
/* build a mime parameter */
|
||||
|
||||
static struct mailmime_parameter *
|
||||
mailmime_param_new_with_data(char * name, char * value)
|
||||
{
|
||||
char * param_name;
|
||||
char * param_value;
|
||||
struct mailmime_parameter * param;
|
||||
|
||||
param_name = strdup(name);
|
||||
if (param_name == NULL)
|
||||
goto err;
|
||||
|
||||
param_value = strdup(value);
|
||||
if (param_value == NULL)
|
||||
goto free_name;
|
||||
|
||||
param = mailmime_parameter_new(param_name, param_value);
|
||||
if (param == NULL)
|
||||
goto free_value;
|
||||
|
||||
return param;
|
||||
|
||||
free_value:
|
||||
free(param_value);
|
||||
free_name:
|
||||
free(param_name);
|
||||
err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* build sample fields */
|
||||
|
||||
static struct mailimf_fields * build_fields(void)
|
||||
{
|
||||
struct mailimf_mailbox_list * from;
|
||||
struct mailimf_address_list * to;
|
||||
char * subject;
|
||||
int r;
|
||||
struct mailimf_fields * new_fields;
|
||||
|
||||
/* subject field */
|
||||
|
||||
subject = strdup("this is a sample");
|
||||
if (subject == NULL) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* from field */
|
||||
|
||||
from = mailimf_mailbox_list_new_empty();
|
||||
if (from == NULL) {
|
||||
goto free_subject;
|
||||
}
|
||||
|
||||
r = mailimf_mailbox_list_add_parse(from,
|
||||
"DINH Viet Hoa <hoa@sourceforge.net>");
|
||||
if (r != MAILIMF_NO_ERROR) {
|
||||
goto free_from;
|
||||
}
|
||||
|
||||
/* to field */
|
||||
|
||||
to = mailimf_address_list_new_empty();
|
||||
if (to == NULL) {
|
||||
goto free_from;
|
||||
}
|
||||
|
||||
r = mailimf_address_list_add_parse(to,
|
||||
"Paul <claws@thewildbeast.co.uk>");
|
||||
if (r != MAILIMF_NO_ERROR) {
|
||||
goto free_to;
|
||||
}
|
||||
|
||||
new_fields = mailimf_fields_new_with_data(from /* from */,
|
||||
NULL /* sender */, NULL /* reply-to */,
|
||||
to, NULL /* cc */, NULL /* bcc */, NULL /* in-reply-to */,
|
||||
NULL /* references */,
|
||||
subject);
|
||||
if (new_fields == NULL)
|
||||
goto free_to;
|
||||
|
||||
return new_fields;
|
||||
|
||||
free_to:
|
||||
mailimf_address_list_free(to);
|
||||
free_from:
|
||||
mailimf_mailbox_list_free(from);
|
||||
free_subject:
|
||||
free(subject);
|
||||
err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* text is a string, build a mime part containing this string */
|
||||
|
||||
static struct mailmime * build_body_text(char * text)
|
||||
{
|
||||
struct mailmime_fields * mime_fields;
|
||||
struct mailmime * mime_sub;
|
||||
struct mailmime_content * content;
|
||||
struct mailmime_parameter * param;
|
||||
int r;
|
||||
|
||||
/* text/plain part */
|
||||
|
||||
mime_fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT);
|
||||
if (mime_fields == NULL) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
content = mailmime_content_new_with_str("text/plain");
|
||||
if (content == NULL) {
|
||||
goto free_fields;
|
||||
}
|
||||
|
||||
param = mailmime_param_new_with_data("charset", DEST_CHARSET);
|
||||
if (param == NULL) {
|
||||
goto free_content;
|
||||
}
|
||||
|
||||
r = clist_append(content->ct_parameters, param);
|
||||
if (r < 0) {
|
||||
mailmime_parameter_free(param);
|
||||
goto free_content;
|
||||
}
|
||||
|
||||
mime_sub = mailmime_new_empty(content, mime_fields);
|
||||
if (mime_sub == NULL) {
|
||||
goto free_content;
|
||||
}
|
||||
|
||||
r = mailmime_set_body_text(mime_sub, text, strlen(text));
|
||||
if (r != MAILIMF_NO_ERROR) {
|
||||
goto free_mime;
|
||||
}
|
||||
|
||||
return mime_sub;
|
||||
|
||||
free_mime:
|
||||
mailmime_free(mime_sub);
|
||||
goto err;
|
||||
free_content:
|
||||
mailmime_content_free(content);
|
||||
free_fields:
|
||||
mailmime_fields_free(mime_fields);
|
||||
err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* build a mime part containing the given file */
|
||||
|
||||
static struct mailmime * build_body_file(char * filename)
|
||||
{
|
||||
struct mailmime_fields * mime_fields;
|
||||
struct mailmime * mime_sub;
|
||||
struct mailmime_content * content;
|
||||
struct mailmime_parameter * param;
|
||||
char * dup_filename;
|
||||
int r;
|
||||
|
||||
/* text/plain part */
|
||||
|
||||
dup_filename = strdup(filename);
|
||||
if (dup_filename == NULL)
|
||||
goto err;
|
||||
|
||||
mime_fields =
|
||||
mailmime_fields_new_filename(MAILMIME_DISPOSITION_TYPE_ATTACHMENT,
|
||||
dup_filename, MAILMIME_MECHANISM_BASE64);
|
||||
if (mime_fields == NULL)
|
||||
goto free_dup_filename;
|
||||
|
||||
content = mailmime_content_new_with_str("text/plain");
|
||||
if (content == NULL) {
|
||||
goto free_fields;
|
||||
}
|
||||
|
||||
param = mailmime_param_new_with_data("charset", DEST_CHARSET);
|
||||
if (param == NULL) {
|
||||
goto free_content;
|
||||
}
|
||||
|
||||
r = clist_append(content->ct_parameters, param);
|
||||
if (r < 0) {
|
||||
mailmime_parameter_free(param);
|
||||
goto free_content;
|
||||
}
|
||||
|
||||
mime_sub = mailmime_new_empty(content, mime_fields);
|
||||
if (mime_sub == NULL) {
|
||||
goto free_content;
|
||||
}
|
||||
|
||||
dup_filename = strdup(filename);
|
||||
if (dup_filename == NULL)
|
||||
goto free_mime;
|
||||
|
||||
r = mailmime_set_body_file(mime_sub, dup_filename);
|
||||
if (r != MAILIMF_NO_ERROR) {
|
||||
goto free_mime;
|
||||
}
|
||||
|
||||
return mime_sub;
|
||||
|
||||
free_mime:
|
||||
mailmime_free(mime_sub);
|
||||
goto err;
|
||||
free_content:
|
||||
mailmime_content_free(content);
|
||||
free_fields:
|
||||
mailmime_fields_free(mime_fields);
|
||||
goto err;
|
||||
free_dup_filename:
|
||||
free(dup_filename);
|
||||
err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* build an empty message */
|
||||
|
||||
static struct mailmime * build_message(struct mailimf_fields * fields)
|
||||
{
|
||||
struct mailmime * mime;
|
||||
|
||||
/* message */
|
||||
|
||||
mime = mailmime_new_message_data(NULL);
|
||||
if (mime == NULL) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
mailmime_set_imf_fields(mime, fields);
|
||||
|
||||
return mime;
|
||||
|
||||
err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
struct mailimf_fields * fields;
|
||||
char * text;
|
||||
char * filename;
|
||||
struct mailmime * message;
|
||||
struct mailmime * text_part;
|
||||
struct mailmime * file_part;
|
||||
int r;
|
||||
int col;
|
||||
|
||||
if (argc < 3) {
|
||||
printf("syntax: compose-msg \"text\" filename\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
fields = build_fields();
|
||||
if (fields == NULL)
|
||||
goto err;
|
||||
|
||||
message = build_message(fields);
|
||||
if (message == NULL)
|
||||
goto free_fields;
|
||||
|
||||
text = argv[1];
|
||||
text_part = build_body_text(text);
|
||||
if (text_part == NULL)
|
||||
goto free_message;
|
||||
|
||||
filename = argv[2];
|
||||
file_part = build_body_file(filename);
|
||||
if (file_part == NULL)
|
||||
goto free_text;
|
||||
|
||||
r = mailmime_smart_add_part(message, text_part);
|
||||
if (r != MAILIMF_NO_ERROR)
|
||||
goto free_file;
|
||||
|
||||
r = mailmime_smart_add_part(message, file_part);
|
||||
if (r != MAILIMF_NO_ERROR)
|
||||
goto free_file_alone;
|
||||
|
||||
col = 0;
|
||||
mailmime_write(stdout, &col, message);
|
||||
|
||||
mailmime_free(message);
|
||||
|
||||
return 0;
|
||||
|
||||
free_file_alone:
|
||||
mailmime_free(file_part);
|
||||
goto free_text;
|
||||
free_file:
|
||||
mailmime_free(file_part);
|
||||
free_text:
|
||||
mailmime_free(text_part);
|
||||
free_message:
|
||||
mailmime_free(message);
|
||||
goto err;
|
||||
free_fields:
|
||||
mailimf_fields_free(fields);
|
||||
err:
|
||||
printf("error memory\n");
|
||||
return 1;
|
||||
}
|
Reference in New Issue
Block a user