|
|
|
@ -310,25 +310,33 @@ void xmlrpc_kill_calls(void *p) { |
|
|
|
sigset_t ss; |
|
|
|
int i = 0; |
|
|
|
int status; |
|
|
|
str *tag, *tag2 = NULL, *tag3 = NULL; |
|
|
|
const char *url; |
|
|
|
|
|
|
|
int els_per_ent = 2; |
|
|
|
if (xh->fmt == XF_KAMAILIO) |
|
|
|
if (xh->fmt == XF_SEMS) |
|
|
|
els_per_ent = 3; |
|
|
|
else if (xh->fmt == XF_KAMAILIO) |
|
|
|
els_per_ent = 4; |
|
|
|
|
|
|
|
while (xh->strings.length >= els_per_ent) { |
|
|
|
const char *url; |
|
|
|
str *call_id, *tag = NULL, *tag2 = NULL; |
|
|
|
|
|
|
|
usleep(10000); |
|
|
|
|
|
|
|
url = xh->strings.head->data; |
|
|
|
tag = xh->strings.head->next->data; |
|
|
|
if (xh->fmt == XF_KAMAILIO) { |
|
|
|
tag2 = xh->strings.head->next->next->data; |
|
|
|
tag3 = xh->strings.head->next->next->next->data; |
|
|
|
call_id = xh->strings.head->next->data; |
|
|
|
if (xh->fmt == XF_KAMAILIO || xh->fmt == XF_SEMS) { |
|
|
|
tag = xh->strings.head->next->next->data; |
|
|
|
if (xh->fmt == XF_KAMAILIO) |
|
|
|
tag2 = xh->strings.head->next->next->next->data; |
|
|
|
} |
|
|
|
|
|
|
|
ilog(LOG_INFO, "Forking child to close call with tag " STR_FORMAT_M " via XMLRPC call to %s", |
|
|
|
STR_FMT_M(tag), url); |
|
|
|
if (tag) |
|
|
|
ilog(LOG_INFO, "Forking child to close call (ID " STR_FORMAT_M ", tag " STR_FORMAT_M ") via XMLRPC call to %s", |
|
|
|
STR_FMT_M(call_id), STR_FMT_M(tag), url); |
|
|
|
else |
|
|
|
ilog(LOG_INFO, "Forking child to close call (ID " STR_FORMAT_M ") via XMLRPC call to %s", |
|
|
|
STR_FMT_M(call_id), url); |
|
|
|
pid = fork(); |
|
|
|
|
|
|
|
if (pid) { |
|
|
|
@ -365,7 +373,12 @@ retry: |
|
|
|
if (!rtpe_config.common.log_stderr) { |
|
|
|
openlog("rtpengine/child", LOG_PID | LOG_NDELAY, LOG_DAEMON); |
|
|
|
} |
|
|
|
ilog(LOG_INFO, "Initiating XMLRPC call for tag " STR_FORMAT_M "", STR_FMT_M(tag)); |
|
|
|
|
|
|
|
if (tag) |
|
|
|
ilog(LOG_INFO, "Initiating XMLRPC for call (ID " STR_FORMAT_M ", tag " STR_FORMAT_M ")", |
|
|
|
STR_FMT_M(call_id), STR_FMT_M(tag)); |
|
|
|
else |
|
|
|
ilog(LOG_INFO, "Initiating XMLRPC for call (ID " STR_FORMAT_M ")", STR_FMT_M(call_id)); |
|
|
|
|
|
|
|
alarm(5); |
|
|
|
|
|
|
|
@ -383,11 +396,11 @@ retry: |
|
|
|
"sbc", "postControlCmd", tag->s, "teardown"); |
|
|
|
break; |
|
|
|
case XF_CALLID: |
|
|
|
xmlrpc_client_call2f(&e, c, url, "teardown", &r, "(s)", tag->s); |
|
|
|
xmlrpc_client_call2f(&e, c, url, "teardown", &r, "(s)", call_id->s); |
|
|
|
break; |
|
|
|
case XF_KAMAILIO: |
|
|
|
xmlrpc_client_call2f(&e, c, url, "dlg.terminate_dlg", &r, "(sss)", |
|
|
|
tag->s, tag2->s, tag3->s); |
|
|
|
call_id->s, tag->s, tag2->s); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
@ -474,6 +487,7 @@ void kill_calls_timer(GSList *list, const char *url) { |
|
|
|
if (!cm->tag.s || !cm->tag.len) |
|
|
|
continue; |
|
|
|
g_queue_push_tail(&xh->strings, strdup(url_buf)); |
|
|
|
g_queue_push_tail(&xh->strings, str_dup(&ca->callid)); |
|
|
|
g_queue_push_tail(&xh->strings, str_dup(&cm->tag)); |
|
|
|
} |
|
|
|
break; |
|
|
|
|