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

Function parse_digest_param

parser/digest/digest_parser.c:162–216  ·  view source on GitHub ↗

* Parse a digest parameter */

Source from the content-addressed store, hash-verified

160 * Parse a digest parameter
161 */
162static inline int parse_digest_param(str* _s, dig_cred_t* _c)
163{
164 dig_par_t t;
165 str* ptr;
166 str dummy;
167
168 /* Get type of the parameter */
169 if (parse_param_name(_s, &t) < 0) {
170 return -1;
171 }
172
173 _s->s++; /* skip = */
174 _s->len--;
175
176 /* Find the beginning of body */
177 trim_leading(_s);
178
179 if (_s->len == 0) {
180 return -2;
181 }
182
183 /* Decide in which attribute the
184 * body content will be stored
185 */
186 switch(t) {
187 case PAR_USERNAME: ptr = &_c->username.whole; break;
188 case PAR_REALM: ptr = &_c->realm; break;
189 case PAR_NONCE: ptr = &_c->nonce; break;
190 case PAR_URI: ptr = &_c->uri; break;
191 case PAR_RESPONSE: ptr = &_c->response; break;
192 case PAR_CNONCE: ptr = &_c->cnonce; break;
193 case PAR_OPAQUE: ptr = &_c->opaque; break;
194 case PAR_QOP: ptr = &_c->qop.qop_str; break;
195 case PAR_NC: ptr = &_c->nc; break;
196 case PAR_ALGORITHM: ptr = &_c->alg.alg_str; break;
197 case PAR_AUTS: ptr = &_c->auts; break;
198 case PAR_OTHER: ptr = &dummy; break;
199 default: ptr = &dummy; break;
200 }
201
202 /* If the first character is quote, it is
203 * a quoted string, otherwise it is a token
204 */
205 if (_s->s[0] == '\"') {
206 if (parse_quoted(_s, ptr) < 0) {
207 return -3;
208 }
209 } else {
210 if (parse_token(_s, ptr) < 0) {
211 return -4;
212 }
213 }
214
215 return 0;
216}
217
218
219/*

Callers 1

parse_digest_paramsFunction · 0.85

Calls 4

trim_leadingFunction · 0.85
parse_quotedFunction · 0.85
parse_tokenFunction · 0.85
parse_param_nameFunction · 0.70

Tested by

no test coverage detected