From 9ebd06f40fb01d1221db25f4f7ca8b197e3c3464 Mon Sep 17 00:00:00 2001 From: Frederic-Philippe Metz Date: Fri, 13 Jan 2017 09:58:03 +0100 Subject: [PATCH] Some fixes for pull request #316 --- daemon/Makefile | 2 - daemon/main.c | 7 +- daemon/redis.c | 438 +++++++++++------------------------------------- 3 files changed, 105 insertions(+), 342 deletions(-) diff --git a/daemon/Makefile b/daemon/Makefile index c3f6dcf72..9843099a7 100644 --- a/daemon/Makefile +++ b/daemon/Makefile @@ -27,12 +27,10 @@ LDFLAGS+= `pkg-config --libs libpcre` LDFLAGS+= `pkg-config --libs libcrypto` LDFLAGS+= `pkg-config --libs openssl` LDFLAGS+= `pkg-config --libs libevent_pthreads` -LDFLAGS+= `pkg-config --libs` LDFLAGS+= -lpcap LDFLAGS+= `pcre-config --libs` LDFLAGS+= `xmlrpc-c-config client --libs` LDFLAGS+= -lhiredis -LDFLAGS+= `pkg-config --libs libcurl` LDFLAGS+= `pkg-config --libs json-glib-1.0` include ../lib/lib.Makefile diff --git a/daemon/main.c b/daemon/main.c index 5b0e3181d..586310f43 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -299,7 +299,7 @@ static void options(int *argc, char ***argv) { { "redis-write",'w', 0, G_OPTION_ARG_STRING, &redisps_write, "Connect to Redis write database", "[PW@]IP:PORT/INT" }, { "redis-num-threads", 0, 0, G_OPTION_ARG_INT, &redis_num_threads, "Number of Redis restore threads", "INT" }, { "redis-expires", 0, 0, G_OPTION_ARG_INT, &redis_expires, "Expire time in seconds for redis keys", "INT" }, - { "redis-multikey", 0, 0, G_OPTION_ARG_INT, &redis_multikey, "Use multiple redis keys for storing the call (old behaviour) DEPRECATED", "INT" }, + { "redis-multikey", 0, 0, G_OPTION_ARG_NONE, &redis_multikey, "Use multiple redis keys for storing the call (old behaviour) DEPRECATED", "INT" }, { "no-redis-required", 'q', 0, G_OPTION_ARG_NONE, &no_redis_required, "Start no matter of redis connection state", NULL }, { "b2b-url", 'b', 0, G_OPTION_ARG_STRING, &b2b_url, "XMLRPC URL of B2B UA" , "STRING" }, { "log-facility",0, 0, G_OPTION_ARG_STRING, &log_facility_s, "Syslog facility to use for logging", "daemon|local0|...|local7"}, @@ -504,6 +504,11 @@ static void init_everything() { #if !GLIB_CHECK_VERSION(2,32,0) g_thread_init(NULL); #endif + +#if !(GLIB_CHECK_VERSION(2,36,0)) + g_type_init(); +#endif + if (!_log_stderr) openlog("rtpengine", LOG_PID | LOG_NDELAY, _log_facility); signals(); diff --git a/daemon/redis.c b/daemon/redis.c index 7823e9154..72b89bfc0 100644 --- a/daemon/redis.c +++ b/daemon/redis.c @@ -24,6 +24,7 @@ #include "dtls.h" #include "recording.h" #include "rtplib.h" +#include "str.h" #include #include @@ -321,8 +322,12 @@ void on_redis_notification(redisAsyncContext *actx, void *reply, void *privdata) rr->element[2]->len = strlen(rr->element[2]->str); rlog(LOG_DEBUG,"Redis-Notifier:%s:%d: Processing call with callid: %s\n", rr->element[3]->str, r->db, rr->element[2]->str); - // strip off json- prefix from callid - str_init_len(&callid,rr->element[2]->str+strlen("json-"),strlen(rr->element[2]->str)-strlen("json-")); + // strip off prefix from callid + if (cm->conf.redis_multikey) { + str_init_len(&callid,rr->element[2]->str+strlen("notifier-"),strlen(rr->element[2]->str)-strlen("notifier-")); + } else { + str_init_len(&callid,rr->element[2]->str+strlen("json-"),strlen(rr->element[2]->str)-strlen("json-")); + } if (cm->conf.redis_multikey && strncmp(rr->element[3]->str,"sadd",4)==0) redis_restore_call(r, cm, rr->element[2], CT_FOREIGN_CALL); @@ -773,9 +778,8 @@ static void redis_delete_call(struct call *c, struct redis *r) { } // stolen from libhiredis -extern redisReply *createReplyObject(int type); /* Create a reply object */ -inline redisReply *createReplyObject(int type) { +INLINE redisReply *createReplyObject(int type) { redisReply *r = calloc(1,sizeof(*r)); if (r == NULL) @@ -785,25 +789,24 @@ inline redisReply *createReplyObject(int type) { return r; } -static void free_func(void* p){ - free(p); -} - static int json_get_hash(struct redis_hash *out, struct call* c, const char *key, const redisReply *which, unsigned int id) { - char key_concatted[256]; - memset(key_concatted,0,256); + static unsigned int MAXKEYLENGTH = 512; + char key_concatted[MAXKEYLENGTH]; + int rc=0; if (!c) goto err; if (id == -1) { - sprintf(key_concatted, "%s-%s",key,which->str); + rc = snprintf(key_concatted, MAXKEYLENGTH, "%s-%s",key,which->str); } else { - sprintf(key_concatted, "%s-%s-%u",key,which->str,id); + rc = snprintf(key_concatted, MAXKEYLENGTH, "%s-%s-%u",key,which->str,id); } + if (rc>=MAXKEYLENGTH) + rlog(LOG_ERROR,"Json key too long."); if (!json_reader_read_member (c->root_reader, key_concatted)) { @@ -811,7 +814,7 @@ static int json_get_hash(struct redis_hash *out, struct call* c, goto err; } - out->ht = g_hash_table_new_full(g_str_hash, g_str_equal, free_func, free_func); + out->ht = g_hash_table_new_full(g_str_hash, g_str_equal, free, free); if (!out->ht) goto err; out->rr = 0; @@ -913,9 +916,9 @@ static void redis_destroy_list(struct redis_list *rl) { } static void json_destroy_hash(struct redis_hash *rh) { - g_hash_table_destroy(rh->ht); } + static void json_destroy_list(struct redis_list *rl) { unsigned int i; @@ -1043,9 +1046,6 @@ static int json_build_list_cb(GQueue *q, struct call *c, const char *key, const for (int jidx=0; jidx < json_reader_count_elements(c->root_reader); ++jidx) { if (!json_reader_read_element(c->root_reader,jidx)) rlog(LOG_ERROR,"Element in array not found."); - // if (json_reader_get_type() != G_TYPE_STRING) { - // return -1; - // } const char* value = json_reader_get_string_value(c->root_reader); if (!value) rlog(LOG_ERROR,"String in json not found."); @@ -1685,9 +1685,7 @@ static void json_restore_call(struct redis *r, struct callmaster *m, redisReply str s ; const char *err = 0; int i; -#if !(GLIB_CHECK_VERSION(2,36,0)) - g_type_init(); -#endif + JsonReader *root_reader =0; JsonParser *parser =0; char orig_json_callid[512]; memset(orig_json_callid,0,512); @@ -2057,63 +2055,44 @@ err: return ret; } +#define JSON_SET_NSTRING(a,b,c,d) do { \ + sprintf(tmp,a,b); \ + json_builder_set_member_name (builder, tmp); \ + ZERO(tmp); \ + snprintf(tmp,sizeof(d), c,d); \ + json_builder_add_string_value (builder, tmp); \ + ZERO(tmp); \ + } while (0) + +#define JSON_SET_STRING(a,b,c,d) do { \ + sprintf(tmp,a,b); \ + json_builder_set_member_name (builder, tmp); \ + ZERO(tmp); \ + sprintf(tmp,c,d); \ + json_builder_add_string_value (builder, tmp); \ + ZERO(tmp); \ + } while (0) + static int json_update_crypto_params(JsonBuilder *builder, const char *pref, const str *callid, unsigned int unique_id, const char *key, const struct crypto_params *p) { - char tmp[2048]; ZERO(tmp); + char tmp[2048]; if (!p->crypto_suite) return -1; - sprintf(tmp,"%s-crypto_suite",key); - json_builder_set_member_name (builder, tmp); - ZERO(tmp); - json_builder_add_string_value (builder, p->crypto_suite->name); - - sprintf(tmp,"%s-master_key",key); - json_builder_set_member_name (builder, tmp); - ZERO(tmp); - snprintf(tmp,sizeof(p->master_key), "%s",p->master_key); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - sprintf(tmp,"%s-master_salt",key); - json_builder_set_member_name (builder, tmp); - ZERO(tmp); - snprintf(tmp,sizeof(p->master_salt), "%s",p->master_salt); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - sprintf(tmp,"%s-unenc-srtp",key); - json_builder_set_member_name (builder, tmp); - ZERO(tmp); - sprintf(tmp,"%i",p->session_params.unencrypted_srtp); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - sprintf(tmp,"%s-unenc-srtcp",key); - json_builder_set_member_name (builder, tmp); - ZERO(tmp); - sprintf(tmp,"%i",p->session_params.unencrypted_srtcp); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - sprintf(tmp,"%s-unauth-srtp",key); - json_builder_set_member_name (builder, tmp); - ZERO(tmp); - sprintf(tmp,"%i",p->session_params.unauthenticated_srtp); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_NSTRING("%s-crypto_suite",key,"%s",p->crypto_suite->name); + JSON_SET_NSTRING("%s-master_key",key,"%s",p->master_key); + JSON_SET_NSTRING("%s-master_salt",key,"%s",p->master_salt); + + JSON_SET_STRING("%s-unenc-srtp",key,"%i",p->session_params.unencrypted_srtp); + JSON_SET_STRING("%s-unenc-srtcp",key,"%i",p->session_params.unencrypted_srtcp); + JSON_SET_STRING("%s-unauth-srtp",key,"%i",p->session_params.unauthenticated_srtp); if (p->mki) { - sprintf(tmp,"%s-mki",key); - json_builder_set_member_name (builder, tmp); - ZERO(tmp); - snprintf(tmp,p->mki_len, "%s",p->mki); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_NSTRING("%s-mki",key,"%s",p->mki); } return 0; @@ -2152,15 +2131,9 @@ static void json_update_crypto_context(JsonBuilder *builder, const char *pref, c if (json_update_crypto_params(builder, pref, callid, unique_id, "", &c->params)) return; - json_builder_set_member_name (builder, "last_index"); - sprintf(tmp,"%lu",c->last_index); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","last_index","%lu",c->last_index); + JSON_SET_STRING("%s","ssrc","%u",(unsigned) c->ssrc); - json_builder_set_member_name (builder, "ssrc"); - sprintf(tmp,"%u",(unsigned) c->ssrc); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); } static void redis_update_crypto_context(struct redis *r, const char *pref, const str *callid, @@ -2203,10 +2176,7 @@ static void json_update_dtls_fingerprint(JsonBuilder *builder, const char *pref, json_builder_set_member_name (builder, "hash_func"); json_builder_add_string_value (builder, f->hash_func->name); - json_builder_set_member_name (builder, "fingerprint"); - snprintf(tmp,sizeof(f->digest), "%s",f->digest); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","fingerprint","%s",f->digest); } static void redis_update_dtls_fingerprint(struct redis *r, const char *pref, const str *callid, @@ -2234,86 +2204,32 @@ char* redis_encode_json(struct call *c) { struct packet_stream *ps; struct intf_list *il; struct call_monologue *ml, *ml2; -#if !(GLIB_CHECK_VERSION(2,36,0)) - g_type_init(); -#endif JsonBuilder *builder = json_builder_new (); char tmp[2048]; ZERO(tmp); json_builder_begin_object (builder); { - sprintf(tmp,"json-%s",STRSTR(&c->callid)); + sprintf(tmp,"json-" STR_FORMAT,STR(&c->callid)); json_builder_set_member_name (builder, tmp); ZERO(tmp); json_builder_begin_object (builder); { - json_builder_set_member_name (builder, "created"); - sprintf(tmp,"%ld",(long int) c->created); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "last_signal"); - sprintf(tmp,"%ld",(long int) c->last_signal); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "tos"); - sprintf(tmp,"%u",(int) c->tos); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "deleted"); - sprintf(tmp,"%ld",(long int) c->deleted); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "num_sfds"); - sprintf(tmp,"%u",g_queue_get_length(&c->stream_fds)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "num_streams"); - sprintf(tmp,"%u", g_queue_get_length(&c->streams)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "num_medias"); - sprintf(tmp,"%u", g_queue_get_length(&c->medias)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "num_tags"); - sprintf(tmp,"%u", g_queue_get_length(&c->monologues)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "num_maps"); - sprintf(tmp,"%u", g_queue_get_length(&c->endpoint_maps)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "ml_deleted"); - sprintf(tmp,"%ld", (long int) c->ml_deleted); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "created_from"); - sprintf(tmp,"%s",c->created_from); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "created_from_addr"); - sprintf(tmp,"%s",sockaddr_print_buf(&c->created_from_addr)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "redis_hosted_db"); - sprintf(tmp,"%u",c->redis_hosted_db); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","created","%ld",(long int) c->created); + JSON_SET_STRING("%s","last_signal","%ld",(long int) c->last_signal); + JSON_SET_STRING("%s","tos","%u",(int) c->tos); + JSON_SET_STRING("%s","deleted","%ld",(long int) c->deleted); + JSON_SET_STRING("%s","num_sfds","%u",g_queue_get_length(&c->stream_fds)); + JSON_SET_STRING("%s","num_streams","%u",g_queue_get_length(&c->streams)); + JSON_SET_STRING("%s","num_medias","%u",g_queue_get_length(&c->medias)); + JSON_SET_STRING("%s","num_tags","%u",g_queue_get_length(&c->monologues)); + JSON_SET_STRING("%s","num_maps","%u",g_queue_get_length(&c->endpoint_maps)); + JSON_SET_STRING("%s","ml_deleted","%ld",(long int) c->ml_deleted); + JSON_SET_STRING("%s","created_from","%s",c->created_from); + JSON_SET_STRING("%s","created_from_addr","%s",sockaddr_print_buf(&c->created_from_addr)); + JSON_SET_STRING("%s","redis_hosted_db","%u",c->redis_hosted_db); } @@ -2329,30 +2245,11 @@ char* redis_encode_json(struct call *c) { json_builder_begin_object (builder); { - json_builder_set_member_name (builder, "pref_family"); - sprintf(tmp,"%s",sfd->local_intf->logical->preferred_family->rfc_name); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "localport"); - sprintf(tmp,"%u",sfd->socket.local.port); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "logical_intf"); - sprintf(tmp,"%s",STRSTR(&sfd->local_intf->logical->name)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "local_intf_uid"); - sprintf(tmp,"%u",sfd->local_intf->unique_id); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "stream"); - sprintf(tmp,"%u",sfd->stream->unique_id); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","pref_family","%s",sfd->local_intf->logical->preferred_family->rfc_name); + JSON_SET_STRING("%s","localport","%u",sfd->socket.local.port); + JSON_SET_STRING("%s","logical_intf","%s",STRSTR(&sfd->local_intf->logical->name)); + JSON_SET_STRING("%s","local_intf_uid","%u",sfd->local_intf->unique_id); + JSON_SET_STRING("%s","stream","%u",sfd->stream->unique_id); json_update_crypto_context(builder, "sfd", &c->callid, sfd->unique_id, &sfd->crypto); @@ -2374,81 +2271,19 @@ char* redis_encode_json(struct call *c) { json_builder_begin_object (builder); { - json_builder_set_member_name (builder, "media"); - sprintf(tmp,"%u",ps->media->unique_id); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "sfd"); - sprintf(tmp,"%u",ps->selected_sfd ? ps->selected_sfd->unique_id : -1); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "rtp_sink"); - sprintf(tmp,"%u",ps->rtp_sink ? ps->rtp_sink->unique_id : -1); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "rtcp_sink"); - sprintf(tmp,"%u",ps->rtcp_sink ? ps->rtcp_sink->unique_id : -1); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "rtcp_sibling"); - sprintf(tmp,"%u",ps->rtcp_sibling ? ps->rtcp_sibling->unique_id : -1); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "last_packet"); - sprintf(tmp,UINT64F,atomic64_get(&ps->last_packet)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "ps_flags"); - sprintf(tmp,"%u",ps->ps_flags); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "component"); - sprintf(tmp,"%u",ps->component); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - // this is redis_update_endpoint(r, "stream", &c->callid, ps->unique_id, "endpoint", &ps->endpoint); - json_builder_set_member_name (builder, "endpoint"); - sprintf(tmp,"%s",endpoint_print_buf(&ps->endpoint)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - // next is: - // redis_update_endpoint(r, "stream", &c->callid, ps->unique_id, "advertised_endpoint", - // &ps->advertised_endpoint); - json_builder_set_member_name (builder, "advertised_endpoint"); - sprintf(tmp,"%s",endpoint_print_buf(&ps->advertised_endpoint)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - // next is: - // redis_pipe(r, "HMSET %s-"PB"-%u %s-packets "UINT64F" %s-bytes "UINT64F" %s-errors "UINT64F"", - // pref, STR(callid), unique_id, - // key, atomic64_get(&s->packets), key, atomic64_get(&s->bytes), - // key, atomic64_get(&s->errors)); - // redis_update_stats(r, "stream", &c->callid, ps->unique_id, "stats", &ps->stats); - - json_builder_set_member_name (builder, "stats-packets"); - sprintf(tmp,"%ld",atomic64_get(&ps->stats.packets)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "stats-bytes"); - sprintf(tmp,"%ld",atomic64_get(&ps->stats.bytes)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "stats-errors"); - sprintf(tmp,"%ld",atomic64_get(&ps->stats.errors)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","media","%u",ps->media->unique_id); + JSON_SET_STRING("%s","sfd","%u",ps->selected_sfd ? ps->selected_sfd->unique_id : -1); + JSON_SET_STRING("%s","rtp_sink","%u",ps->rtp_sink ? ps->rtp_sink->unique_id : -1); + JSON_SET_STRING("%s","rtcp_sink","%u",ps->rtcp_sink ? ps->rtcp_sink->unique_id : -1); + JSON_SET_STRING("%s","rtcp_sibling","%u",ps->rtcp_sibling ? ps->rtcp_sibling->unique_id : -1); + JSON_SET_STRING("%s","last_packet",UINT64F,atomic64_get(&ps->last_packet)); + JSON_SET_STRING("%s","ps_flags","%u",ps->ps_flags); + JSON_SET_STRING("%s","component","%u",ps->component); + JSON_SET_STRING("%s","endpoint","%s",endpoint_print_buf(&ps->endpoint)); + JSON_SET_STRING("%s","advertised_endpoint","%s",endpoint_print_buf(&ps->advertised_endpoint)); + JSON_SET_STRING("%s","stats-packets","%ld",atomic64_get(&ps->stats.packets)); + JSON_SET_STRING("%s","stats-bytes","%ld",atomic64_get(&ps->stats.bytes)); + JSON_SET_STRING("%s","stats-errors","%ld",atomic64_get(&ps->stats.errors)); json_update_crypto_context(builder, "stream", &c->callid, ps->unique_id, &ps->crypto); @@ -2495,32 +2330,16 @@ char* redis_encode_json(struct call *c) { json_builder_begin_object (builder); { - json_builder_set_member_name (builder, "created"); - sprintf(tmp,"%llu",(long long unsigned) ml->created); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - json_builder_set_member_name (builder, "active"); - sprintf(tmp,"%u",ml->active_dialogue ? ml->active_dialogue->unique_id : -1); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "deleted"); - sprintf(tmp,"%llu",(long long unsigned) ml->deleted); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","created","%llu",(long long unsigned) ml->created); + JSON_SET_STRING("%s","active","%u",ml->active_dialogue ? ml->active_dialogue->unique_id : -1); + JSON_SET_STRING("%s","deleted","%llu",(long long unsigned) ml->deleted); if (ml->tag.s) { - json_builder_set_member_name (builder, "tag"); - sprintf(tmp,"%s",STRSTR(&ml->tag)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","tag","%s",STRSTR(&ml->tag)); } if (ml->viabranch.s) { - json_builder_set_member_name (builder, "via-branch"); - sprintf(tmp,"%s",STRSTR(&ml->viabranch)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","via-branch","%s",STRSTR(&ml->viabranch)); } } json_builder_end_object (builder); @@ -2570,50 +2389,15 @@ char* redis_encode_json(struct call *c) { json_builder_begin_object (builder); { - json_builder_set_member_name (builder, "tag"); - sprintf(tmp,"%u",media->monologue->unique_id); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "index"); - sprintf(tmp,"%u",media->index); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "type"); - sprintf(tmp,"%s",STRSTR(&media->type)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "protocol"); - sprintf(tmp,"%s",media->protocol ? media->protocol->name : ""); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "desired_family"); - sprintf(tmp,"%s",media->desired_family ? media->desired_family->rfc_name : ""); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "sdes_in_tag"); - sprintf(tmp,"%u",media->sdes_in.tag); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "sdes_out_tag"); - sprintf(tmp,"%u",media->sdes_out.tag); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "logical_intf"); - sprintf(tmp,"%s",STRSTR(&media->logical_intf->name)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "media_flags"); - sprintf(tmp,"%u",media->media_flags); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); + JSON_SET_STRING("%s","tag","%u",media->monologue->unique_id); + JSON_SET_STRING("%s","index","%u",media->index); + JSON_SET_STRING("%s","type","%s",STRSTR(&media->type)); + JSON_SET_STRING("%s","protocol","%s",media->protocol ? media->protocol->name : ""); + JSON_SET_STRING("%s","desired_family","%s",media->desired_family ? media->desired_family->rfc_name : ""); + JSON_SET_STRING("%s","sdes_in_tag","%u",media->sdes_in.tag); + JSON_SET_STRING("%s","sdes_out_tag","%u",media->sdes_out.tag); + JSON_SET_STRING("%s","logical_intf","%s",STRSTR(&media->logical_intf->name)); + JSON_SET_STRING("%s","media_flags","%u",media->media_flags); json_update_crypto_params(builder, "media", &c->callid, media->unique_id, "sdes_in", &media->sdes_in.params); @@ -2683,35 +2467,11 @@ char* redis_encode_json(struct call *c) { json_builder_begin_object (builder); { - - json_builder_set_member_name (builder, "wildcard"); - sprintf(tmp,"%i",ep->wildcard); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "num_ports"); - sprintf(tmp,"%u",ep->num_ports); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "intf_preferred_family"); - sprintf(tmp,"%s",ep->logical_intf->preferred_family->rfc_name); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - json_builder_set_member_name (builder, "logical_intf"); - sprintf(tmp,"%s",STRSTR(&ep->logical_intf->name)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - // next is: - // redis_update_endpoint(r, "map", &c->callid, ep->unique_id, "endpoint", &ep->endpoint); - json_builder_set_member_name (builder, "endpoint"); - sprintf(tmp,"%s",endpoint_print_buf(&ep->endpoint)); - json_builder_add_string_value (builder, tmp); - ZERO(tmp); - - // map_sfds was here before !!! + JSON_SET_STRING("%s","wildcard","%i",ep->wildcard); + JSON_SET_STRING("%s","num_ports","%u",ep->num_ports); + JSON_SET_STRING("%s","intf_preferred_family","%s",ep->logical_intf->preferred_family->rfc_name); + JSON_SET_STRING("%s","logical_intf","%s",STRSTR(&ep->logical_intf->name)); + JSON_SET_STRING("%s","endpoint","%s",endpoint_print_buf(&ep->endpoint)); } json_builder_end_object (builder);