|
|
|
|
@ -24,6 +24,7 @@
|
|
|
|
|
#include "dtls.h"
|
|
|
|
|
#include "recording.h"
|
|
|
|
|
#include "rtplib.h"
|
|
|
|
|
#include "str.h"
|
|
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <glib-object.h>
|
|
|
|
|
@ -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);
|
|
|
|
|
|