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

Function add_rule

modules/drouting/dr_load.c:133–196  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

131}
132
133static int add_rule(rt_data_t *rdata, char *grplst, str *prefix,
134 rt_info_t *rule, osips_malloc_f malloc_f, osips_free_f free_f,MD5_CTX* hash_ctx)
135{
136 long int t;
137 char *tmp;
138 char *ep;
139 int n;
140
141 tmp=grplst;
142 n=0;
143 /* parse the grplst */
144 while(tmp && (*tmp!=0)) {
145 errno = 0;
146 t = strtol(tmp, &ep, 10);
147 if (ep == tmp) {
148 LM_ERR("bad grp id '%c' (%d)[%s]\n",
149 *ep, (int)(ep-grplst), grplst);
150 goto error;
151 }
152 if ((!IS_SPACE(*ep)) && (*ep != SEP) && (*ep != SEP1) && (*ep!=0)) {
153 LM_ERR("bad char %c (%d) [%s]\n",
154 *ep, (int)(ep-grplst), grplst);
155 goto error;
156 }
157 if (errno == ERANGE && (t== LONG_MAX || t== LONG_MIN)) {
158 LM_ERR("out of bounds\n");
159 goto error;
160 }
161 n++;
162 /* add rule -> has prefix? */
163 if (prefix->len) {
164 /* add the routing rule */
165 if ( add_prefix(rdata->pt, prefix, rule, (unsigned int)t,
166 malloc_f, free_f)!=0 ) {
167 LM_ERR("failed to add prefix route\n");
168 goto error;
169 }
170 } else {
171 if ( add_rt_info( &rdata->noprefix, rule, (unsigned int)t,
172 malloc_f, free_f)!=0 ) {
173 LM_ERR("failed to add prefixless route\n");
174 goto error;
175 }
176 }
177 /* keep parsing */
178 if(IS_SPACE(*ep))
179 EAT_SPACE(ep);
180 if(ep && (*ep == SEP || *ep == SEP1))
181 ep++;
182 tmp = ep;
183 }
184
185 if(n==0) {
186 LM_ERR("no id in grp list [%s]\n",
187 grplst);
188 goto error;
189 }
190

Callers 1

dr_load_routing_infoFunction · 0.70

Calls 3

add_prefixFunction · 0.85
add_rt_infoFunction · 0.85
hash_ruleFunction · 0.70

Tested by

no test coverage detected