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

📄 msg_test.c

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