Module: sip-router
Branch: master
Commit: 1c3b6dbf68efd8e5cc29c715cbb3917ef8f42f84
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=1c3b6dbf68efd8e5cc29c715cbb3917ef8f42f84

Author: pd <[email protected]>
Committer: pd <[email protected]>
Date:   Thu Dec  8 22:05:35 2011 +0000

modules_k/pua: Some of the functions in pua_db.c did not completely replicate 
the behaviour of the original hash-table functions

- This caused a variety of problems during RLS client testing.
- Fixes by Paul Pankhurst @ Crocodile RCS

---

 modules_k/pua/pua_db.c |   69 +++++++++++++++++++++++++++++++++++------------
 1 files changed, 51 insertions(+), 18 deletions(-)

diff --git a/modules_k/pua/pua_db.c b/modules_k/pua/pua_db.c
index e81cf3f..54e11c0 100644
--- a/modules_k/pua/pua_db.c
+++ b/modules_k/pua/pua_db.c
@@ -301,13 +301,16 @@ int matches_in_puadb(ua_pres_t *pres)
        q_ops[puri_col] = OP_EQ; 
        n_query_cols++;
 
-       q_cols[pid_col= n_query_cols] = &str_pres_id_col;       
-       q_vals[pid_col].type = DB1_STR;
-       q_vals[pid_col].nul = 0;
-       q_vals[pid_col].val.str_val.s = pres->id.s;
-       q_vals[pid_col].val.str_val.len = pres->id.len;
-       q_ops[pid_col] = OP_EQ;
-       n_query_cols++;
+       if (pres->id.s && pres->id.len)
+       {
+               q_cols[pid_col= n_query_cols] = &str_pres_id_col;       
+               q_vals[pid_col].type = DB1_STR;
+               q_vals[pid_col].nul = 0;
+               q_vals[pid_col].val.str_val.s = pres->id.s;
+               q_vals[pid_col].val.str_val.len = pres->id.len;
+               q_ops[pid_col] = OP_EQ;
+               n_query_cols++;
+       }
 
        q_cols[flag_col= n_query_cols] = &str_flag_col;
        q_vals[flag_col].type = DB1_INT;
@@ -359,7 +362,10 @@ int matches_in_puadb(ua_pres_t *pres)
                        q_ops[etag_col] = OP_EQ;
                        n_query_cols++;                                         
                }
-
+               else
+               {
+                       LM_DBG("no etag restriction\n");
+               }
        }
 
 
@@ -419,13 +425,16 @@ ua_pres_t* search_puadb(ua_pres_t *pres, ua_pres_t 
*result, db1_res_t **dbres)
        q_ops[puri_col] = OP_EQ; 
        n_query_cols++;
 
-       q_cols[pid_col= n_query_cols] = &str_pres_id_col;       
-       q_vals[pid_col].type = DB1_STR;
-       q_vals[pid_col].nul = 0;
-       q_vals[pid_col].val.str_val.s = pres->id.s;
-       q_vals[pid_col].val.str_val.len = pres->id.len;
-       q_ops[pid_col] = OP_EQ;
-       n_query_cols++;
+       if (pres->id.s && pres->id.len)
+       {
+               q_cols[pid_col= n_query_cols] = &str_pres_id_col;       
+               q_vals[pid_col].type = DB1_STR;
+               q_vals[pid_col].nul = 0;
+               q_vals[pid_col].val.str_val.s = pres->id.s;
+               q_vals[pid_col].val.str_val.len = pres->id.len;
+               q_ops[pid_col] = OP_EQ;
+               n_query_cols++;
+       }
 
        q_cols[flag_col= n_query_cols] = &str_flag_col;
        q_vals[flag_col].type = DB1_INT;
@@ -476,7 +485,10 @@ ua_pres_t* search_puadb(ua_pres_t *pres, ua_pres_t 
*result, db1_res_t **dbres)
                        q_ops[etag_col] = OP_EQ;
                        n_query_cols++;                                         
                }
-
+               else
+               {
+                       LM_DBG("no etag restriction\n");
+               }
        }
 
 
@@ -850,9 +862,30 @@ int get_record_id_puadb(ua_pres_t *pres, str **rec_id )
        if (nr_rows == 0)
        {
                /* no match */
-               LM_DBG("No rows found.\n");
+               LM_DBG("No rows found. Looking for temporary dialog\n");
                pua_dbf.free_result(pua_db, res);
-               return(0);
+
+               q_vals[totag_col].val.str_val.s = "";
+               q_vals[totag_col].val.str_val.len = 0;
+
+
+               if(pua_dbf.query(pua_db, q_cols, q_ops, q_vals,
+                       res_cols,n_query_cols,n_res_cols,0,&res) < 0)
+               {
+                       LM_ERR("DB query error\n");
+                       return(-1);
+               }
+
+               nr_rows = RES_ROW_N(res);
+
+               if (nr_rows == 0)
+               {
+                       LM_DBG( "Temporary Dialog Not found\n" );
+                       pua_dbf.free_result(pua_db, res);
+                       return(0);
+               }
+
+               LM_DBG( "Found a temporary Dialog\n" );
        }
 
        if (nr_rows != 1)


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to