1
0
Fork 0
mbuni/mbuni/mmsc/mmssend.c

188 lines
5.0 KiB
C
Raw Normal View History

2005-03-23 05:55:16 +00:00
/*
* Mbuni - Open Source MMS Gateway
*
* MMS send: Inject message into queue for delivery.
*
2008-07-10 09:46:58 +00:00
* Copyright (C) 2003 - 2008, Digital Solutions Ltd. - http://www.dsmagic.com
2005-03-23 05:55:16 +00:00
*
* Paul Bagyenda <bagyenda@dsmagic.com>
*
* This program is free software, distributed under the terms of
* the GNU General Public License, with a few exceptions granted (see LICENSE)
*/
2005-03-10 08:01:02 +00:00
#include <stdio.h>
#include <unistd.h>
2005-03-21 16:11:51 +00:00
#include <ctype.h>
2005-03-10 08:01:02 +00:00
#include "mms_queue.h"
#include "mms_uaprof.h"
#include "mmsc_cfg.h"
#include "mms_mmbox.h"
2005-03-10 08:01:02 +00:00
2005-03-10 08:01:02 +00:00
static Octstr *from;
2009-10-14 03:36:32 +00:00
static Octstr *binfo;
2005-03-10 08:01:02 +00:00
static List *to;
static Octstr *data;
static int savetommbox;
2008-07-10 09:46:58 +00:00
static int dlr;
2005-03-10 08:01:02 +00:00
static int find_own(int i, int argc, char *argv[])
{
if (argv[i][1] == 'f')
if (i + 1 < argc) {
from = octstr_create(argv[i+1]);
return 1;
} else
return -1;
else if (argv[i][1] == 'b') {
savetommbox = 1;
return 0;
} else if (argv[i][1] == 't')
if (i + 1 < argc) {
Octstr *x = octstr_create(argv[i+1]);
to = octstr_split(x, octstr_imm(":"));
octstr_destroy(x);
return 1;
2005-03-10 08:01:02 +00:00
} else
return -1;
else if (argv[i][1] == 'm')
if (i + 1 < argc) {
2005-03-10 08:01:02 +00:00
data = octstr_read_file(argv[i+1]);
return 1;
} else
return -1;
2008-07-10 09:46:58 +00:00
else if (argv[i][1] == 'r') {
dlr = 1;
return 0;
2009-10-14 03:36:32 +00:00
} else if (argv[i][1] == 'B')
if (i + 1 < argc) {
binfo = octstr_create(argv[i+1]);
return 1;
} else
return -1;
else
2005-03-10 08:01:02 +00:00
return -1;
}
static MmscSettings *settings;
2005-03-10 08:01:02 +00:00
static List *proxyrelays;
static MmsMsg *m;
Octstr *mmbox;
2005-03-10 08:01:02 +00:00
int main(int argc, char *argv[])
{
Octstr *fname, *s;
int cfidx;
int msize;
List *h = NULL;
2005-03-10 08:01:02 +00:00
if (argc < 2)
return -1;
mms_lib_init();
2005-03-10 08:01:02 +00:00
cfidx = get_and_set_debugs(argc, argv, find_own);
if (argv[cfidx] == NULL)
fname = octstr_imm("mmsc.conf");
else
fname = octstr_create(argv[cfidx]);
2008-09-04 17:20:42 +00:00
mms_info(0, "mmssend", NULL, "----------------------------------------");
mms_info(0, "mmssend", NULL, " MMSC Message sender runner version %s starting", MMSC_VERSION);
2005-03-10 08:01:02 +00:00
/* Load settings. */
settings = mms_load_mmsc_settings(fname, &proxyrelays,1);
2008-09-08 11:50:24 +00:00
2005-03-10 08:01:02 +00:00
if (!settings)
2008-09-08 11:50:24 +00:00
panic(0, "No global MMSC configuration, or failed to read conf from <%s>!", octstr_get_cstr(fname));
2005-03-10 08:01:02 +00:00
2008-09-08 11:50:24 +00:00
octstr_destroy(fname);
2005-03-10 08:01:02 +00:00
if (from == NULL ||
to == NULL) {
2008-09-04 17:20:42 +00:00
mms_error(0, "mmssend", NULL, "Sender and recipient addresses required!\n");
2005-03-10 08:01:02 +00:00
exit(-1);
} else { /* fix up 'to' list */
List *l = gwlist_create();
Octstr *x;
while ((x = gwlist_extract_first(to)) != NULL) {
octstr_strip_blanks(x);
2007-09-10 12:04:49 +00:00
_mms_fixup_address(&x,
2008-05-05 19:29:49 +00:00
settings->unified_prefix ? octstr_get_cstr(settings->unified_prefix) : NULL,
settings->strip_prefixes, 1);
gwlist_append(l, x);
}
gwlist_destroy(to, NULL);
to = l;
2005-03-10 08:01:02 +00:00
}
/* fix from address. */
2007-09-10 12:04:49 +00:00
_mms_fixup_address(&from,
2008-05-05 19:29:49 +00:00
settings->unified_prefix ? octstr_get_cstr(settings->unified_prefix) : NULL,
settings->strip_prefixes, 1);
#if 0
2005-03-10 08:01:02 +00:00
mms_start_profile_engine(octstr_get_cstr(settings->ua_profile_cache_dir));
#endif
2005-03-10 08:01:02 +00:00
if (data) {
/* try and detect if we are looking at plain text (mime-encoded) or binary encoded message. */
int ch = octstr_get_char(data, 0);
if (isprint(ch)) {
MIMEEntity *mime = mime_octstr_to_entity(data);
if (mime) {
m = mms_frommime(mime);
mime_entity_destroy(mime);
}
} else
2008-05-05 21:22:44 +00:00
m = mms_frombinary_ex(data, from ? from : octstr_imm("anon@anon"),
octstr_get_cstr(settings->unified_prefix),
settings->strip_prefixes);
2005-03-10 08:01:02 +00:00
if (m)
mms_msgdump(m,1);
2005-03-10 08:01:02 +00:00
msize = octstr_len(data);
octstr_destroy(data);
2005-03-10 08:01:02 +00:00
} else
msize = 0;
if (!m)
panic(0, "No Message supplied, or failed to decode binary data!");
2008-06-24 10:50:23 +00:00
h = http_create_empty_headers();
2008-06-24 10:50:23 +00:00
http_header_add(h, "X-Mbuni-Tool", "mmssend");
http_header_add(h, "X-Mbuni-CalledFrom", "Terminal");
2009-10-14 03:36:32 +00:00
if (binfo) {
mms_info(0, "add.info", NULL, "Adding extra headers billing info `X-Mms-Binfo' :");
http_header_add(h, "X-Mms-Binfo", octstr_get_cstr(binfo));
}
2007-08-20 11:49:30 +00:00
s = settings->qfs->mms_queue_add(from, to, NULL, NULL, NULL, time(NULL),
2008-06-24 10:01:03 +00:00
time(NULL) + settings->default_msgexpiry, m,
NULL,
NULL, NULL,
NULL, NULL,
h,
2008-07-10 09:46:58 +00:00
dlr,
2008-06-24 10:01:03 +00:00
octstr_get_cstr(settings->global_queuedir),
"MM3",
settings->host_alias);
if (savetommbox)
mmbox = mms_mmbox_addmsg(octstr_get_cstr(settings->mmbox_rootdir),
2005-03-21 16:11:51 +00:00
octstr_get_cstr(from), m, NULL, octstr_imm("Sent"));
2005-03-10 08:01:02 +00:00
2008-06-24 10:01:03 +00:00
mms_log("Received", from, to, msize, s, NULL, NULL, "MM3",NULL,NULL);
2005-03-10 08:01:02 +00:00
printf("Queued: %s, mmbox=%s\n",
octstr_get_cstr(s), mmbox ? octstr_get_cstr(mmbox) : "");
2005-03-10 08:01:02 +00:00
octstr_destroy(s);
2008-07-10 09:46:58 +00:00
2007-08-22 11:41:57 +00:00
http_destroy_headers(h);
mms_cleanup_mmsc_settings(settings);
mms_lib_shutdown();
2005-03-10 08:01:02 +00:00
return 0;
}