From 824920d5b159d80ce3c241313bf647b5dbbf6661 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Sat, 1 May 2021 14:38:36 +0200 Subject: [PATCH] topos_redis: use initial transaction method for early dialog branch loading --- src/modules/topos_redis/topos_redis_storage.c | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/modules/topos_redis/topos_redis_storage.c b/src/modules/topos_redis/topos_redis_storage.c index d63543dc388..c2d43b4c334 100644 --- a/src/modules/topos_redis/topos_redis_storage.c +++ b/src/modules/topos_redis/topos_redis_storage.c @@ -588,6 +588,7 @@ int tps_redis_load_initial_method_branch(sip_msg_t *msg, tps_data_t *md, tps_dat str skey = STR_NULL; str sval = STR_NULL; str xuuid = str_init(""); + str smethod = str_init("INVITE"); if(msg==NULL || md==NULL || sd==NULL) return -1; @@ -622,12 +623,17 @@ int tps_redis_load_initial_method_branch(sip_msg_t *msg, tps_data_t *md, tps_dat xuuid.len = sd->b_uuid.len - 1; } + if(md->s_method_id & (METHOD_SUBSCRIBE|METHOD_NOTIFY)) { + smethod.s = "SUBSCRIBE"; + smethod.len =9; + } + rp = _tps_redis_cbuf; rkey.len = snprintf(rp, TPS_REDIS_DATA_SIZE, "%.*s%.*s:%.*s:%.*s:x%.*s", _tps_redis_bprefix.len, _tps_redis_bprefix.s, - md->s_method.len, md->s_method.s, + smethod.len, smethod.s, md->a_callid.len, md->a_callid.s, md->b_tag.len, md->b_tag.s, xuuid.len, xuuid.s); @@ -1161,15 +1167,11 @@ int tps_redis_update_branch(sip_msg_t *msg, tps_data_t *md, tps_data_t *sd, return -1; } - if(md->s_method.len==6 && strncmp(md->s_method.s, "INVITE", 6)==0) { - if(tps_redis_insert_initial_method_branch(md, sd)<0) { - LM_ERR("failed to insert INVITE extra branch data\n"); - return -1; - } - } - if(md->s_method.len==9 && strncmp(md->s_method.s, "SUBSCRIBE", 9)==0) { + if(md->s_method_id==METHOD_INVITE + || md->s_method_id==METHOD_SUBSCRIBE) { if(tps_redis_insert_initial_method_branch(md, sd)<0) { - LM_ERR("failed to insert SUBSCRIBE extra branch data\n"); + LM_ERR("failed to insert %.*s extra initial branch data\n", + md->s_method.len, md->s_method.s); return -1; } }