📄 sip_msg.c
字号:
hdr->cseq = 0; hdr->method.id = PJSIP_OTHER_METHOD; hdr->method.name.ptr = NULL; hdr->method.name.slen = 0; return hdr;}PJ_DEF(pjsip_cseq_hdr*) pjsip_cseq_hdr_create( pj_pool_t *pool ){ void *mem = pj_pool_alloc(pool, sizeof(pjsip_cseq_hdr)); return pjsip_cseq_hdr_init(pool, mem);}static int pjsip_cseq_hdr_print( pjsip_cseq_hdr *hdr, char *buf, pj_size_t size){ char *p = buf; int len; if ((pj_ssize_t)size < hdr->name.slen + hdr->method.name.slen + 15) return -1; pj_memcpy(p, hdr->name.ptr, hdr->name.slen); p += hdr->name.slen; *p++ = ':'; *p++ = ' '; len = pj_utoa(hdr->cseq, p); p += len; *p++ = ' '; pj_memcpy(p, hdr->method.name.ptr, hdr->method.name.slen); p += hdr->method.name.slen; *p = '\0'; return p-buf;}static pjsip_cseq_hdr* pjsip_cseq_hdr_clone( pj_pool_t *pool, const pjsip_cseq_hdr *rhs){ pjsip_cseq_hdr *hdr = pjsip_cseq_hdr_create(pool); hdr->cseq = rhs->cseq; pjsip_method_copy(pool, &hdr->method, &rhs->method); return hdr;}static pjsip_cseq_hdr* pjsip_cseq_hdr_shallow_clone( pj_pool_t *pool, const pjsip_cseq_hdr *rhs ){ pjsip_cseq_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr)); pj_memcpy(hdr, rhs, sizeof(*hdr)); return hdr;}////////////////////////////////////////////////////////////////////////////////* * Contact header. */static int pjsip_contact_hdr_print( pjsip_contact_hdr *hdr, char *buf, pj_size_t size);static pjsip_contact_hdr* pjsip_contact_hdr_clone( pj_pool_t *pool, const pjsip_contact_hdr *hdr);static pjsip_contact_hdr* pjsip_contact_hdr_shallow_clone( pj_pool_t *pool, const pjsip_contact_hdr *);static pjsip_hdr_vptr contact_hdr_vptr = { (pjsip_hdr_clone_fptr) &pjsip_contact_hdr_clone, (pjsip_hdr_clone_fptr) &pjsip_contact_hdr_shallow_clone, (pjsip_hdr_print_fptr) &pjsip_contact_hdr_print,};PJ_DEF(pjsip_contact_hdr*) pjsip_contact_hdr_init( pj_pool_t *pool, void *mem ){ pjsip_contact_hdr *hdr = mem; PJ_UNUSED_ARG(pool); pj_bzero(mem, sizeof(pjsip_contact_hdr)); init_hdr(hdr, PJSIP_H_CONTACT, &contact_hdr_vptr); hdr->expires = -1; pj_list_init(&hdr->other_param); return hdr;}PJ_DEF(pjsip_contact_hdr*) pjsip_contact_hdr_create( pj_pool_t *pool ){ void *mem = pj_pool_alloc(pool, sizeof(pjsip_contact_hdr)); return pjsip_contact_hdr_init(pool, mem);}static int pjsip_contact_hdr_print( pjsip_contact_hdr *hdr, char *buf, pj_size_t size){ if (hdr->star) { char *p = buf; if ((pj_ssize_t)size < hdr->name.slen + 6) return -1; pj_memcpy(p, hdr->name.ptr, hdr->name.slen); p += hdr->name.slen; *p++ = ':'; *p++ = ' '; *p++ = '*'; return p - buf; } else { int printed; char *startbuf = buf; char *endbuf = buf + size; copy_advance(buf, hdr->name); *buf++ = ':'; *buf++ = ' '; printed = pjsip_uri_print(PJSIP_URI_IN_CONTACT_HDR, hdr->uri, buf, endbuf-buf); if (printed < 1) return -1; buf += printed; if (hdr->q1000) { if (buf+19 >= endbuf) return -1; /* printed = sprintf(buf, ";q=%u.%03u", hdr->q1000/1000, hdr->q1000 % 1000); */ pj_memcpy(buf, ";q=", 3); printed = pj_utoa(hdr->q1000/1000, buf+3); buf += printed + 3; *buf++ = '.'; printed = pj_utoa(hdr->q1000 % 1000, buf); buf += printed; } if (hdr->expires >= 0) { if (buf+23 >= endbuf) return -1; pj_memcpy(buf, ";expires=", 9); printed = pj_utoa(hdr->expires, buf+9); buf += printed + 9; } printed = pjsip_param_print_on(&hdr->other_param, buf, endbuf-buf, &pjsip_TOKEN_SPEC, &pjsip_TOKEN_SPEC, ';'); if (printed < 0) return printed; buf += printed; return buf-startbuf; }}static pjsip_contact_hdr* pjsip_contact_hdr_clone(pj_pool_t *pool, const pjsip_contact_hdr *rhs){ pjsip_contact_hdr *hdr = pjsip_contact_hdr_create(pool); hdr->star = rhs->star; if (hdr->star) return hdr; hdr->uri = pjsip_uri_clone(pool, rhs->uri); hdr->q1000 = rhs->q1000; hdr->expires = rhs->expires; pjsip_param_clone(pool, &hdr->other_param, &rhs->other_param); return hdr;}static pjsip_contact_hdr* pjsip_contact_hdr_shallow_clone( pj_pool_t *pool, const pjsip_contact_hdr *rhs){ pjsip_contact_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr)); pj_memcpy(hdr, rhs, sizeof(*hdr)); pjsip_param_shallow_clone(pool, &hdr->other_param, &rhs->other_param); return hdr;}////////////////////////////////////////////////////////////////////////////////* * Content-Type header.. */static int pjsip_ctype_hdr_print( pjsip_ctype_hdr *hdr, char *buf, pj_size_t size);static pjsip_ctype_hdr* pjsip_ctype_hdr_clone(pj_pool_t *pool, const pjsip_ctype_hdr *hdr);#define pjsip_ctype_hdr_shallow_clone pjsip_ctype_hdr_clonestatic pjsip_hdr_vptr ctype_hdr_vptr = { (pjsip_hdr_clone_fptr) &pjsip_ctype_hdr_clone, (pjsip_hdr_clone_fptr) &pjsip_ctype_hdr_shallow_clone, (pjsip_hdr_print_fptr) &pjsip_ctype_hdr_print,};PJ_DEF(pjsip_ctype_hdr*) pjsip_ctype_hdr_init( pj_pool_t *pool, void *mem ){ pjsip_ctype_hdr *hdr = mem; PJ_UNUSED_ARG(pool); pj_bzero(mem, sizeof(pjsip_ctype_hdr)); init_hdr(hdr, PJSIP_H_CONTENT_TYPE, &ctype_hdr_vptr); return hdr;}PJ_DEF(pjsip_ctype_hdr*) pjsip_ctype_hdr_create( pj_pool_t *pool ){ void *mem = pj_pool_alloc(pool, sizeof(pjsip_ctype_hdr)); return pjsip_ctype_hdr_init(pool, mem);}static int print_media_type(char *buf, const pjsip_media_type *media){ char *p = buf; pj_memcpy(p, media->type.ptr, media->type.slen); p += media->type.slen; *p++ = '/'; pj_memcpy(p, media->subtype.ptr, media->subtype.slen); p += media->subtype.slen; if (media->param.slen) { pj_memcpy(p, media->param.ptr, media->param.slen); p += media->param.slen; } return p-buf;}static int pjsip_ctype_hdr_print( pjsip_ctype_hdr *hdr, char *buf, pj_size_t size){ char *p = buf; int len; if ((pj_ssize_t)size < hdr->name.slen + hdr->media.type.slen + hdr->media.subtype.slen + hdr->media.param.slen + 8) { return -1; } pj_memcpy(p, hdr->name.ptr, hdr->name.slen); p += hdr->name.slen; *p++ = ':'; *p++ = ' '; len = print_media_type(p, &hdr->media); p += len; *p = '\0'; return p-buf;}static pjsip_ctype_hdr* pjsip_ctype_hdr_clone( pj_pool_t *pool, const pjsip_ctype_hdr *rhs){ pjsip_ctype_hdr *hdr = pjsip_ctype_hdr_create(pool); pj_strdup(pool, &hdr->media.type, &rhs->media.type); pj_strdup(pool, &hdr->media.subtype, &rhs->media.subtype); pj_strdup(pool, &hdr->media.param, &rhs->media.param); return hdr;}////////////////////////////////////////////////////////////////////////////////* * Expires header. */PJ_DEF(pjsip_expires_hdr*) pjsip_expires_hdr_init( pj_pool_t *pool, void *mem, int value){ pjsip_expires_hdr *hdr = mem; PJ_UNUSED_ARG(pool); init_hdr(hdr, PJSIP_H_EXPIRES, &generic_int_hdr_vptr); hdr->ivalue = value; return hdr;}PJ_DEF(pjsip_expires_hdr*) pjsip_expires_hdr_create( pj_pool_t *pool, int value ){ void *mem = pj_pool_alloc(pool, sizeof(pjsip_expires_hdr)); return pjsip_expires_hdr_init(pool, mem, value);}////////////////////////////////////////////////////////////////////////////////* * To or From header. */static int pjsip_fromto_hdr_print( pjsip_fromto_hdr *hdr, char *buf, pj_size_t size);static pjsip_fromto_hdr* pjsip_fromto_hdr_clone( pj_pool_t *pool, const pjsip_fromto_hdr *hdr);static pjsip_fromto_hdr* pjsip_fromto_hdr_shallow_clone( pj_pool_t *pool, const pjsip_fromto_hdr *hdr);static pjsip_hdr_vptr fromto_hdr_vptr = { (pjsip_hdr_clone_fptr) &pjsip_fromto_hdr_clone, (pjsip_hdr_clone_fptr) &pjsip_fromto_hdr_shallow_clone, (pjsip_hdr_print_fptr) &pjsip_fromto_hdr_print,};PJ_DEF(pjsip_from_hdr*) pjsip_from_hdr_init( pj_pool_t *pool, void *mem ){ pjsip_from_hdr *hdr = mem; PJ_UNUSED_ARG(pool); pj_bzero(mem, sizeof(pjsip_from_hdr)); init_hdr(hdr, PJSIP_H_FROM, &fromto_hdr_vptr); pj_list_init(&hdr->other_param); return hdr;}PJ_DEF(pjsip_from_hdr*) pjsip_from_hdr_create( pj_pool_t *pool ){ void *mem = pj_pool_alloc(pool, sizeof(pjsip_from_hdr)); return pjsip_from_hdr_init(pool, mem);}PJ_DEF(pjsip_to_hdr*) pjsip_to_hdr_init( pj_pool_t *pool, void *mem ){ pjsip_to_hdr *hdr = mem; PJ_UNUSED_ARG(pool); pj_bzero(mem, sizeof(pjsip_to_hdr)); init_hdr(hdr, PJSIP_H_TO, &fromto_hdr_vptr); pj_list_init(&hdr->other_param); return hdr;}PJ_DEF(pjsip_to_hdr*) pjsip_to_hdr_create( pj_pool_t *pool ){ void *mem = pj_pool_alloc(pool, sizeof(pjsip_to_hdr)); return pjsip_to_hdr_init(pool, mem);}PJ_DEF(pjsip_from_hdr*) pjsip_fromto_hdr_set_from( pjsip_fromto_hdr *hdr ){ hdr->type = PJSIP_H_FROM; hdr->name = hdr->sname = pjsip_hdr_names[PJSIP_H_FROM]; return hdr;}PJ_DEF(pjsip_to_hdr*) pjsip_fromto_hdr_set_to( pjsip_fromto_hdr *hdr ){ hdr->type = PJSIP_H_TO; hdr->name = hdr->sname = pjsip_hdr_names[PJSIP_H_TO]; return hdr;}static int pjsip_fromto_hdr_print( pjsip_fromto_hdr *hdr, char *buf, pj_size_t size){ int printed; char *startbuf = buf; char *endbuf = buf + size; copy_advance(buf, hdr->name); *buf++ = ':'; *buf++ = ' '; printed = pjsip_uri_print(PJSIP_URI_IN_FROMTO_HDR, hdr->uri, buf, endbuf-buf); if (printed < 1) return -1; buf += printed; copy_advance_pair(buf, ";tag=", 5, hdr->tag); printed = pjsip_param_print_on(&hdr->other_param, buf, endbuf-buf, &pjsip_TOKEN_SPEC, &pjsip_TOKEN_SPEC, ';'); if (printed < 0) return -1; buf += printed; return buf-startbuf;}static pjsip_fromto_hdr* pjsip_fromto_hdr_clone( pj_pool_t *pool, const pjsip_fromto_hdr *rhs){ pjsip_fromto_hdr *hdr = pjsip_from_hdr_create(pool); hdr->type = rhs->type; hdr->name = rhs->name; hdr->sname = rhs->sname; hdr->uri = pjsip_uri_clone(pool, rhs->uri); pj_strdup( pool, &hdr->tag, &rhs->tag); pjsip_param_clone( pool, &hdr->other_param, &rhs->other_param); return hdr;}static pjsip_fromto_hdr* pjsip_fromto_hdr_shallow_clone( pj_pool_t *pool, const pjsip_fromto_hdr *rhs){ pjsip_fromto_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr)); pj_memcpy(hdr, rhs, sizeof(*hdr)); pjsip_param_shallow_clone( pool, &hdr->other_param, &rhs->other_param); return hdr;}////////////////////////////////////////////////////////////////////////////////* * Max-Forwards header. */PJ_DEF(pjsip_max_fwd_hdr*) pjsip_max_fwd_hdr_init( pj_pool_t *pool, void *mem, int value){ pjsip_max_fwd_hdr *hdr = mem; PJ_UNUSED_ARG(pool); init_hdr(hdr, PJSIP_H_MAX_FORWARDS, &generic_int_hdr_vptr); hdr->ivalue = value; return hdr;}PJ_DEF(pjsip_max_fwd_hdr*) pjsip_max_fwd_hdr_create(pj_pool_t *pool, int value){ void *mem = pj_pool_alloc(pool, sizeof(pjsip_max_fwd_hdr)); return pjsip_max_fwd_hdr_init(pool, mem, value);}////////////////////////////////////////////////////////////////////////////////* * Min-Expires header. */PJ_DEF(pjsip_min_expires_hdr*) pjsip_min_expires_hdr_init( pj_pool_t *pool, void *mem, int value ){ pjsip_min_expires_hdr *hdr = mem; PJ_UNUSED_ARG(pool); init_hdr(hdr, PJSIP_H_MIN_EXPIRES, &generic_int_hdr_vptr); hdr->ivalue = value; return hdr;}PJ_DEF(pjsip_min_expires_hdr*) pjsip_min_expires_hdr_create(pj_pool_t *pool, int value ){ void *mem = pj_pool_alloc(pool, sizeof(pjsip_min_expires_hdr)); return pjsip_min_expires_hdr_init(pool, mem, value );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -