123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- /*
- * $Id$
- *
- * Copyright (C) 2006 voice-system.ro
- *
- * This file is part of Kamailio, a free SIP server.
- *
- * Kamailio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * Kamailio is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
- /*!
- * \file
- * \brief Script variables
- */
- #include <assert.h>
- #include <ctype.h>
- #include <string.h>
- #include <stdlib.h>
- #include "../../dprint.h"
- #include "../../mem/mem.h"
- #include "pv_svar.h"
- static script_var_t *script_vars = 0;
- script_var_t* add_var(str *name)
- {
- script_var_t *it;
- if(name==0 || name->s==0 || name->len<=0)
- return 0;
- for(it=script_vars; it; it=it->next)
- {
- if(it->name.len==name->len
- && strncmp(name->s, it->name.s, name->len)==0)
- return it;
- }
- it = (script_var_t*)pkg_malloc(sizeof(script_var_t));
- if(it==0)
- {
- LM_ERR("out of pkg mem\n");
- return 0;
- }
- memset(it, 0, sizeof(script_var_t));
- it->name.s = (char*)pkg_malloc((name->len+1)*sizeof(char));
- if(it->name.s==0)
- {
- LM_ERR("out of pkg mem!\n");
- return 0;
- }
- it->name.len = name->len;
- strncpy(it->name.s, name->s, name->len);
- it->name.s[it->name.len] = '\0';
- it->next = script_vars;
- script_vars = it;
- return it;
- }
- script_var_t* set_var_value(script_var_t* var, int_str *value, int flags)
- {
- if(var==0)
- return 0;
- if(value==NULL)
- {
- if(var->v.flags&VAR_VAL_STR)
- {
- pkg_free(var->v.value.s.s);
- var->v.flags &= ~VAR_VAL_STR;
- }
- memset(&var->v.value, 0, sizeof(int_str));
- return var;
- }
- if(flags&VAR_VAL_STR)
- {
- if(var->v.flags&VAR_VAL_STR)
- { /* old and new value is str */
- if(value->s.len>var->v.value.s.len)
- { /* not enough space to copy */
- pkg_free(var->v.value.s.s);
- memset(&var->v.value, 0, sizeof(int_str));
- var->v.value.s.s =
- (char*)pkg_malloc((value->s.len+1)*sizeof(char));
- if(var->v.value.s.s==0)
- {
- LM_ERR("out of pkg mem\n");
- goto error;
- }
- }
- } else {
- memset(&var->v.value, 0, sizeof(int_str));
- var->v.value.s.s =
- (char*)pkg_malloc((value->s.len+1)*sizeof(char));
- if(var->v.value.s.s==0)
- {
- LM_ERR("out of pkg mem!\n");
- goto error;
- }
- var->v.flags |= VAR_VAL_STR;
- }
- strncpy(var->v.value.s.s, value->s.s, value->s.len);
- var->v.value.s.len = value->s.len;
- var->v.value.s.s[value->s.len] = '\0';
- } else {
- if(var->v.flags&VAR_VAL_STR)
- {
- pkg_free(var->v.value.s.s);
- var->v.flags &= ~VAR_VAL_STR;
- memset(&var->v.value, 0, sizeof(int_str));
- }
- var->v.value.n = value->n;
- }
- return var;
- error:
- /* set the var to init value */
- memset(&var->v.value, 0, sizeof(int_str));
- var->v.flags &= ~VAR_VAL_STR;
- return NULL;
- }
- script_var_t* get_var_by_name(str *name)
- {
- script_var_t *it;
- if(name==0 || name->s==0 || name->len<=0)
- return 0;
- for(it=script_vars; it; it=it->next)
- {
- if(it->name.len==name->len
- && strncmp(name->s, it->name.s, name->len)==0)
- return it;
- }
- return 0;
- }
- void reset_vars(void)
- {
- script_var_t *it;
- for(it=script_vars; it; it=it->next)
- {
- if(it->v.flags&VAR_VAL_STR)
- {
- pkg_free(it->v.value.s.s);
- it->v.flags &= ~VAR_VAL_STR;
- }
- memset(&it->v.value, 0, sizeof(int_str));
- }
- }
- void destroy_vars_list(script_var_t *svl)
- {
- script_var_t *it;
- script_var_t *it0;
- it = svl;
- while(it)
- {
- it0 = it;
- it = it->next;
- pkg_free(it0->name.s);
- if(it0->v.flags&VAR_VAL_STR)
- pkg_free(it0->v.value.s.s);
- pkg_free(it0);
- }
- svl = 0;
- }
- void destroy_vars(void)
- {
- destroy_vars_list(script_vars);
- }
|