|
|
|
@ -241,7 +241,7 @@ void onRedisNotification(redisAsyncContext *actx, void *reply, void *privdata) { |
|
|
|
|
|
|
|
struct callmaster *cm = privdata; |
|
|
|
struct redis *r = 0; |
|
|
|
struct call* c; |
|
|
|
struct call *c = NULL; |
|
|
|
str callid; |
|
|
|
char db_str[16]; memset(&db_str, 0, 8); |
|
|
|
char *pdbstr = db_str; |
|
|
|
@ -268,7 +268,7 @@ void onRedisNotification(redisAsyncContext *actx, void *reply, void *privdata) { |
|
|
|
goto err; |
|
|
|
|
|
|
|
for (int j = 0; j < rr->elements; j++) { |
|
|
|
rlog(LOG_INFO, "Redis-Notify: %u) %s\n", j, rr->element[j]->str); |
|
|
|
rlog(LOG_DEBUG, "Redis-Notify: %u) %s\n", j, rr->element[j]->str); |
|
|
|
} |
|
|
|
|
|
|
|
if (rr->elements != 4) |
|
|
|
@ -297,7 +297,7 @@ void onRedisNotification(redisAsyncContext *actx, void *reply, void *privdata) { |
|
|
|
// select the right db for restoring the call |
|
|
|
if (redisCommandNR(r->ctx, "SELECT %i", r->db)) { |
|
|
|
if (r->ctx->err) |
|
|
|
rlog(LOG_ERR, "Redis error: %s", r->ctx->errstr); |
|
|
|
rlog(LOG_ERROR, "Redis error: %s", r->ctx->errstr); |
|
|
|
redisFree(r->ctx); |
|
|
|
r->ctx = NULL; |
|
|
|
goto err; |
|
|
|
@ -306,28 +306,39 @@ void onRedisNotification(redisAsyncContext *actx, void *reply, void *privdata) { |
|
|
|
pch += strlen("notifier-"); |
|
|
|
str_cut(rr->element[2]->str,0,pch-rr->element[2]->str); |
|
|
|
rr->element[2]->len = strlen(rr->element[2]->str); |
|
|
|
rlog(LOG_INFO,"Redis-Notifier: Processing call with callid:%s\n",rr->element[2]->str); |
|
|
|
rlog(LOG_DEBUG,"Redis-Notifier: Processing call with callid: %s\n",rr->element[2]->str); |
|
|
|
|
|
|
|
str_init(&callid,rr->element[2]->str); |
|
|
|
|
|
|
|
c = call_get(&callid, cm); |
|
|
|
if (c) { |
|
|
|
rwlock_unlock_w(&c->master_lock); // because of call_get(..) |
|
|
|
// because of call_get(..) |
|
|
|
rwlock_unlock_w(&c->master_lock); |
|
|
|
} |
|
|
|
|
|
|
|
if (strncmp(rr->element[3]->str,"sadd",4)==0) { |
|
|
|
if (c) { |
|
|
|
rlog(LOG_INFO, "Redis-Notifier: Call already exists with this callid:%s\n", rr->element[2]->str); |
|
|
|
rlog(LOG_NOTICE, "Redis-Notifier: SADD already find call with callid: %s\n", rr->element[2]->str); |
|
|
|
goto err; |
|
|
|
} |
|
|
|
redis_restore_call(r, cm, rr->element[2], CT_FOREIGN_CALL); |
|
|
|
} |
|
|
|
|
|
|
|
if (strncmp(rr->element[3]->str,"del",3)==0) { |
|
|
|
if (!c) { |
|
|
|
rlog(LOG_NOTICE, "Redis-Notifier: DEL did not find call with callid: %s\n", rr->element[2]->str); |
|
|
|
goto err; |
|
|
|
} |
|
|
|
|
|
|
|
call_destroy(c); |
|
|
|
} |
|
|
|
|
|
|
|
err: |
|
|
|
if (c) { |
|
|
|
// because of call_get(..) |
|
|
|
obj_put(c); |
|
|
|
} |
|
|
|
|
|
|
|
mutex_unlock(&r->lock); |
|
|
|
} |
|
|
|
|
|
|
|
|