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

Function parse_disposition

parser/parse_disposition.c:41–334  ·  view source on GitHub ↗

parse a string that supposed to be a disposition and fills up the structure * Returns: -2 : parse error -1 : error * 0 : success */

Source from the content-addressed store, hash-verified

39 -1 : error
40 * 0 : success */
41int parse_disposition( str *s, struct disposition *disp)
42{
43 enum { FIND_TYPE, TYPE, END_TYPE, FIND_PARAM, PARAM, END_PARAM, FIND_VAL,
44 FIND_QUOTED_VAL, QUOTED_VAL, SKIP_QUOTED_VAL, VAL, END_VAL,
45 F_LF, F_CR, F_CRLF};
46 struct disposition_param *disp_p;
47 struct disposition_param *new_p;
48 int state;
49 int saved_state;
50 char *tmp;
51 char *end;
52
53 state = saved_state = FIND_TYPE;
54 end = s->s + s->len;
55 disp_p = 0;
56
57 for( tmp=s->s; tmp<end; tmp++) {
58 switch(*tmp) {
59 case ' ':
60 case '\t':
61 switch (state) {
62 case FIND_QUOTED_VAL:
63 disp_p->body.s = tmp;
64 state = QUOTED_VAL;
65 break;
66 case SKIP_QUOTED_VAL:
67 state = QUOTED_VAL;
68 break;
69 case TYPE:
70 disp->type.len = tmp - disp->type.s;
71 state = END_TYPE;
72 break;
73 case PARAM:
74 disp_p->name.len = tmp - disp_p->name.s;
75 state = END_PARAM;
76 break;
77 case VAL:
78 disp_p->body.len = tmp - disp_p->body.s;
79 state = END_VAL;
80 break;
81 case F_CRLF:
82 case F_LF:
83 case F_CR:
84 /*previous=crlf and now =' '*/
85 state=saved_state;
86 break;
87 }
88 break;
89 case '\n':
90 switch (state) {
91 case TYPE:
92 disp->type.len = tmp - disp->type.s;
93 saved_state = END_TYPE;
94 state = F_LF;
95 break;
96 case PARAM:
97 disp_p->name.len = tmp - disp_p->name.s;
98 saved_state = END_PARAM;

Callers 2

sip_validate_hdrsFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected