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

Function dm_enc_add

modules/aaa_diameter/dm_impl.c:2299–2365  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2297
2298
2299int dm_enc_add(int vendor, int code, enum dict_avp_enc_type enc)
2300{
2301 int i;
2302 struct dict_avp_enc_v *v;
2303 struct dict_avp_enc_a *a;
2304
2305 if (!dict_avp_enc_vendors) {
2306 v = calloc(1, sizeof *v);
2307 if (!v) {
2308 LM_ERR("oom for initializing vendors encoding\n");
2309 return -1;
2310 }
2311 v->vendor = vendor;
2312 dict_avp_enc_vendors = v;
2313 dict_avp_enc_vendors_no = 1;
2314 } else {
2315 /* search if there is an existing vendor */
2316 v = bsearch(&vendor, dict_avp_enc_vendors, dict_avp_enc_vendors_no, sizeof *v, dict_avp_enc_v_cmp);
2317 if (!v) {
2318 /* resize the vendors */
2319 v = realloc(dict_avp_enc_vendors, (dict_avp_enc_vendors_no + 1) * sizeof *v);
2320 if (!v) {
2321 LM_ERR("oom for reallocating vendors encoding\n");
2322 return -1;
2323 }
2324 dict_avp_enc_vendors = v;
2325 for (i = 0; i < dict_avp_enc_vendors_no; i++)
2326 if (v[i].vendor > vendor)
2327 break;
2328 if (i < dict_avp_enc_vendors_no)
2329 memmove(&v[i+1], &v[i], (dict_avp_enc_vendors_no - i) * sizeof *v);
2330 v = v + i;
2331 dict_avp_enc_vendors_no++;
2332 v->vendor = vendor;
2333 v->avps_no = 0;
2334 v->avps = NULL;
2335 }
2336 }
2337 if (!v->avps) {
2338 v->avps = calloc(1, sizeof *a);
2339 if (!v->avps) {
2340 LM_ERR("oom for initiating avps encoding\n");
2341 return -1;
2342 }
2343 v->avps_no = 1;
2344 a = v->avps;
2345 } else {
2346 /* resize the avps */
2347 a = realloc(v->avps, (v->avps_no + 1) * sizeof *a);
2348 if (!a) {
2349 LM_ERR("oom for reallocating avps encoding\n");
2350 return -1;
2351 }
2352 v->avps = a;
2353 for (i = 0; i < v->avps_no; i++)
2354 if (a[i].code > code)
2355 break;
2356 if (i < v->avps_no)

Callers 1

parse_attr_defFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected