|
|
|
@ -2287,33 +2287,41 @@ err:
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define JSON_ADD_STRING(f...) do { \
|
|
|
|
|
int len = snprintf(tmp,sizeof(tmp), f); \
|
|
|
|
|
json_builder_add_string_value_uri_enc(builder, tmp, len); \
|
|
|
|
|
#define JSON_ADD_LIST_STRING(f,...) do { \
|
|
|
|
|
int len = snprintf(tmp,sizeof(tmp), f, __VA_ARGS__); \
|
|
|
|
|
char enc[len * 3 + 1]; \
|
|
|
|
|
str_uri_encode_len(enc, tmp, len); \
|
|
|
|
|
redis_parser->list_add_str_dup(inner, &STR_NC(enc)); \
|
|
|
|
|
} while (0)
|
|
|
|
|
#define JSON_SET_NSTRING(a,b,c,d) do { \
|
|
|
|
|
#define JSON_SET_NSTRING(a,b,c,...) do { \
|
|
|
|
|
int len = snprintf(tmp,sizeof(tmp), c, __VA_ARGS__); \
|
|
|
|
|
char enc[len * 3 + 1]; \
|
|
|
|
|
str_uri_encode_len(enc, tmp, len); \
|
|
|
|
|
snprintf(tmp,sizeof(tmp), a,b); \
|
|
|
|
|
json_builder_set_member_name(builder, tmp); \
|
|
|
|
|
JSON_ADD_STRING(c, d); \
|
|
|
|
|
redis_parser->dict_add_str_dup(inner, tmp, &STR_NC(enc)); \
|
|
|
|
|
} while (0)
|
|
|
|
|
#define JSON_SET_NSTRING_CSTR(a,b,d) JSON_SET_NSTRING_LEN(a, b, strlen(d), d)
|
|
|
|
|
#define JSON_SET_NSTRING_LEN(a,b,l,d) do { \
|
|
|
|
|
char enc[l * 3 + 1]; \
|
|
|
|
|
str_uri_encode_len(enc, d, l); \
|
|
|
|
|
snprintf(tmp,sizeof(tmp), a,b); \
|
|
|
|
|
json_builder_set_member_name(builder, tmp); \
|
|
|
|
|
json_builder_add_string_value_uri_enc(builder, d, l); \
|
|
|
|
|
redis_parser->dict_add_str_dup(inner, tmp, &STR_NC(enc)); \
|
|
|
|
|
} while (0)
|
|
|
|
|
#define JSON_SET_SIMPLE(a,c,d) do { \
|
|
|
|
|
json_builder_set_member_name(builder, a); \
|
|
|
|
|
JSON_ADD_STRING(c, d); \
|
|
|
|
|
#define JSON_SET_SIMPLE(a,c,...) do { \
|
|
|
|
|
int len = snprintf(tmp,sizeof(tmp), c, __VA_ARGS__); \
|
|
|
|
|
char enc[len * 3 + 1]; \
|
|
|
|
|
str_uri_encode_len(enc, tmp, len); \
|
|
|
|
|
redis_parser->dict_add_str_dup(inner, a, &STR_NC(enc)); \
|
|
|
|
|
} while (0)
|
|
|
|
|
#define JSON_SET_SIMPLE_LEN(a,l,d) do { \
|
|
|
|
|
json_builder_set_member_name(builder, a); \
|
|
|
|
|
json_builder_add_string_value_uri_enc(builder, d, l); \
|
|
|
|
|
char enc[l * 3 + 1]; \
|
|
|
|
|
str_uri_encode_len(enc, d, l); \
|
|
|
|
|
redis_parser->dict_add_str_dup(inner, a, &STR_NC(enc)); \
|
|
|
|
|
} while (0)
|
|
|
|
|
#define JSON_SET_SIMPLE_CSTR(a,d) JSON_SET_SIMPLE_LEN(a, (d) ? strlen(d) : 0, (d) ? : "")
|
|
|
|
|
#define JSON_SET_SIMPLE_STR(a,d) JSON_SET_SIMPLE_LEN(a, (d)->len, (d)->s)
|
|
|
|
|
#define JSON_SET_SIMPLE_CSTR(a,d) redis_parser->dict_add_str_dup(inner, a, &STR(d))
|
|
|
|
|
#define JSON_SET_SIMPLE_STR(a,d) redis_parser->dict_add_str_dup(inner, a, d)
|
|
|
|
|
|
|
|
|
|
static void json_update_crypto_params(JsonBuilder *builder, const char *key, struct crypto_params *p) {
|
|
|
|
|
static void json_update_crypto_params(parser_arg inner, const char *key, struct crypto_params *p) {
|
|
|
|
|
char tmp[2048];
|
|
|
|
|
|
|
|
|
|
if (!p->crypto_suite)
|
|
|
|
@ -2331,7 +2339,7 @@ static void json_update_crypto_params(JsonBuilder *builder, const char *key, str
|
|
|
|
|
JSON_SET_NSTRING_LEN("%s-mki", key, p->mki_len, (char *) p->mki);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int json_update_sdes_params(JsonBuilder *builder, const char *pref,
|
|
|
|
|
static int json_update_sdes_params(parser_arg inner, const char *pref,
|
|
|
|
|
unsigned int unique_id,
|
|
|
|
|
const char *k, sdes_q *q)
|
|
|
|
|
{
|
|
|
|
@ -2348,7 +2356,7 @@ static int json_update_sdes_params(JsonBuilder *builder, const char *pref,
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
JSON_SET_NSTRING("%s_tag", key, "%u", cps->tag);
|
|
|
|
|
json_update_crypto_params(builder, key, p);
|
|
|
|
|
json_update_crypto_params(inner, key, p);
|
|
|
|
|
|
|
|
|
|
snprintf(keybuf, sizeof(keybuf), "%s-%u", k, iter++);
|
|
|
|
|
key = keybuf;
|
|
|
|
@ -2357,7 +2365,7 @@ static int json_update_sdes_params(JsonBuilder *builder, const char *pref,
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void json_update_dtls_fingerprint(JsonBuilder *builder, const char *pref,
|
|
|
|
|
static void json_update_dtls_fingerprint(parser_arg inner, const char *pref,
|
|
|
|
|
unsigned int unique_id,
|
|
|
|
|
const struct dtls_fingerprint *f)
|
|
|
|
|
{
|
|
|
|
@ -2372,17 +2380,14 @@ static void json_update_dtls_fingerprint(JsonBuilder *builder, const char *pref,
|
|
|
|
|
* encodes the few (k,v) pairs for one call under one json structure
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
char* redis_encode_json(call_t *c) {
|
|
|
|
|
|
|
|
|
|
JsonBuilder *builder = json_builder_new ();
|
|
|
|
|
static str redis_encode_json(ng_parser_ctx_t *ctx, call_t *c) {
|
|
|
|
|
|
|
|
|
|
char tmp[2048];
|
|
|
|
|
|
|
|
|
|
json_builder_begin_object(builder);
|
|
|
|
|
{
|
|
|
|
|
json_builder_set_member_name(builder, "json");
|
|
|
|
|
parser_arg root = redis_parser->dict(ctx);
|
|
|
|
|
|
|
|
|
|
json_builder_begin_object(builder);
|
|
|
|
|
{
|
|
|
|
|
parser_arg inner = redis_parser->dict_add_dict(root, "json");
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
JSON_SET_SIMPLE("created","%lli", timeval_us(&c->created));
|
|
|
|
@ -2415,15 +2420,11 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
JSON_SET_SIMPLE_STR("recording_random_tag", &c->recording_random_tag);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
json_builder_end_object(builder);
|
|
|
|
|
|
|
|
|
|
for (__auto_type l = c->stream_fds.head; l; l = l->next) {
|
|
|
|
|
stream_fd *sfd = l->data;
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "sfd-%u", sfd->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
|
|
|
|
|
json_builder_begin_object(builder);
|
|
|
|
|
inner = redis_parser->dict_add_dict_dup(root, tmp);
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
JSON_SET_SIMPLE_CSTR("pref_family", sfd->local_intf->logical->preferred_family->rfc_name);
|
|
|
|
@ -2433,10 +2434,8 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
JSON_SET_SIMPLE("local_intf_uid","%u", sfd->local_intf->unique_id);
|
|
|
|
|
JSON_SET_SIMPLE("stream","%u", sfd->stream->unique_id);
|
|
|
|
|
|
|
|
|
|
json_update_crypto_params(builder, "", &sfd->crypto.params);
|
|
|
|
|
|
|
|
|
|
json_update_crypto_params(inner, "", &sfd->crypto.params);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_object(builder);
|
|
|
|
|
|
|
|
|
|
} // --- for
|
|
|
|
|
|
|
|
|
@ -2447,9 +2446,7 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
LOCK(&ps->out_lock);
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "stream-%u", ps->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
|
|
|
|
|
json_builder_begin_object(builder);
|
|
|
|
|
inner = redis_parser->dict_add_dict_dup(root, tmp);
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
JSON_SET_SIMPLE("media","%u",ps->media->unique_id);
|
|
|
|
@ -2464,11 +2461,9 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
JSON_SET_SIMPLE("stats-bytes","%" PRIu64, atomic64_get_na(&ps->stats_in->bytes));
|
|
|
|
|
JSON_SET_SIMPLE("stats-errors","%" PRIu64, atomic64_get_na(&ps->stats_in->errors));
|
|
|
|
|
|
|
|
|
|
json_update_crypto_params(builder, "", &ps->crypto.params);
|
|
|
|
|
json_update_crypto_params(inner, "", &ps->crypto.params);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
json_builder_end_object(builder);
|
|
|
|
|
|
|
|
|
|
// stream_sfds was here before
|
|
|
|
|
|
|
|
|
|
} // --- for streams.head
|
|
|
|
@ -2482,33 +2477,27 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
LOCK(&ps->out_lock);
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "stream_sfds-%u", ps->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (__auto_type k = ps->sfds.head; k; k = k->next) {
|
|
|
|
|
stream_fd *sfd = k->data;
|
|
|
|
|
JSON_ADD_STRING("%u", sfd->unique_id);
|
|
|
|
|
JSON_ADD_LIST_STRING("%u", sfd->unique_id);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "rtp_sinks-%u", ps->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (__auto_type k = ps->rtp_sinks.head; k; k = k->next) {
|
|
|
|
|
struct sink_handler *sh = k->data;
|
|
|
|
|
struct packet_stream *sink = sh->sink;
|
|
|
|
|
JSON_ADD_STRING("%u", sink->unique_id);
|
|
|
|
|
JSON_ADD_LIST_STRING("%u", sink->unique_id);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "rtcp_sinks-%u", ps->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (__auto_type k = ps->rtcp_sinks.head; k; k = k->next) {
|
|
|
|
|
struct sink_handler *sh = k->data;
|
|
|
|
|
struct packet_stream *sink = sh->sink;
|
|
|
|
|
JSON_ADD_STRING("%u", sink->unique_id);
|
|
|
|
|
JSON_ADD_LIST_STRING("%u", sink->unique_id);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -2516,9 +2505,8 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
struct call_monologue *ml = l->data;
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "tag-%u", ml->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
inner = redis_parser->dict_add_dict_dup(root, tmp);
|
|
|
|
|
|
|
|
|
|
json_builder_begin_object(builder);
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
JSON_SET_SIMPLE("created", "%llu", (long long unsigned) ml->created);
|
|
|
|
@ -2567,7 +2555,6 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
if (ml->sdp_session_rs >= 0)
|
|
|
|
|
JSON_SET_SIMPLE("sdp_session_rs", "%i", ml->sdp_session_rs);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_object(builder);
|
|
|
|
|
|
|
|
|
|
// other_tags and medias- was here before
|
|
|
|
|
|
|
|
|
@ -2579,34 +2566,29 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
// XXX these should all go into the above loop
|
|
|
|
|
GList *k = g_hash_table_get_values(ml->associated_tags);
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "associated_tags-%u", ml->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (GList *m = k; m; m = m->next) {
|
|
|
|
|
struct call_monologue *ml2 = m->data;
|
|
|
|
|
JSON_ADD_STRING("%u", ml2->unique_id);
|
|
|
|
|
JSON_ADD_LIST_STRING("%u", ml2->unique_id);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
|
|
|
|
|
g_list_free(k);
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "medias-%u", ml->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array (builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (unsigned int j = 0; j < ml->medias->len; j++) {
|
|
|
|
|
struct call_media *media = ml->medias->pdata[j];
|
|
|
|
|
JSON_ADD_STRING("%u", media ? media->unique_id : -1);
|
|
|
|
|
JSON_ADD_LIST_STRING("%u", media ? media->unique_id : -1);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
|
|
|
|
|
// SSRC table dump
|
|
|
|
|
rwlock_lock_r(&ml->ssrc_hash->lock);
|
|
|
|
|
k = g_hash_table_get_values(ml->ssrc_hash->ht);
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "ssrc_table-%u", ml->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
parser_arg list = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (GList *m = k; m; m = m->next) {
|
|
|
|
|
struct ssrc_entry_call *se = m->data;
|
|
|
|
|
json_builder_begin_object (builder);
|
|
|
|
|
inner = redis_parser->list_add_dict(list);
|
|
|
|
|
|
|
|
|
|
JSON_SET_SIMPLE("ssrc", "%" PRIu32, se->h.ssrc);
|
|
|
|
|
// XXX use function for in/out
|
|
|
|
@ -2617,10 +2599,7 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
JSON_SET_SIMPLE("out_srtcp_index", "%u", atomic_get_na(&se->output_ctx.stats->rtcp_seq));
|
|
|
|
|
JSON_SET_SIMPLE("out_payload_type", "%i", se->output_ctx.tracker.most[0]);
|
|
|
|
|
// XXX add rest of info
|
|
|
|
|
|
|
|
|
|
json_builder_end_object(builder);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
|
|
|
|
|
g_list_free(k);
|
|
|
|
|
rwlock_unlock_r(&ml->ssrc_hash->lock);
|
|
|
|
@ -2634,24 +2613,21 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
|
|
|
|
|
/* store media subscriptions */
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "media-subscriptions-%u", media->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
|
|
|
|
|
for (__auto_type sub = media->media_subscriptions.head; sub; sub = sub->next)
|
|
|
|
|
{
|
|
|
|
|
struct media_subscription * ms = sub->data;
|
|
|
|
|
JSON_ADD_STRING("%u/%u/%u/%u",
|
|
|
|
|
JSON_ADD_LIST_STRING("%u/%u/%u/%u",
|
|
|
|
|
ms->media->unique_id,
|
|
|
|
|
ms->attrs.offer_answer,
|
|
|
|
|
ms->attrs.rtcp_only,
|
|
|
|
|
ms->attrs.egress);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "media-%u", media->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
inner = redis_parser->dict_add_dict_dup(root, tmp);
|
|
|
|
|
|
|
|
|
|
json_builder_begin_object(builder);
|
|
|
|
|
{
|
|
|
|
|
JSON_SET_SIMPLE("tag","%u", media->monologue->unique_id);
|
|
|
|
|
JSON_SET_SIMPLE("index","%u", media->index);
|
|
|
|
@ -2674,14 +2650,12 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
if (media->bandwidth_rs >= 0)
|
|
|
|
|
JSON_SET_SIMPLE("bandwidth_rs","%i", media->bandwidth_rs);
|
|
|
|
|
|
|
|
|
|
json_update_sdes_params(builder, "media", media->unique_id, "sdes_in",
|
|
|
|
|
json_update_sdes_params(inner, "media", media->unique_id, "sdes_in",
|
|
|
|
|
&media->sdes_in);
|
|
|
|
|
json_update_sdes_params(builder, "media", media->unique_id, "sdes_out",
|
|
|
|
|
json_update_sdes_params(inner, "media", media->unique_id, "sdes_out",
|
|
|
|
|
&media->sdes_out);
|
|
|
|
|
json_update_dtls_fingerprint(builder, "media", media->unique_id, &media->fingerprint);
|
|
|
|
|
json_update_dtls_fingerprint(inner, "media", media->unique_id, &media->fingerprint);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_object(builder);
|
|
|
|
|
|
|
|
|
|
} // --- for medias.head
|
|
|
|
|
|
|
|
|
|
// -- we do it again here since the jsonbuilder is linear straight forward
|
|
|
|
@ -2690,43 +2664,36 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
struct call_media *media = l->data;
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "streams-%u", media->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (__auto_type m = media->streams.head; m; m = m->next) {
|
|
|
|
|
struct packet_stream *ps = m->data;
|
|
|
|
|
JSON_ADD_STRING("%u", ps->unique_id);
|
|
|
|
|
JSON_ADD_LIST_STRING("%u", ps->unique_id);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "maps-%u", media->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (__auto_type m = media->endpoint_maps.head; m; m = m->next) {
|
|
|
|
|
struct endpoint_map *ep = m->data;
|
|
|
|
|
JSON_ADD_STRING("%u", ep->unique_id);
|
|
|
|
|
JSON_ADD_LIST_STRING("%u", ep->unique_id);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "payload_types-%u", media->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (__auto_type m = media->codecs.codec_prefs.head; m; m = m->next) {
|
|
|
|
|
rtp_payload_type *pt = m->data;
|
|
|
|
|
JSON_ADD_STRING("%u/" STR_FORMAT "/%u/" STR_FORMAT "/" STR_FORMAT "/%i/%i",
|
|
|
|
|
JSON_ADD_LIST_STRING("%u/" STR_FORMAT "/%u/" STR_FORMAT "/" STR_FORMAT "/%i/%i",
|
|
|
|
|
pt->payload_type, STR_FMT(&pt->encoding),
|
|
|
|
|
pt->clock_rate, STR_FMT(&pt->encoding_parameters),
|
|
|
|
|
STR_FMT(&pt->format_parameters), pt->bitrate, pt->ptime);
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (__auto_type l = c->endpoint_maps.head; l; l = l->next) {
|
|
|
|
|
struct endpoint_map *ep = l->data;
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "map-%u", ep->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
inner = redis_parser->dict_add_dict_dup(root, tmp);
|
|
|
|
|
|
|
|
|
|
json_builder_begin_object(builder);
|
|
|
|
|
{
|
|
|
|
|
JSON_SET_SIMPLE("wildcard","%i", ep->wildcard);
|
|
|
|
|
JSON_SET_SIMPLE("num_ports","%u", ep->num_ports);
|
|
|
|
@ -2735,7 +2702,6 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
JSON_SET_SIMPLE_CSTR("endpoint", endpoint_print_buf(&ep->endpoint));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_object(builder);
|
|
|
|
|
|
|
|
|
|
} // --- for c->endpoint_maps.head
|
|
|
|
|
|
|
|
|
@ -2744,24 +2710,22 @@ char* redis_encode_json(call_t *c) {
|
|
|
|
|
struct endpoint_map *ep = l->data;
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof(tmp), "map_sfds-%u", ep->unique_id);
|
|
|
|
|
json_builder_set_member_name(builder, tmp);
|
|
|
|
|
json_builder_begin_array(builder);
|
|
|
|
|
inner = redis_parser->dict_add_list_dup(root, tmp);
|
|
|
|
|
for (__auto_type m = ep->intf_sfds.head; m; m = m->next) {
|
|
|
|
|
struct sfd_intf_list *il = m->data;
|
|
|
|
|
JSON_ADD_STRING("loc-%u", il->local_intf->unique_id);
|
|
|
|
|
JSON_ADD_LIST_STRING("loc-%u", il->local_intf->unique_id);
|
|
|
|
|
for (__auto_type n = il->list.head; n; n = n->next) {
|
|
|
|
|
stream_fd *sfd = n->data;
|
|
|
|
|
JSON_ADD_STRING("%u", sfd->unique_id);
|
|
|
|
|
JSON_ADD_LIST_STRING("%u", sfd->unique_id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_array(builder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
json_builder_end_object(builder);
|
|
|
|
|
|
|
|
|
|
return glib_json_print(builder);
|
|
|
|
|
|
|
|
|
|
str ret;
|
|
|
|
|
redis_parser->collapse(ctx, root, &ret);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -2790,19 +2754,22 @@ void redis_update_onekey(call_t *c, struct redis *r) {
|
|
|
|
|
goto err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char* result = redis_encode_json(c);
|
|
|
|
|
if (!result)
|
|
|
|
|
ng_parser_ctx_t ctx = {.parser = redis_parser};
|
|
|
|
|
ctx.ngbuf = ng_buffer_new(NULL);
|
|
|
|
|
|
|
|
|
|
str result = redis_encode_json(&ctx, c);
|
|
|
|
|
if (!result.len)
|
|
|
|
|
goto err;
|
|
|
|
|
|
|
|
|
|
redis_pipe(r, "SET "PB" %s", PBSTR(&c->callid), result);
|
|
|
|
|
redis_pipe(r, "SET " PB " " PB, PBSTR(&c->callid), PBSTR(&result));
|
|
|
|
|
redis_pipe(r, "EXPIRE "PB" %i", PBSTR(&c->callid), redis_expires_s);
|
|
|
|
|
|
|
|
|
|
redis_consume(r);
|
|
|
|
|
|
|
|
|
|
if (result)
|
|
|
|
|
free(result);
|
|
|
|
|
rwlock_unlock_r(&c->master_lock);
|
|
|
|
|
|
|
|
|
|
obj_put(ctx.ngbuf);
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
err:
|
|
|
|
|
if (r->ctx && r->ctx->err)
|
|
|
|
|