summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2005-11-21 17:07:18 +0000
committerBenny Prijono <bennylp@teluu.com>2005-11-21 17:07:18 +0000
commit1dbbf091516b903b271907259aa19dc90ab2f1f6 (patch)
tree00d651db4b7db02d0987d7835538cf317d5f2321
parentc8974baa51aad3cb810611027e4f03ebf509f740 (diff)
Optimization here and there, changes because of PJLIB modifications
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@74 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip/build/test_pjsip.dsp2
-rw-r--r--pjsip/include/pjsip/sip_parser.h2
-rw-r--r--pjsip/src/pjsip-simple/event_notify.c2
-rw-r--r--pjsip/src/pjsip-ua/sip_dialog.c2
-rw-r--r--pjsip/src/pjsip/sip_parser.c36
-rw-r--r--pjsip/src/pjsip/sip_uri.c2
-rw-r--r--pjsip/src/pjsip/sip_util.c4
-rw-r--r--pjsip/src/test-pjsip/uri.c64
8 files changed, 80 insertions, 34 deletions
diff --git a/pjsip/build/test_pjsip.dsp b/pjsip/build/test_pjsip.dsp
index 2d58318d..91d8d24b 100644
--- a/pjsip/build/test_pjsip.dsp
+++ b/pjsip/build/test_pjsip.dsp
@@ -42,7 +42,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /Zi /O2 /I "../include" /I "../../pjlib/include" /I "../../pjlib-util/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "PJ_WIN32" /D "PJ_M_I386" /FR /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Ob2 /I "../include" /I "../../pjlib/include" /I "../../pjlib-util/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "PJ_WIN32" /D "PJ_M_I386" /FR /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
diff --git a/pjsip/include/pjsip/sip_parser.h b/pjsip/include/pjsip/sip_parser.h
index 2b4e6c14..0df3ca92 100644
--- a/pjsip/include/pjsip/sip_parser.h
+++ b/pjsip/include/pjsip/sip_parser.h
@@ -67,7 +67,7 @@ enum
typedef struct pjsip_parser_err_report
{
PJ_DECL_LIST_MEMBER(struct pjsip_parser_err_report);
- int exception_code; /**< Error exception (e.g. PJSIP_SYN_ERR_EXCEPTION) */
+ int except_code; /**< Error exception (e.g. PJSIP_SYN_ERR_EXCEPTION) */
int line; /**< Line number. */
int col; /**< Column number. */
pj_str_t hname; /**< Header name, if any. */
diff --git a/pjsip/src/pjsip-simple/event_notify.c b/pjsip/src/pjsip-simple/event_notify.c
index 25869c40..51fe7694 100644
--- a/pjsip/src/pjsip-simple/event_notify.c
+++ b/pjsip/src/pjsip-simple/event_notify.c
@@ -336,7 +336,7 @@ PJ_DEF(pjsip_event_sub*) pjsip_event_sub_create( pjsip_endpoint *endpt,
pj_mutex_unlock( mgr.mutex );
}
- PJ_DEFAULT {
+ PJ_CATCH_ANY {
PJ_LOG(4,(THIS_FILE, "event_sub%p (%s): caught exception %d during init",
sub, state[sub->state].ptr, PJ_GET_EXCEPTION()));
diff --git a/pjsip/src/pjsip-ua/sip_dialog.c b/pjsip/src/pjsip-ua/sip_dialog.c
index bb4861b8..542b3f4e 100644
--- a/pjsip/src/pjsip-ua/sip_dialog.c
+++ b/pjsip/src/pjsip-ua/sip_dialog.c
@@ -756,7 +756,7 @@ PJ_DEF(pjsip_tx_data*) pjsip_dlg_create_request( pjsip_dlg *dlg,
dlg_create_request_throw(&tdata, dlg, method, cseq);
PJ_LOG(5, (dlg->obj_name, "request data %s created", tdata->obj_name));
}
- PJ_DEFAULT {
+ PJ_CATCH_ANY {
/* Failed! Delete transmit data. */
if (tdata) {
pjsip_tx_data_dec_ref( tdata );
diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c
index 4af7a630..248f0b76 100644
--- a/pjsip/src/pjsip/sip_parser.c
+++ b/pjsip/src/pjsip/sip_parser.c
@@ -183,7 +183,7 @@ static unsigned long pj_strtoul_mindigit(const pj_str_t *str,
}
/* Case insensitive comparison */
-#define parser_stricmp(str1, str2) pj_stricmp(&str1, &str2)
+#define parser_stricmp(s1, s2) (pj_stricmp_alnum(&s1, &s2))
/* Syntax error handler for parser. */
@@ -551,7 +551,7 @@ PJ_DEF(pjsip_msg*) pjsip_parse_msg( pj_pool_t *pool,
PJ_TRY {
msg = int_parse_msg(&context, err_list);
}
- PJ_DEFAULT {
+ PJ_CATCH_ANY {
msg = NULL;
}
PJ_END
@@ -580,7 +580,7 @@ PJ_DEF(pjsip_msg *) pjsip_parse_rdata( char *buf, pj_size_t size,
PJ_TRY {
rdata->msg_info.msg = int_parse_msg(&context, &rdata->msg_info.parse_err);
}
- PJ_DEFAULT {
+ PJ_CATCH_ANY {
rdata->msg_info.msg = NULL;
}
PJ_END
@@ -656,7 +656,10 @@ PJ_DEF(pj_bool_t) pjsip_find_msg( const char *buf, pj_size_t size,
/* Found a valid Content-Length header. */
content_length = pj_strtoul(&str_clen);
- }
+ }
+ PJ_CATCH_ANY {
+ content_length = -1;
+ }
PJ_END
pj_scan_fini(&scanner);
@@ -691,9 +694,9 @@ PJ_DEF(pjsip_uri*) pjsip_parse_uri( pj_pool_t *pool,
char *buf, pj_size_t size,
unsigned option)
{
- PJ_USE_EXCEPTION;
pj_scanner scanner;
pjsip_uri *uri = NULL;
+ PJ_USE_EXCEPTION;
init_sip_parser();
@@ -703,6 +706,9 @@ PJ_DEF(pjsip_uri*) pjsip_parse_uri( pj_pool_t *pool,
PJ_TRY {
uri = int_parse_uri_or_name_addr(&scanner, pool, option);
}
+ PJ_CATCH_ANY {
+ uri = NULL;
+ }
PJ_END;
/* Must have exhausted all inputs. */
@@ -738,12 +744,12 @@ static int generic_print_body (pjsip_msg_body *msg_body,
static pjsip_msg *int_parse_msg( pjsip_parse_ctx *ctx,
pjsip_parser_err_report *err_list)
{
- PJ_USE_EXCEPTION;
int ch;
pjsip_msg *msg;
pjsip_ctype_hdr *ctype_hdr = NULL;
pj_scanner *scanner = ctx->scanner;
pj_pool_t *pool = ctx->pool;
+ PJ_USE_EXCEPTION;
/* Skip leading newlines. */
ch = *scanner->curptr;
@@ -800,7 +806,7 @@ static pjsip_msg *int_parse_msg( pjsip_parse_ctx *ctx,
}
}
- PJ_DEFAULT {
+ PJ_CATCH_ANY {
/* Exception was thrown during parsing.
* Skip until newline, and parse next header.
*/
@@ -815,7 +821,7 @@ static pjsip_msg *int_parse_msg( pjsip_parse_ctx *ctx,
pjsip_parser_err_report *err_info;
err_info = pj_pool_alloc(pool, sizeof(*err_info));
- err_info->exception_code = PJ_GET_EXCEPTION();
+ err_info->except_code = PJ_GET_EXCEPTION();
err_info->line = scanner->line;
err_info->col = scanner->col;
err_info->hname = hname;
@@ -1079,10 +1085,9 @@ static pjsip_url *int_parse_sip_url( pj_scanner *scanner,
pj_bool_t parse_params)
{
pj_str_t scheme;
- pjsip_url *url;
+ pjsip_url *url = NULL;
int colon;
int skip_ws = scanner->skip_ws;
- int hsep = '?';
scanner->skip_ws = 0;
pj_scan_get(scanner, &pjsip_TOKEN_SPEC, &scheme);
@@ -1114,7 +1119,8 @@ static pjsip_url *int_parse_sip_url( pj_scanner *scanner,
int_parse_uri_host_port(scanner, &url->host, &url->port);
/* Get URL parameters. */
- while ( parse_params && *scanner->curptr == ';' ) {
+ if (parse_params) {
+ while (*scanner->curptr == ';' ) {
pj_str_t pname, pvalue;
int_parse_param( scanner, pool, &pname, &pvalue);
@@ -1143,15 +1149,17 @@ static pjsip_url *int_parse_sip_url( pj_scanner *scanner,
p->value = pvalue;
pj_list_insert_before(&url->other_param, p);
}
+ }
}
/* Get header params. */
- while (parse_params && *scanner->curptr == hsep) {
+ if (parse_params && *scanner->curptr == '?') {
+ do {
pjsip_param *param;
param = pj_pool_alloc(pool, sizeof(pjsip_param));
int_parse_hparam(scanner, pool, &param->name, &param->value);
pj_list_insert_before(&url->header_param, param);
- hsep = '&';
+ } while (*scanner->curptr == '&');
}
scanner->skip_ws = skip_ws;
@@ -1774,7 +1782,7 @@ PJ_DEF(void*) pjsip_parse_hdr( pj_pool_t *pool, const pj_str_t *hname,
}
}
- PJ_DEFAULT {
+ PJ_CATCH_ANY {
hdr = NULL;
}
PJ_END
diff --git a/pjsip/src/pjsip/sip_uri.c b/pjsip/src/pjsip/sip_uri.c
index ab25880a..a4464254 100644
--- a/pjsip/src/pjsip/sip_uri.c
+++ b/pjsip/src/pjsip/sip_uri.c
@@ -46,7 +46,7 @@ PJ_DEF(const pjsip_param*) pjsip_param_cfind( const pjsip_param *param_list,
{
const pjsip_param *p = param_list->next;
while (p != param_list) {
- if (pj_stricmp(&p->name, name)==0)
+ if (pj_stricmp_alnum(&p->name, name)==0)
return p;
p = p->next;
}
diff --git a/pjsip/src/pjsip/sip_util.c b/pjsip/src/pjsip/sip_util.c
index 4531117f..57ef6fbb 100644
--- a/pjsip/src/pjsip/sip_util.c
+++ b/pjsip/src/pjsip/sip_util.c
@@ -322,7 +322,7 @@ PJ_DEF(pj_status_t) pjsip_endpt_create_request( pjsip_endpoint *endpt,
init_request_throw( endpt, tdata, &cseq->method, target, from, to,
contact, call_id, cseq, param_text);
}
- PJ_DEFAULT {
+ PJ_CATCH_ANY {
status = PJ_ENOMEM;
goto on_error;
}
@@ -393,7 +393,7 @@ pjsip_endpt_create_request_from_hdr( pjsip_endpoint *endpt,
init_request_throw(endpt, tdata, &cseq->method, target, from, to,
contact, call_id, cseq, param_text);
}
- PJ_DEFAULT {
+ PJ_CATCH_ANY {
status = PJ_ENOMEM;
goto on_error;
}
diff --git a/pjsip/src/test-pjsip/uri.c b/pjsip/src/test-pjsip/uri.c
index 4435d1a4..7afcbbef 100644
--- a/pjsip/src/test-pjsip/uri.c
+++ b/pjsip/src/test-pjsip/uri.c
@@ -29,13 +29,13 @@
#define PASS_CHAR ALPHANUM MARK "&=+$,"
#define PARAM_CHAR ALPHANUM MARK "[]/:&+$"
-#define POOL_SIZE 4000
-#define LOOP_COUNT 1000
+#define POOL_SIZE 8000
+#define LOOP_COUNT 10000
#define AVERAGE_URL_LEN 80
#define THREAD_COUNT 4
-static pj_uint32_t parse_len;
-static pj_timestamp parse_time, print_time;
+static pj_highprec_t parse_len, print_len, cmp_len;
+static pj_timestamp parse_time, print_time, cmp_time;
/* URI creator functions. */
@@ -83,8 +83,7 @@ struct uri_test
{
PJ_SUCCESS,
"sip:user:password@localhost:5060",
- &create_uri2,
- },
+ &create_uri2, },
{
/* Port is specified should not match unspecified port. */
ERR_NOT_EQUAL,
@@ -498,7 +497,7 @@ static pj_status_t do_uri_test(pj_pool_t *pool, struct uri_test *entry)
/* Parse URI text. */
pj_get_timestamp(&t1);
- parse_len += entry->len;
+ parse_len = parse_len + entry->len;
parsed_uri = pjsip_parse_uri(pool, entry->str, entry->len, 0);
if (!parsed_uri) {
/* Parsing failed. If the entry says that this is expected, then
@@ -532,6 +531,7 @@ static pj_status_t do_uri_test(pj_pool_t *pool, struct uri_test *entry)
s1.ptr[len] = '\0';
s1.slen = len;
+ print_len = print_len + len;
pj_get_timestamp(&t2);
pj_sub_timestamp(&t2, &t1);
pj_add_timestamp(&print_time, &t2);
@@ -545,6 +545,7 @@ static pj_status_t do_uri_test(pj_pool_t *pool, struct uri_test *entry)
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. */
@@ -565,6 +566,11 @@ static pj_status_t do_uri_test(pj_pool_t *pool, struct uri_test *entry)
}
}
+ cmp_len = cmp_len + len;
+ pj_get_timestamp(&t2);
+ pj_sub_timestamp(&t2, &t1);
+ pj_add_timestamp(&cmp_time, &t2);
+
/* Compare text. */
if (pj_strcmp(&s1, &s2) != 0) {
/* Not equal. */
@@ -581,7 +587,8 @@ pj_status_t uri_test()
pj_pool_t *pool;
pj_status_t status;
pj_timestamp zero;
- pj_highprec_t avg_parse, avg_print;
+ pj_time_val elapsed;
+ pj_highprec_t avg_parse, avg_print, avg_cmp, kbytes;
zero.u32.hi = zero.u32.lo = 0;
@@ -598,39 +605,70 @@ pj_status_t uri_test()
pjsip_endpt_destroy_pool(endpt, pool);
PJ_LOG(3,("", " benchmarking..."));
- parse_len = 0;
+ parse_len = print_len = cmp_len = 0;
parse_time.u32.hi = parse_time.u32.lo = 0;
print_time.u32.hi = print_time.u32.lo = 0;
- pool = pjsip_endpt_create_pool(endpt, "", POOL_SIZE, POOL_SIZE);
+ cmp_time.u32.hi = cmp_time.u32.lo = 0;
for (loop=0; loop<LOOP_COUNT; ++loop) {
+ pool = pjsip_endpt_create_pool(endpt, "", POOL_SIZE, POOL_SIZE);
for (i=0; i<PJ_ARRAY_SIZE(uri_test_array); ++i) {
status = do_uri_test(pool, &uri_test_array[i]);
if (status != PJ_SUCCESS) {
PJ_LOG(3,("uri_test", " error %d when testing entry %d",
status, i));
+ pjsip_endpt_destroy_pool(endpt, pool);
goto on_return;
}
}
+ pjsip_endpt_destroy_pool(endpt, pool);
}
+ kbytes = parse_len;
+ pj_highprec_mod(kbytes, 1000000);
+ pj_highprec_div(kbytes, 100000);
+ elapsed = pj_elapsed_time(&zero, &parse_time);
avg_parse = pj_elapsed_usec(&zero, &parse_time);
pj_highprec_mul(avg_parse, AVERAGE_URL_LEN);
pj_highprec_div(avg_parse, parse_len);
avg_parse = 1000000 / avg_parse;
+ PJ_LOG(3,("", " %u.%u MB of urls parsed in %d.%03ds (avg=%d urls/sec)",
+ (unsigned)(parse_len/1000000), (unsigned)kbytes,
+ elapsed.sec, elapsed.msec,
+ (unsigned)avg_parse));
+
+ kbytes = print_len;
+ pj_highprec_mod(kbytes, 1000000);
+ pj_highprec_div(kbytes, 100000);
+ elapsed = pj_elapsed_time(&zero, &print_time);
avg_print = pj_elapsed_usec(&zero, &print_time);
pj_highprec_mul(avg_print, AVERAGE_URL_LEN);
pj_highprec_div(avg_print, parse_len);
avg_print = 1000000 / avg_print;
- PJ_LOG(3,("", " done. Average parse=%d url/sec, print=%d url/sec",
- (unsigned)avg_parse, (unsigned)avg_print));
+ PJ_LOG(3,("", " %u.%u MB of urls printed in %d.%03ds (avg=%d urls/sec)",
+ (unsigned)(print_len/1000000), (unsigned)kbytes,
+ elapsed.sec, elapsed.msec,
+ (unsigned)avg_print));
+
+ kbytes = cmp_len;
+ pj_highprec_mod(kbytes, 1000000);
+ pj_highprec_div(kbytes, 100000);
+ elapsed = pj_elapsed_time(&zero, &cmp_time);
+ avg_cmp = pj_elapsed_usec(&zero, &cmp_time);
+ pj_highprec_mul(avg_cmp, AVERAGE_URL_LEN);
+ pj_highprec_div(avg_cmp, cmp_len);
+ avg_cmp = 1000000 / avg_cmp;
+
+ PJ_LOG(3,("", " %u.%u MB of urls compared in %d.%03ds (avg=%d urls/sec)",
+ (unsigned)(cmp_len/1000000), (unsigned)kbytes,
+ elapsed.sec, elapsed.msec,
+ (unsigned)avg_cmp));
PJ_LOG(3,("", " multithreaded test"));
on_return:
- pjsip_endpt_destroy_pool(endpt, pool);
return status;
}