diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-06-07 12:51:40 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-06-07 12:51:40 +0000 |
commit | c01d1d66ccb71c1981be09674bf17829d8f2c9ea (patch) | |
tree | d7a3d3da5d5e278fb0d80e58711edeba123f69d6 /pjsip | |
parent | 75b462d795f35af7c04c3b09dc7f8856c995e6ec (diff) |
Ticket #324: Allow '#' character in the user part of URI of incoming message (thanks Esbjörn Dominique)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1345 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r-- | pjsip/src/pjsip/sip_parser.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c index 32a511cc..6c322428 100644 --- a/pjsip/src/pjsip/sip_parser.c +++ b/pjsip/src/pjsip/sip_parser.c @@ -124,6 +124,8 @@ pj_cis_t pjsip_HOST_SPEC, /* For scanning host part. */ pjsip_PASSWD_SPEC_ESC, /* Variant without escaped char */ pjsip_USER_SPEC, /* User */ pjsip_USER_SPEC_ESC, /* Variant without escaped char */ + pjsip_USER_SPEC_LENIENT, /* User, with additional '#' char */ + pjsip_USER_SPEC_LENIENT_ESC, pjsip_NOT_COMMA_OR_NEWLINE, /* Array separator. */ pjsip_NOT_NEWLINE, /* For eating up header.*/ pjsip_DISPLAY_SPEC; /* Used when searching for display name @@ -361,6 +363,14 @@ static pj_status_t init_parser() PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); pj_cis_del_str( &pjsip_USER_SPEC_ESC, ESCAPED); + status = pj_cis_dup(&pjsip_USER_SPEC_LENIENT, &pjsip_USER_SPEC); + PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + pj_cis_add_str(&pjsip_USER_SPEC_LENIENT, "#"); + + status = pj_cis_dup(&pjsip_USER_SPEC_LENIENT_ESC, &pjsip_USER_SPEC_ESC); + PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); + pj_cis_add_str(&pjsip_USER_SPEC_LENIENT_ESC, "#"); + status = pj_cis_dup(&pjsip_PASSWD_SPEC, &pjsip_ALNUM_SPEC); PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); pj_cis_add_str( &pjsip_PASSWD_SPEC, UNRESERVED ESCAPED PASS); @@ -1208,8 +1218,8 @@ static int int_is_next_user(pj_scanner *scanner) static void int_parse_user_pass( pj_scanner *scanner, pj_pool_t *pool, pj_str_t *user, pj_str_t *pass) { - parser_get_and_unescape(scanner, pool, &pjsip_USER_SPEC, - &pjsip_USER_SPEC_ESC, user); + parser_get_and_unescape(scanner, pool, &pjsip_USER_SPEC_LENIENT, + &pjsip_USER_SPEC_LENIENT_ESC, user); if ( *scanner->curptr == ':') { pj_scan_get_char( scanner ); |