Commit 5d82857e authored by urbant's avatar urbant
Browse files

decoding support for RFC 3326

parent 68ba959b
Loading
Loading
Loading
Loading
+28 −2
Original line number Diff line number Diff line
@@ -755,8 +755,8 @@ private:
		SIP_HEADER_ADD (Privacy,	,	privacy,	PRIVACY_E);
		SIP_HEADER_ADD (P-Asserted-Identity,	,	pAssertedID,	P_ASSERTED_ID_E);
		SIP_HEADER_ADD (P-Preferred-Identity,	,	pPreferredID,	P_PREFERRED_ID_E);
		SIP_HEADER_ADD (reason,		,	reason,		REASON_E);
		
		SIP_HEADER_ADD (Reason,		,	reason,		REASON_E);
		SIP_HEADER_ADD (Path,		,	path,		PATH_E);
		{
			mEntries.push_back(Entry("", "", MessageHeader::id_undefinedHeader_List, ""));
			Entry& e = *mEntries.rbegin();
@@ -827,6 +827,7 @@ void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError)
			case id_pAssertedID:
			case id_pPreferredID:
			case id_reason:
			case id_path:
			case id_undefinedHeader_List:
				// these fields can appear multiple times
				break;
@@ -2197,4 +2198,29 @@ void ReasonValues::PostDecodeField (int id, Buffer& buffer) throw (DecodeError)
		SetHypSize (-2);
}

void PathValue::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	static Regex reg_separator ("^" SIPREG_SEMI);

	switch (id) { 
		case id_rrParam:
			SetHypFieldIsPresent (id, reg_separator.Match (buffer) ? 1 : 0);
			break;
	}
}

void PathValues::PreDecode (Buffer& buffer) throw (DecodeError)
{
	SetHypSize (GetSize() + 1);
	SetHypAppend (1);
}

void PathValues::PostDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	if (detect_comma (buffer))
		SetHypSize (GetSize() + 1);
	else
		SetHypSize (-2);
}

}} // namespaces