Commit b903a183 authored by baire's avatar baire
Browse files

support matching escaped characters in header names

parent bc25e159
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -276,9 +276,13 @@ bool is_tel_scheme (const char * pszScheme) {
#define SIPREG_ASCII_WITHOUT_COMMA "[\\x21-\\x2B\\x2D-\\x7E]+"
#define SIPREG_TEXT_UTF8_TRIM	"[\x21-\xFD]([\x21-\xFD]|(" SIPREG_LWS "))*"


// sip version
#define SIPREG_SIP_VERSION "SIP/[0-9]\\.[0-9]"

// header name
#define SIPREG_HNAME "(?:[][/?:+$" SIPCHARS_UNRESERVED "]|" SIPREG_ESCAPED ")+"

// host name
#define SIPREG_TOPLABEL	"[" SIPCHARS_ALFA "]([" SIPCHARS_ALFANUM "\\-]*[" SIPCHARS_ALFANUM "])?"
#define SIPREG_DOMAINLABEL	"[" SIPCHARS_ALFANUM "]([" SIPCHARS_ALFANUM "\\-]*[" SIPCHARS_ALFANUM "])?"
@@ -1011,7 +1015,7 @@ SipHeaderMap SipHeaderMap::msInstance;

void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError)
{
	static Regex reg_header_name ("^([A-Za-z\\-]+)" SIPREG_HCOLON);
	static Regex reg_header_name ("^(" SIPREG_HNAME ")" SIPREG_HCOLON);
	static Regex reg_crlf ("^\r\n");

	if (reg_header_name.Match (buffer))
@@ -1067,7 +1071,6 @@ void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError)
				throw (e);
			}
		}
	
		SetHypNextField (id);
	} else {
		reg_crlf.AssertMatch (buffer, this);
@@ -1999,7 +2002,6 @@ void UndefinedHeader::PreDecodeField (int id, Buffer& buffer) throw (DecodeError

void UndefinedHeader::PostDecode (Buffer& buffer) throw (DecodeError)
{
	normalise_escaped_string (Get_headerName());
	normalise_escaped_string (Get_headerValue());
}