M3UA: Actually parse the 'Protocol Data' in a #mtp3_msg{}

This will make it easier to use MTP3 / M3UA interchangably.
diff --git a/src/m3ua_codec.erl b/src/m3ua_codec.erl
index adf69d6..72876ea 100644
--- a/src/m3ua_codec.erl
+++ b/src/m3ua_codec.erl
@@ -20,6 +20,7 @@
 -module(m3ua_codec).
 -author('Harald Welte <laforge@gnumonks.org>').
 -include("m3ua.hrl").
+-include("mtp3.hrl").
 
 -export([parse_m3ua_msg/1, encode_m3ua_msg/1]).
 
@@ -53,7 +54,20 @@
 	PadLen = get_num_pad_bytes(Length),
 	LengthNet = Length - 4,
 	<<CurOpt:LengthNet/binary, 0:PadLen/integer-unit:8, Remain2/binary>> = Remain,
-	parse_m3ua_opts(Remain2, OptList ++ [{Tag, CurOpt}]).
+	NewOpt = parse_m3ua_opt(Tag, CurOpt),
+	parse_m3ua_opts(Remain2, OptList ++ [NewOpt]).
+
+parse_m3ua_opt(Opt = ?M3UA_IEI_PROTOCOL_DATA, MsgBin) when is_binary(MsgBin) ->
+	<<Opc:32/big, Dpc:32/big, Si:8, Ni:8, Mp:8, Sls:8, Payload/binary>> = MsgBin,
+	{Opt, #mtp3_msg{network_ind = Ni, service_ind = Si,
+			routing_label = #mtp3_routing_label{sig_link_sel = Sls,
+							    origin_pc = Opc,
+							    dest_pc = Dpc},
+			payload = Payload}};
+parse_m3ua_opt(Opt, Msg) ->
+	{Opt, Msg}.
+
+
 
 encode_m3ua_msg(#m3ua_msg{version = Version, msg_class = MsgClass,
 			  msg_type = MsgType, payload = OptList}) ->
@@ -70,6 +84,13 @@
 	OptBin = encode_m3ua_opt(Head),
 	encode_m3ua_opts(Tail, <<Bin/binary, OptBin/binary>>).
 
+encode_m3ua_opt({?M3UA_IEI_PROTOCOL_DATA, Mtp3}) when is_record(Mtp3, mtp3_msg) ->
+	#mtp3_msg{network_ind = Ni, service_ind = Si,
+		  routing_label = #mtp3_routing_label{sig_link_sel = Sls,
+						      origin_pc = Opc,
+						      dest_pc = Dpc},
+		  payload = Payload} = Mtp3,
+	<<Opc:32/big, Dpc:32/big, Si:8, Ni:8, 0:8, Sls:8, Payload/binary>>;
 encode_m3ua_opt({Iei, Data}) when is_integer(Iei), is_binary(Data) ->
 	Length = length(Data) + 4,
 	PadLen = get_num_pad_bytes(Length),