📄 sip_msg.c
字号:
*p++ = '\n';
*p++ = '\r';
*p++ = '\n';
}
*p = '\0';
return p-buf;
}
///////////////////////////////////////////////////////////////////////////////
PJ_DEF(void*) pjsip_hdr_clone( pj_pool_t *pool, const void *hdr_ptr )
{
const pjsip_hdr *hdr = hdr_ptr;
return (*hdr->vptr->clone)(pool, hdr_ptr);
}
PJ_DEF(void*) pjsip_hdr_shallow_clone( pj_pool_t *pool, const void *hdr_ptr )
{
const pjsip_hdr *hdr = hdr_ptr;
return (*hdr->vptr->shallow_clone)(pool, hdr_ptr);
}
PJ_DEF(int) pjsip_hdr_print_on( void *hdr_ptr, char *buf, pj_size_t len)
{
pjsip_hdr *hdr = hdr_ptr;
return (*hdr->vptr->print_on)(hdr_ptr, buf, len);
}
///////////////////////////////////////////////////////////////////////////////
/*
* Status/Reason Phrase
*/
PJ_DEF(const pj_str_t*) pjsip_get_status_text(int code)
{
static int is_initialized;
if (is_initialized == 0) {
is_initialized = 1;
init_status_phrase();
}
return (code>=100 && code<(sizeof(status_phrase)/sizeof(status_phrase[0]))) ?
&status_phrase[code] : &status_phrase[0];
}
///////////////////////////////////////////////////////////////////////////////
/*
* Generic pjsip_hdr_names/hvalue header.
*/
static int pjsip_generic_string_hdr_print( pjsip_generic_string_hdr *hdr,
char *buf, pj_size_t size);
static pjsip_generic_string_hdr* pjsip_generic_string_hdr_clone( pj_pool_t *pool,
const pjsip_generic_string_hdr *hdr);
static pjsip_generic_string_hdr* pjsip_generic_string_hdr_shallow_clone( pj_pool_t *pool,
const pjsip_generic_string_hdr *hdr );
static pjsip_hdr_vptr generic_hdr_vptr =
{
(pjsip_hdr_clone_fptr) &pjsip_generic_string_hdr_clone,
(pjsip_hdr_clone_fptr) &pjsip_generic_string_hdr_shallow_clone,
(pjsip_hdr_print_fptr) &pjsip_generic_string_hdr_print,
};
PJ_DEF(void) pjsip_generic_string_hdr_init2(pjsip_generic_string_hdr *hdr,
pj_str_t *hname,
pj_str_t *hvalue)
{
init_hdr(hdr, PJSIP_H_OTHER, &generic_hdr_vptr);
if (hname) {
hdr->name = *hname;
hdr->sname = *hname;
}
if (hvalue) {
hdr->hvalue = *hvalue;
} else {
hdr->hvalue.ptr = NULL;
hdr->hvalue.slen = 0;
}
}
PJ_DEF(pjsip_generic_string_hdr*)
pjsip_generic_string_hdr_init( pj_pool_t *pool,
void *mem,
const pj_str_t *hnames,
const pj_str_t *hvalue)
{
pjsip_generic_string_hdr *hdr = mem;
pj_str_t dup_hname, dup_hval;
if (hnames) {
pj_strdup(pool, &dup_hname, hnames);
} else {
dup_hname.slen = 0;
}
if (hvalue) {
pj_strdup(pool, &dup_hval, hvalue);
} else {
dup_hval.slen = 0;
}
pjsip_generic_string_hdr_init2(hdr, &dup_hname, &dup_hval);
return hdr;
}
PJ_DEF(pjsip_generic_string_hdr*)
pjsip_generic_string_hdr_create( pj_pool_t *pool,
const pj_str_t *hnames,
const pj_str_t *hvalue)
{
void *mem = pj_pool_alloc(pool, sizeof(pjsip_generic_string_hdr));
return pjsip_generic_string_hdr_init(pool, mem, hnames, hvalue);
}
static int pjsip_generic_string_hdr_print( pjsip_generic_string_hdr *hdr,
char *buf, pj_size_t size)
{
char *p = buf;
if ((pj_ssize_t)size < hdr->name.slen + hdr->hvalue.slen + 5)
return -1;
pj_memcpy(p, hdr->name.ptr, hdr->name.slen);
p += hdr->name.slen;
*p++ = ':';
*p++ = ' ';
pj_memcpy(p, hdr->hvalue.ptr, hdr->hvalue.slen);
p += hdr->hvalue.slen;
*p = '\0';
return p - buf;
}
static pjsip_generic_string_hdr* pjsip_generic_string_hdr_clone( pj_pool_t *pool,
const pjsip_generic_string_hdr *rhs)
{
pjsip_generic_string_hdr *hdr;
hdr = pjsip_generic_string_hdr_create(pool, &rhs->name, &rhs->hvalue);
hdr->type = rhs->type;
hdr->sname = hdr->name;
return hdr;
}
static pjsip_generic_string_hdr* pjsip_generic_string_hdr_shallow_clone( pj_pool_t *pool,
const pjsip_generic_string_hdr *rhs )
{
pjsip_generic_string_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
pj_memcpy(hdr, rhs, sizeof(*hdr));
return hdr;
}
///////////////////////////////////////////////////////////////////////////////
/*
* Generic pjsip_hdr_names/integer value header.
*/
static int pjsip_generic_int_hdr_print( pjsip_generic_int_hdr *hdr,
char *buf, pj_size_t size);
static pjsip_generic_int_hdr* pjsip_generic_int_hdr_clone( pj_pool_t *pool,
const pjsip_generic_int_hdr *hdr);
static pjsip_generic_int_hdr* pjsip_generic_int_hdr_shallow_clone( pj_pool_t *pool,
const pjsip_generic_int_hdr *hdr );
static pjsip_hdr_vptr generic_int_hdr_vptr =
{
(pjsip_hdr_clone_fptr) &pjsip_generic_int_hdr_clone,
(pjsip_hdr_clone_fptr) &pjsip_generic_int_hdr_shallow_clone,
(pjsip_hdr_print_fptr) &pjsip_generic_int_hdr_print,
};
PJ_DEF(pjsip_generic_int_hdr*) pjsip_generic_int_hdr_init( pj_pool_t *pool,
void *mem,
const pj_str_t *hnames,
int value)
{
pjsip_generic_int_hdr *hdr = mem;
init_hdr(hdr, PJSIP_H_OTHER, &generic_int_hdr_vptr);
if (hnames) {
pj_strdup(pool, &hdr->name, hnames);
hdr->sname = hdr->name;
}
hdr->ivalue = value;
return hdr;
}
PJ_DEF(pjsip_generic_int_hdr*) pjsip_generic_int_hdr_create( pj_pool_t *pool,
const pj_str_t *hnames,
int value)
{
void *mem = pj_pool_alloc(pool, sizeof(pjsip_generic_int_hdr));
return pjsip_generic_int_hdr_init(pool, mem, hnames, value);
}
static int pjsip_generic_int_hdr_print( pjsip_generic_int_hdr *hdr,
char *buf, pj_size_t size)
{
char *p = buf;
if ((pj_ssize_t)size < hdr->name.slen + 15)
return -1;
pj_memcpy(p, hdr->name.ptr, hdr->name.slen);
p += hdr->name.slen;
*p++ = ':';
*p++ = ' ';
p += pj_utoa(hdr->ivalue, p);
return p - buf;
}
static pjsip_generic_int_hdr* pjsip_generic_int_hdr_clone( pj_pool_t *pool,
const pjsip_generic_int_hdr *rhs)
{
pjsip_generic_int_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
pj_memcpy(hdr, rhs, sizeof(*hdr));
return hdr;
}
static pjsip_generic_int_hdr* pjsip_generic_int_hdr_shallow_clone( pj_pool_t *pool,
const pjsip_generic_int_hdr *rhs )
{
pjsip_generic_int_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
pj_memcpy(hdr, rhs, sizeof(*hdr));
return hdr;
}
///////////////////////////////////////////////////////////////////////////////
/*
* Generic array header.
*/
static int pjsip_generic_array_hdr_print( pjsip_generic_array_hdr *hdr, char *buf, pj_size_t size);
static pjsip_generic_array_hdr* pjsip_generic_array_hdr_clone( pj_pool_t *pool,
const pjsip_generic_array_hdr *hdr);
static pjsip_generic_array_hdr* pjsip_generic_array_hdr_shallow_clone( pj_pool_t *pool,
const pjsip_generic_array_hdr *hdr);
static pjsip_hdr_vptr generic_array_hdr_vptr =
{
(pjsip_hdr_clone_fptr) &pjsip_generic_array_hdr_clone,
(pjsip_hdr_clone_fptr) &pjsip_generic_array_hdr_shallow_clone,
(pjsip_hdr_print_fptr) &pjsip_generic_array_hdr_print,
};
PJ_DEF(pjsip_generic_array_hdr*) pjsip_generic_array_hdr_init( pj_pool_t *pool,
void *mem,
const pj_str_t *hnames)
{
pjsip_generic_array_hdr *hdr = mem;
init_hdr(hdr, PJSIP_H_OTHER, &generic_array_hdr_vptr);
if (hnames) {
pj_strdup(pool, &hdr->name, hnames);
hdr->sname = hdr->name;
}
hdr->count = 0;
return hdr;
}
PJ_DEF(pjsip_generic_array_hdr*) pjsip_generic_array_hdr_create( pj_pool_t *pool,
const pj_str_t *hnames)
{
void *mem = pj_pool_alloc(pool, sizeof(pjsip_generic_array_hdr));
return pjsip_generic_array_hdr_init(pool, mem, hnames);
}
static int pjsip_generic_array_hdr_print( pjsip_generic_array_hdr *hdr,
char *buf, pj_size_t size)
{
char *p = buf, *endbuf = buf+size;
copy_advance(p, hdr->name);
*p++ = ':';
*p++ = ' ';
if (hdr->count > 0) {
unsigned i;
int printed;
copy_advance(p, hdr->values[0]);
for (i=1; i<hdr->count; ++i) {
copy_advance_pair(p, ", ", 2, hdr->values[i]);
}
}
return p - buf;
}
static pjsip_generic_array_hdr* pjsip_generic_array_hdr_clone( pj_pool_t *pool,
const pjsip_generic_array_hdr *rhs)
{
unsigned i;
pjsip_generic_array_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
pj_memcpy(hdr, rhs, sizeof(*hdr));
for (i=0; i<rhs->count; ++i) {
pj_strdup(pool, &hdr->values[i], &rhs->values[i]);
}
return hdr;
}
static pjsip_generic_array_hdr* pjsip_generic_array_hdr_shallow_clone( pj_pool_t *pool,
const pjsip_generic_array_hdr *rhs)
{
pjsip_generic_array_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
pj_memcpy(hdr, rhs, sizeof(*hdr));
return hdr;
}
///////////////////////////////////////////////////////////////////////////////
/*
* Accept header.
*/
PJ_DEF(pjsip_accept_hdr*) pjsip_accept_hdr_init( pj_pool_t *pool,
void *mem )
{
pjsip_accept_hdr *hdr = mem;
PJ_UNUSED_ARG(pool);
init_hdr(hdr, PJSIP_H_ACCEPT, &generic_array_hdr_vptr);
hdr->count = 0;
return hdr;
}
PJ_DEF(pjsip_accept_hdr*) pjsip_accept_hdr_create(pj_pool_t *pool)
{
void *mem = pj_pool_alloc(pool, sizeof(pjsip_accept_hdr));
return pjsip_accept_hdr_init(pool, mem);
}
///////////////////////////////////////////////////////////////////////////////
/*
* Allow header.
*/
PJ_DEF(pjsip_allow_hdr*) pjsip_allow_hdr_init( pj_pool_t *pool,
void *mem )
{
pjsip_allow_hdr *hdr = mem;
PJ_UNUSED_ARG(pool);
init_hdr(hdr, PJSIP_H_ALLOW, &generic_array_hdr_vptr);
hdr->count = 0;
return hdr;
}
PJ_DEF(pjsip_allow_hdr*) pjsip_allow_hdr_create(pj_pool_t *pool)
{
void *mem = pj_pool_alloc(pool, sizeof(pjsip_allow_hdr));
return pjsip_allow_hdr_init(pool, mem);
}
///////////////////////////////////////////////////////////////////////////////
/*
* Call-ID header.
*/
PJ_DEF(pjsip_cid_hdr*) pjsip_cid_hdr_init( pj_pool_t *pool,
void *mem )
{
pjsip_cid_hdr *hdr = mem;
PJ_UNUSED_ARG(pool);
init_hdr(hdr, PJSIP_H_CALL_ID, &generic_hdr_vptr);
return hdr;
}
PJ_DEF(pjsip_cid_hdr*) pjsip_cid_hdr_create( pj_pool_t *pool )
{
void *mem = pj_pool_alloc(pool, sizeof(pjsip_cid_hdr));
return pjsip_cid_hdr_init(pool, mem);
}
///////////////////////////////////////////////////////////////////////////////
/*
* Content-Length header.
*/
static int pjsip_clen_hdr_print( pjsip_clen_hdr *hdr, char *buf, pj_size_t size);
static pjsip_clen_hdr* pjsip_clen_hdr_clone( pj_pool_t *pool, const pjsip_clen_hdr *hdr);
#define pjsip_clen_hdr_shallow_clone pjsip_clen_hdr_clone
static pjsip_hdr_vptr clen_hdr_vptr =
{
(pjsip_hdr_clone_fptr) &pjsip_clen_hdr_clone,
(pjsip_hdr_clone_fptr) &pjsip_clen_hdr_shallow_clone,
(pjsip_hdr_print_fptr) &pjsip_clen_hdr_print,
};
PJ_DEF(pjsip_clen_hdr*) pjsip_clen_hdr_init( pj_pool_t *pool,
void *mem )
{
pjsip_clen_hdr *hdr = mem;
PJ_UNUSED_ARG(pool);
init_hdr(hdr, PJSIP_H_CONTENT_LENGTH, &clen_hdr_vptr);
hdr->len = 0;
return hdr;
}
PJ_DEF(pjsip_clen_hdr*) pjsip_clen_hdr_create( pj_pool_t *pool )
{
void *mem = pj_pool_alloc(pool, sizeof(pjsip_clen_hdr));
return pjsip_clen_hdr_init(pool, mem);
}
static int pjsip_clen_hdr_print( pjsip_clen_hdr *hdr,
char *buf, pj_size_t size)
{
char *p = buf;
int len;
if ((pj_ssize_t)size < hdr->name.slen + 14)
return -1;
pj_memcpy(p, hdr->name.ptr, hdr->name.slen);
p += hdr->name.slen;
*p++ = ':';
*p++ = ' ';
len = pj_utoa(hdr->len, p);
p += len;
*p = '\0';
return p-buf;
}
static pjsip_clen_hdr* pjsip_clen_hdr_clone( pj_pool_t *pool, const pjsip_clen_hdr *rhs)
{
pjsip_clen_hdr *hdr = pjsip_clen_hdr_create(pool);
hdr->len = rhs->len;
return hdr;
}
///////////////////////////////////////////////////////////////////////////////
/*
* CSeq header.
*/
static int pjsip_cseq_hdr_print( pjsip_cseq_hdr *hdr, char *buf, pj_size_t size);
static pjsip_cseq_hdr* pjsip_cseq_hdr_clone( pj_pool_t *pool, const pjsip_cseq_hdr *hdr);
static pjsip_cseq_hdr* pjsip_cseq_hdr_shallow_clone( pj_pool_t *pool, const pjsip_cseq_hdr *hdr );
static pjsip_hdr_vptr cseq_hdr_vptr =
{
(pjsip_hdr_clone_fptr) &pjsip_cseq_hdr_clone,
(pjsip_hdr_clone_fptr) &pjsip_cseq_hdr_shallow_clone,
(pjsip_hdr_print_fptr) &pjsip_cseq_hdr_print,
};
PJ_DEF(pjsip_cseq_hdr*) pjsip_cseq_hdr_init( pj_pool_t *pool,
void *mem )
{
pjsip_cseq_hdr *hdr = mem;
PJ_UNUSED_ARG(pool);
init_hdr(hdr, PJSIP_H_CSEQ, &cseq_hdr_vptr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -