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

📄 msg_test.c

📁 一个开源SIP协议栈
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -