1
0
Fork 0

added mms-direction cgi param to send-mms interface

This commit is contained in:
bagyenda 2007-08-03 12:18:45 +00:00
parent d973e24c53
commit 67cdf0f387
7 changed files with 65 additions and 38 deletions

View File

@ -1,3 +1,5 @@
2007-08-03 P. A. Bagyenda <bagyenda@dsmagic.com>
* added mms-direction CGI param to send-mms interface (see doc for additional info)
2007-07-27 P. A. Bagyenda <bagyenda@dsmagic.com>
* Misc. fixes for DLR reporting, VAS GW
2007-07-13 P. A. Bagyenda <bagyenda@dsmagic.com>

View File

@ -2588,6 +2588,18 @@ faked-sender = 100<br>
</td>
</tr>
<tr>
<td valign=top >
<tt>mms-direction</tt>
</td>
<td valign=top>
MT (mobile terminating) or MO (mobile orginating). When set to MO,
the MMS is queued as if it came from the
operator MMSC side. This is useful for testing service
configurations as it mimics receiving an MO MMS. Default is MT.
</td>
</tr>
</table>
</p>

View File

@ -142,11 +142,21 @@ static int parse_header(xmlNodePtr node, List *headers, int *sigparent)
case MM7_TAG_To:
case MM7_TAG_Cc:
case MM7_TAG_Bcc:
case MM7_TAG_Sender:
case MM7_TAG_Sender:
case MM7_TAG_SenderAddress:
skip = 1;
*sigparent = tag; /* We wait for number and stuff below. */
if (has_node_children(node)) { /* account for buggy senders! XXX */
skip = 1;
*sigparent = tag; /* wait for number. */
} else {
char *sx;
char *s = (void *)xmlGetProp(node, (unsigned char *)"displayOnly");
if (s && strcasecmp((char *)s, "true") == 0) /* a '-' indicates don't use this to send. */
sx = "-";
else
sx = "+";
value = octstr_format("%s %s", sx, nvalue);
if (s) xmlFree(s);
}
break;
case MM7_TAG_Content:
if ((s = xmlGetProp(node, (unsigned char *)"href")) != NULL) {
@ -250,6 +260,7 @@ MSoapMsg_t *mm7_parse_soap(List *headers, Octstr *body)
if (!xml)
goto done;
octstr_strip_blanks(xml);
#if 1
info(0, "XML sent is: %s!", octstr_get_cstr(xml));
#endif

View File

@ -779,8 +779,7 @@ static int free_envelope(MmsEnvelope *e, int removefromqueue)
{
int i, n;
if (e->msgId)
octstr_destroy(e->msgId);
octstr_destroy(e->msgId);
for (i = 0, n = gwlist_len(e->to); i < n; i++) {
MmsEnvelopeTo *x = gwlist_get(e->to, i);
@ -790,35 +789,17 @@ static int free_envelope(MmsEnvelope *e, int removefromqueue)
}
gwlist_destroy(e->to, NULL);
if (e->from)
octstr_destroy(e->from);
if (e->fromproxy)
octstr_destroy(e->fromproxy);
if (e->mdata)
octstr_destroy(e->mdata);
if (e->viaproxy)
octstr_destroy(e->viaproxy);
if (e->token)
octstr_destroy(e->token);
if (e->subject)
octstr_destroy(e->subject);
if (e->vaspid)
octstr_destroy(e->vaspid);
if (e->vasid)
octstr_destroy(e->vasid);
if (e->url1)
octstr_destroy(e->url1);
if (e->url2)
octstr_destroy(e->url2);
if (e->hdrs)
http_destroy_headers(e->hdrs);
octstr_destroy(e->from);
octstr_destroy(e->fromproxy);
octstr_destroy(e->mdata);
octstr_destroy(e->viaproxy);
octstr_destroy(e->token);
octstr_destroy(e->subject);
octstr_destroy(e->vaspid);
octstr_destroy(e->vasid);
octstr_destroy(e->url1);
octstr_destroy(e->url2);
http_destroy_headers(e->hdrs);
if (removefromqueue) {
char fname[2*QFNAMEMAX];

View File

@ -1640,3 +1640,13 @@ int mms_is_token(Octstr *token)
octstr_check_range(token, 0, octstr_len(token), is_token_char);
}
int has_node_children(xmlNodePtr node)
{
xmlNodePtr x;
for (x = node->xmlChildrenNode; x; x = x->next)
if (x->type == XML_ELEMENT_NODE)
return 1;
return 0;
}

View File

@ -192,6 +192,8 @@ Octstr *filename2content_type(char *fname);
/* try to give a good extension name based on the url or content type. */
char *make_file_ext(Octstr *url, Octstr *ctype, char fext[5]);
/* return true if node has a child... */
int has_node_children(xmlNodePtr node);
#define MAXQTRIES 100
#define BACKOFF_FACTOR 5*60 /* In seconds */
#define QUEUERUN_INTERVAL 1*60 /* 1 minutes. */

View File

@ -275,7 +275,6 @@ done:
mime_entity_destroy(p);
octstr_destroy(cd);
}
if (xctype)
@ -300,6 +299,7 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
Octstr *svc_name, Octstr *faked_sender, Octstr *service_code,
int accept_x_headers,
List *passthro_headers,
Octstr *qdir,
Octstr **err);
static int fetch_serviceurl(MmsEnvelope *e,
MmsService *ms, MmsMsg *m,
@ -427,6 +427,7 @@ static int fetch_serviceurl(MmsEnvelope *e,
base_url,
typ, e, ms->name, ms->faked_sender, ms->service_code,
ms->accept_x_headers, ms->passthro_headers,
outgoing_qdir,
err);
octstr_destroy(base_url);
@ -471,6 +472,9 @@ static int mmsbox_service_dispatch(MmsEnvelope *e)
mmsbox_maxsendattempts);
res = -1;
goto done;
} else if (gwlist_len(e->to) == 0) { /* nothing to do. odd XXX */
res = 0;
goto done;
}
me = mms_tomime(msg, 0);
@ -791,6 +795,7 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
Octstr *base_url, int type, MmsEnvelope *e,
Octstr *svc_name, Octstr *faked_sender, Octstr *service_code,
int accept_x_headers, List *passthro_headers,
Octstr *qdir,
Octstr **err)
{
Octstr *from = NULL, *xfrom = NULL, *subject = NULL, *turl = get_toplevel_url(base_url);
@ -1065,9 +1070,9 @@ static int make_and_queue_msg(Octstr *data, Octstr *ctype, List *reply_headers,
dlr_url, rr_url,
hdrs,
(dlr_url != NULL),
octstr_get_cstr(outgoing_qdir),
octstr_get_cstr(qdir),
octstr_imm(MM_NAME));
info(0, "MMSBox: Queued message from service [%s] to outgoing: %s",
info(0, "MMSBox: Queued message from service [%s]: %s",
octstr_get_cstr(svc_name), octstr_get_cstr(x));
*err = x;
res = 0;
@ -1143,6 +1148,7 @@ static void sendmms_func(void *unused)
Octstr *mclass = http_cgi_variable(cgivars, "mclass");
Octstr *prio = http_cgi_variable(cgivars, "priority");
Octstr *distro = http_cgi_variable(cgivars, "distribution");
Octstr *send_type = http_cgi_variable(cgivars, "mms-direction");
Octstr *data_url = NULL;
dlr_url = http_cgi_variable(cgivars, "dlr-url");
@ -1258,6 +1264,9 @@ static void sendmms_func(void *unused)
vasid ? vasid : octstr_imm("sendmms-user"),
u->faked_sender, service_code,
1, NULL,
(send_type &&
octstr_str_case_compare(send_type, "mo") == 0) ?
incoming_qdir : outgoing_qdir,
&err);
if (res < 0)
rb = octstr_format("Error in message conversion: %S", err);