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

Function parse_avp_def

modules/aaa_diameter/app_opensips/avps.c:474–555  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

472
473
474static int parse_avp_def(struct dm_avp_def *avps, int *avp_count, char *line, int len)
475{
476 char *p = line, *avp_name;
477
478 avp_name = p;
479 while (*p && !isspace(*p)) { p++; len--; }
480 avps[*avp_count].name_len = p - avp_name;
481
482 if (avps[*avp_count].name_len > 64) {
483 LOG_ERROR("AVP max name length exceeded (64)\n");
484 return -1;
485 }
486
487 memcpy(&avps[*avp_count].name, avp_name, avps[*avp_count].name_len);
488 avps[*avp_count].name[avps[*avp_count].name_len] = '\0';
489
490 while (isspace(*p)) { p++; len--; }
491
492 if (*p != '|')
493 goto error;
494
495 p++; len--;
496 while (isspace(*p)) { p++; len--; }
497
498 switch (*p) {
499 case 'F':
500 if (len < strlen("FIXED_HEAD") || memcmp(p, "FIXED_HEAD", 10))
501 goto error;
502
503 avps[*avp_count].pos = RULE_FIXED_HEAD;
504 p += 10;
505 len -= 10;
506 break;
507
508 case 'R':
509 if (len < strlen("REQUIRED") || memcmp(p, "REQUIRED", 8))
510 goto error;
511
512 avps[*avp_count].pos = RULE_REQUIRED;
513 p += 8;
514 len -= 8;
515 break;
516
517 case 'O':
518 if (len < strlen("OPTIONAL") || memcmp(p, "OPTIONAL", 8))
519 goto error;
520
521 avps[*avp_count].pos = RULE_OPTIONAL;
522 p += 8;
523 len -= 8;
524 break;
525
526 default:
527 LOG_ERROR("bad AVP flag in: '... | %s'\n", p);
528 goto error;
529 }
530
531 while (isspace(*p)) { p++; len--; }

Callers 2

parse_attr_defFunction · 0.85
parse_command_defFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected