Commit 74c329ea authored by urbant's avatar urbant
Browse files

decoding support for organization

userinfo regex corrected
parent bcab77d6
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -128,10 +128,12 @@ bool is_tel_scheme (const char * pszScheme) {
#define SIPCHARS_RESERVED	";/?:@&=+$,"
#define SIPCHARS_USER_UNRESERVED "&=+$,;?/"
#define SIPCHARS_UTF8_NONASCII	"\x80-\xFD"
#define SIPCHARS_TEXT_UTF8CHAR	"\x21-\xFD"
#define SIPREG_ESCAPED	"(%[0-9A-Fa-f]{2})"
#define SIPREG_TOKEN "[" SIPCHARS_ALFANUM ".!%*_+`'~\\-]+"
#define SIPREG_WORD "(?:[][" SIPCHARS_ALFANUM "\\-.!%*_+`'~()<>:\\\\\"/?{}])+"
#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]"
@@ -215,7 +217,7 @@ void SipUrl::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)

	static Regex reg_scheme ("^[" SIPCHARS_ALFA "][" SIPCHARS_ALFANUM "+.\\-]*");
	static Regex reg_colon ("^[:]");
	static Regex reg_userinfo ("^([:" SIPCHARS_UNRESERVED SIPCHARS_USER_UNRESERVED "]|" SIPREG_ESCAPED "])+@");
	static Regex reg_userinfo ("^([" SIPCHARS_UNRESERVED SIPCHARS_USER_UNRESERVED "]|" SIPREG_ESCAPED ")+@");
	static Regex reg_phone ("^" SIPREG_PHONE_NUMBER);
	static Regex reg_hostport ("^[][" SIPCHARS_ALFANUM ":.\\-]+");
	static Regex reg_absolute_uri ("^" SIPREG_ABSOLUTE_URI);
@@ -708,6 +710,7 @@ private:
		SIP_HEADER_ADD (In-Reply-To,	,	inReplyTo,	IN_REPLY_TO_E);
		SIP_HEADER_ADD (MIME-Version,	,	mimeVersion,	MIME_VERSION_E);
		SIP_HEADER_ADD (Min-Expires,	,	minExpires,	MIN_EXPIRES_E);
		SIP_HEADER_ADD (Organization,	,	organization,	ORGANIZATION_E);
		{
			mEntries.push_back(Entry("", "", MessageHeader::id_undefinedHeader_List, ""));
			Entry& e = *mEntries.rbegin();
@@ -1292,6 +1295,18 @@ void MinExpires::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
}


void Organization::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	static Regex reg_organization ("^(" SIPREG_TEXT_UTF8_TRIM ")*");

	switch (id) {
	case id_organization: 
		reg_organization.AssertMatch (buffer, this);
		SetHypFieldLength (id, reg_organization.GetMatchedLength());
		break;
	}
}

void NameAddr::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	static Regex reg_display_name ("^" SIPREG_DISPLAY_NAME);