📄 uri_test.c
字号:
/* $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 + -