Example #1
0
static int fixup_binary_op(void **param, int param_no)
{
	pv_spec_p sp;
	str s;

	switch (param_no) {
	case 1:
		return fixup_sgp(param);

	case 2:
		if (!(sp = pkg_malloc(sizeof(*sp)))) {
			LM_ERR("No more pkg memory!\n");
			return -1;
		}

		memset(sp, 0, sizeof(*sp));

		s.s = (char *)*param; s.len = strlen(s.s);
		if (!pv_parse_spec(&s, sp)) {
			LM_ERR("Parameter 2 only accepts pvars! Given: <%.*s>\n", s.len, s.s);
			return -1;
		}

		*param = (void *)sp;
		return 0;

	default:
		LM_ERR("Invalid parameter number: %d\n", param_no);
		return E_UNSPEC;
	}
}
Example #2
0
/* fixup functions */
static int fixup_rl_check(void **param, int param_no)
{
	switch (param_no) {
		/* pipe name */
		case 1:
			return fixup_spve(param);
			/* limit */
		case 2:
			return fixup_igp(param);
			/* algorithm */
		case 3:
			return fixup_sgp(param);
			/* error */
		default:
			LM_ERR("[BUG] too many params (%d)\n", param_no);
	}
	return E_UNSPEC;
}
Example #3
0
static int fixup_create_dlg2(void **param, int param_no)
{
	return fixup_sgp(param);
}
Example #4
0
static int fixup_resources(void** param, int param_no)
{
	struct lb_res_str_list *lb_rl;
	struct lb_grp_param *lbgp;
	struct lb_res_parse *lbp;
	pv_elem_t *model=NULL;
	str s;

	if (param_no==1) {

		lbgp = (struct lb_grp_param *)pkg_malloc(sizeof(struct lb_grp_param));
		if (lbgp==NULL) {
			LM_ERR("no more pkg mem\n");
			return E_OUT_OF_MEM;
		}
		/* try first as number */
		s.s = (char*)*param;
		s.len = strlen(s.s);
		if (str2int(&s, (unsigned int*)&lbgp->grp_no)==0) {
			lbgp->grp_pv = NULL;
			pkg_free(*param);
		} else {
			lbgp->grp_pv = (pv_spec_t*)pkg_malloc(sizeof(pv_spec_t));
			if (lbgp->grp_pv==NULL) {
				LM_ERR("no pkg memory left\n");
				return E_OUT_OF_MEM;
			}
			if (pv_parse_spec(&s, lbgp->grp_pv)==0 ||
			lbgp->grp_pv->type==PVT_NULL) {
				LM_ERR("%s is not integer nor PV !\n", (char*)*param);
				return E_UNSPEC;
			}
		}
		*param=(void *)(unsigned long)lbgp;
		return 0;

	} else if (param_no==2) {

		/* parameter is string (semi-colon separated list)
		 * of needed resources */
		lbp = (struct lb_res_parse *)pkg_malloc(sizeof(struct lb_res_parse));
		if (!lbp) {
			LM_ERR("no more pkg mem\n");
			return E_OUT_OF_MEM;
		}
		s.s = (char*)*param;
		s.len = strlen(s.s);

		if(pv_parse_format(&s ,&model) || model==NULL) {
			LM_ERR("wrong format [%s] in resource list!\n", s.s);
			return E_CFG;
		}
		/* check if there is any pv in string */
		if (!model->spec.getf && !model->next)
			lbp->type = RES_TEXT;
		else
			lbp->type = RES_ELEM;

		if (lbp->type & RES_TEXT) {
			lb_rl = parse_resources_list( (char *)(*param), 0);
			if (lb_rl==NULL) {
				LM_ERR("invalid parameter %s\n",(char *)(*param));
				return E_CFG;
			}
			pkg_free(*param);
			lbp->param = (void*)(unsigned long)lb_rl;
		} else {
			lbp->param = (void*)(unsigned long)model;
		}
		*param = (void *)(unsigned long)lbp;
		return 0;

	} else if (param_no==3) {
		/* string with flags */
		return fixup_sgp(param);

	}

	LM_CRIT("error - wrong params count (%d)\n",param_no);
	return -1;
}
Example #5
0
static int fixup_topo_hiding(void **param, int param_no)
{
	return fixup_sgp(param);
}
Example #6
0
int do_acc_fixup(void** param, int param_no)
{
	str s;
	pv_elem_p el;

	unsigned long long ival;
	unsigned long long* ival_p;

	acc_type_param_t* acc_param;

	do_acc_parser parser;

	if (param_no < 1 || param_no > 3) {
		LM_ERR("invalid param_no <%d>!\n", param_no);
		return -1;
	}

	switch (param_no) {
	case 1:
		parser=do_acc_type_parser;
		s.s = *param;
		s.len = strlen(s.s);

		if (pv_parse_format(&s, &el) < 0) {
			LM_ERR("invalid format <%.*s>!\n", s.len, s.s);
			return -1;
		}

		acc_param=pkg_malloc(sizeof(acc_type_param_t));
		if (acc_param == NULL) {
			LM_ERR("no more pkg mem!\n");
			return -1;
		}

		memset(acc_param, 0, sizeof(acc_type_param_t));

		if (el->next == 0 && el->spec.getf == 0) {
			pv_elem_free_all(el);
			if ( (ival=do_acc_parse(&el->text, parser)) < 0) {
				LM_ERR("Invalid value <%.*s>!\n", el->text.len, el->text.s);
				return -1;
			}

			acc_param->t = DO_ACC_PARAM_TYPE_VALUE;
			acc_param->u.ival = ival;
		} else {
			acc_param->t = DO_ACC_PARAM_TYPE_PV;
			acc_param->u.pval = el;
		}

		*param = acc_param;

		break;

	case 2:
		parser=do_acc_flags_parser;
		s.s = *param;
		s.len = strlen(s.s);

		if ( (ival=do_acc_parse(&s, parser)) < 0) {
			LM_ERR("Invalid value <%.*s>!\n", s.len, s.s);
			return -1;
		}

		if ((ival_p=pkg_malloc(sizeof(unsigned long long))) == NULL) {
			LM_ERR("no more pkg mem!\n");
			return -1;
		}

		*ival_p = ival;

		*param = ival_p;
		break;
	case 3:
		return fixup_sgp(param);
	}

	return 0;
}