Changeset 606 for pjproject/trunk/pjsip/src/pjsip/sip_parser.c
- Timestamp:
- Jul 17, 2006 10:04:12 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsip/sip_parser.c
r587 r606 41 41 #define USER_UNRESERVED "&=+$,;?/" 42 42 #define PASS "&=+$," 43 #define TOKEN "-.!%*_ =`'~+" /* '+' is because of app/pidf+xml44 * in Content-Type!*/43 #define TOKEN "-.!%*_`'~+" /* '=' was removed for parsing 44 * param */ 45 45 #define HOST "_-." 46 46 #define HEX_DIGIT "abcdefABCDEF" … … 139 139 pj_str_t *pname, 140 140 pj_str_t *pvalue); 141 static void int_parse_uri_param( pj_scanner *scanner, 142 pj_pool_t *pool, 143 pj_str_t *pname, 144 pj_str_t *pvalue); 141 145 static void int_parse_hparam( pj_scanner *scanner, 142 146 pj_pool_t *pool, … … 325 329 pj_cis_add_str( &pjsip_TOKEN_SPEC, TOKEN); 326 330 331 /* TOKEN must not have '%' */ 332 pj_assert(pj_cis_match(&pjsip_TOKEN_SPEC, '%')==0); 333 327 334 status = pj_cis_dup(&pjsip_HOST_SPEC, &pjsip_ALNUM_SPEC); 328 335 PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); … … 1039 1046 } 1040 1047 1048 1041 1049 /* Parse parameter (pname ["=" pvalue]). */ 1042 void pjsip_parse_param_imp(pj_scanner *scanner, pj_pool_t *pool,1050 static void parse_param_imp( pj_scanner *scanner, pj_pool_t *pool, 1043 1051 pj_str_t *pname, pj_str_t *pvalue, 1052 const pj_cis_t *spec, const pj_cis_t *esc_spec, 1044 1053 unsigned option) 1045 1054 { 1046 1055 /* pname */ 1047 parser_get_and_unescape(scanner, pool, &pjsip_PARAM_CHAR_SPEC, 1048 &pjsip_PARAM_CHAR_SPEC_ESC, pname); 1056 parser_get_and_unescape(scanner, pool, spec, esc_spec, pname); 1049 1057 1050 1058 /* init pvalue */ … … 1063 1071 pvalue->slen -= 2; 1064 1072 } 1065 } else if(pj_cis_match(&pjsip_PARAM_CHAR_SPEC, *scanner->curptr)) { 1066 parser_get_and_unescape(scanner, pool, &pjsip_PARAM_CHAR_SPEC, 1067 &pjsip_PARAM_CHAR_SPEC_ESC, pvalue); 1073 } else if(pj_cis_match(spec, *scanner->curptr)) { 1074 parser_get_and_unescape(scanner, pool, spec, esc_spec, pvalue); 1068 1075 } 1069 1076 } … … 1071 1078 } 1072 1079 1073 /* Parse parameter (";" pname ["=" pvalue]). */ 1080 /* Parse parameter (pname ["=" pvalue]) using token. */ 1081 void pjsip_parse_param_imp( pj_scanner *scanner, pj_pool_t *pool, 1082 pj_str_t *pname, pj_str_t *pvalue, 1083 unsigned option) 1084 { 1085 parse_param_imp(scanner, pool, pname, pvalue, &pjsip_TOKEN_SPEC, 1086 &pjsip_TOKEN_SPEC, option); 1087 } 1088 1089 1090 /* Parse parameter (pname ["=" pvalue]) using paramchar. */ 1091 void pjsip_parse_uri_param_imp(pj_scanner *scanner, pj_pool_t *pool, 1092 pj_str_t *pname, pj_str_t *pvalue, 1093 unsigned option) 1094 { 1095 parse_param_imp(scanner, pool, pname, pvalue, &pjsip_PARAM_CHAR_SPEC, 1096 &pjsip_PARAM_CHAR_SPEC_ESC, option); 1097 } 1098 1099 1100 /* Parse parameter (";" pname ["=" pvalue]) in header. */ 1074 1101 static void int_parse_param( pj_scanner *scanner, pj_pool_t *pool, 1075 1102 pj_str_t *pname, pj_str_t *pvalue) … … 1082 1109 PJSIP_PARSE_REMOVE_QUOTE); 1083 1110 } 1111 1112 /* Parse parameter (";" pname ["=" pvalue]) in URI. */ 1113 static void int_parse_uri_param( pj_scanner *scanner, pj_pool_t *pool, 1114 pj_str_t *pname, pj_str_t *pvalue) 1115 { 1116 /* Get ';' character */ 1117 pj_scan_get_char(scanner); 1118 1119 /* Get pname and optionally pvalue */ 1120 pjsip_parse_uri_param_imp(scanner, pool, pname, pvalue, 1121 PJSIP_PARSE_REMOVE_QUOTE); 1122 } 1123 1084 1124 1085 1125 /* Parse header parameter. */ … … 1298 1338 pj_str_t pname, pvalue; 1299 1339 1300 int_parse_ param( scanner, pool, &pname, &pvalue);1340 int_parse_uri_param( scanner, pool, &pname, &pvalue); 1301 1341 1302 1342 if (!parser_stricmp(pname, pjsip_USER_STR) && pvalue.slen) {
Note: See TracChangeset
for help on using the changeset viewer.