Browse Source

MT#55283 upgrade xmlrpc_callback to string

Simply take the xmlrpc-callback address as string and don't try to parse
it out. Store it in the call object as string as well.

Obsolete `created_from_addr`. The string form `created_from` is all we
need.

Change `created_from` to `str` as well.

Change-Id: Ib67b57b1d2d474d7b033f56ef8be59f71e44641b
pull/1981/head
Richard Fuchs 5 months ago
parent
commit
b6bd9804a0
13 changed files with 46 additions and 87 deletions
  1. +8
    -8
      daemon/call.c
  2. +18
    -31
      daemon/call_interfaces.c
  3. +1
    -1
      daemon/cdr.c
  4. +5
    -4
      daemon/cli.c
  5. +2
    -2
      daemon/control_ng.c
  6. +1
    -1
      daemon/control_udp.c
  7. +2
    -2
      daemon/janus.c
  8. +3
    -8
      daemon/redis.c
  9. +2
    -3
      include/call.h
  10. +4
    -6
      include/call_interfaces.h
  11. +0
    -9
      t/auto-daemon-tests-redis-json.pl
  12. +0
    -2
      t/auto-daemon-tests-redis-subscribe.pl
  13. +0
    -10
      t/auto-daemon-tests-redis.pl

+ 8
- 8
daemon/call.c View File

@ -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


+ 18
- 31
daemon/call_interfaces.c View File

@ -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);


+ 1
- 1
daemon/cdr.c View File

@ -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);
}


+ 5
- 4
daemon/cli.c View File

@ -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");


+ 2
- 2
daemon/control_ng.c View File

@ -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;


+ 1
- 1
daemon/control_udp.c View File

@ -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')


+ 2
- 2
daemon/janus.c View File

@ -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);


+ 3
- 8
daemon/redis.c View File

@ -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)


+ 2
- 3
include/call.h View File

@ -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;


+ 4
- 6
include/call_interfaces.h View File

@ -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 *);


+ 0
- 9
t/auto-daemon-tests-redis-json.pl View File

@ -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//,


+ 0
- 2
t/auto-daemon-tests-redis-subscribe.pl View File

@ -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),


+ 0
- 10
t/auto-daemon-tests-redis.pl View File

@ -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//,


Loading…
Cancel
Save