📄 msg_test.c
字号:
ctype = pjsip_ctype_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)ctype);
pj_strdup2(pool, &ctype->media.type, "text");
pj_strdup2(pool, &ctype->media.subtype, "html");
pj_strdup2(pool, &ctype->media.param, ";charset=ISO-8859-4");
/* "Route: <sip:bigbox3.site3.atlanta.com;lr>,\r\n" */
routing = pjsip_route_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)routing);
url = pjsip_sip_uri_create(pool, 0);
routing->name_addr.uri = (pjsip_uri*)url;
pj_strdup2(pool, &url->host, "bigbox3.site3.atlanta.com");
url->lr_param = 1;
/* " <sip:server10.biloxi.com;lr>\r" */
routing = pjsip_route_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)routing);
url = pjsip_sip_uri_create(pool, 0);
routing->name_addr.uri = (pjsip_uri*)url;
pj_strdup2(pool, &url->host, "server10.biloxi.com");
url->lr_param = 1;
/* "Record-Route: <sip:server10.biloxi.com>,\r\n" */
routing = pjsip_rr_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)routing);
url = pjsip_sip_uri_create(pool, 0);
routing->name_addr.uri = (pjsip_uri*)url;
pj_strdup2(pool, &url->host, "server10.biloxi.com");
url->lr_param = 0;
/* " <sip:bigbox3.site3.atlanta.com;lr>\n" */
routing = pjsip_rr_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)routing);
url = pjsip_sip_uri_create(pool, 0);
routing->name_addr.uri = (pjsip_uri*)url;
pj_strdup2(pool, &url->host, "bigbox3.site3.atlanta.com");
url->lr_param = 1;
/* "Via: SIP/2.0/SCTP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c230\n" */
via = pjsip_via_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)via);
pj_strdup2(pool, &via->transport, "SCTP");
pj_strdup2(pool, &via->sent_by.host, "bigbox3.site3.atlanta.com");
pj_strdup2(pool, &via->branch_param, "z9hG4bK77ef4c230");
/* "Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8\n"
" ;received=192.0.2.1\r\n" */
via = pjsip_via_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)via);
pj_strdup2(pool, &via->transport, "UDP");
pj_strdup2(pool, &via->sent_by.host, "pc33.atlanta.com");
pj_strdup2(pool, &via->branch_param, "z9hG4bKnashds8");
pj_strdup2(pool, &via->recvd_param, "192.0.2.1");
/* "Via: SIP/2.0/UDP 10.2.1.1, */
via = pjsip_via_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)via);
pj_strdup2(pool, &via->transport, "UDP");
pj_strdup2(pool, &via->sent_by.host, "10.2.1.1");
/*SIP/2.0/TCP 192.168.1.1\n" */
via = pjsip_via_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)via);
pj_strdup2(pool, &via->transport, "TCP");
pj_strdup2(pool, &via->sent_by.host, "192.168.1.1");
/* "Organization: \r" */
str.ptr = "Organization";
str.slen = 12;
generic = pjsip_generic_string_hdr_create(pool, &str, NULL);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)generic);
generic->hvalue.ptr = NULL;
generic->hvalue.slen = 0;
/* "Max-Forwards: 70\n" */
str.ptr = "Max-Forwards";
str.slen = 12;
generic = pjsip_generic_string_hdr_create(pool, &str, NULL);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)generic);
str.ptr = "70";
str.slen = 2;
generic->hvalue = str;
/* "X-Header: \r\n" */
str.ptr = "X-Header";
str.slen = 8;
generic = pjsip_generic_string_hdr_create(pool, &str, NULL);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)generic);
str.ptr = NULL;
str.slen = 0;
generic->hvalue = str;
/* P-Associated-URI:\r\n */
str.ptr = "P-Associated-URI";
str.slen = 16;
generic = pjsip_generic_string_hdr_create(pool, &str, NULL);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)generic);
str.ptr = NULL;
str.slen = 0;
generic->hvalue = str;
return msg;
}
static pjsip_msg *create_msg1(pj_pool_t *pool)
{
pjsip_via_hdr *via;
pjsip_route_hdr *route;
pjsip_name_addr *name_addr;
pjsip_sip_uri *url;
pjsip_max_fwd_hdr *max_fwd;
pjsip_to_hdr *to;
pjsip_from_hdr *from;
pjsip_contact_hdr *contact;
pjsip_ctype_hdr *ctype;
pjsip_cid_hdr *cid;
pjsip_clen_hdr *clen;
pjsip_cseq_hdr *cseq;
pjsip_msg *msg = pjsip_msg_create(pool, PJSIP_RESPONSE_MSG);
pjsip_msg_body *body;
//"SIP/2.0 200 OK\r\n"
msg->line.status.code = 200;
msg->line.status.reason = pj_str("OK");
//"Via: SIP/2.0/SCTP server10.biloxi.com;branch=z9hG4bKnashds8;rport;received=192.0.2.1\r\n"
via = pjsip_via_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)via);
via->transport = pj_str("SCTP");
via->sent_by.host = pj_str("server10.biloxi.com");
via->branch_param = pj_str("z9hG4bKnashds8");
via->rport_param = 0;
via->recvd_param = pj_str("192.0.2.1");
//"Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2\r\n"
via = pjsip_via_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)via);
via->transport = pj_str("UDP");
via->sent_by.host = pj_str("bigbox3.site3.atlanta.com");
via->branch_param = pj_str("z9hG4bK77ef4c2312983.1");
via->recvd_param = pj_str("192.0.2.2");
//"Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds ;received=192.0.2.3\r\n"
via = pjsip_via_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)via);
via->transport = pj_str("UDP");
via->sent_by.host = pj_str("pc33.atlanta.com");
via->branch_param = pj_str("z9hG4bK776asdhds");
via->recvd_param = pj_str("192.0.2.3");
//"Route: <sip:proxy.sipprovider.com>\r\n"
route = pjsip_route_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)route);
url = pjsip_sip_uri_create(pool, PJ_FALSE);
route->name_addr.uri = (pjsip_uri*)url;
url->host = pj_str("proxy.sipprovider.com");
//"Route: <sip:proxy.supersip.com:5060>\r\n"
route = pjsip_route_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)route);
url = pjsip_sip_uri_create(pool, PJ_FALSE);
route->name_addr.uri = (pjsip_uri*)url;
url->host = pj_str("proxy.supersip.com");
url->port = 5060;
//"Max-Forwards: 70\r\n"
max_fwd = pjsip_max_fwd_hdr_create(pool, 70);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)max_fwd);
//"To: Bob <sip:bob@biloxi.com>;tag=a6c85cf\r\n"
to = pjsip_to_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)to);
name_addr = pjsip_name_addr_create(pool);
name_addr->display = pj_str("Bob");
to->uri = (pjsip_uri*)name_addr;
url = pjsip_sip_uri_create(pool, PJ_FALSE);
name_addr->uri = (pjsip_uri*)url;
url->user = pj_str("bob");
url->host = pj_str("biloxi.com");
to->tag = pj_str("a6c85cf");
//"From: Alice <sip:alice@atlanta.com>;tag=1928301774\r\n"
from = pjsip_from_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)from);
name_addr = pjsip_name_addr_create(pool);
name_addr->display = pj_str("Alice");
from->uri = (pjsip_uri*)name_addr;
url = pjsip_sip_uri_create(pool, PJ_FALSE);
name_addr->uri = (pjsip_uri*)url;
url->user = pj_str("alice");
url->host = pj_str("atlanta.com");
from->tag = pj_str("1928301774");
//"Call-ID: a84b4c76e66710@pc33.atlanta.com\r\n"
cid = pjsip_cid_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)cid);
cid->id = pj_str("a84b4c76e66710@pc33.atlanta.com");
//"CSeq: 314159 INVITE\r\n"
cseq = pjsip_cseq_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)cseq);
cseq->cseq = 314159;
pjsip_method_set(&cseq->method, PJSIP_INVITE_METHOD);
//"Contact: <sips:bob@192.0.2.4>\r\n"
contact = pjsip_contact_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)contact);
name_addr = pjsip_name_addr_create(pool);
contact->uri = (pjsip_uri*)name_addr;
url = pjsip_sip_uri_create(pool, PJ_TRUE);
name_addr->uri = (pjsip_uri*)url;
url->user = pj_str("bob");
url->host = pj_str("192.0.2.4");
//"Content-Type: application/sdp\r\n"
ctype = pjsip_ctype_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)ctype);
ctype->media.type = pj_str("application");
ctype->media.subtype = pj_str("sdp");
//"Content-Length: 150\r\n"
clen = pjsip_clen_hdr_create(pool);
pjsip_msg_add_hdr(msg, (pjsip_hdr*)clen);
clen->len = 150;
// Body
body = pj_pool_zalloc(pool, sizeof(*body));
msg->body = body;
body->content_type.type = pj_str("application");
body->content_type.subtype = pj_str("sdp");
body->data =
"v=0\r\n"
"o=alice 53655765 2353687637 IN IP4 pc33.atlanta.com\r\n"
"s=-\r\n"
"t=0 0\r\n"
"c=IN IP4 pc33.atlanta.com\r\n"
"m=audio 3456 RTP/AVP 0 1 3 99\r\n"
"a=rtpmap:0 PCMU/8000\r\n";
body->len = pj_native_strlen(body->data);
body->print_body = &pjsip_print_text_body;
return msg;
}
/*****************************************************************************/
static pj_status_t simple_test(void)
{
unsigned i;
pj_status_t status;
PJ_LOG(3,(THIS_FILE, " simple test.."));
for (i=0; i<PJ_ARRAY_SIZE(test_array); ++i) {
pj_pool_t *pool;
pool = pjsip_endpt_create_pool(endpt, NULL, POOL_SIZE, POOL_SIZE);
status = test_entry( pool, &test_array[i] );
pjsip_endpt_release_pool(endpt, pool);
if (status != PJ_SUCCESS)
return status;
}
return PJ_SUCCESS;
}
static int msg_benchmark(unsigned *p_detect, unsigned *p_parse,
unsigned *p_print)
{
pj_status_t status;
pj_pool_t *pool;
int i, loop;
pj_timestamp zero;
pj_time_val elapsed;
pj_highprec_t avg_detect, avg_parse, avg_print, kbytes;
pj_bzero(&var, sizeof(var));
zero.u64 = 0;
for (loop=0; loop<LOOP; ++loop) {
for (i=0; i<PJ_ARRAY_SIZE(test_array); ++i) {
pool = pjsip_endpt_create_pool(endpt, NULL, POOL_SIZE, POOL_SIZE);
status = test_entry( pool, &test_array[i] );
pjsip_endpt_release_pool(endpt, pool);
if (status != PJ_SUCCESS)
return status;
}
}
kbytes = var.detect_len;
pj_highprec_mod(kbytes, 1000000);
pj_highprec_div(kbytes, 100000);
elapsed = pj_elapsed_time(&zero, &var.detect_time);
avg_detect = pj_elapsed_usec(&zero, &var.detect_time);
pj_highprec_mul(avg_detect, AVERAGE_MSG_LEN);
pj_highprec_div(avg_detect, var.detect_len);
avg_detect = 1000000 / avg_detect;
PJ_LOG(3,(THIS_FILE,
" %u.%u MB detected in %d.%03ds (avg=%d msg detection/sec)",
(unsigned)(var.detect_len/1000000), (unsigned)kbytes,
elapsed.sec, elapsed.msec,
(unsigned)avg_detect));
*p_detect = (unsigned)avg_detect;
kbytes = var.parse_len;
pj_highprec_mod(kbytes, 1000000);
pj_highprec_div(kbytes, 100000);
elapsed = pj_elapsed_time(&zero, &var.parse_time);
avg_parse = pj_elapsed_usec(&zero, &var.parse_time);
pj_highprec_mul(avg_parse, AVERAGE_MSG_LEN);
pj_highprec_div(avg_parse, var.parse_len);
avg_parse = 1000000 / avg_parse;
PJ_LOG(3,(THIS_FILE,
" %u.%u MB parsed in %d.%03ds (avg=%d msg parsing/sec)",
(unsigned)(var.parse_len/1000000), (unsigned)kbytes,
elapsed.sec, elapsed.msec,
(unsigned)avg_parse));
*p_parse = (unsigned)avg_parse;
kbytes = var.print_len;
pj_highprec_mod(kbytes, 1000000);
pj_highprec_div(kbytes, 100000);
elapsed = pj_elapsed_time(&zero, &var.print_time);
avg_print = pj_elapsed_usec(&zero, &var.print_time);
pj_highprec_mul(avg_print, AVERAGE_MSG_LEN);
pj_highprec_div(avg_print, var.print_len);
avg_print = 1000000 / avg_print;
PJ_LOG(3,(THIS_FILE,
" %u.%u MB printed in %d.%03ds (avg=%d msg print/sec)",
(unsigned)(var.print_len/1000000), (unsigned)kbytes,
elapsed.sec, elapsed.msec,
(unsigned)avg_print));
*p_print = (unsigned)avg_print;
return status;
}
/*****************************************************************************/
int msg_test(void)
{
enum { COUNT = 4, DETECT=0, PARSE=1, PRINT=2 };
struct {
unsigned detect;
unsigned parse;
unsigned print;
} run[COUNT];
unsigned i, max, avg_len;
char desc[250];
pj_status_t status;
status = simple_test();
if (status != PJ_SUCCESS)
return status;
for (i=0; i<COUNT; ++i) {
PJ_LOG(3,(THIS_FILE, " benchmarking (%d of %d)..", i+1, COUNT));
status = msg_benchmark(&run[i].detect, &run[i].parse, &run[i].print);
if (status != PJ_SUCCESS)
return status;
}
/* Calculate average message length */
for (i=0, avg_len=0; i<PJ_ARRAY_SIZE(test_array); ++i) {
avg_len += test_array[i].len;
}
avg_len /= PJ_ARRAY_SIZE(test_array);
/* Print maximum detect/sec */
for (i=0, max=0; i<COUNT; ++i)
if (run[i].detect > max) max = run[i].detect;
PJ_LOG(3,("", " Maximum message detection/sec=%u", max));
pj_ansi_sprintf(desc, "Number of SIP messages "
"can be pre-parse by <tt>pjsip_find_msg()</tt> "
"per second (tested with %d message sets with "
"average message length of "
"%d bytes)", (int)PJ_ARRAY_SIZE(test_array), avg_len);
report_ival("msg-detect-per-sec", max, "msg/sec", desc);
/* Print maximum parse/sec */
for (i=0, max=0; i<COUNT; ++i)
if (run[i].parse > max) max = run[i].parse;
PJ_LOG(3,("", " Maximum message parsing/sec=%u", max));
pj_ansi_sprintf(desc, "Number of SIP messages "
"can be <b>parsed</b> by <tt>pjsip_parse_msg()</tt> "
"per second (tested with %d message sets with "
"average message length of "
"%d bytes)", (int)PJ_ARRAY_SIZE(test_array), avg_len);
report_ival("msg-parse-per-sec", max, "msg/sec", desc);
/* Msg parsing bandwidth */
report_ival("msg-parse-bandwidth-mb", avg_len*max/1000000, "MB/sec",
"Message parsing bandwidth in megabytes (number of megabytes"
" worth of SIP messages that can be parsed per second). "
"The value is derived from msg-parse-per-sec above.");
/* Print maximum print/sec */
for (i=0, max=0; i<COUNT; ++i)
if (run[i].print > max) max = run[i].print;
PJ_LOG(3,("", " Maximum message print/sec=%u", max));
pj_ansi_sprintf(desc, "Number of SIP messages "
"can be <b>printed</b> by <tt>pjsip_msg_print()</tt>"
" per second (tested with %d message sets with "
"average message length of "
"%d bytes)", (int)PJ_ARRAY_SIZE(test_array), avg_len);
report_ival("msg-print-per-sec", max, "msg/sec", desc);
/* Msg print bandwidth */
report_ival("msg-printed-bandwidth-mb", avg_len*max/1000000, "MB/sec",
"Message print bandwidth in megabytes (total size of "
"SIP messages printed per second). "
"The value is derived from msg-print-per-sec above.");
return PJ_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -