|
|
|
@ -13,6 +13,7 @@ |
|
|
|
#endif |
|
|
|
#include <stdlib.h> |
|
|
|
#include <time.h> |
|
|
|
#include <xmlrpc_client.h> |
|
|
|
|
|
|
|
#include "call.h" |
|
|
|
#include "poller.h" |
|
|
|
@ -485,6 +486,46 @@ good: |
|
|
|
; |
|
|
|
} |
|
|
|
|
|
|
|
static void xmlrpc_kill_calls(GList *list, const char *url) { |
|
|
|
pid_t parent; |
|
|
|
int i; |
|
|
|
xmlrpc_env e; |
|
|
|
xmlrpc_client *c; |
|
|
|
xmlrpc_value *r; |
|
|
|
struct call *ca; |
|
|
|
GList *csl; |
|
|
|
struct callstream *cs; |
|
|
|
|
|
|
|
parent = fork(); |
|
|
|
if (parent) |
|
|
|
return; |
|
|
|
parent = fork(); |
|
|
|
if (parent) |
|
|
|
_exit(0); |
|
|
|
|
|
|
|
for (i = 0; i < 8192; i++) |
|
|
|
close(i); |
|
|
|
|
|
|
|
xmlrpc_env_init(&e); |
|
|
|
xmlrpc_client_setup_global_const(&e); |
|
|
|
xmlrpc_client_create(&e, XMLRPC_CLIENT_NO_FLAGS, "ngcp-mediaproxy-ng", MEDIAPROXY_VERSION, NULL, 0, &c); |
|
|
|
|
|
|
|
while (list) { |
|
|
|
ca = list->data; |
|
|
|
|
|
|
|
for (csl = ca->callstreams->head; csl; csl = csl->next) { |
|
|
|
cs = csl->data; |
|
|
|
xmlrpc_client_call2f(&e, c, url, "di", &r, "(ssss)", |
|
|
|
"sbc", "postControlCmd", cs->peers[0].tag, "teardown"); |
|
|
|
xmlrpc_DECREF(r); |
|
|
|
} |
|
|
|
|
|
|
|
list = list->next; |
|
|
|
} |
|
|
|
|
|
|
|
_exit(0); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#define DS(x) do { \ |
|
|
|
if (ke->stats.x < sr->kstats.x) \ |
|
|
|
@ -534,6 +575,9 @@ next: |
|
|
|
i = g_list_delete_link(i, i); |
|
|
|
} |
|
|
|
|
|
|
|
if (m->b2b_url) |
|
|
|
xmlrpc_kill_calls(hlp.del, m->b2b_url); |
|
|
|
|
|
|
|
for (i = hlp.del; i; i = n) { |
|
|
|
n = i->next; |
|
|
|
c = i->data; |
|
|
|
|