static int print_digest_challenge( pjsip_digest_challenge *chal, char *buf, pj_size_t size) { pj_ssize_t printed; char *startbuf = buf; char *endbuf = buf + size; const pjsip_parser_const_t *pc = pjsip_parser_const(); /* Allow empty realm, see http://trac.pjsip.org/repos/ticket/1061 */ copy_advance_pair_quote(buf, " realm=", 7, chal->realm, '"', '"'); copy_advance_pair_quote_cond(buf, ",domain=", 8, chal->domain, '"', '"'); copy_advance_pair_quote_cond(buf, ",nonce=", 7, chal->nonce, '"', '"'); copy_advance_pair_quote_cond(buf, ",opaque=", 8, chal->opaque, '"', '"'); if (chal->stale) { pj_str_t true_str = { "true", 4 }; copy_advance_pair(buf, ",stale=", 7, true_str); } copy_advance_pair(buf, ",algorithm=", 11, chal->algorithm); copy_advance_pair_quote_cond(buf, ",qop=", 5, chal->qop, '"', '"'); printed = pjsip_param_print_on(&chal->other_param, buf, endbuf-buf, &pc->pjsip_TOKEN_SPEC, &pc->pjsip_TOKEN_SPEC, ','); if (printed < 0) return -1; buf += printed; return (int)(buf-startbuf); }
static int print_digest_credential(pjsip_digest_credential *cred, char *buf, pj_size_t size) { pj_ssize_t printed; char *startbuf = buf; char *endbuf = buf + size; const pjsip_parser_const_t *pc = pjsip_parser_const(); copy_advance_pair_quote_cond(buf, "username="******"', '"'); copy_advance_pair_quote_cond_always(buf, ", realm=", 8, cred->realm, '"', '"'); copy_advance_pair_quote(buf, ", nonce=", 8, cred->nonce, '"', '"'); copy_advance_pair_quote_cond(buf, ", uri=", 6, cred->uri, '"', '"'); copy_advance_pair_quote(buf, ", response=", 11, cred->response, '"', '"'); copy_advance_pair(buf, ", algorithm=", 12, cred->algorithm); copy_advance_pair_quote_cond(buf, ", cnonce=", 9, cred->cnonce, '"', '"'); copy_advance_pair_quote_cond(buf, ", opaque=", 9, cred->opaque, '"', '"'); //Note: there's no dbl-quote in qop in Authorization header // (unlike WWW-Authenticate) //copy_advance_pair_quote_cond(buf, ", qop=", 6, cred->qop, '"', '"'); copy_advance_pair(buf, ", qop=", 6, cred->qop); copy_advance_pair(buf, ", nc=", 5, cred->nc); printed = pjsip_param_print_on(&cred->other_param, buf, endbuf-buf, &pc->pjsip_TOKEN_SPEC, &pc->pjsip_TOKEN_SPEC, ','); if (printed < 0) return -1; buf += printed; return (int) (buf-startbuf); }
static int replaces_hdr_print( pjsip_replaces_hdr *hdr, char *buf, pj_size_t size) { char *p = buf; char *endbuf = buf+size; int printed; const pjsip_parser_const_t *pc = pjsip_parser_const(); copy_advance(p, hdr->name); *p++ = ':'; *p++ = ' '; copy_advance(p, hdr->call_id); copy_advance_pair(p, ";to-tag=", 8, hdr->to_tag); copy_advance_pair(p, ";from-tag=", 10, hdr->from_tag); if (hdr->early_only) { const pj_str_t str_early_only = { ";early-only", 11 }; copy_advance(p, str_early_only); } printed = pjsip_param_print_on(&hdr->other_param, p, endbuf-p, &pc->pjsip_TOKEN_SPEC, &pc->pjsip_TOKEN_SPEC, ';'); if (printed < 0) return printed; p += printed; return p - buf; }
static int pjsip_event_hdr_print( pjsip_event_hdr *hdr, char *buf, pj_size_t size) { char *p = buf; char *endbuf = buf+size; pj_ssize_t printed; const pjsip_parser_const_t *pc = pjsip_parser_const(); copy_advance(p, hdr->name); *p++ = ':'; *p++ = ' '; copy_advance(p, hdr->event_type); copy_advance_pair(p, ";id=", 4, hdr->id_param); printed = pjsip_param_print_on(&hdr->other_param, p, endbuf-p, &pc->pjsip_TOKEN_SPEC, &pc->pjsip_TOKEN_SPEC, ';'); if (printed < 0) return (int)printed; p += printed; return (int)(p - buf); }