summaryrefslogtreecommitdiff
path: root/pjsip/src
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-06-07 12:51:40 +0000
committerBenny Prijono <bennylp@teluu.com>2007-06-07 12:51:40 +0000
commitc01d1d66ccb71c1981be09674bf17829d8f2c9ea (patch)
treed7a3d3da5d5e278fb0d80e58711edeba123f69d6 /pjsip/src
parent75b462d795f35af7c04c3b09dc7f8856c995e6ec (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/src')
-rw-r--r--pjsip/src/pjsip/sip_parser.c14
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 );