📄 msg_test.c
字号:
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;}/*****************************************************************************//* Test various header parsing and production */static int hdr_test_success(pjsip_hdr *h);static int hdr_test_accept0(pjsip_hdr *h);static int hdr_test_accept1(pjsip_hdr *h);static int hdr_test_accept2(pjsip_hdr *h);static int hdr_test_allow0(pjsip_hdr *h);static int hdr_test_authorization(pjsip_hdr *h);static int hdr_test_cid(pjsip_hdr *h);static int hdr_test_contact0(pjsip_hdr *h);static int hdr_test_contact1(pjsip_hdr *h);static int hdr_test_content_length(pjsip_hdr *h);static int hdr_test_content_type(pjsip_hdr *h);static int hdr_test_from(pjsip_hdr *h);static int hdr_test_proxy_authenticate(pjsip_hdr *h);static int hdr_test_record_route(pjsip_hdr *h);static int hdr_test_supported(pjsip_hdr *h);static int hdr_test_to(pjsip_hdr *h);static int hdr_test_via(pjsip_hdr *h);#define GENERIC_PARAM "p0=a;p1=\"ab:;cd\";p2=ab%3acd;p3"#define GENERIC_PARAM_PARSED "p0=a;p1=\"ab:;cd\";p2=ab:cd;p3"#define PARAM_CHAR "[]/:&+$"#define SIMPLE_ADDR_SPEC "sip:host"#define ADDR_SPEC SIMPLE_ADDR_SPEC ";"PARAM_CHAR"="PARAM_CHAR ";p1=\";\""#define NAME_ADDR "<" ADDR_SPEC ">"#define HDR_FLAG_PARSE_FAIL 1#define HDR_FLAG_DONT_PRINT 2struct hdr_test_t{ char *hname; char *hshort_name; char *hcontent; int (*test)(pjsip_hdr*); unsigned flags;} hdr_test_data[] ={ { /* Empty Accept */ "Accept", NULL, "", &hdr_test_accept0 }, { /* Overflowing generic string header */ "Accept", NULL, "a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, " \ "a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, " \ "a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, " \ "a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, " \ "a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, " \ "a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, " \ "a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, " \ "a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a", &hdr_test_success, HDR_FLAG_PARSE_FAIL }, { /* Normal Accept */ "Accept", NULL, "application/*, text/plain", &hdr_test_accept1 }, { /* Accept with params */ "Accept", NULL, "application/*;p1=v1, text/plain", &hdr_test_accept2 }, { /* Empty Allow */ "Allow", NULL, "", &hdr_test_allow0, }, { /* Authorization, testing which params should be quoted */ "Authorization", NULL, "Digest username=\"username\", realm=\"realm\", nonce=\"nonce\", " \ "uri=\"sip:domain\", response=\"RESPONSE\", algorithm=MD5, " \ "cnonce=\"CNONCE\", opaque=\"OPAQUE\", qop=auth, nc=00000001", &hdr_test_authorization }, { /* Call ID */ "Call-ID", "i", "-.!%*_+`'~()<>:\\\"/[]?{}", &hdr_test_cid, }, { /* Parameter belong to hparam */ "Contact", "m", SIMPLE_ADDR_SPEC ";p1=v1", &hdr_test_contact0, HDR_FLAG_DONT_PRINT }, { /* generic-param in Contact header */ "Contact", "m", NAME_ADDR ";" GENERIC_PARAM, &hdr_test_contact1 }, { /* Content-Length */ "Content-Length", "l", "10", &hdr_test_content_length }, { /* Content-Type, with generic-param */ "Content-Type", "c", "application/sdp" ";" GENERIC_PARAM, &hdr_test_content_type, HDR_FLAG_DONT_PRINT }, { /* From, testing parameters and generic-param */ "From", "f", NAME_ADDR ";" GENERIC_PARAM, &hdr_test_from }, { /* Proxy-Authenticate, testing which params should be quoted */ "Proxy-Authenticate", NULL, "Digest realm=\"realm\",domain=\"sip:domain\",nonce=\"nonce\"," \ "opaque=\"opaque\",stale=true,algorithm=MD5,qop=\"auth\"", &hdr_test_proxy_authenticate }, { /* Record-Route, param belong to header */ "Record-Route", NULL, NAME_ADDR ";" GENERIC_PARAM, &hdr_test_record_route }, { /* Empty Supported */ "Supported", "k", "", &hdr_test_supported, }, { /* To */ "To", "t", NAME_ADDR ";" GENERIC_PARAM, &hdr_test_to }, { /* Via */ "Via", "v", "SIP/2.0/XYZ host" ";" GENERIC_PARAM, &hdr_test_via }};static int hdr_test_success(pjsip_hdr *h){ PJ_UNUSED_ARG(h); return 0;}/* "" */static int hdr_test_accept0(pjsip_hdr *h){ pjsip_accept_hdr *hdr = (pjsip_accept_hdr*)h; if (h->type != PJSIP_H_ACCEPT) return -1010; if (hdr->count != 0) return -1020; return 0;}/* "application/ *, text/plain\r\n" */static int hdr_test_accept1(pjsip_hdr *h){ pjsip_accept_hdr *hdr = (pjsip_accept_hdr*)h; if (h->type != PJSIP_H_ACCEPT) return -1110; if (hdr->count != 2) return -1120; if (pj_strcmp2(&hdr->values[0], "application/*")) return -1130; if (pj_strcmp2(&hdr->values[1], "text/plain")) return -1140; return 0;}/* "application/ *;p1=v1, text/plain\r\n" */static int hdr_test_accept2(pjsip_hdr *h){ pjsip_accept_hdr *hdr = (pjsip_accept_hdr*)h; if (h->type != PJSIP_H_ACCEPT) return -1210; if (hdr->count != 2) return -1220; if (pj_strcmp2(&hdr->values[0], "application/*;p1=v1")) return -1230; if (pj_strcmp2(&hdr->values[1], "text/plain")) return -1240; return 0;}/* "" */static int hdr_test_allow0(pjsip_hdr *h){ pjsip_allow_hdr *hdr = (pjsip_allow_hdr*)h; if (h->type != PJSIP_H_ALLOW) return -1310; if (hdr->count != 0) return -1320; return 0;}/* "Digest username=\"username\", realm=\"realm\", nonce=\"nonce\", " \ "uri=\"sip:domain\", response=\"RESPONSE\", algorithm=MD5, " \ "cnonce=\"CNONCE\", opaque=\"OPAQUE\", qop=auth, nc=00000001", */static int hdr_test_authorization(pjsip_hdr *h){ pjsip_authorization_hdr *hdr = (pjsip_authorization_hdr*)h; if (h->type != PJSIP_H_AUTHORIZATION) return -1410; if (pj_strcmp2(&hdr->scheme, "Digest")) return -1420; if (pj_strcmp2(&hdr->credential.digest.username, "username")) return -1421; if (pj_strcmp2(&hdr->credential.digest.realm, "realm")) return -1422; if (pj_strcmp2(&hdr->credential.digest.nonce, "nonce")) return -1423; if (pj_strcmp2(&hdr->credential.digest.uri, "sip:domain")) return -1424; if (pj_strcmp2(&hdr->credential.digest.response, "RESPONSE")) return -1425; if (pj_strcmp2(&hdr->credential.digest.algorithm, "MD5")) return -1426; if (pj_strcmp2(&hdr->credential.digest.cnonce, "CNONCE")) return -1427; if (pj_strcmp2(&hdr->credential.digest.opaque, "OPAQUE")) return -1428; if (pj_strcmp2(&hdr->credential.digest.qop, "auth")) return -1429; if (pj_strcmp2(&hdr->credential.digest.nc, "00000001")) return -1430; return 0;}/*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -