Commit 60c451ff authored by urbant's avatar urbant
Browse files

decoding support for authorization

parent 4f1e4723
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -670,7 +670,7 @@ private:
		SIP_HEADER_ADD (Record-Route,	,	recordRoute,	RECORD_ROUTE_E);
		SIP_HEADER_ADD (Allow,		 ,	allow,		ALLOW_E);
		SIP_HEADER_ADD (Authentication-Info,	,	authenticationInfo,	AUTHENTICATION_INFO_E);
		
		SIP_HEADER_ADD (Authorization,	,	authorization,	AUTHORIZATION_E);
		{
			mEntries.push_back(Entry("", "", MessageHeader::id_undefinedHeader_List, ""));
			Entry& e = *mEntries.rbegin();
@@ -1097,6 +1097,33 @@ void Method_List::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
		SetHypSize(-2);
}

void Credentials::PreDecode (Buffer& buffer) throw (DecodeError)
{
	static Regex reg_digest ("^[Dd][Ii][Gg][Ee][Ss][Tt]" SIPREG_LWS);
	if (reg_digest.Match (buffer)) {
		buffer.SetPosition(buffer.GetPosition() + reg_digest.GetMatchedLength());
		SetHypChosenId (id_digestResponse);
	} else {
		SetHypChosenId (id_otherResponse);
	}
}
void OtherAuth::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	static Regex reg_auth_scheme ("^" SIPREG_TOKEN);
	static Regex reg_separator ("^" SIPREG_LWS);

	switch (id){
		case id_authScheme:
			reg_auth_scheme.AssertMatch (buffer, this);
			SetHypFieldLength (id, reg_auth_scheme.GetMatchedLength());
			break;
		case id_authParams:
			reg_separator.AssertMatch(buffer, this);
			buffer.SetPosition(buffer.GetPosition() + reg_separator.GetMatchedLength());
			break;
	}
}

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