summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip/sip_msg.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip/src/pjsip/sip_msg.c')
-rw-r--r--pjsip/src/pjsip/sip_msg.c376
1 files changed, 303 insertions, 73 deletions
diff --git a/pjsip/src/pjsip/sip_msg.c b/pjsip/src/pjsip/sip_msg.c
index 6010ba05..23e97f77 100644
--- a/pjsip/src/pjsip/sip_msg.c
+++ b/pjsip/src/pjsip/sip_msg.c
@@ -498,31 +498,40 @@ static pjsip_hdr_vptr generic_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_generic_string_hdr_print,
};
-PJ_DEF(pjsip_generic_string_hdr*) pjsip_generic_string_hdr_create( pj_pool_t *pool,
- const pj_str_t *hnames )
+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 = pj_pool_alloc(pool, sizeof(pjsip_generic_string_hdr));
+ pjsip_generic_string_hdr *hdr = mem;
+
init_hdr(hdr, PJSIP_H_OTHER, &generic_hdr_vptr);
if (hnames) {
pj_strdup(pool, &hdr->name, hnames);
hdr->sname = hdr->name;
}
- hdr->hvalue.ptr = NULL;
- hdr->hvalue.slen = 0;
+ if (hvalue) {
+ pj_strdup(pool, &hdr->hvalue, hvalue);
+ } else {
+ hdr->hvalue.ptr = NULL;
+ hdr->hvalue.slen = 0;
+ }
+
return hdr;
}
-PJ_DEF(pjsip_generic_string_hdr*) pjsip_generic_string_hdr_create_with_text( pj_pool_t *pool,
- const pj_str_t *hname,
- const pj_str_t *hvalue)
+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)
{
- pjsip_generic_string_hdr *hdr = pjsip_generic_string_hdr_create(pool, hname);
- pj_strdup(pool, &hdr->hvalue, hvalue);
- return hdr;
+ 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)
+static int pjsip_generic_string_hdr_print( pjsip_generic_string_hdr *hdr,
+ char *buf, pj_size_t size)
{
char *p = buf;
@@ -543,11 +552,12 @@ static int pjsip_generic_string_hdr_print( pjsip_generic_string_hdr *hdr,
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 = pjsip_generic_string_hdr_create(pool, &rhs->name);
+ pjsip_generic_string_hdr *hdr;
+
+ hdr = pjsip_generic_string_hdr_create(pool, &rhs->name, &rhs->hvalue);
hdr->type = rhs->type;
hdr->sname = hdr->name;
- pj_strdup( pool, &hdr->hvalue, &rhs->hvalue);
return hdr;
}
@@ -578,26 +588,28 @@ static pjsip_hdr_vptr generic_int_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_generic_int_hdr_print,
};
-PJ_DEF(pjsip_generic_int_hdr*) pjsip_generic_int_hdr_create( pj_pool_t *pool,
- const pj_str_t *hnames )
+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 = pj_pool_alloc(pool, sizeof(pjsip_generic_int_hdr));
+ 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 = 0;
+ hdr->ivalue = value;
return hdr;
}
-PJ_DEF(pjsip_generic_int_hdr*) pjsip_generic_int_hdr_create_with_value( pj_pool_t *pool,
- const pj_str_t *hname,
- int value)
+PJ_DEF(pjsip_generic_int_hdr*) pjsip_generic_int_hdr_create( pj_pool_t *pool,
+ const pj_str_t *hnames,
+ int value)
{
- pjsip_generic_int_hdr *hdr = pjsip_generic_int_hdr_create(pool, hname);
- hdr->ivalue = value;
- return hdr;
+ 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,
@@ -651,10 +663,13 @@ static pjsip_hdr_vptr generic_array_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_generic_array_hdr_print,
};
-PJ_DEF(pjsip_generic_array_hdr*) pjsip_generic_array_create( pj_pool_t *pool,
- const pj_str_t *hnames)
+
+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 = pj_pool_alloc(pool, sizeof(pjsip_generic_array_hdr));
+ pjsip_generic_array_hdr *hdr = mem;
+
init_hdr(hdr, PJSIP_H_OTHER, &generic_array_hdr_vptr);
if (hnames) {
pj_strdup(pool, &hdr->name, hnames);
@@ -662,6 +677,13 @@ PJ_DEF(pjsip_generic_array_hdr*) pjsip_generic_array_create( pj_pool_t *pool,
}
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);
}
@@ -713,38 +735,69 @@ static pjsip_generic_array_hdr* pjsip_generic_array_hdr_shallow_clone( pj_pool_t
/*
* Accept header.
*/
-PJ_DEF(pjsip_accept_hdr*) pjsip_accept_hdr_create(pj_pool_t *pool)
+PJ_DEF(pjsip_accept_hdr*) pjsip_accept_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_accept_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ 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_create(pj_pool_t *pool)
+PJ_DEF(pjsip_allow_hdr*) pjsip_allow_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_allow_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ 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_create( pj_pool_t *pool )
+PJ_DEF(pjsip_cid_hdr*) pjsip_cid_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_cid_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ 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);
}
@@ -763,14 +816,24 @@ static pjsip_hdr_vptr clen_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_clen_hdr_print,
};
-PJ_DEF(pjsip_clen_hdr*) pjsip_clen_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_clen_hdr*) pjsip_clen_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_clen_hdr *hdr = pj_pool_alloc(pool, sizeof(pjsip_clen_hdr));
+ 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)
{
@@ -815,9 +878,13 @@ static pjsip_hdr_vptr cseq_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_cseq_hdr_print,
};
-PJ_DEF(pjsip_cseq_hdr*) pjsip_cseq_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_cseq_hdr*) pjsip_cseq_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_cseq_hdr *hdr = pj_pool_alloc(pool, sizeof(pjsip_cseq_hdr));
+ pjsip_cseq_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_CSEQ, &cseq_hdr_vptr);
hdr->cseq = 0;
hdr->method.id = PJSIP_OTHER_METHOD;
@@ -826,6 +893,12 @@ PJ_DEF(pjsip_cseq_hdr*) pjsip_cseq_hdr_create( pj_pool_t *pool )
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;
@@ -884,15 +957,26 @@ static pjsip_hdr_vptr contact_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_contact_hdr_print,
};
-PJ_DEF(pjsip_contact_hdr*) pjsip_contact_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_contact_hdr*) pjsip_contact_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_contact_hdr *hdr = pj_pool_calloc(pool, 1, sizeof(*hdr));
+ pjsip_contact_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
+ pj_memset(mem, 0, 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)
{
@@ -1002,11 +1086,23 @@ static pjsip_hdr_vptr ctype_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_ctype_hdr_print,
};
-PJ_DEF(pjsip_ctype_hdr*) pjsip_ctype_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_ctype_hdr*) pjsip_ctype_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_ctype_hdr *hdr = pj_pool_calloc(pool, 1, sizeof(*hdr));
+ pjsip_ctype_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
+ pj_memset(mem, 0, 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)
@@ -1066,12 +1162,25 @@ static pjsip_ctype_hdr* pjsip_ctype_hdr_clone( pj_pool_t *pool,
/*
* Expires header.
*/
-PJ_DEF(pjsip_expires_hdr*) pjsip_expires_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_expires_hdr*) pjsip_expires_hdr_init( pj_pool_t *pool,
+ void *mem,
+ int value)
{
- pjsip_expires_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ pjsip_expires_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_EXPIRES, &generic_int_hdr_vptr);
- hdr->ivalue = 0;
+ 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);
}
///////////////////////////////////////////////////////////////////////////////
@@ -1093,30 +1202,53 @@ static pjsip_hdr_vptr fromto_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_fromto_hdr_print,
};
-PJ_DEF(pjsip_from_hdr*) pjsip_from_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_from_hdr*) pjsip_from_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_from_hdr *hdr = pj_pool_calloc(pool, 1, sizeof(*hdr));
+ pjsip_from_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
+ pj_memset(mem, 0, sizeof(pjsip_from_hdr));
init_hdr(hdr, PJSIP_H_FROM, &fromto_hdr_vptr);
pj_list_init(&hdr->other_param);
return hdr;
}
-PJ_DEF(pjsip_to_hdr*) pjsip_to_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_from_hdr*) pjsip_from_hdr_create( pj_pool_t *pool )
{
- pjsip_to_hdr *hdr = pj_pool_calloc(pool, 1, sizeof(*hdr));
+ 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_memset(mem, 0, 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_set_from( pjsip_fromto_hdr *hdr )
+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_set_to( pjsip_fromto_hdr *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];
@@ -1183,12 +1315,25 @@ pjsip_fromto_hdr_shallow_clone( pj_pool_t *pool,
/*
* Max-Forwards header.
*/
-PJ_DEF(pjsip_max_forwards_hdr*) pjsip_max_forwards_hdr_create(pj_pool_t *pool)
+PJ_DEF(pjsip_max_fwd_hdr*) pjsip_max_fwd_hdr_init( pj_pool_t *pool,
+ void *mem,
+ int value)
{
- pjsip_max_forwards_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ pjsip_max_fwd_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_MAX_FORWARDS, &generic_int_hdr_vptr);
- hdr->ivalue = 0;
+ 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);
}
@@ -1196,14 +1341,26 @@ PJ_DEF(pjsip_max_forwards_hdr*) pjsip_max_forwards_hdr_create(pj_pool_t *pool)
/*
* Min-Expires header.
*/
-PJ_DECL(pjsip_min_expires_hdr*) pjsip_min_expires_hdr_create(pj_pool_t *pool)
+PJ_DEF(pjsip_min_expires_hdr*) pjsip_min_expires_hdr_init( pj_pool_t *pool,
+ void *mem,
+ int value )
{
- pjsip_min_expires_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ pjsip_min_expires_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_MIN_EXPIRES, &generic_int_hdr_vptr);
- hdr->ivalue = 0;
+ 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 );
+}
+
///////////////////////////////////////////////////////////////////////////////
/*
* Record-Route and Route header.
@@ -1219,24 +1376,45 @@ static pjsip_hdr_vptr routing_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_routing_hdr_print,
};
-PJ_DEF(pjsip_rr_hdr*) pjsip_rr_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_rr_hdr*) pjsip_rr_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_rr_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ pjsip_rr_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_RECORD_ROUTE, &routing_hdr_vptr);
pjsip_name_addr_init(&hdr->name_addr);
pj_list_init(&hdr->other_param);
return hdr;
+
}
-PJ_DEF(pjsip_route_hdr*) pjsip_route_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_rr_hdr*) pjsip_rr_hdr_create( pj_pool_t *pool )
{
- pjsip_route_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ void *mem = pj_pool_alloc(pool, sizeof(pjsip_rr_hdr));
+ return pjsip_rr_hdr_init(pool, mem);
+}
+
+PJ_DEF(pjsip_route_hdr*) pjsip_route_hdr_init( pj_pool_t *pool,
+ void *mem )
+{
+ pjsip_route_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_ROUTE, &routing_hdr_vptr);
pjsip_name_addr_init(&hdr->name_addr);
pj_list_init(&hdr->other_param);
return hdr;
}
+PJ_DEF(pjsip_route_hdr*) pjsip_route_hdr_create( pj_pool_t *pool )
+{
+ void *mem = pj_pool_alloc(pool, sizeof(pjsip_route_hdr));
+ return pjsip_route_hdr_init(pool, mem);
+}
+
PJ_DEF(pjsip_rr_hdr*) pjsip_routing_hdr_set_rr( pjsip_routing_hdr *hdr )
{
hdr->type = PJSIP_H_RECORD_ROUTE;
@@ -1304,52 +1482,93 @@ static pjsip_routing_hdr* pjsip_routing_hdr_shallow_clone( pj_pool_t *pool,
/*
* Require header.
*/
-PJ_DEF(pjsip_require_hdr*) pjsip_require_hdr_create(pj_pool_t *pool)
+PJ_DEF(pjsip_require_hdr*) pjsip_require_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_require_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ pjsip_require_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_REQUIRE, &generic_array_hdr_vptr);
hdr->count = 0;
return hdr;
}
+PJ_DEF(pjsip_require_hdr*) pjsip_require_hdr_create(pj_pool_t *pool)
+{
+ void *mem = pj_pool_alloc(pool, sizeof(pjsip_require_hdr));
+ return pjsip_require_hdr_init(pool, mem);
+}
+
///////////////////////////////////////////////////////////////////////////////
/*
* Retry-After header.
*/
-PJ_DEF(pjsip_retry_after_hdr*) pjsip_retry_after_hdr_create(pj_pool_t *pool)
+PJ_DEF(pjsip_retry_after_hdr*) pjsip_retry_after_hdr_init( pj_pool_t *pool,
+ void *mem,
+ int value )
{
- pjsip_retry_after_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ pjsip_retry_after_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_RETRY_AFTER, &generic_int_hdr_vptr);
- hdr->ivalue = 0;
+ hdr->ivalue = value;
return hdr;
}
+PJ_DEF(pjsip_retry_after_hdr*) pjsip_retry_after_hdr_create(pj_pool_t *pool,
+ int value )
+{
+ void *mem = pj_pool_alloc(pool, sizeof(pjsip_retry_after_hdr));
+ return pjsip_retry_after_hdr_init(pool, mem, value );
+}
+
///////////////////////////////////////////////////////////////////////////////
/*
* Supported header.
*/
-PJ_DEF(pjsip_supported_hdr*) pjsip_supported_hdr_create(pj_pool_t *pool)
+PJ_DEF(pjsip_supported_hdr*) pjsip_supported_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_supported_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ pjsip_supported_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
init_hdr(hdr, PJSIP_H_SUPPORTED, &generic_array_hdr_vptr);
hdr->count = 0;
return hdr;
}
+PJ_DEF(pjsip_supported_hdr*) pjsip_supported_hdr_create(pj_pool_t *pool)
+{
+ void *mem = pj_pool_alloc(pool, sizeof(pjsip_supported_hdr));
+ return pjsip_supported_hdr_init(pool, mem);
+}
+
///////////////////////////////////////////////////////////////////////////////
/*
* Unsupported header.
*/
-PJ_DEF(pjsip_unsupported_hdr*) pjsip_unsupported_hdr_create(pj_pool_t *pool)
+PJ_DEF(pjsip_unsupported_hdr*) pjsip_unsupported_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_unsupported_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+ pjsip_unsupported_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
init_hdr(hdr, PJSIP_H_UNSUPPORTED, &generic_array_hdr_vptr);
hdr->count = 0;
return hdr;
}
+PJ_DEF(pjsip_unsupported_hdr*) pjsip_unsupported_hdr_create(pj_pool_t *pool)
+{
+ void *mem = pj_pool_alloc(pool, sizeof(pjsip_unsupported_hdr));
+ return pjsip_unsupported_hdr_init(pool, mem);
+}
+
///////////////////////////////////////////////////////////////////////////////
/*
* Via header.
@@ -1365,15 +1584,26 @@ static pjsip_hdr_vptr via_hdr_vptr =
(pjsip_hdr_print_fptr) &pjsip_via_hdr_print,
};
-PJ_DEF(pjsip_via_hdr*) pjsip_via_hdr_create( pj_pool_t *pool )
+PJ_DEF(pjsip_via_hdr*) pjsip_via_hdr_init( pj_pool_t *pool,
+ void *mem )
{
- pjsip_via_hdr *hdr = pj_pool_calloc(pool, 1, sizeof(*hdr));
+ pjsip_via_hdr *hdr = mem;
+
+ PJ_UNUSED_ARG(pool);
+
+ pj_memset(mem, 0, sizeof(pjsip_via_hdr));
init_hdr(hdr, PJSIP_H_VIA, &via_hdr_vptr);
- //hdr->sent_by.port = 5060;
hdr->ttl_param = -1;
hdr->rport_param = -1;
pj_list_init(&hdr->other_param);
return hdr;
+
+}
+
+PJ_DEF(pjsip_via_hdr*) pjsip_via_hdr_create( pj_pool_t *pool )
+{
+ void *mem = pj_pool_alloc(pool, sizeof(pjsip_via_hdr));
+ return pjsip_via_hdr_init(pool, mem);
}
static int pjsip_via_hdr_print( pjsip_via_hdr *hdr,