Commit 0d3ec103 authored by baire's avatar baire
Browse files

support decoding of Call-ID

parent 37340816
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -130,6 +130,7 @@ bool is_tel_scheme (const char * pszScheme) {
#define SIPCHARS_UTF8_NONASCII	"\x80-\xFD"
#define SIPREG_ESCAPED	"(%[0-9A-Fa-f]{2})"
#define SIPREG_TOKEN "[" SIPCHARS_ALFANUM ".!%*_+`'~\\-]+"
#define SIPREG_WORD "(?:[][" SIPCHARS_ALFANUM "\\-.!%*_+`'~()<>:\\\\\"/?{}])+"

// sip version
#define SIPREG_SIP_VERSION "SIP/[0-9]\\.[0-9]"
@@ -623,6 +624,7 @@ private:
		SIP_HEADER_ADD (From,	f,	fromField,	FROM_E);
		SIP_HEADER_ADD (Via,	v,	via,		VIA_E);
		SIP_HEADER_ADD (Accept,	 ,	accept,		ACCEPT_E);
		SIP_HEADER_ADD (Call-ID,i,	callId,		CALL_ID_E);
		{
			mEntries.push_back(Entry("", "", MessageHeader::id_undefinedHeader_List, ""));
			Entry& e = *mEntries.rbegin();
@@ -904,4 +906,14 @@ void StatusLine::PostDecode (Buffer& buffer) throw (DecodeError)
	reg_crlf.MovePast(buffer);
}

void CallId::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	if (id == id_callid) {
		static Regex reg_cid ("^" SIPREG_WORD "(@" SIPREG_WORD ")*" );

		reg_cid.AssertMatch(buffer, this);
		SetHypFieldLength (id, reg_cid.GetMatchedLength());
	}
}

}} // namespaces