From 1fd62d68575a28529d35e5356dac8a35c715c57f Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 6 Aug 2021 16:05:22 -0400 Subject: [PATCH] TT#91151 populate "created from" for published calls Change-Id: I01eacb87dc645615337b10814666c0d108ba9ac9 --- daemon/call_interfaces.c | 24 +++++++++++++++--------- daemon/control_ng.c | 2 +- include/call_interfaces.h | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index edca14039..89411f809 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -166,6 +166,14 @@ fail: return -1; } +static void updated_created_from(struct call *c, const char *addr, const endpoint_t *sin) { + if (!c->created_from && addr) { + c->created_from = call_strdup(c, addr); + if (sin) + c->created_from_addr = sin->address; + } +} + static str *call_update_lookup_udp(char **out, enum call_opmode opmode, const char* addr, const endpoint_t *sin) { @@ -190,10 +198,7 @@ static str *call_update_lookup_udp(char **out, enum call_opmode opmode, const ch return str_sprintf("%s 0 0.0.0.0\n", out[RE_UDP_COOKIE]); } - if (!c->created_from && addr) { - c->created_from = call_strdup(c, addr); - c->created_from_addr = sin->address; - } + updated_created_from(c, addr, sin); if (call_get_mono_dialogue(dialogue, c, &fromtag, &totag, NULL)) goto ml_fail; @@ -1447,10 +1452,8 @@ static const char *call_offer_answer_ng(struct ng_buffer *ngbuf, bencode_item_t if (rtpe_config.active_switchover && IS_FOREIGN_CALL(call)) call_make_own_foreign(call, false); - if (!call->created_from && addr) { - call->created_from = call_strdup(call, addr); - call->created_from_addr = sin->address; - } + updated_created_from(call, addr, sin); + if (flags.xmlrpc_callback.family) call->xmlrpc_callback = flags.xmlrpc_callback; @@ -2472,7 +2475,9 @@ found_sink: } -const char *call_publish_ng(bencode_item_t *input, bencode_item_t *output) { +const char *call_publish_ng(bencode_item_t *input, bencode_item_t *output, const char *addr, + const endpoint_t *sin) +{ AUTO_CLEANUP(struct sdp_ng_flags flags, call_ng_free_flags); AUTO_CLEANUP(GQueue parsed, sdp_free) = G_QUEUE_INIT; AUTO_CLEANUP(GQueue streams, sdp_streams_free) = G_QUEUE_INIT; @@ -2496,6 +2501,7 @@ const char *call_publish_ng(bencode_item_t *input, bencode_item_t *output) { return "Incomplete SDP specification"; struct call *call = call_get_or_create(&flags.call_id, false, false); + updated_created_from(call, addr, sin); struct call_monologue *ml = call_get_or_create_monologue(call, &flags.from_tag); int ret = monologue_publish(ml, &streams, &flags); diff --git a/daemon/control_ng.c b/daemon/control_ng.c index b5569d6cd..e1772ac00 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -310,7 +310,7 @@ int control_ng_process(str *buf, const endpoint_t *sin, char *addr, command = NGC_STATISTICS; break; case CSH_LOOKUP("publish"): - errstr = call_publish_ng(dict, resp); + errstr = call_publish_ng(dict, resp, addr, sin); command = NGC_PUBLISH; break; case CSH_LOOKUP("subscribe request"): diff --git a/include/call_interfaces.h b/include/call_interfaces.h index fefc689a7..ce42cc229 100644 --- a/include/call_interfaces.h +++ b/include/call_interfaces.h @@ -180,7 +180,7 @@ const char *call_stop_media_ng(bencode_item_t *, bencode_item_t *); const char *call_play_dtmf_ng(bencode_item_t *, bencode_item_t *); void ng_call_stats(struct call *call, const str *fromtag, const str *totag, bencode_item_t *output, struct call_stats *totals); -const char *call_publish_ng(bencode_item_t *, bencode_item_t *); +const char *call_publish_ng(bencode_item_t *, bencode_item_t *, const char *, const endpoint_t *); const char *call_subscribe_request_ng(bencode_item_t *, bencode_item_t *); const char *call_subscribe_answer_ng(bencode_item_t *, bencode_item_t *); const char *call_unsubscribe_ng(bencode_item_t *, bencode_item_t *);