diff --git a/daemon/call.c b/daemon/call.c index 417145c41..798157f1f 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -470,15 +470,15 @@ void kill_calls_timer(GSList *list, const char *url) { rwlock_lock_r(&ca->master_lock); - const sockaddr_t *cb_addr; - if (ca->xmlrpc_callback.family) - cb_addr = &ca->xmlrpc_callback; - else - cb_addr = &ca->created_from_addr; - if (url_prefix) { - snprintf(url_buf, sizeof(url_buf), "%s%s%s", - url_prefix, sockaddr_print_p_buf(cb_addr), + str cb_addr; + if (ca->xmlrpc_callback.len) + cb_addr = ca->xmlrpc_callback; + else + cb_addr = ca->created_from; + + snprintf(url_buf, sizeof(url_buf), "%s" STR_FORMAT "%s", + url_prefix, STR_FMT(&cb_addr), url_suffix); } else diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index c320311c1..70d5e3ac7 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -161,17 +161,12 @@ fail: return -1; } -static void updated_created_from(call_t *c, const char *addr, const endpoint_t *sin) { - if (!c->created_from && addr) { - c->created_from = call_strdup(addr); - if (sin) - c->created_from_addr = sin->address; - } +static void updated_created_from(call_t *c, const char *addr) { + if (!c->created_from.len && addr) + c->created_from = call_str_cpy_c(addr); } -static str call_update_lookup_udp(char **out, enum ng_opmode opmode, const char* addr, - const endpoint_t *sin) -{ +static str call_update_lookup_udp(char **out, enum ng_opmode opmode, const char* addr) { call_t *c; struct call_monologue *monologues[2]; /* subscriber lists of both monologues */ sdp_streams_q q = TYPED_GQUEUE_INIT; @@ -195,7 +190,7 @@ static str call_update_lookup_udp(char **out, enum ng_opmode opmode, const char* return str_sprintf("%s 0 0.0.0.0\n", out[RE_UDP_COOKIE]); } - updated_created_from(c, addr, sin); + updated_created_from(c, addr); if (call_get_mono_dialogue(monologues, c, &fromtag, &totag, NULL, NULL)) goto ml_fail; @@ -247,11 +242,11 @@ out: return ret; } -str call_update_udp(char **out, const char* addr, const endpoint_t *sin) { - return call_update_lookup_udp(out, OP_OFFER, addr, sin); +str call_update_udp(char **out, const char* addr) { + return call_update_lookup_udp(out, OP_OFFER, addr); } str call_lookup_udp(char **out) { - return call_update_lookup_udp(out, OP_ANSWER, NULL, NULL); + return call_update_lookup_udp(out, OP_ANSWER, NULL); } @@ -2349,9 +2344,7 @@ void call_ng_main_flags(const ng_parser_t *parser, str *key, parser_arg value, h break; case CSH_LOOKUP("xmlrpc-callback"): case CSH_LOOKUP("XMLRPC-callback"): - if (!sockaddr_parse_any_str(&out->xmlrpc_callback, &s)) - ilog(LOG_WARN, "Failed to parse 'xmlrpc-callback' address '" STR_FORMAT "'", - STR_FMT(&s)); + out->xmlrpc_callback = s; break; default: ilog(LOG_WARN, "Unknown dictionary key encountered: '" STR_FORMAT "'", STR_FMT(key)); @@ -2513,9 +2506,7 @@ static const char *call_offer_get_call(call_t **callp, sdp_ng_flags *flags) { return NULL; } -static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, const char* addr, - const endpoint_t *sin) -{ +static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, const char* addr) { const char *errstr; str sdp = STR_NULL; g_auto(sdp_sessions_q) parsed = TYPED_GQUEUE_INIT; @@ -2579,10 +2570,10 @@ static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, const char* addr, if (rtpe_config.active_switchover && IS_FOREIGN_CALL(call)) call_make_own_foreign(call, false); - updated_created_from(call, addr, sin); + updated_created_from(call, addr); - if (flags.xmlrpc_callback.family) - call->xmlrpc_callback = flags.xmlrpc_callback; + if (flags.xmlrpc_callback.len) + call->xmlrpc_callback = call_str_cpy(&flags.xmlrpc_callback); if (flags.dtmf_log_dest.address.family) call->dtmf_log_dest = flags.dtmf_log_dest; @@ -2682,14 +2673,13 @@ out: } const char *call_offer_ng(ng_command_ctx_t *ctx, - const char* addr, - const endpoint_t *sin) + const char *addr) { - return call_offer_answer_ng(ctx, addr, sin); + return call_offer_answer_ng(ctx, addr); } const char *call_answer_ng(ng_command_ctx_t *ctx) { - return call_offer_answer_ng(ctx, NULL, NULL); + return call_offer_answer_ng(ctx, NULL); } const char *call_delete_ng(ng_command_ctx_t *ctx) { @@ -4031,10 +4021,7 @@ found_sink: } -const char *call_publish_ng(ng_command_ctx_t *ctx, - const char *addr, - const endpoint_t *sin) -{ +const char *call_publish_ng(ng_command_ctx_t *ctx, const char *addr) { g_auto(sdp_ng_flags) flags; g_auto(sdp_sessions_q) parsed = TYPED_GQUEUE_INIT; g_auto(sdp_streams_q) streams = TYPED_GQUEUE_INIT; @@ -4062,7 +4049,7 @@ const char *call_publish_ng(ng_command_ctx_t *ctx, if (trickle_ice_update(ctx->ngbuf, call, &flags, &streams)) return NULL; - updated_created_from(call, addr, sin); + updated_created_from(call, addr); struct call_monologue *ml = call_get_or_create_monologue(call, &flags.from_tag); ret = monologue_publish(ml, &streams, &flags); diff --git a/daemon/cdr.c b/daemon/cdr.c index dddc904b7..9358d4bc1 100644 --- a/daemon/cdr.c +++ b/daemon/cdr.c @@ -47,7 +47,7 @@ void cdr_update_entry(call_t * c) { /* CDRs and statistics */ if (_log_facility_cdr) { g_string_append_printf(cdr, "ci=%s, ",c->callid.s); - g_string_append_printf(cdr, "created_from=%s, ", c->created_from); + g_string_append_printf(cdr, "created_from=" STR_FORMAT ", ", STR_FMT(&c->created_from)); g_string_append_printf(cdr, "last_signal=%" PRId64 ", ", c->last_signal_us / 1000000L); g_string_append_printf(cdr, "tos=%u, ", (unsigned int)c->tos); } diff --git a/daemon/cli.c b/daemon/cli.c index dd51e6c41..73fec4b65 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -693,7 +693,7 @@ static void cli_list_call_info(struct cli_writer *cw, call_t *c) { "callid: %s\n" "deletionmark: %s\n" "created: %" PRId64 "\n" - "proxy: %s\n" + "proxy: " STR_FORMAT "\n" "tos: %u\n" "last_signal: %" PRId64 "\n" "redis_keyspace: %i\n" @@ -701,7 +701,8 @@ static void cli_list_call_info(struct cli_writer *cw, call_t *c) { "foreign: %s\n" "recording: %s\n" "\n", - c->callid.s, c->ml_deleted_us ? "yes" : "no", c->created / 1000000, c->created_from, + c->callid.s, c->ml_deleted_us ? "yes" : "no", c->created / 1000000, + STR_FMT(&c->created_from), (unsigned int) c->tos, c->last_signal_us / 1000000L, c->redis_hosted_db, atomic64_get_na(&c->last_redis_update_us), IS_FOREIGN_CALL(c) ? "yes" : "no", c->recording ? "yes" : "no"); @@ -868,10 +869,10 @@ static void cli_incoming_list_sessions(str *instr, struct cli_writer *cw, const } found = true; - cw->cw_printf(cw, "ID: %60s | del:%s | creat:%12" PRId64 " | prx:%s | redis:%2i | frgn:%s | rec:%s\n", + cw->cw_printf(cw, "ID: %60s | del:%s | creat:%12" PRId64 " | prx:" STR_FORMAT " | redis:%2i | frgn:%s | rec:%s\n", call->callid.s, call->ml_deleted_us ? "y" : "n", call->created / 1000000, - call->created_from, call->redis_hosted_db, + STR_FMT(&call->created_from), call->redis_hosted_db, IS_FOREIGN_CALL(call) ? "y" : "n", call->recording ? "y" : "n"); diff --git a/daemon/control_ng.c b/daemon/control_ng.c index ac73cba15..0cfd0b295 100644 --- a/daemon/control_ng.c +++ b/daemon/control_ng.c @@ -748,7 +748,7 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons break; case CSH_LOOKUP("offer"): command_ctx.opmode = OP_OFFER; - errstr = call_offer_ng(&command_ctx, addr, sin); + errstr = call_offer_ng(&command_ctx, addr); break; case CSH_LOOKUP("answer"): command_ctx.opmode = OP_ANSWER; @@ -828,7 +828,7 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons break; case CSH_LOOKUP("publish"): command_ctx.opmode = OP_PUBLISH; - errstr = call_publish_ng(&command_ctx, addr, sin); + errstr = call_publish_ng(&command_ctx, addr); break; case CSH_LOOKUP("subscribe request"): command_ctx.opmode = OP_SUBSCRIBE_REQ; diff --git a/daemon/control_udp.c b/daemon/control_udp.c index 289fd632b..478d777c7 100644 --- a/daemon/control_udp.c +++ b/daemon/control_udp.c @@ -88,7 +88,7 @@ static void control_udp_incoming(struct obj *obj, struct udp_buffer *udp_buf) { log_info_c_string(out[RE_UDP_DQ_CALLID]); if (chrtoupper(out[RE_UDP_UL_CMD][0]) == 'U') - reply = call_update_udp(out, udp_buf->addr, &udp_buf->sin); + reply = call_update_udp(out, udp_buf->addr); else if (chrtoupper(out[RE_UDP_UL_CMD][0]) == 'L') reply = call_lookup_udp(out); else if (chrtoupper(out[RE_UDP_DQ_CMD][0]) == 'D') diff --git a/daemon/janus.c b/daemon/janus.c index 124eefa63..c78750c78 100644 --- a/daemon/janus.c +++ b/daemon/janus.c @@ -232,8 +232,8 @@ static const char *janus_videoroom_create(struct janus_session *session, struct g_free(room->call_id.s); continue; } - if (!call->created_from) - call->created_from = "janus"; + if (!call->created_from.len) + call->created_from = STR_CONST("janus"); t_hash_table_insert(janus_rooms, &room->id, room); rwlock_unlock_w(&call->master_lock); obj_put(call); diff --git a/daemon/redis.c b/daemon/redis.c index d9eb5c754..d351722e4 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -2163,12 +2163,7 @@ static void json_restore_call(struct redis *r, const str *callid, bool foreign) redis_hash_get_time_t(&c->deleted_us, &call, "deleted"); redis_hash_get_time_t(&c->ml_deleted_us, &call, "ml_deleted"); if (!redis_hash_get_str(&id, &call, "created_from")) - c->created_from = call_strdup_str(&id); - if (!redis_hash_get_str(&id, &call, "created_from_addr")) { - err = "failed to parse 'created_from_addr'"; - if (!sockaddr_parse_any_str(&c->created_from_addr, &id)) - goto err8; - } + c->created_from = call_str_cpy(&id); if (!redis_hash_get_int(&i, &call, "block_dtmf")) c->block_dtmf = i; if (!redis_hash_get_a64(&a64, &call, "call_flags")) @@ -2519,13 +2514,13 @@ static str redis_encode_json(ng_parser_ctx_t *ctx, call_t *c, void **to_free) { JSON_SET_SIMPLE("num_tags","%u", t_queue_get_length(&c->monologues)); JSON_SET_SIMPLE("num_maps","%u", t_queue_get_length(&c->endpoint_maps)); JSON_SET_SIMPLE("ml_deleted","%" PRId64, c->ml_deleted_us); - JSON_SET_SIMPLE_CSTR("created_from", c->created_from); - JSON_SET_SIMPLE_CSTR("created_from_addr", sockaddr_print_buf(&c->created_from_addr)); JSON_SET_SIMPLE("redis_hosted_db","%u", c->redis_hosted_db); JSON_SET_SIMPLE_STR("recording_metadata", &c->metadata); JSON_SET_SIMPLE("block_dtmf","%i", c->block_dtmf); JSON_SET_SIMPLE("call_flags", "%" PRIu64, atomic64_get_na(&c->call_flags)); + if (c->created_from.len) + JSON_SET_SIMPLE_STR("created_from", &c->created_from); if (c->recording_meta_prefix.len) JSON_SET_SIMPLE_STR("recording_meta_prefix", &c->recording_meta_prefix); if (c->recording_file.len) diff --git a/include/call.h b/include/call.h index 66e529e3e..c1cefafd5 100644 --- a/include/call.h +++ b/include/call.h @@ -773,9 +773,8 @@ struct call { int64_t deleted_us; int64_t ml_deleted_us; unsigned char tos; - char *created_from; - sockaddr_t created_from_addr; - sockaddr_t xmlrpc_callback; + str created_from; + str xmlrpc_callback; endpoint_t dtmf_log_dest; int redis_hosted_db; diff --git a/include/call_interfaces.h b/include/call_interfaces.h index 9168a5f41..e7e97b499 100644 --- a/include/call_interfaces.h +++ b/include/call_interfaces.h @@ -79,7 +79,7 @@ struct sdp_ng_flags { str set_label; str to_label; str address; - sockaddr_t xmlrpc_callback; + str xmlrpc_callback; endpoint_t dtmf_log_dest; str_case_value_ht codec_set; int ptime, @@ -308,13 +308,12 @@ str call_lookup_tcp(char **); void call_delete_tcp(char **); void calls_status_tcp(struct streambuf_stream *); -str call_update_udp(char **, const char*, const endpoint_t *); +str call_update_udp(char **, const char *); str call_lookup_udp(char **); str call_delete_udp(char **); str call_query_udp(char **); -const char *call_offer_ng(ng_command_ctx_t *, const char*, - const endpoint_t *); +const char *call_offer_ng(ng_command_ctx_t *, const char *); const char *call_answer_ng(ng_command_ctx_t *); const char *call_delete_ng(ng_command_ctx_t *); const char *call_query_ng(ng_command_ctx_t *); @@ -335,8 +334,7 @@ const char *call_stop_media_ng(ng_command_ctx_t *); const char *call_play_dtmf_ng(ng_command_ctx_t *); void ng_call_stats(ng_command_ctx_t *, call_t *call, const str *fromtag, const str *totag, struct call_stats *totals); -const char *call_publish_ng(ng_command_ctx_t *, const char *, - const endpoint_t *); +const char *call_publish_ng(ng_command_ctx_t *, const char *); const char *call_subscribe_request_ng(ng_command_ctx_t *); const char *call_subscribe_answer_ng(ng_command_ctx_t *); const char *call_unsubscribe_ng(ng_command_ctx_t *); diff --git a/t/auto-daemon-tests-redis-json.pl b/t/auto-daemon-tests-redis-json.pl index 6563cd265..334e66e4b 100755 --- a/t/auto-daemon-tests-redis-json.pl +++ b/t/auto-daemon-tests-redis-json.pl @@ -99,7 +99,6 @@ $json_exp = { 'call_flags' => 65536, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -355,7 +354,6 @@ $json_exp = { 'call_flags' => 1376256, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -616,7 +614,6 @@ $json_exp = { 'call_flags' => 65536, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -873,7 +870,6 @@ $json_exp = { 'call_flags' => 1376256, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -1132,7 +1128,6 @@ $json_exp = { 'call_flags' => 1376256, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -1619,7 +1614,6 @@ $json_exp = { 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr//, @@ -1761,7 +1755,6 @@ $json_exp = { 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr//, @@ -1998,7 +1991,6 @@ $json_exp = { 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr//, @@ -2234,7 +2226,6 @@ $json_exp = { 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr//, diff --git a/t/auto-daemon-tests-redis-subscribe.pl b/t/auto-daemon-tests-redis-subscribe.pl index e8571cfbf..ca984f753 100755 --- a/t/auto-daemon-tests-redis-subscribe.pl +++ b/t/auto-daemon-tests-redis-subscribe.pl @@ -193,7 +193,6 @@ $json_exp = { 'call_flags' => 65536, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -465,7 +464,6 @@ my $dict = { 'call_flags' => \'65536', 'created' => \(time() * 1000000), 'created_from' => '224.247.6.0:2', - 'created_from_addr' => '224.247.6.0', 'deleted' => \'0', 'destroyed' => \'0', 'last_signal' => \(time() * 1000000), diff --git a/t/auto-daemon-tests-redis.pl b/t/auto-daemon-tests-redis.pl index ce5d86f48..426798d9e 100755 --- a/t/auto-daemon-tests-redis.pl +++ b/t/auto-daemon-tests-redis.pl @@ -98,7 +98,6 @@ $json_exp = { 'call_flags' => 65536, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -356,7 +355,6 @@ $json_exp = { 'call_flags' => 1376256, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -617,7 +615,6 @@ $json_exp = { 'call_flags' => 1376256, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -878,7 +875,6 @@ $json_exp = { 'call_flags' => 65536, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -1135,7 +1131,6 @@ $json_exp = { 'call_flags' => 1376256, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -1394,7 +1389,6 @@ $json_exp = { 'call_flags' => 1376256, 'created' => qr/^\d+$/, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr/^\d+$/, @@ -1880,7 +1874,6 @@ $json_exp = { 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr//, @@ -2022,7 +2015,6 @@ $json_exp = { 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr//, @@ -2259,7 +2251,6 @@ $json_exp = { 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr//, @@ -2495,7 +2486,6 @@ $json_exp = { 'call_flags' => 0, 'created' => qr//, 'created_from' => qr//, - 'created_from_addr' => qr//, 'deleted' => '0', 'destroyed' => '0', 'last_signal' => qr//,