Commit 6aaea53a authored by berge's avatar berge
Browse files

Fix decoder issue (Session-Expires)

parent f3d9279b
Loading
Loading
Loading
Loading
+25 −9
Original line number Diff line number Diff line
@@ -1163,6 +1163,10 @@ void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError)
		const SipHeaderMap::Entry& hdr = SipHeaderMap::GetByName(reg_header_name.GetMatchedString (1));
		int id = hdr.mIdMessageHeader;

		std::cerr << "biiiiiip " << reg_header_name.GetMatchedString(1) << std::endl;



		// check that this field is not duplicated
		if (IsPresent(id)) {
			switch (id) {
@@ -1218,7 +1222,6 @@ void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError)
void MessageHeader::PostDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	static Regex reg_crlf ("^\r\n");

	reg_crlf.AssertMatch (buffer, this);
	buffer.SetPosition(buffer.GetPosition() + reg_crlf.GetMatchedLength());
}
@@ -1842,6 +1845,14 @@ void Method_List::PostDecodeField (int id, Buffer& buffer) throw (DecodeError)
}


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

void CredentialsList::PreDecodeField (int id, Buffer& buffer) throw (DecodeError) {
  
}

// TODO: Add CredentialsList PreEncode

@@ -3701,6 +3712,7 @@ void MinSE::PreEncodeField (int field_id, Buffer& buffer) throw (EncodeError)
	}
}


void MinSE::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	static Regex reg_delta_sec ("^[0-9]+");
@@ -3899,16 +3911,20 @@ void MessageBody::PreEncode (Buffer& buffer) throw (EncodeError)
  }
}


void SessionExpires::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
{
	//std::cout << "SessionExpires::PreDecodeField: " << id << std::endl;
	static Regex reg_semicolon ("^" SIPREG_SEMI);
	if (id == id_seParam) {
		if(reg_semicolon.Match(buffer)) {
			SetHypFieldIsPresent (id, 1);
		} else {
			SetHypFieldIsPresent (id, 0);
		}
	static Regex reg_delta_sec ("^[0-9]+");
	static Regex reg_separator ("^" SIPREG_SEMI);

	switch (id) {
		case id_deltaSec: 
			reg_delta_sec.AssertMatch (buffer, this);
			SetHypFieldLength (id, reg_delta_sec.GetMatchedLength());
			break;
		case id_seParam:
			SetHypFieldIsPresent (id, reg_separator.Match (buffer) ? 1 : 0);
			break;
	}
}