Пример #1
0
void	set_mail_type (const void *stuff)
{
	const char *	value;
	struct mail_checker *new_checker;
	char	old_mailval[16];

	value = (const char *)stuff;

	if (value == NULL)
		new_checker = NULL;
	else if (!my_stricmp(value, "MBOX"))
		new_checker = &mail_types[0];
	else if (!my_stricmp(value, "MAILDIR"))
		new_checker = &mail_types[1];
	else
	{
		say("/SET MAIL_TYPE must be MBOX or MAILDIR.");
		return;
	}

	snprintf(old_mailval, sizeof(old_mailval), "%d", get_int_var(MAIL_VAR));
	set_var_value(MAIL_VAR, zero);
	checkmail = new_checker;
	set_var_value(MAIL_VAR, old_mailval);
}
Пример #2
0
void CMemory::StoreValue(const char * pquery, CEvalInfoFunction **logCallingFunction, int *e)
{
	int			i = 0, index = 0;
	char		var[512] = {0}, value[512] = {0};
	double		result = 0.;
	CGrammar	gram;

	strcpy_s(var, 512, &pquery[6]);

	if (strstr(var, "_")!=NULL)
		var[strstr(var, "_")-var]='\0';

	strcpy_s(value, 512, &pquery[6+strlen(var)+1]);

	// see if we already have this variable name
	index=_var_count+1;
	for (i=0; i<=_var_count; i++)
	{
		if (strlen(var)==strlen(_var_name[i]) && memcmp(var, _var_name[i], strlen(var))==0)
		{
			index=i;
		}
	}

	// if we didn't find the var, put it in a new slot
	if (index==_var_count+1)
		set_var_count(_var_count+1);

	//store the value
	if (memcmp(value,"f$",2)==0)
	{
		*e = SUCCESS;
		result = gram.DoCalcF$symbol(p_formula, value, logCallingFunction, logCallingFunction!=NULL, e);

		if (*e==SUCCESS)
		{
			set_var_value(index, result);
			set_var_name(index, var);
		}
		else
		{
			*e = ERR_INVALID_EXPR;
		}

	}

	else
	{
		if (strstr(value, "_")!=NULL)
			value[strstr(value, "_")-value]='.';

		set_var_value(index, atof(value));

		set_var_name(index, var);
	}
}
Пример #3
0
void
toggle_var(WebKitWebView *page, GArray *argv, GString *result) {
    (void) page; (void) result;

    if(!argv_idx(argv, 0))
        return;

    const gchar *var_name = argv_idx(argv, 0);

    uzbl_cmdprop *c = get_var_c(var_name);

    if(!c) {
        if (argv->len > 1) {
            set_var_value(var_name, argv_idx(argv, 1));
        } else {
            set_var_value(var_name, "1");
        }
        return;
    }

    switch(c->type) {
    case TYPE_STR:
    {
        const gchar *next;

        if(argv->len >= 3) {
            gchar *current = get_var_value_string_c(c);

            guint i = 2;
            const gchar *first   = argv_idx(argv, 1);
            const gchar *this    = first;
                         next    = argv_idx(argv, 2);

            while(next && strcmp(current, this)) {
                this = next;
                next = argv_idx(argv, ++i);
            }

            if(!next)
                next = first;

            g_free(current);
        } else
            next = "";

        set_var_value_string_c(c, next);
        break;
    }
Пример #4
0
int pv_xavp_to_var_helper(sr_xavp_t *avp) {
	script_var_t *it;
	int_str value;
	int flags = 0;

	it = add_var(&avp->name, VAR_TYPE_ZERO);
	if(!it)	return -1;
	if(avp->val.type==SR_XTYPE_STR){
		flags |= VAR_VAL_STR;
		value.s.len = avp->val.v.s.len;
		value.s.s = avp->val.v.s.s;
		LM_DBG("var:[%.*s]  STR:[%.*s]\n", avp->name.len, avp->name.s,
			value.s.len, value.s.s);
	}
	else if(avp->val.type==SR_XTYPE_INT) {
		flags |= VAR_VAL_INT;
		value.n = avp->val.v.i;
		LM_DBG("var:[%.*s] INT:[%d]\n", avp->name.len, avp->name.s,
			value.n);
	} else {
		LM_ERR("avp type not STR nor INT\n");
		return -1;
	}
	set_var_value(it, &value, flags);

	return 0;
}
Пример #5
0
static int w_get_profile_size(struct sip_msg *msg, char *profile, 
													char *value, char *result)
{
	pv_elem_t *pve;
	str val_s;
	pv_spec_t *sp_dest;
	unsigned int size;
	int_str res;
	int avp_name;
	unsigned short avp_type;
	script_var_t * sc_var;

	pve = (pv_elem_t *)value;
	sp_dest = (pv_spec_t *)result;

	if ( pve!=NULL && ((struct dlg_profile_table*)profile)->has_value) {
		if ( pv_printf_s(msg, pve, &val_s)!=0 || 
		val_s.len == 0 || val_s.s == NULL) {
			LM_WARN("cannot get string for value\n");
			return -1;
		}
		size = get_profile_size( (struct dlg_profile_table*)profile ,&val_s );
	} else {
		size = get_profile_size( (struct dlg_profile_table*)profile, NULL );
	}

	switch (sp_dest->type) {
		case PVT_AVP:
			if (pv_get_avp_name( msg, &(sp_dest->pvp), &avp_name,
			&avp_type)!=0){
				LM_CRIT("BUG in getting AVP name\n");
				return -1;
			}
			res.n = size;
			if (add_avp(avp_type, avp_name, res)<0){
				LM_ERR("cannot add AVP\n");
				return -1;
			}
			break;

		case PVT_SCRIPTVAR:
			if(sp_dest->pvp.pvn.u.dname == 0){
				LM_ERR("cannot find svar name\n");
				return -1;
			}
			res.n = size;
			sc_var = (script_var_t *)sp_dest->pvp.pvn.u.dname;
			if(!set_var_value(sc_var, &res, 0)){
				LM_ERR("cannot set svar\n");
				return -1;
			}
			break;

		default:
			LM_CRIT("BUG: invalid pvar type\n");
			return -1;
	}

	return 1;
}
Пример #6
0
int param_set_xvar( modparam_t type, void* val, int mode)
{
	str s;
	char *p;
	int_str isv;
	int flags;
	int ival;
	script_var_t *sv;

	if(shvar_initialized!=0)
		goto error;

	s.s = (char*)val;
	if(s.s == NULL || s.s[0] == '\0')
		goto error;

	p = s.s;
	while(*p && *p!='=') p++;

	if(*p!='=')
		goto error;

	s.len = p - s.s;
	if(s.len == 0)
		goto error;
	p++;
	flags = 0;
	if(*p!='s' && *p!='S' && *p!='i' && *p!='I')
		goto error;

	if(*p=='s' || *p=='S')
		flags = VAR_VAL_STR;
	p++;
	if(*p!=':')
		goto error;
	p++;
	isv.s.s = p;
	isv.s.len = strlen(p);
	if(flags != VAR_VAL_STR) {
		if(str2sint(&isv.s, &ival)<0)
			goto error;
		isv.n = ival;
	}
	if(mode==0)
		sv = add_var(&s);
	else
		sv = add_local_shvar(&s);
	if(sv==NULL)
		goto error;
	if(set_var_value(sv, &isv, flags)==NULL)
		goto error;

	return 0;
error:
	LM_ERR("unable to set %s parameter [%s]\n",
			(mode == 0 ? "var" : "shv"), s.s);
	return -1;
}
Пример #7
0
int w_fetch_dlg_value(struct sip_msg *msg, char *name, char *result)
{
	struct dlg_cell *dlg;
	str val;

	pv_spec_t *sp_dest;
	int_str res;
	int avp_name;
	unsigned short avp_type;
	script_var_t * sc_var;

	sp_dest = (pv_spec_t *)result;

	if ( (dlg=get_current_dialog())==NULL )
		return -1;

	if (fetch_dlg_value( dlg, (str*)name, &val, 0) ) {
		LM_DBG("failed to fetch dialog value <%.*s>\n",
			((str*)name)->len, ((str*)name)->s);
		return -1;
	}

	switch (sp_dest->type) {
		case PVT_AVP:
			if (pv_get_avp_name( msg, &(sp_dest->pvp), &avp_name,
			&avp_type)!=0){
				LM_CRIT("BUG in getting AVP name\n");
				return -1;
			}
			res.s = val;
			if (add_avp(avp_type|AVP_VAL_STR, avp_name, res)<0){
				LM_ERR("cannot add AVP\n");
				return -1;
			}
			break;

		case PVT_SCRIPTVAR:
			if(sp_dest->pvp.pvn.u.dname == 0){
				LM_ERR("cannot find svar name\n");
				return -1;
			}
			res.s = val;
			sc_var = (script_var_t *)sp_dest->pvp.pvn.u.dname;
			if(!set_var_value(sc_var, &res, VAR_VAL_STR)){
				LM_ERR("cannot set svar\n");
				return -1;
			}
			break;

		default:
			LM_CRIT("BUG: invalid pvar type\n");
			return -1;
	}

	return 1;
}
Пример #8
0
void
set_var(WebKitWebView *page, GArray *argv, GString *result) {
    (void) page; (void) result;

    if(!argv_idx(argv, 0))
        return;

    gchar **split = g_strsplit(argv_idx(argv, 0), "=", 2);
    if (split[0] != NULL) {
        gchar *value = split[1] ? g_strchug(split[1]) : " ";
        set_var_value(g_strstrip(split[0]), value);
    }
    g_strfreev(split);
}
Пример #9
0
void
test_keycmd (void) {
    add_binding("insert", "set insert_mode = 1");
    add_binding("command", "set insert_mode = 0");

    /* the 'keycmd' command */
    parse_command("keycmd", "insert", NULL);

    g_assert_cmpint(1, ==, reuzbl.behave.insert_mode);
    g_assert_cmpstr("", ==, reuzbl.state.keycmd);

    /* setting the keycmd variable directly, equivalent to the 'keycmd' comand */
    set_var_value("keycmd", "command");

    g_assert_cmpint(0, ==, reuzbl.behave.insert_mode);
    g_assert_cmpstr("", ==, reuzbl.state.keycmd);
}
Пример #10
0
static int l_siplua_scriptVarSet(lua_State *L)
{
  const char *name;
  str s;
  int_str val;
  int flags = 0;
  script_var_t *it;

  name = luaL_checkstring(L, 1);
  if (*name == '$')
    ++name;
  s.s = (char *)name;
  s.len = strlen(name);
  switch (lua_type(L, 2))
    {
    case LUA_TNIL: /* no way currently exists to drop a script variable */
      /* well, set_var_value(it, NULL, 0) API exists but won't do anything useful */
      val.n = 0;
      break;
    case LUA_TNUMBER:
      val.n = luaL_checkinteger(L, 2);
      break;
    case LUA_TSTRING:
      flags = VAR_VAL_STR;
      val.s.s = (char *)luaL_checkstring(L, 2);
      val.s.len = strlen(val.s.s);
      break;
    default:
      return luaL_error(L, "scriptVarSet %s type value not supported",
			lua_typename(L, lua_type(L, 2)));
    }
  it = get_var_by_name(&s);
  if (!it)
    it = add_var(&s);
  if (!it)
    return luaL_error(L, "add_var of script variable `%s' failed", name);
  if (set_var_value(it, &val, flags))
    lua_pushboolean(L, 1);
  else
    lua_pushboolean(L, 0);
  return 1;
}
Пример #11
0
/**
 * Set result pvs
 */
int set_result_pv(struct sip_msg* _msg, unsigned short _avp_type, int_str _avp_val, char* _res_avp)
{
	pv_spec_t* _avp = (pv_spec_t*) _res_avp;
	int avp_name;
	unsigned short avp_type;


	switch (_avp->type) {
		case PVT_AVP:
			if (pv_get_avp_name(_msg, &(_avp->pvp), &avp_name, &avp_type) != 0) {
				LM_CRIT("BUG in getting AVP name");
				return -1;
			}

			avp_type |= _avp_type;

			if (add_avp(avp_type, avp_name, _avp_val) < 0) {
				LM_ERR("cannot add AVP");
				return -1;
			}
			break;

		case PVT_SCRIPTVAR:
			if(_avp->pvp.pvn.u.dname == 0){
				LM_ERR("cannot find svar name");
				return -1;
			}

			if (!set_var_value((script_var_t*) _avp->pvp.pvn.u.dname, &_avp_val, VAR_VAL_STR)) {
				LM_ERR("cannot set svar");
				return -1;
			}
			break;

		default:
			LM_CRIT("BUG: invalid pvar type");
			return -1;
	}

	return OK;
}
Пример #12
0
int param_set_xvar( modparam_t type, void* val, int mode)
{
	str s;
	char *p;
	int_str isv;
	int flags;
	int ival;
	script_var_t *pkv;
	sh_var_t *shv;

	if(!shm_initialized())
	{
		LM_ERR("shm not initialized - cannot set value for PVs\n");
		return -1;
	}

	s.s = (char*)val;
	if(s.s == NULL || s.s[0] == '\0')
		goto error;

	p = s.s;
	while(*p && *p!='=') p++;

	if(*p!='=')
		goto error;

	s.len = p - s.s;
	if(s.len == 0)
		goto error;
	p++;
	flags = 0;
	if(*p!='s' && *p!='S' && *p!='i' && *p!='I')
		goto error;

	if(*p=='s' || *p=='S')
		flags = VAR_VAL_STR;
	p++;
	if(*p!=':')
		goto error;
	p++;
	isv.s.s = p;
	isv.s.len = strlen(p);
	if(flags != VAR_VAL_STR) {
		if(str2sint(&isv.s, &ival)<0)
			goto error;
		isv.n = ival;
	}
	if(mode==0) {
		pkv = add_var(&s, VAR_TYPE_ZERO);
		if(pkv==NULL)
			goto error;
		if(set_var_value(pkv, &isv, flags)==NULL)
			goto error;
	} else {
		shv = add_shvar(&s);
		if(shv==NULL)
			goto error;
		if(set_shvar_value(shv, &isv, flags)==NULL)
			goto error;
	}

	return 0;
error:
	LM_ERR("unable to set shv parame [%s]\n", s.s);
	return -1;
}
Пример #13
0
cons_t eval(cons_t *c, var_t *local_vars){
	cons_t p;
	switch(c->type){
	case TYPE_OPERATE:{
		int (*func)(int x, int y) = c->v.func;
		int n;
		if(c->cdr == NULL){
			printf("operate error\n");
			return p;
		}
		n  = eval(c->cdr, local_vars).v.i;
		c = c->cdr->cdr;
		while(c != NULL){
			p = eval(c, local_vars);
			n = func(n, p.v.i);
			c = c->cdr;
		}
		p.type = TYPE_INT;
		p.v.i = n;
		return p;
	}

	case TYPE_COMPARE:{
		int (*func)(int x, int y) = c->v.func;
		if(c->cdr == NULL || c->cdr->cdr == NULL){
			printf("compare error\n");
			return p;
		}
		int n1 = eval(c->cdr, local_vars).v.i;
		int n2 = eval(c->cdr->cdr, local_vars).v.i;
		p.type = func(n1, n2);
		return p;
	}
		
	case TYPE_IF:
		p = eval(c->cdr, local_vars);
		if(p.type != TYPE_NIL){
			return eval(c->cdr->cdr, local_vars);
		}else{
			return eval(c->cdr->cdr->cdr, local_vars);
		}

	case TYPE_SETQ:
		c = c->cdr;
		if(c->type == TYPE_STR){
			p = eval(c->cdr, local_vars);
			if(p.type == TYPE_INT){
				const char *name = c->v.str;
				int value = p.v.i;
				global_vars = set_var_value(global_vars, name, value);
				return p;
			}else{
				printf("setq error 1");
			}
		}else{
				printf("setq error 2");
		}
		break;

	case TYPE_DEFUN:
		c = c->cdr;
		funcs = set_func(funcs, c->v.str, c->cdr->v.car, c->cdr->cdr->v.car);
		p.type = TYPE_DEFUN;
		return p;

	case TYPE_STR:{
		func_t *f = get_func(funcs, c->v.str);
		if(f != NULL){
			// function?
			cons_t *args = f->args;
			var_t *locals = NULL;
			c = c->cdr;
			while(args != NULL){
				if(c == NULL){
					printf("func argument error\n");
					return p;
				}
				cons_t p = eval(c, local_vars);
				locals = set_var_value(locals, args->v.str, p.v.i);

				args = args->cdr;
				c = c->cdr;
			}
			p = eval(f->car, locals);
			free_vars(locals);
		}else{
			var_t *v;
			// local variable?
			v = get_var_value(local_vars, c->v.str);
			if(v == NULL){
				// global variable?
				v = get_var_value(global_vars, c->v.str);
			}
			if(v == NULL){
				printf("var get error\n");
				return p;
			}
			p.type = TYPE_INT;
			p.v.i = v->value;
		}
		break;
	}

	case TYPE_INT:
		return *c;

	case TYPE_CAR:
		return eval(c->v.car, local_vars);
	
	default:
		printf("error type %d\n", c->type);
	}
	return p;
}