From a871cd75076bb40011aef25c270c719403793d64 Mon Sep 17 00:00:00 2001 From: Frederic-Philippe Metz Date: Thu, 4 Dec 2014 06:17:57 -0500 Subject: [PATCH] added_address_of_invoking_proxy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hinzufügen der Adresse des SIP-Proxy, der die session erstellt hat (sowohl für command line interface als auch CDR) Nur UDP control zunächst. Author: Frederic-Philippe Metz --- daemon/call.c | 1 + daemon/call.h | 1 + daemon/call_interfaces.c | 13 +++++++++---- daemon/call_interfaces.h | 2 +- daemon/cli.c | 4 ++-- daemon/control_udp.c | 2 +- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index 9724c742d..26f6ce743 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2375,6 +2375,7 @@ void call_destroy(struct call *c) { /* CDRs and statistics */ cdrbufcur += sprintf(cdrbufcur,"ci=%s, ",c->callid.s); + cdrbufcur += sprintf(cdrbufcur,"created_from=%s", c->created_from); for (l = c->monologues; l; l = l->next) { ml = l->data; if (_log_facility_cdr) { diff --git a/daemon/call.h b/daemon/call.h index c8ca767bf..92cbd0ad8 100644 --- a/daemon/call.h +++ b/daemon/call.h @@ -338,6 +338,7 @@ struct call { time_t deleted; time_t ml_deleted; unsigned char tos; + char created_from[64]; }; struct local_interface { diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 253eabcd0..a26c15cad 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -134,7 +134,7 @@ fail: return -1; } -static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_opmode opmode) { +static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_opmode opmode, const char* addr) { struct call *c; struct call_monologue *monologue; GQueue q = G_QUEUE_INIT; @@ -154,6 +154,11 @@ static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_o STR_FMT(&callid)); return str_sprintf("%s 0 0.0.0.0\n", out[RE_UDP_COOKIE]); } + + if (addr) { + memcpy(c->created_from, addr, strlen(addr)); + } + monologue = call_get_mono_dialogue(c, &fromtag, &totag); if (!monologue) goto ml_fail; @@ -196,11 +201,11 @@ out: return ret; } -str *call_update_udp(char **out, struct callmaster *m) { - return call_update_lookup_udp(out, m, OP_OFFER); +str *call_update_udp(char **out, struct callmaster *m, const char* addr) { + return call_update_lookup_udp(out, m, OP_OFFER, addr); } str *call_lookup_udp(char **out, struct callmaster *m) { - return call_update_lookup_udp(out, m, OP_ANSWER); + return call_update_lookup_udp(out, m, OP_ANSWER, NULL); } diff --git a/daemon/call_interfaces.h b/daemon/call_interfaces.h index b6df0dab2..f7444ac68 100644 --- a/daemon/call_interfaces.h +++ b/daemon/call_interfaces.h @@ -24,7 +24,7 @@ str *call_lookup_tcp(char **, struct callmaster *); void call_delete_tcp(char **, struct callmaster *); void calls_status_tcp(struct callmaster *, struct control_stream *); -str *call_update_udp(char **, struct callmaster *); +str *call_update_udp(char **, struct callmaster *, const char*); str *call_lookup_udp(char **, struct callmaster *); str *call_delete_udp(char **, struct callmaster *); str *call_query_udp(char **, struct callmaster *); diff --git a/daemon/cli.c b/daemon/cli.c index b26e918e3..c25ca4906 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -50,7 +50,7 @@ static void cli_incoming_list_callid(char* buffer, int len, struct callmaster* m return; } - printlen = snprintf (replybuffer,(outbufend-replybuffer), "\ncallid: %30s | deletionmark:%4s | created:%12i\n\n", c->callid.s , c->ml_deleted?"yes":"no", (int)c->created); + printlen = snprintf (replybuffer,(outbufend-replybuffer), "\ncallid: %30s | deletionmark:%4s | created:%12i | proxy:%s\n\n", c->callid.s , c->ml_deleted?"yes":"no", (int)c->created, c->created_from); ADJUSTLEN(printlen,outbufend,replybuffer); for (l = c->monologues; l; l = l->next) { @@ -130,7 +130,7 @@ static void cli_incoming_list(char* buffer, int len, struct callmaster* m, char* while (g_hash_table_iter_next (&iter, &key, &value)) { ptrkey = (str*)key; call = (struct call*)value; - printlen = snprintf(replybuffer, outbufend-replybuffer, "callid: %30s | deletionmark:%4s | created:%12i\n", ptrkey->s, call->ml_deleted?"yes":"no", (int)call->created); + printlen = snprintf(replybuffer, outbufend-replybuffer, "callid: %30s | deletionmark:%4s | created:%12i | proxy:%s\n", ptrkey->s, call->ml_deleted?"yes":"no", (int)call->created, call->created_from); ADJUSTLEN(printlen,outbufend,replybuffer); } rwlock_unlock_r(&m->hashlock); diff --git a/daemon/control_udp.c b/daemon/control_udp.c index b00e9d439..bab804142 100644 --- a/daemon/control_udp.c +++ b/daemon/control_udp.c @@ -83,7 +83,7 @@ static void control_udp_incoming(struct obj *obj, str *buf, struct sockaddr_in6 } if (chrtoupper(out[RE_UDP_UL_CMD][0]) == 'U') - reply = call_update_udp(out, u->callmaster); + reply = call_update_udp(out, u->callmaster, addr); else if (chrtoupper(out[RE_UDP_UL_CMD][0]) == 'L') reply = call_lookup_udp(out, u->callmaster); else if (chrtoupper(out[RE_UDP_DQ_CMD][0]) == 'D')