Commit ce84bd36 authored by urbant's avatar urbant
Browse files

decoding support for RFC 3641 and 3892

parent cefa040f
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -772,6 +772,8 @@ private:
		SIP_HEADER_ADD (P-Charging-Vector,		,	pChargingVector,	P_CHARGING_VECTOR_E);
		SIP_HEADER_ADD (Refer-To,	r,	referTo,	REFER_TO_E);
		SIP_HEADER_ADD (Service-Route,			,	serviceRoute,		SERVICE_ROUTE_E);
		SIP_HEADER_ADD (Accept-Contact,			a,	acceptContact,		ACCEPT_CONTACT_E);
		SIP_HEADER_ADD (Referred-By,	b,	referredBy,	REFERRED_BY_E);
		{
			mEntries.push_back(Entry("", "", MessageHeader::id_undefinedHeader_List, ""));
			Entry& e = *mEntries.rbegin();
@@ -849,6 +851,7 @@ void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError)
			case id_pAssociatedURI:
			case id_pCalledPartyID:
			case id_pVisitedNetworkID:
			case id_acceptContact:
			case id_undefinedHeader_List:
				// these fields can appear multiple times
				break;
@@ -2376,4 +2379,45 @@ void ReferTo::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
	}
}

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

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

void AcRcValue::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	static Regex reg_wildcard ("^[*]");
	static Regex reg_separator ("^" SIPREG_SEMI);

	switch (id) { 
		case id_wildcard:
			reg_wildcard.AssertMatch (buffer, this);
			SetHypFieldLength (id, reg_wildcard.GetMatchedLength());
			break;
		case id_acRcParams:
			SetHypFieldIsPresent (id, reg_separator.Match (buffer) ? 1 : 0);
			break;
	}
}
void ReferredBy::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	static Regex reg_separator ("^" SIPREG_SEMI);

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


}} // namespaces