⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sip_msg.c

📁 基于sip协议的网络电话源码
💻 C
📖 第 1 页 / 共 4 页
字号:
    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 + -