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

📄 uri_test.c

📁 基于sip协议的网络电话源码
💻 C
📖 第 1 页 / 共 2 页
字号:
    pj_strdup2(pool, &name_addr->display, "Strange User\"");    pj_strdup2(pool, &url->host, "localhost");    return (pjsip_uri*)name_addr;}static pjsip_uri *create_uri13(pj_pool_t *pool){    /* "sip:localhost;pvalue=\"hello world\"" */    pjsip_sip_uri *url;    url = pjsip_sip_uri_create(pool, 0);    pj_strdup2(pool, &url->host, "localhost");    //pj_strdup2(pool, &url->other_param, ";pvalue=\"hello world\"");    param_add(url->other_param, "pvalue", "\"hello world\"");    return (pjsip_uri*)url;}static pjsip_uri *create_uri14(pj_pool_t *pool){    /* "This is -. !% *_+`'~ me <sip:a19A&=+$,;?/%2c:%40a&Zz=+$,@my_proxy09.my-domain.com:9801>" */    pjsip_name_addr *name_addr = pjsip_name_addr_create(pool);    pjsip_sip_uri *url;    url = pjsip_sip_uri_create(pool, 0);    name_addr->uri = (pjsip_uri*) url;    pj_strdup2(pool, &name_addr->display, "This is -. !% *_+`'~ me");    pj_strdup2(pool, &url->user, "a19A&=+$,;?/,");    pj_strdup2(pool, &url->passwd, "@a&Zz=+$,");    pj_strdup2(pool, &url->host, "my_proxy09.MY-domain.com");    url->port = 9801;    return (pjsip_uri*)name_addr;}static pjsip_uri *create_uri15(pj_pool_t *pool){    /* "sip:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.com" */    pjsip_sip_uri *url;    url = pjsip_sip_uri_create(pool, 0);    pj_strdup2(pool, &url->host, ALPHANUM "-_.com");    return (pjsip_uri*)url;}static pjsip_uri *create_uri16(pj_pool_t *pool){    /* "sip:" USER_CHAR ":" PASS_CHAR "@host" */    pjsip_sip_uri *url;    url = pjsip_sip_uri_create(pool, 0);    pj_strdup2(pool, &url->user, USER_CHAR);    pj_strdup2(pool, &url->passwd, PASS_CHAR);    pj_strdup2(pool, &url->host, "host");    return (pjsip_uri*)url;}static pjsip_uri *create_uri17(pj_pool_t *pool){    /* "sip:host;user=ip;" PARAM_CHAR "%21=" PARAM_CHAR "%21;lr;other=1;transport=sctp;other2" */    pjsip_sip_uri *url;    url = pjsip_sip_uri_create(pool, 0);    pj_strdup2(pool, &url->host, "host");    pj_strdup2(pool, &url->user_param, "ip");    pj_strdup2(pool, &url->transport_param, "sctp");    param_add(url->other_param, PARAM_CHAR "!", PARAM_CHAR "!");    param_add(url->other_param, "other", "1");    param_add(url->other_param, "other2", "");    url->lr_param = 1;    return (pjsip_uri*)url;}static pjsip_uri *create_uri25(pj_pool_t *pool){    /* "tel:+1-201-555-0123" */    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("+1-201-555-0123");    return (pjsip_uri*)uri;}static pjsip_uri *create_uri26(pj_pool_t *pool){    /* tel:7042;phone-context=example.com */    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("7042");    uri->context = pj_str("example.com");    return (pjsip_uri*)uri;}static pjsip_uri *create_uri27(pj_pool_t *pool){    /* "tel:863-1234;phone-context=+1-914-555" */    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("863-1234");    uri->context = pj_str("+1-914-555");    return (pjsip_uri*)uri;}/* "tel:1" */static pjsip_uri *create_uri28(pj_pool_t *pool){    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("1");    return (pjsip_uri*)uri;}/* "tel:(44).1234-*#+Deaf" */static pjsip_uri *create_uri29(pj_pool_t *pool){    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("(44).1234-*#+Deaf");    return (pjsip_uri*)uri;    }/* "tel:+1;isub=/:@&$,-_.!~*'()[]/:&$aA1%21+=" */static pjsip_uri *create_uri30(pj_pool_t *pool){    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("+1");    uri->isub_param = pj_str("/:@&$,-_.!~*'()[]/:&$aA1!+=");    return (pjsip_uri*)uri;    }/* "tel:+1;ext=+123" */static pjsip_uri *create_uri31(pj_pool_t *pool){    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("+1");    uri->ext_param = pj_str("+123");    return (pjsip_uri*)uri;    }/* "tel:911;phone-context=+1-911" */static pjsip_uri *create_uri32(pj_pool_t *pool){    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("911");    uri->context = pj_str("+1-911");    return (pjsip_uri*)uri;    }/* "tel:911;phone-context=emergency.example.com" */static pjsip_uri *create_uri33(pj_pool_t *pool){    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    uri->number = pj_str("911");    uri->context = pj_str("EMERGENCY.EXAMPLE.COM");    return (pjsip_uri*)uri;    }/* "tel:911;p1=p1;p2=p2" */static pjsip_uri *create_uri34(pj_pool_t *pool){    pjsip_tel_uri *uri = pjsip_tel_uri_create(pool);    pjsip_param *p;    uri->number = pj_str("911");        p = pj_pool_alloc(pool, sizeof(*p));    p->name = p->value = pj_str("p1");    pj_list_insert_before(&uri->other_param, p);    return (pjsip_uri*)uri;    }static pjsip_uri *create_dummy(pj_pool_t *pool){    PJ_UNUSED_ARG(pool);    return NULL;}/*****************************************************************************//* * Test one test entry. */static pj_status_t do_uri_test(pj_pool_t *pool, struct uri_test *entry){    pj_status_t status;    int len;    char *input;    pjsip_uri *parsed_uri, *ref_uri;    pj_str_t s1 = {NULL, 0}, s2 = {NULL, 0};    pj_timestamp t1, t2;    if (entry->len == 0)	entry->len = pj_native_strlen(entry->str);#if defined(PJSIP_UNESCAPE_IN_PLACE) && PJSIP_UNESCAPE_IN_PLACE!=0    input = pj_pool_alloc(pool, entry->len + 1);    pj_memcpy(input, entry->str, entry->len);    input[entry->len] = '\0';#else    input = entry->str;#endif    /* Parse URI text. */    pj_get_timestamp(&t1);    var.parse_len = var.parse_len + entry->len;    parsed_uri = pjsip_parse_uri(pool, input, entry->len, 0);    if (!parsed_uri) {	/* Parsing failed. If the entry says that this is expected, then	 * return OK.	 */	status = entry->status==ERR_SYNTAX_ERR ? PJ_SUCCESS : -10;	if (status != 0) {	    PJ_LOG(3,(THIS_FILE, "   uri parse error!\n"				 "   uri='%s'\n",				 input));	}	goto on_return;    }    pj_get_timestamp(&t2);    pj_sub_timestamp(&t2, &t1);    pj_add_timestamp(&var.parse_time, &t2);    /* Create the reference URI. */    ref_uri = entry->creator(pool);    /* Print both URI. */    s1.ptr = pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);    s2.ptr = pj_pool_alloc(pool, PJSIP_MAX_URL_SIZE);    pj_get_timestamp(&t1);    len = pjsip_uri_print( PJSIP_URI_IN_OTHER, parsed_uri, s1.ptr, PJSIP_MAX_URL_SIZE);    if (len < 1) {	status = -20;	goto on_return;    }    s1.ptr[len] = '\0';    s1.slen = len;    var.print_len = var.print_len + len;    pj_get_timestamp(&t2);    pj_sub_timestamp(&t2, &t1);    pj_add_timestamp(&var.print_time, &t2);    len = pjsip_uri_print( PJSIP_URI_IN_OTHER, ref_uri, s2.ptr, PJSIP_MAX_URL_SIZE);    if (len < 1) {	status = -30;	goto on_return;    }    s2.ptr[len] = '\0';    s2.slen = len;    /* Full comparison of parsed URI with reference URI. */    pj_get_timestamp(&t1);    status = pjsip_uri_cmp(PJSIP_URI_IN_OTHER, parsed_uri, ref_uri);    if (status != 0) {	/* Not equal. See if this is the expected status. */	status = entry->status==ERR_NOT_EQUAL ? PJ_SUCCESS : -40;	if (status != 0) {	    PJ_LOG(3,(THIS_FILE, "   uri comparison mismatch, status=%d:\n"				 "    uri1='%s'\n"				 "    uri2='%s'",				 status, s1.ptr, s2.ptr));	}	goto on_return;    } else {	/* Equal. See if this is the expected status. */	status = entry->status==PJ_SUCCESS ? PJ_SUCCESS : -50;	if (status != PJ_SUCCESS) {	    goto on_return;	}    }    var.cmp_len = var.cmp_len + len;    pj_get_timestamp(&t2);    pj_sub_timestamp(&t2, &t1);    pj_add_timestamp(&var.cmp_time, &t2);    /* Compare text. */    if (entry->printed) {	if (pj_strcmp2(&s1, entry->printed) != 0) {	    /* Not equal. */	    PJ_LOG(3,(THIS_FILE, "   uri print mismatch:\n"				 "    printed='%s'\n"				 "    expectd='%s'",				 s1.ptr, entry->printed));	    status = -60;	}    } else {	if (pj_strcmp(&s1, &s2) != 0) {	    /* Not equal. */	    PJ_LOG(3,(THIS_FILE, "   uri print mismatch:\n"				 "    uri1='%s'\n"				 "    uri2='%s'",				 s1.ptr, s2.ptr));	    status = -70;	}    }on_return:    return status;}static int simple_uri_test(void){    unsigned i;    pj_pool_t *pool;    pj_status_t status;    PJ_LOG(3,(THIS_FILE, "  simple test"));    for (i=0; i<PJ_ARRAY_SIZE(uri_test_array); ++i) {	pool = pjsip_endpt_create_pool(endpt, "", POOL_SIZE, POOL_SIZE);	status = do_uri_test(pool, &uri_test_array[i]);	pjsip_endpt_release_pool(endpt, pool);	if (status != PJ_SUCCESS) {	    PJ_LOG(3,(THIS_FILE, "  error %d when testing entry %d",		      status, i));	    return status;	}    }    return 0;}static int uri_benchmark(unsigned *p_parse, unsigned *p_print, unsigned *p_cmp){    unsigned i, loop;    pj_status_t status;    pj_timestamp zero;    pj_time_val elapsed;    pj_highprec_t avg_parse, avg_print, avg_cmp, kbytes;    pj_bzero(&var, sizeof(var));    zero.u32.hi = zero.u32.lo = 0;    var.parse_len = var.print_len = var.cmp_len = 0;    var.parse_time.u32.hi = var.parse_time.u32.lo = 0;    var.print_time.u32.hi = var.print_time.u32.lo = 0;    var.cmp_time.u32.hi = var.cmp_time.u32.lo = 0;    for (loop=0; loop<LOOP_COUNT; ++loop) {	for (i=0; i<PJ_ARRAY_SIZE(uri_test_array); ++i) {	    pj_pool_t *pool;	    pool = pjsip_endpt_create_pool(endpt, "", POOL_SIZE, POOL_SIZE);	    status = do_uri_test(pool, &uri_test_array[i]);	    pjsip_endpt_release_pool(endpt, pool);	    if (status != PJ_SUCCESS) {		PJ_LOG(3,(THIS_FILE, "  error %d when testing entry %d",			  status, i));		pjsip_endpt_release_pool(endpt, pool);		goto on_return;	    }	}    }    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_URL_LEN);    pj_highprec_div(avg_parse, var.parse_len);    avg_parse = 1000000 / avg_parse;    PJ_LOG(3,(THIS_FILE, 	      "    %u.%u MB of urls parsed in %d.%03ds (avg=%d urls/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_URL_LEN);    pj_highprec_div(avg_print, var.parse_len);    avg_print = 1000000 / avg_print;    PJ_LOG(3,(THIS_FILE, 	      "    %u.%u MB of urls printed in %d.%03ds (avg=%d urls/sec)", 	      (unsigned)(var.print_len/1000000), (unsigned)kbytes,	      elapsed.sec, elapsed.msec,	      (unsigned)avg_print));    *p_print = (unsigned)avg_print;    kbytes = var.cmp_len;    pj_highprec_mod(kbytes, 1000000);    pj_highprec_div(kbytes, 100000);    elapsed = pj_elapsed_time(&zero, &var.cmp_time);    avg_cmp = pj_elapsed_usec(&zero, &var.cmp_time);    pj_highprec_mul(avg_cmp, AVERAGE_URL_LEN);    pj_highprec_div(avg_cmp, var.cmp_len);    avg_cmp = 1000000 / avg_cmp;    PJ_LOG(3,(THIS_FILE, 	      "    %u.%u MB of urls compared in %d.%03ds (avg=%d urls/sec)", 	      (unsigned)(var.cmp_len/1000000), (unsigned)kbytes,	      elapsed.sec, elapsed.msec,	      (unsigned)avg_cmp));    *p_cmp = (unsigned)avg_cmp;on_return:    return status;}/*****************************************************************************/int uri_test(void){    enum { COUNT = 4, DETECT=0, PARSE=1, PRINT=2 };    struct {	unsigned parse;	unsigned print;	unsigned cmp;    } run[COUNT];    unsigned i, max, avg_len;    char desc[200];    pj_status_t status;    status = simple_uri_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 = uri_benchmark(&run[i].parse, &run[i].print, &run[i].cmp);	if (status != PJ_SUCCESS)	    return status;    }    /* Calculate average URI length */    for (i=0, avg_len=0; i<PJ_ARRAY_SIZE(uri_test_array); ++i) {	avg_len += uri_test_array[i].len;    }    avg_len /= PJ_ARRAY_SIZE(uri_test_array);    /*      * 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 URI parse/sec=%u", max));    pj_ansi_sprintf(desc, "Number of SIP/TEL URIs that can be <B>parsed</B> with "			  "<tt>pjsip_parse_uri()</tt> per second "			  "(tested with %d URI set, with average length of "			  "%d chars)",			  (int)PJ_ARRAY_SIZE(uri_test_array), avg_len);    report_ival("uri-parse-per-sec", max, "URI/sec", desc);    /* URI parsing bandwidth */    report_ival("uri-parse-bandwidth-mb", avg_len*max/1000000, "MB/sec",	        "URI parsing bandwidth in megabytes (number of megabytes "		"worth of URI that can be parsed per second)");    /* 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 URI print/sec=%u", max));    pj_ansi_sprintf(desc, "Number of SIP/TEL URIs that can be <B>printed</B> with "			  "<tt>pjsip_uri_print()</tt> per second "			  "(tested with %d URI set, with average length of "			  "%d chars)",			  (int)PJ_ARRAY_SIZE(uri_test_array), avg_len);    report_ival("uri-print-per-sec", max, "URI/sec", desc);    /* Print maximum detect/sec */    for (i=0, max=0; i<COUNT; ++i)	if (run[i].cmp > max) max = run[i].cmp;    PJ_LOG(3,("", "  Maximum URI comparison/sec=%u", max));    pj_ansi_sprintf(desc, "Number of SIP/TEL URIs that can be <B>compared</B> with "			  "<tt>pjsip_uri_cmp()</tt> per second "			  "(tested with %d URI set, with average length of "			  "%d chars)",			  (int)PJ_ARRAY_SIZE(uri_test_array), avg_len);    report_ival("uri-cmp-per-sec", max, "URI/sec", desc);    return PJ_SUCCESS;}

⌨️ 快捷键说明

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