Commit fd4b66c9 authored by baire's avatar baire
Browse files

basic support of MessageHeader

parent 55a6ed4d
Loading
Loading
Loading
Loading
+49 −0
Original line number Diff line number Diff line
@@ -291,4 +291,53 @@ void GenericParam::PreDecodeField (int id, Buffer& buffer) throw (DecodeError)
	}
}


class SipHeaderMap {
public:

	static int Find (const std::string& header)
	{
		std::map <std::string, int>::const_iterator it = mInstance.mMap.find (header);
		if (it != mInstance.mMap.end()) {
			return it->second;
		} else {
			return MessageHeader::id_undefinedHeader_List;
		}
		
	}


private:
	SipHeaderMap() {
		mMap["From"]	= MessageHeader::id_fromField;
		mMap["f"]	= MessageHeader::id_fromField;
		mMap["Via"]	= MessageHeader::id_via;
		mMap["v"]	= MessageHeader::id_via;
	}

	static SipHeaderMap		mInstance;

	std::map <std::string, int>	mMap;
};

SipHeaderMap SipHeaderMap::mInstance;


void MessageHeader::PreDecodeField (Buffer& buffer) throw (DecodeError)
{
	static Regex reg_header_name ("([A-Za-z\\-]+):", REG_ICASE);

	if (reg_header_name.Match (buffer))
	{
		int id = SipHeaderMap::Find(reg_header_name.GetMatchedString (1));
	
		SetHypNextField (id);
	}

}





}} // namespaces
+24 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ module Simple_Testcases
		headers :=	omit
	}

	// testing SipUrl
	testcase TC_SIMPLE_0001() runs on SipTest system SipTest {

		// Preamble
@@ -37,4 +38,26 @@ module Simple_Testcases
		}

	}

	// testing MessageHeader
	testcase TC_SIMPLE_0002() runs on SipTest system SipTest {

		// Preamble
		connect (self:testPort, self:testPort);

		// Test Body
		testPort.send ("From: sip:bl@blah.ah
Via: SIP/2.0/UDP grabu.com
Via: SIP/2.0/UDP pouic-pouic.com
Pouet: blah blah
Via: SIP/2.0/UDP tutu.com
");
	
		alt {
			[] testPort.receive (MessageHeader: ?) {
				setverdict (inconc);
			}
		}
		
	}
}
+1 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ module TestExecution {
  control {

  	execute(TC_SIMPLE_0001());
  	execute(TC_SIMPLE_0002());

	execute(TC_SANITY_0001());
	execute(TC_SANITY_0002());