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

Function parse_command_def

modules/aaa_diameter/app_opensips/avps.c:886–1034  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

884#define CMD_REQUEST 1
885#define CMD_ANSWER 2
886int parse_command_def(char *line, FILE *fp, int cmd_type)
887{
888 struct dict_object *cmd = NULL;
889 unsigned int cmd_code = -1;
890 char *p = line, cmd_name[128 + 1], *bkp, *newp;
891 size_t buflen = strlen(line);
892 int i, len = buflen, cmd_name_len = -1, avp_count = 0;
893 struct dm_avp_def avps[128];
894
895 switch (cmd_type) {
896 case CMD_REQUEST:
897 if (len < strlen("REQUEST") || memcmp(p, "REQUEST", 7))
898 return 1;
899
900 p += 7;
901 len -= 7;
902 break;
903
904 case CMD_ANSWER:
905 if (len < strlen("ANSWER") || memcmp(p, "ANSWER", 6))
906 return 1;
907
908 p += 6;
909 len -= 6;
910 break;
911 }
912
913 cmd_code = (unsigned int)strtoul(p, &newp, 10);
914 if (cmd_code < 0) {
915 LOG_ERROR("bad AVP cmd code: '... | %s'\n", p);
916 return -1;
917 }
918
919 len -= newp - p;
920 p = newp;
921
922 while (isspace(*p)) { p++; len--; }
923
924 bkp = p;
925 p += len - 1;
926
927 while (p > bkp && isspace(*p)) { p--; }
928 p++;
929
930 cmd_name_len = p - bkp;
931 if (cmd_name_len > 128) {
932 LOG_ERROR("max Command Name length exceeded (128)\n");
933 return -1;
934 }
935
936 memcpy(cmd_name, bkp, cmd_name_len);
937 cmd_name[cmd_name_len] = '\0';
938
939 LOG_DBG("parsed Cmd-Code %d (%s)\n", cmd_code, cmd_name);
940
941 while (getline(&line, &buflen, fp) >= 0) {
942 p = line;
943 len = strlen(p);

Callers 1

parse_extra_avpsFunction · 0.85

Calls 1

parse_avp_defFunction · 0.85

Tested by

no test coverage detected