Index: parser/msg_parser.h =================================================================== --- parser/msg_parser.h (revision 630) +++ parser/msg_parser.h (revision 631) @@ -141,7 +141,8 @@ }; #endif -enum _uri_type{ERROR_URI_T=0, SIP_URI_T, SIPS_URI_T, TEL_URI_T, TELS_URI_T}; +//types of URIs : error at parsing, SIP, SIPS, TEL, TELS, URN and CID +enum _uri_type{ERROR_URI_T=0, SIP_URI_T, SIPS_URI_T, TEL_URI_T, TELS_URI_T, URN_T, CID_T}; typedef enum _uri_type uri_type; enum _uri_flags{ URI_USER_NORMALIZE=1, Index: parser/parse_uri.c =================================================================== --- parser/parse_uri.c (revision 630) +++ parser/parse_uri.c (revision 631) @@ -124,6 +124,9 @@ #define SIP_SCH 0x3a706973 #define SIPS_SCH 0x73706973 #define TEL_SCH 0x3a6c6574 +#define TEL_SCH 0x3a6c6574 +#define URN_SCH 0x3a6e7275 +#define CID_SCH 0x3a646963 #define case_port( ch, var) \ case ch: \ @@ -384,6 +387,11 @@ else goto error_bad_uri; }else if (scheme==TEL_SCH){ uri->type=TEL_URI_T; + }else if( scheme==URN_SCH){ + uri->type=URN_T; + return URN_T; + }else if(scheme == CID_SCH){ + uri->type = CID_T; }else goto error_bad_uri; s=p; @@ -1127,6 +1135,12 @@ uri->host.s=""; uri->host.len=0; break; + case URN_T: + LOG(L_ERR, "ERROR: parse_uri: not handling URN type\n"); + goto error_bad_uri; + break; + case CID_T: + break; case ERROR_URI_T: LOG(L_ERR, "ERROR: parse_uri unexpected error (BUG?)\n"); goto error_bad_uri; @@ -1377,7 +1391,8 @@ int parse_sip_msg_uri(struct sip_msg* msg) { char* tmp; - int tmp_len; + int tmp_len, ret; + if (msg->parsed_uri_ok) return 1; if (msg->new_uri.s){ @@ -1387,11 +1402,16 @@ tmp=msg->first_line.u.request.uri.s; tmp_len=msg->first_line.u.request.uri.len; } - if (parse_uri(tmp, tmp_len, &msg->parsed_uri)<0){ + ret = parse_uri(tmp, tmp_len, &msg->parsed_uri); + if(ret<0){ LOG(L_ERR, "ERROR: parse_sip_msg_uri: bad uri <%.*s>\n", tmp_len, tmp); msg->parsed_uri_ok=0; return -1; + }else if(ret == URN_T){ + LOG(L_DBG, "DBG: needs to be parsed as an URN\n"); + }else if(ret == CID_T){ + LOG(L_DBG, "DBG: needs to be parsed as a CID\n"); } msg->parsed_uri_ok=1; return 1; Index: select_core.c =================================================================== --- select_core.c (revision 630) +++ select_core.c (revision 631) @@ -677,6 +677,8 @@ strncpy(p+uri.host.len, ":5060", 5); break; case ERROR_URI_T: + case URN_T: + case CID_T: return -1; } res->s = p;