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

📄 txdata_test.c

📁 基于sip协议的网络电话源码
💻 C
📖 第 1 页 / 共 2 页
字号:
    pjsip_generic_string_hdr *hdr;    pjsip_tx_data *tdata;    pjsip_sip_uri *uri;    pjsip_param *param;    pjsip_via_hdr *via;    pjsip_parser_err_report err_list;    pjsip_msg *msg;    int len;    pj_status_t status;    PJ_LOG(3,(THIS_FILE, "   header param in URI to create request"));    /* Create request with header param in target URI. */    status = pjsip_endpt_create_request(endpt, &pjsip_invite_method, &target,					&target, &target, &target, NULL, -1,					NULL, &tdata);    if (status != 0) {	app_perror("   error: Unable to create request", status);	return -200;    }    /* Fill up the Via header to prevent syntax error on parsing */    via = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_VIA, NULL);    via->transport = pj_str("TCP");    via->sent_by.host = pj_str("127.0.0.1");    /* Print and parse the request.     * We'll check that header params are not present in     */    len = pjsip_msg_print(tdata->msg, msgbuf, sizeof(msgbuf));    if (len < 1) {	PJ_LOG(3,(THIS_FILE, "   error: printing message"));	pjsip_tx_data_dec_ref(tdata);	return -250;    }    msgbuf[len] = '\0';    PJ_LOG(5,(THIS_FILE, "%d bytes request created:--begin-msg--\n"			 "%s\n"			 "--end-msg--", len, msgbuf));    /* Now parse the message. */    pj_list_init(&err_list);    msg = pjsip_parse_msg( tdata->pool, msgbuf, len, &err_list);    if (msg == NULL) {	pjsip_parser_err_report *e;	PJ_LOG(3,(THIS_FILE, "   error: parsing message message"));	e = err_list.next;	while (e != &err_list) {	    PJ_LOG(3,(THIS_FILE, "     %s in line %d col %d hname=%.*s",				 pj_exception_id_name(e->except_code), 				 e->line, e->col+1,				 (int)e->hname.slen,				 e->hname.ptr));	    e = e->next;	}	pjsip_tx_data_dec_ref(tdata);	return -256;    }    /* Check the existence of port, other_param, and header param.     * Port is now allowed in To and From header.     */    /* Port in request URI. */    uri = (pjsip_sip_uri*) pjsip_uri_get_uri(msg->line.req.uri);    if (uri->port != 5061) {	PJ_LOG(3,(THIS_FILE, "   error: port not present in request URI"));	pjsip_tx_data_dec_ref(tdata);	return -260;    }    /* other_param in request_uri */    param = pjsip_param_find(&uri->other_param, &pname);    if (param == NULL || pj_strcmp2(&param->value, "param 1") != 0) {	PJ_LOG(3,(THIS_FILE, "   error: x-param not present in request URI"));	pjsip_tx_data_dec_ref(tdata);	return -261;    }    /* header param in request uri. */    if (!pj_list_empty(&uri->header_param)) {	PJ_LOG(3,(THIS_FILE, "   error: hparam in request URI"));	pjsip_tx_data_dec_ref(tdata);	return -262;    }    /* Port in From header. */    from_hdr = (pjsip_from_hdr*) pjsip_msg_find_hdr(msg, PJSIP_H_FROM, NULL);    uri = (pjsip_sip_uri*) pjsip_uri_get_uri(from_hdr->uri);    if (uri->port != 0) {	PJ_LOG(3,(THIS_FILE, "   error: port most not exist in From header"));	pjsip_tx_data_dec_ref(tdata);	return -270;    }    /* other_param in From header */    param = pjsip_param_find(&uri->other_param, &pname);    if (param == NULL || pj_strcmp2(&param->value, "param 1") != 0) {	PJ_LOG(3,(THIS_FILE, "   error: x-param not present in From header"));	pjsip_tx_data_dec_ref(tdata);	return -271;    }    /* header param in From header. */    if (!pj_list_empty(&uri->header_param)) {	PJ_LOG(3,(THIS_FILE, "   error: hparam in From header"));	pjsip_tx_data_dec_ref(tdata);	return -272;    }    /* Port in To header. */    to_hdr = (pjsip_to_hdr*) pjsip_msg_find_hdr(msg, PJSIP_H_TO, NULL);    uri = (pjsip_sip_uri*) pjsip_uri_get_uri(to_hdr->uri);    if (uri->port != 0) {	PJ_LOG(3,(THIS_FILE, "   error: port most not exist in To header"));	pjsip_tx_data_dec_ref(tdata);	return -280;    }    /* other_param in To header */    param = pjsip_param_find(&uri->other_param, &pname);    if (param == NULL || pj_strcmp2(&param->value, "param 1") != 0) {	PJ_LOG(3,(THIS_FILE, "   error: x-param not present in To header"));	pjsip_tx_data_dec_ref(tdata);	return -281;    }    /* header param in From header. */    if (!pj_list_empty(&uri->header_param)) {	PJ_LOG(3,(THIS_FILE, "   error: hparam in To header"));	pjsip_tx_data_dec_ref(tdata);	return -282;    }    /* Port in Contact header. */    contact_hdr = (pjsip_contact_hdr*) pjsip_msg_find_hdr(msg, PJSIP_H_CONTACT, NULL);    uri = (pjsip_sip_uri*) pjsip_uri_get_uri(contact_hdr->uri);    if (uri->port != 5061) {	PJ_LOG(3,(THIS_FILE, "   error: port not present in Contact header"));	pjsip_tx_data_dec_ref(tdata);	return -290;    }    /* other_param in Contact header */    param = pjsip_param_find(&uri->other_param, &pname);    if (param == NULL || pj_strcmp2(&param->value, "param 1") != 0) {	PJ_LOG(3,(THIS_FILE, "   error: x-param not present in Contact header"));	pjsip_tx_data_dec_ref(tdata);	return -291;    }    /* header param in Contact header. */    if (pj_list_empty(&uri->header_param)) {	PJ_LOG(3,(THIS_FILE, "   error: hparam is missing in Contact header"));	pjsip_tx_data_dec_ref(tdata);	return -292;    }    /* Check for X-Hdr-1 */    param = pjsip_param_find(&uri->header_param, &hname);    if (param == NULL || pj_strcmp2(&param->value, "Header 1")!=0) {	PJ_LOG(3,(THIS_FILE, "   error: hparam is missing in Contact header"));	pjsip_tx_data_dec_ref(tdata);	return -293;    }    /* Check for X-Empty-Hdr */    param = pjsip_param_find(&uri->header_param, &hemptyname);    if (param == NULL || pj_strcmp2(&param->value, "")!=0) {	PJ_LOG(3,(THIS_FILE, "   error: hparam is missing in Contact header"));	pjsip_tx_data_dec_ref(tdata);	return -294;    }    /* Check that headers are present in the request. */    hdr = (pjsip_generic_string_hdr*) 	pjsip_msg_find_hdr_by_name(msg, &hname, NULL);    if (hdr == NULL || pj_strcmp2(&hdr->hvalue, "Header 1")!=0) {	PJ_LOG(3,(THIS_FILE, "   error: header X-Hdr-1 not created"));	pjsip_tx_data_dec_ref(tdata);	return -300;    }    hdr = (pjsip_generic_string_hdr*) 	pjsip_msg_find_hdr_by_name(msg, &hemptyname, NULL);    if (hdr == NULL || pj_strcmp2(&param->value, "")!=0) {	PJ_LOG(3,(THIS_FILE, "   error: header X-Empty-Hdr not created"));	pjsip_tx_data_dec_ref(tdata);	return -330;    }    pjsip_tx_data_dec_ref(tdata);    return 0;}/* * create request benchmark */static int create_request_bench(pj_timestamp *p_elapsed){    enum { COUNT = 100 };    unsigned i, j;    pjsip_tx_data *tdata[COUNT];    pj_timestamp t1, t2, elapsed;    pj_status_t status;    pj_str_t str_target = pj_str("sip:someuser@someprovider.com");    pj_str_t str_from = pj_str("\"Local User\" <sip:localuser@serviceprovider.com>");    pj_str_t str_to = pj_str("\"Remote User\" <sip:remoteuser@serviceprovider.com>");    pj_str_t str_contact = str_from;    elapsed.u64 = 0;    for (i=0; i<LOOP; i+=COUNT) {	pj_bzero(tdata, sizeof(tdata));	pj_get_timestamp(&t1);	for (j=0; j<COUNT; ++j) {	    status = pjsip_endpt_create_request(endpt, &pjsip_invite_method,						&str_target, &str_from, &str_to,						&str_contact, NULL, -1, NULL,						&tdata[j]);	    if (status != PJ_SUCCESS) {		app_perror("    error: unable to create request", status);		goto on_error;	    }	}	pj_get_timestamp(&t2);	pj_sub_timestamp(&t2, &t1);	pj_add_timestamp(&elapsed, &t2);		for (j=0; j<COUNT; ++j)	    pjsip_tx_data_dec_ref(tdata[j]);    }    p_elapsed->u64 = elapsed.u64;    return PJ_SUCCESS;on_error:    for (i=0; i<COUNT; ++i) {	if (tdata[i])	    pjsip_tx_data_dec_ref(tdata[i]);    }    return -400;}/* * create response benchmark */static int create_response_bench(pj_timestamp *p_elapsed){    enum { COUNT = 100 };    unsigned i, j;    pjsip_via_hdr *via;    pjsip_rx_data rdata;    pjsip_tx_data *request;    pjsip_tx_data *tdata[COUNT];    pj_timestamp t1, t2, elapsed;    pj_status_t status;    /* Create the request first. */    pj_str_t str_target = pj_str("sip:someuser@someprovider.com");    pj_str_t str_from = pj_str("\"Local User\" <sip:localuser@serviceprovider.com>");    pj_str_t str_to = pj_str("\"Remote User\" <sip:remoteuser@serviceprovider.com>");    pj_str_t str_contact = str_from;    status = pjsip_endpt_create_request(endpt, &pjsip_invite_method,					&str_target, &str_from, &str_to,					&str_contact, NULL, -1, NULL,					&request);    if (status != PJ_SUCCESS) {	app_perror("    error: unable to create request", status);	return status;    }    /* Create several Via headers */    via = pjsip_via_hdr_create(request->pool);    via->sent_by.host = pj_str("192.168.0.7");    via->sent_by.port = 5061;    via->transport = pj_str("udp");    via->rport_param = 0;    via->branch_param = pj_str("012345678901234567890123456789");    via->recvd_param = pj_str("192.168.0.7");    pjsip_msg_insert_first_hdr(request->msg, pjsip_hdr_clone(request->pool, via));    pjsip_msg_insert_first_hdr(request->msg, pjsip_hdr_clone(request->pool, via));    pjsip_msg_insert_first_hdr(request->msg, (pjsip_hdr*)via);        /* Create "dummy" rdata from the tdata */    pj_bzero(&rdata, sizeof(pjsip_rx_data));    rdata.tp_info.pool = request->pool;    rdata.msg_info.msg = request->msg;    rdata.msg_info.from = pjsip_msg_find_hdr(request->msg, PJSIP_H_FROM, NULL);    rdata.msg_info.to = pjsip_msg_find_hdr(request->msg, PJSIP_H_TO, NULL);    rdata.msg_info.cseq = pjsip_msg_find_hdr(request->msg, PJSIP_H_CSEQ, NULL);    rdata.msg_info.cid = pjsip_msg_find_hdr(request->msg, PJSIP_H_FROM, NULL);    rdata.msg_info.via = via;    /*     * Now benchmark create_response     */    elapsed.u64 = 0;    for (i=0; i<LOOP; i+=COUNT) {	pj_bzero(tdata, sizeof(tdata));	pj_get_timestamp(&t1);	for (j=0; j<COUNT; ++j) {	    status = pjsip_endpt_create_response(endpt, &rdata, 200, NULL, &tdata[j]);	    if (status != PJ_SUCCESS) {		app_perror("    error: unable to create request", status);		goto on_error;	    }	}	pj_get_timestamp(&t2);	pj_sub_timestamp(&t2, &t1);	pj_add_timestamp(&elapsed, &t2);		for (j=0; j<COUNT; ++j)	    pjsip_tx_data_dec_ref(tdata[j]);    }    p_elapsed->u64 = elapsed.u64;    pjsip_tx_data_dec_ref(request);    return PJ_SUCCESS;on_error:    for (i=0; i<COUNT; ++i) {	if (tdata[i])	    pjsip_tx_data_dec_ref(tdata[i]);    }    return -400;}int txdata_test(void){    enum { REPEAT = 4 };    unsigned i, msgs;    pj_timestamp usec[REPEAT], min, freq;    int status;    status = pj_get_timestamp_freq(&freq);    if (status != PJ_SUCCESS)	return status;    status = core_txdata_test();    if (status  != 0)	return status;#if INCLUDE_GCC_TEST    status = gcc_test();    if (status != 0)	return status;#endif    status = txdata_test_uri_params();    if (status != 0)	return status;    /*     * Benchmark create_request()     */    PJ_LOG(3,(THIS_FILE, "   benchmarking request creation:"));    for (i=0; i<REPEAT; ++i) {	PJ_LOG(3,(THIS_FILE, "    test %d of %d..",		  i+1, REPEAT));	status = create_request_bench(&usec[i]);	if (status != PJ_SUCCESS)	    return status;    }    min.u64 = PJ_UINT64(0xFFFFFFFFFFFFFFF);    for (i=0; i<REPEAT; ++i) {	if (usec[i].u64 < min.u64) min.u64 = usec[i].u64;    }    msgs = (unsigned)(freq.u64 * LOOP / min.u64);    PJ_LOG(3,(THIS_FILE, "    Requests created at %d requests/sec", msgs));    report_ival("create-request-per-sec", 		msgs, "msg/sec",		"Number of typical request messages that can be created "		"per second with <tt>pjsip_endpt_create_request()</tt>");    /*     * Benchmark create_response()     */    PJ_LOG(3,(THIS_FILE, "   benchmarking response creation:"));    for (i=0; i<REPEAT; ++i) {	PJ_LOG(3,(THIS_FILE, "    test %d of %d..",		  i+1, REPEAT));	status = create_response_bench(&usec[i]);	if (status != PJ_SUCCESS)	    return status;    }    min.u64 = PJ_UINT64(0xFFFFFFFFFFFFFFF);    for (i=0; i<REPEAT; ++i) {	if (usec[i].u64 < min.u64) min.u64 = usec[i].u64;    }    msgs = (unsigned)(freq.u64 * LOOP / min.u64);    PJ_LOG(3,(THIS_FILE, "    Responses created at %d responses/sec", msgs));    report_ival("create-response-per-sec", 		msgs, "msg/sec",		"Number of typical response messages that can be created "		"per second with <tt>pjsip_endpt_create_response()</tt>");    return 0;} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -