|
@@ -40,7 +40,7 @@ dlg_ctx_t _dlg_ctx;
|
|
extern int spiral_detected;
|
|
extern int spiral_detected;
|
|
|
|
|
|
/*! global variable table, in case the dialog does not exist yet */
|
|
/*! global variable table, in case the dialog does not exist yet */
|
|
-struct dlg_var * var_table = 0;
|
|
|
|
|
|
+static struct dlg_var *_dlg_var_table = 0;
|
|
/*! ID of the current message */
|
|
/*! ID of the current message */
|
|
int msg_id;
|
|
int msg_id;
|
|
|
|
|
|
@@ -127,13 +127,14 @@ static inline struct dlg_var *new_dlg_var(str *key, str *val)
|
|
/*! Delete the current var-list */
|
|
/*! Delete the current var-list */
|
|
void free_local_varlist() {
|
|
void free_local_varlist() {
|
|
struct dlg_var *var;
|
|
struct dlg_var *var;
|
|
- while (var_table) {
|
|
|
|
- var = var_table;
|
|
|
|
- var_table = var_table->next;
|
|
|
|
|
|
+ while (_dlg_var_table) {
|
|
|
|
+ var = _dlg_var_table;
|
|
|
|
+ _dlg_var_table = _dlg_var_table->next;
|
|
shm_free(var->key.s);
|
|
shm_free(var->key.s);
|
|
shm_free(var->value.s);
|
|
shm_free(var->value.s);
|
|
shm_free(var);
|
|
shm_free(var);
|
|
}
|
|
}
|
|
|
|
+ _dlg_var_table = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
/*! Retrieve the local var-list pointer */
|
|
/*! Retrieve the local var-list pointer */
|
|
@@ -144,9 +145,9 @@ struct dlg_var * get_local_varlist_pointer(struct sip_msg *msg, int clear_pointe
|
|
free_local_varlist();
|
|
free_local_varlist();
|
|
msg_id = msg->id;
|
|
msg_id = msg->id;
|
|
}
|
|
}
|
|
- var = var_table;
|
|
|
|
|
|
+ var = _dlg_var_table;
|
|
if (clear_pointer)
|
|
if (clear_pointer)
|
|
- var_table = NULL;
|
|
|
|
|
|
+ _dlg_var_table = NULL;
|
|
return var;
|
|
return var;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -161,7 +162,7 @@ int set_dlg_variable_unsafe(struct dlg_cell *dlg, str *key, str *val)
|
|
if (dlg)
|
|
if (dlg)
|
|
var_list = &dlg->vars;
|
|
var_list = &dlg->vars;
|
|
else
|
|
else
|
|
- var_list = &var_table;
|
|
|
|
|
|
+ var_list = &_dlg_var_table;
|
|
|
|
|
|
if ( val && (var=new_dlg_var(key, val))==NULL) {
|
|
if ( val && (var=new_dlg_var(key, val))==NULL) {
|
|
LM_ERR("failed to create new dialog variable\n");
|
|
LM_ERR("failed to create new dialog variable\n");
|
|
@@ -216,7 +217,7 @@ str * get_dlg_variable_unsafe(struct dlg_cell *dlg, str *key)
|
|
if (dlg)
|
|
if (dlg)
|
|
var_list = dlg->vars;
|
|
var_list = dlg->vars;
|
|
else
|
|
else
|
|
- var_list = var_table;
|
|
|
|
|
|
+ var_list = _dlg_var_table;
|
|
|
|
|
|
/* iterate the list */
|
|
/* iterate the list */
|
|
for(var=var_list ; var ; var=var->next) {
|
|
for(var=var_list ; var ; var=var->next) {
|
|
@@ -244,7 +245,7 @@ int pv_parse_dialog_var_name(pv_spec_p sp, str *in)
|
|
/*! Internal debugging function: Prints the list of dialogs */
|
|
/*! Internal debugging function: Prints the list of dialogs */
|
|
void print_lists(struct dlg_cell *dlg) {
|
|
void print_lists(struct dlg_cell *dlg) {
|
|
struct dlg_var *varlist;
|
|
struct dlg_var *varlist;
|
|
- varlist = var_table;
|
|
|
|
|
|
+ varlist = _dlg_var_table;
|
|
LM_DBG("Internal var-list (%p):\n", varlist);
|
|
LM_DBG("Internal var-list (%p):\n", varlist);
|
|
while (varlist) {
|
|
while (varlist) {
|
|
LM_DBG("%.*s=%.*s (flags %i)\n",
|
|
LM_DBG("%.*s=%.*s (flags %i)\n",
|