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

📄 uri_test.c

📁 基于sip协议的网络电话源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* $Id: uri_test.c 1230 2007-04-29 18:27:34Z bennylp $ *//*  * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#include "test.h"#include <pjsip.h>#include <pjlib.h>#define THIS_FILE   "uri_test.c"#define ALPHANUM    "abcdefghijklmnopqrstuvwxyz" \		    "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \		    "0123456789"#define MARK	    "-_.!~*'()"#define USER_CHAR   ALPHANUM MARK "&=+$,;?/"#define PASS_CHAR   ALPHANUM MARK "&=+$,"#define PARAM_CHAR  ALPHANUM MARK "[]/:&+$"#define POOL_SIZE	8000#if defined(PJ_DEBUG) && PJ_DEBUG!=0#   define LOOP_COUNT	10000#else#   define LOOP_COUNT	40000#endif#define AVERAGE_URL_LEN	80#define THREAD_COUNT	4static struct{    pj_highprec_t parse_len, print_len, cmp_len;    pj_timestamp  parse_time, print_time, cmp_time;} var;/* URI creator functions. */static pjsip_uri *create_uri0( pj_pool_t *pool );static pjsip_uri *create_uri1( pj_pool_t *pool );static pjsip_uri *create_uri2( pj_pool_t *pool );static pjsip_uri *create_uri3( pj_pool_t *pool );static pjsip_uri *create_uri4( pj_pool_t *pool );static pjsip_uri *create_uri5( pj_pool_t *pool );static pjsip_uri *create_uri6( pj_pool_t *pool );static pjsip_uri *create_uri7( pj_pool_t *pool );static pjsip_uri *create_uri8( pj_pool_t *pool );static pjsip_uri *create_uri9( pj_pool_t *pool );static pjsip_uri *create_uri10( pj_pool_t *pool );static pjsip_uri *create_uri11( pj_pool_t *pool );static pjsip_uri *create_uri12( pj_pool_t *pool );static pjsip_uri *create_uri13( pj_pool_t *pool );static pjsip_uri *create_uri14( pj_pool_t *pool );static pjsip_uri *create_uri15( pj_pool_t *pool );static pjsip_uri *create_uri16( pj_pool_t *pool );static pjsip_uri *create_uri17( pj_pool_t *pool );static pjsip_uri *create_uri25( pj_pool_t *pool );static pjsip_uri *create_uri26( pj_pool_t *pool );static pjsip_uri *create_uri27( pj_pool_t *pool );static pjsip_uri *create_uri28( pj_pool_t *pool );static pjsip_uri *create_uri29( pj_pool_t *pool );static pjsip_uri *create_uri30( pj_pool_t *pool );static pjsip_uri *create_uri31( pj_pool_t *pool );static pjsip_uri *create_uri32( pj_pool_t *pool );static pjsip_uri *create_uri33( pj_pool_t *pool );static pjsip_uri *create_uri34( pj_pool_t *pool );//static pjsip_uri *create_uri35( pj_pool_t *pool );static pjsip_uri *create_dummy( pj_pool_t *pool );#define ERR_NOT_EQUAL	-1001#define ERR_SYNTAX_ERR	-1002struct uri_test{    pj_status_t	     status;    char	     str[PJSIP_MAX_URL_SIZE];    pjsip_uri	    *(*creator)(pj_pool_t *pool);    const char	    *printed;    pj_size_t	     len;} uri_test_array[] = {    {	PJ_SUCCESS,	"sip:localhost",	&create_uri0    },    {	PJ_SUCCESS,	"sip:user@localhost",	&create_uri1    },    {	PJ_SUCCESS,	"sip:user:password@localhost:5060",	&create_uri2,    },    {	/* Port is specified should not match unspecified port. */	ERR_NOT_EQUAL,	"sip:localhost:5060",	&create_uri3    },    {	/* All recognized parameters. */	PJ_SUCCESS,	"sip:localhost;transport=tcp;user=ip;ttl=255;lr;maddr=127.0.0.1;method=ACK",	&create_uri4    },    {	/* Params mixed with other params and header params. */	PJ_SUCCESS,	"sip:localhost;pickup=hurry;user=phone;message=I%20am%20sorry"	"?Subject=Hello%20There&Server=SIP%20Server",	&create_uri5    },    {	/* SIPS. */	PJ_SUCCESS,	"sips:localhost",	&create_uri6,    },    {	/* Name address */	PJ_SUCCESS,	"<sip:localhost>",	&create_uri7    },    {	/* Name address with display name and SIPS scheme with some redundant	 * whitespaced.	 */	PJ_SUCCESS,	"  Power Administrator  <sips:localhost>",	&create_uri8    },    {	/* Name address. */	PJ_SUCCESS,	" \"User\" <sip:user@localhost:5071>",	&create_uri9    },    {	/* Escaped sequence in display name (display=Strange User\"\\\"). */	PJ_SUCCESS,	" \"Strange User\\\"\\\\\\\"\" <sip:localhost>",	&create_uri10,    },    {	/* Errorneous escaping in display name. */	ERR_SYNTAX_ERR,	" \"Rogue User\\\" <sip:localhost>",	&create_uri11,    },    {	/* Dangling quote in display name, but that should be OK. */	PJ_SUCCESS,	"Strange User\" <sip:localhost>",	&create_uri12,    },    {	/* Special characters in parameter value must be quoted. */	PJ_SUCCESS,	"sip:localhost;pvalue=\"hello world\"",	&create_uri13,    },    {	/* Excercise strange character sets allowed in display, user, password,	 * host, and port. 	 */	PJ_SUCCESS,	"This is -. !% *_+`'~ me <sip:a19A&=+$,;?/%2c:%40a&Zz=+$,@"	"my_proxy09.MY-domain.com:9801>",	&create_uri14,    },    {	/* Another excercise to the allowed character sets to the hostname. */	PJ_SUCCESS,	"sip:" ALPHANUM "-_.com",	&create_uri15,    },    {	/* Another excercise to the allowed character sets to the username 	 * and password.	 */	PJ_SUCCESS,	"sip:" USER_CHAR ":" PASS_CHAR "@host",	&create_uri16,    },    {	/* Excercise to the pname and pvalue, and mixup of other-param	 * between 'recognized' params.	 */	PJ_SUCCESS,	"sip:host;user=ip;" PARAM_CHAR "%21=" PARAM_CHAR "%21"	";lr;other=1;transport=sctp;other2",	&create_uri17,    },    {	/* 18: This should trigger syntax error. */	ERR_SYNTAX_ERR,	"sip:",	&create_dummy,    },    {	/* 19: Syntax error: whitespace after scheme. */	ERR_SYNTAX_ERR,	"sip :host",	&create_dummy,    },    {	/* 20: Syntax error: whitespace before hostname. */	ERR_SYNTAX_ERR,	"sip: host",	&create_dummy,    },    {	/* 21: Syntax error: invalid port. */	ERR_SYNTAX_ERR,	"sip:user:password",	&create_dummy,    },    {	/* 22: Syntax error: no host. */	ERR_SYNTAX_ERR,	"sip:user@",	&create_dummy,    },    {	/* 23: Syntax error: no user/host. */	ERR_SYNTAX_ERR,	"sip:@",	&create_dummy,    },    {	/* 24: Syntax error: empty string. */	ERR_SYNTAX_ERR,	"",	&create_dummy,    },    {	/* 25: Simple tel: URI with global context */	PJ_SUCCESS,	"tel:+1-201-555-0123",	&create_uri25,	"tel:+1-201-555-0123"    },    {	/* 26: Simple tel: URI with local context */	PJ_SUCCESS,	"tel:7042;phone-context=example.com",	&create_uri26,	"tel:7042;phone-context=example.com"    },    {	/* 27: Simple tel: URI with local context */	PJ_SUCCESS,	"tel:863-1234;phone-context=+1-914-555",	&create_uri27,	"tel:863-1234;phone-context=+1-914-555"    },    {	/* 28: Comparison between local and global number */	ERR_NOT_EQUAL,	"tel:+1",	&create_uri28,	"tel:+1"    },    {	/* 29: tel: with some visual chars and spaces */	PJ_SUCCESS,	"tel:(44).1234-*#+Deaf",	&create_uri29,	"tel:(44).1234-*#+Deaf"    },    {	/* 30: isub parameters */	PJ_SUCCESS,	"tel:+1;isub=/:@&$,-_.!~*'()[]/:&$aA1%21+=",	&create_uri30,	"tel:+1;isub=/:@&$,-_.!~*'()[]/:&$aA1!+%3d"    },    {	/* 31: extension number parsing and encoding */	PJ_SUCCESS,	"tel:+1;ext=+123",	&create_uri31,	"tel:+1;ext=%2b123"    },    {	/* 32: context parameter parsing and encoding */	PJ_SUCCESS,	"tel:911;phone-context=+1-911",	&create_uri32,	"tel:911;phone-context=+1-911"    },    {	/* 33: case-insensitive comparison */	PJ_SUCCESS,	"tel:911;phone-context=emergency.example.com",	&create_uri33,	"tel:911;phone-context=emergency.example.com"    },    {	/* 34: parameter only appears in one URL */	ERR_NOT_EQUAL,	"tel:911;p1=p1;p2=p2",	&create_uri34,	"tel:911;p1=p1;p2=p2"    },    };static pjsip_uri *create_uri0(pj_pool_t *pool){    /* "sip:localhost" */    pjsip_sip_uri *url = pjsip_sip_uri_create(pool, 0);    pj_strdup2(pool, &url->host, "localhost");    return (pjsip_uri*)url;}static pjsip_uri *create_uri1(pj_pool_t *pool){    /* "sip:user@localhost" */    pjsip_sip_uri *url = pjsip_sip_uri_create(pool, 0);    pj_strdup2( pool, &url->user, "user");    pj_strdup2( pool, &url->host, "localhost");    return (pjsip_uri*) url;}static pjsip_uri *create_uri2(pj_pool_t *pool){    /* "sip:user:password@localhost:5060" */    pjsip_sip_uri *url = pjsip_sip_uri_create(pool, 0);    pj_strdup2( pool, &url->user, "user");    pj_strdup2( pool, &url->passwd, "password");    pj_strdup2( pool, &url->host, "localhost");    url->port = 5060;    return (pjsip_uri*) url;}static pjsip_uri *create_uri3(pj_pool_t *pool){    /* Like: "sip:localhost:5060", but without the port. */    pjsip_sip_uri *url = pjsip_sip_uri_create(pool, 0);    pj_strdup2(pool, &url->host, "localhost");    return (pjsip_uri*)url;}static pjsip_uri *create_uri4(pj_pool_t *pool){    /* "sip:localhost;transport=tcp;user=ip;ttl=255;lr;maddr=127.0.0.1;method=ACK" */    pjsip_sip_uri *url = pjsip_sip_uri_create(pool, 0);    pj_strdup2(pool, &url->host, "localhost");    pj_strdup2(pool, &url->transport_param, "tcp");    pj_strdup2(pool, &url->user_param, "ip");    url->ttl_param = 255;    url->lr_param = 1;    pj_strdup2(pool, &url->maddr_param, "127.0.0.1");    pj_strdup2(pool, &url->method_param, "ACK");    return (pjsip_uri*)url;}#define param_add(list,pname,pvalue)  \	do { \	    pjsip_param *param; \	    param=pj_pool_alloc(pool, sizeof(pjsip_param)); \	    param->name = pj_str(pname); \	    param->value = pj_str(pvalue); \	    pj_list_insert_before(&list, param); \	} while (0)static pjsip_uri *create_uri5(pj_pool_t *pool){    /* "sip:localhost;pickup=hurry;user=phone;message=I%20am%20sorry"       "?Subject=Hello%20There&Server=SIP%20Server"      */    pjsip_sip_uri *url = pjsip_sip_uri_create(pool, 0);    pj_strdup2(pool, &url->host, "localhost");    pj_strdup2(pool, &url->user_param, "phone");    //pj_strdup2(pool, &url->other_param, ";pickup=hurry;message=I%20am%20sorry");    param_add(url->other_param, "pickup", "hurry");    param_add(url->other_param, "message", "I am sorry");    //pj_strdup2(pool, &url->header_param, "?Subject=Hello%20There&Server=SIP%20Server");    param_add(url->header_param, "Subject", "Hello There");    param_add(url->header_param, "Server", "SIP Server");    return (pjsip_uri*)url;}static pjsip_uri *create_uri6(pj_pool_t *pool){    /* "sips:localhost" */    pjsip_sip_uri *url = pjsip_sip_uri_create(pool, 1);    pj_strdup2(pool, &url->host, "localhost");    return (pjsip_uri*)url;}static pjsip_uri *create_uri7(pj_pool_t *pool){    /* "<sip:localhost>" */    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, &url->host, "localhost");    return (pjsip_uri*)name_addr;}static pjsip_uri *create_uri8(pj_pool_t *pool){    /* "  Power Administrator <sips:localhost>" */    pjsip_name_addr *name_addr = pjsip_name_addr_create(pool);    pjsip_sip_uri *url;    url = pjsip_sip_uri_create(pool, 1);    name_addr->uri = (pjsip_uri*) url;    pj_strdup2(pool, &name_addr->display, "Power Administrator");    pj_strdup2(pool, &url->host, "localhost");    return (pjsip_uri*)name_addr;}static pjsip_uri *create_uri9(pj_pool_t *pool){    /* " \"User\" <sip:user@localhost:5071>" */    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, "User");    pj_strdup2(pool, &url->user, "user");    pj_strdup2(pool, &url->host, "localhost");    url->port = 5071;    return (pjsip_uri*)name_addr;}static pjsip_uri *create_uri10(pj_pool_t *pool){    /* " \"Strange User\\\"\\\\\\\"\" <sip:localhost>" */    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, "Strange User\\\"\\\\\\\"");    pj_strdup2(pool, &url->host, "localhost");    return (pjsip_uri*)name_addr;}static pjsip_uri *create_uri11(pj_pool_t *pool){    /* " \"Rogue User\\\" <sip:localhost>" */    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, "Rogue User\\");    pj_strdup2(pool, &url->host, "localhost");    return (pjsip_uri*)name_addr;}static pjsip_uri *create_uri12(pj_pool_t *pool){    /* "Strange User\" <sip:localhost>" */    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;

⌨️ 快捷键说明

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