Module: kamailio
Branch: master
Commit: 7b8f14897106db305de9922b93dba2177155b6e6
URL: 
https://github.com/kamailio/kamailio/commit/7b8f14897106db305de9922b93dba2177155b6e6

Author: iionita <ionut-razvan.ion...@1and1.ro>
Committer: iionita <ionut-razvan.ion...@1and1.ro>
Date: 2019-06-07T18:26:27+03:00

rtpengine: add modparam to switch between legacy hashing algorithm and SHA1

---

Modified: src/modules/rtpengine/rtpengine.c
Modified: src/modules/rtpengine/rtpengine.h

---

Diff:  
https://github.com/kamailio/kamailio/commit/7b8f14897106db305de9922b93dba2177155b6e6.diff
Patch: 
https://github.com/kamailio/kamailio/commit/7b8f14897106db305de9922b93dba2177155b6e6.patch

---

diff --git a/src/modules/rtpengine/rtpengine.c 
b/src/modules/rtpengine/rtpengine.c
index 6af5742b19..fd9e01904e 100644
--- a/src/modules/rtpengine/rtpengine.c
+++ b/src/modules/rtpengine/rtpengine.c
@@ -290,6 +290,10 @@ static pv_spec_t *media_duration_pvar = NULL;
 char* force_send_ip_str="";
 int force_send_ip_af = AF_UNSPEC;
 
+
+
+static enum hash_algo_t hash_algo = RTP_HASH_CALLID;
+
 typedef struct rtpp_set_link {
        struct rtpp_set *rset;
        pv_spec_t *rpv;
@@ -443,6 +447,7 @@ static param_export_t params[] = {
        {"hash_table_size",       INT_PARAM, &hash_table_size        },
        {"setid_default",         INT_PARAM, &setid_default          },
        {"media_duration",        PARAM_STR, &media_duration_pvar_str},
+       {"hash_algo",             INT_PARAM, &hash_algo},
 
        /* MOS stats output */
        /* global averages */
@@ -1724,9 +1729,11 @@ mod_init(void)
         return -1;
     }
 
-       if (load_crypto_api(&rtpengine_cb) != 0) {
-               LM_WARN("Crypto module not loaded! Won't use SHA1 hashing! 
Distribution "
-                               "algorithm might not perform well under heavy 
load!\n");
+       if (hash_algo == RTP_HASH_SHA1_CALLID) {
+               if (load_crypto_api(&rtpengine_cb) != 0) {
+                       LM_ERR("Crypto module required in order to have SHA1 
hashing!\n");
+                       return -1;
+               }
        }
 
        return 0;
@@ -2912,13 +2919,27 @@ select_rtpp_node_new(str callid, str viabranch, int 
do_test, struct rtpp_node **
 
        str hash_data;
 
-       if (rtpengine_cb.SHA1 == NULL) {
-               hash_data = callid;
-       } else {
-               if (rtpengine_cb.SHA1(&callid, &hash_data) < 0) {
-                       LM_ERR("SHA1 hash in crypto module failed!\n");
+       switch (hash_algo) {
+               case RTP_HASH_CALLID:
+                       hash_data = callid;
+
+                       break;
+               case RTP_HASH_SHA1_CALLID:
+                       if (rtpengine_cb.SHA1 == NULL) {
+                               /* don't throw warning here; there is already a 
warni*/
+                               LM_BUG("SHA1 algo set but crypto not loaded! 
Program shouldn't have started!");
+                               return NULL;
+                       }
+
+                       if (rtpengine_cb.SHA1(&callid, &hash_data) < 0) {
+                               LM_ERR("SHA1 hash in crypto module failed!\n");
+                               return NULL;
+                       }
+
+                       break;
+               default:
+                       LM_ERR("unknown hashing algo %d\n", hash_algo);
                        return NULL;
-               }
        }
 
        /* XXX Use quick-and-dirty hashing algo */
@@ -2926,8 +2947,11 @@ select_rtpp_node_new(str callid, str viabranch, int 
do_test, struct rtpp_node **
        for(i = 0; i < hash_data.len; i++)
                sum += hash_data.s[i];
 
-       /* FIXME this seems to affect the algorithm in a negative way */
-       //      sum &= 0xff;
+       /* FIXME this seems to affect the algorithm in a negative way
+        * legacy code uses it; disable it for other algos */
+       if (hash_algo == RTP_HASH_CALLID) {
+               sum &= 0xff;
+       }
 
 retry:
        weight_sum = 0;
diff --git a/src/modules/rtpengine/rtpengine.h 
b/src/modules/rtpengine/rtpengine.h
index 8ec033fc1b..b5314c2c35 100644
--- a/src/modules/rtpengine/rtpengine.h
+++ b/src/modules/rtpengine/rtpengine.h
@@ -103,5 +103,6 @@ extern str rtpp_url_col;
 extern str rtpp_weight_col;
 extern str rtpp_disabled_col;
 
+enum hash_algo_t { RTP_HASH_CALLID, RTP_HASH_SHA1_CALLID};
 
 #endif


_______________________________________________
Kamailio (SER) - Development Mailing List
sr-dev@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to