MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / check_cmd

Function check_cmd

mod_fix.c:83–147  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

81}
82
83int check_cmd(const struct cmd_param *params, action_elem_t *elems)
84{
85 int i;
86 const struct cmd_param *param;
87 pv_elem_t *pve;
88
89 for (param=params, i=1; param->flags; param++, i++) {
90 pve = NULL;
91
92 if (elems[i].type == NOSUBTYPE || elems[i].type == NULLV_ST) {
93 if (!(param->flags & CMD_PARAM_OPT)) {
94 LM_BUG("Mandatory parameter missing\n");
95 return -1;
96 } else {
97 continue;
98 }
99 }
100
101 if (param->flags & CMD_PARAM_INT) {
102 if (elems[i].type != NUMBER_ST && elems[i].type != SCRIPTVAR_ST) {
103 LM_ERR("Param [%d] expected to be an integer or variable\n", i);
104 return -1;
105 }
106 } else if (param->flags & CMD_PARAM_STR) {
107 if (elems[i].type == STR_ST) {
108 if (!(param->flags & CMD_PARAM_NO_EXPAND) &&
109 pv_parse_format(&elems[i].u.s, &pve) < 0) {
110 LM_ERR("Failed to parse formatted string in param "
111 "[%d]\n",i);
112 return -1;
113 }
114
115 if ((!(param->flags & CMD_PARAM_NO_EXPAND) &&
116 (pve->next || pve->spec.type != PVT_NONE)) &&
117 (param->flags & CMD_PARAM_STATIC)) {
118 LM_ERR("Param [%d] does not support formatted strings\n",i);
119 return -1;
120 }
121
122 if (pve)
123 pv_elem_free_all(pve);
124 } else if (elems[i].type == SCRIPTVAR_ST) {
125 if (param->flags & CMD_PARAM_STATIC) {
126 LM_ERR("Param [%d] does not support variables\n",i);
127 return -1;
128 }
129 } else {
130 LM_ERR("Param [%d] expected to be a string or variable\n", i);
131 return -1;
132 }
133 } else if (param->flags & CMD_PARAM_VAR) {
134 if (elems[i].type != SCRIPTVAR_ST) {
135 LM_ERR("Param [%d] expected to be a variable\n",i);
136 return -1;
137 }
138 } else if (param->flags & CMD_PARAM_REGEX) {
139 if (elems[i].type != STR_ST && elems[i].type != SCRIPTVAR_ST) {
140 LM_ERR("Param [%d] expected to be an integer or variable\n", i);

Callers 1

check_actionsFunction · 0.85

Calls 2

pv_parse_formatFunction · 0.85
pv_elem_free_allFunction · 0.85

Tested by

no test coverage detected