M3UA: Fix encoding bugs
diff --git a/src/m3ua_codec.erl b/src/m3ua_codec.erl
index 03934c4..03ec923 100644
--- a/src/m3ua_codec.erl
+++ b/src/m3ua_codec.erl
@@ -73,25 +73,26 @@
msg_type = MsgType, payload = OptList}) ->
OptBin = encode_m3ua_opts(OptList),
MsgLen = byte_size(OptBin) + 8,
- <<Version:4, 0:8, MsgClass:8, MsgType:8, MsgLen:32/big, OptBin/binary>>.
+ <<Version:8, 0:8, MsgClass:8, MsgType:8, MsgLen:32/big, OptBin/binary>>.
encode_m3ua_opts(OptList) when is_list(OptList) ->
encode_m3ua_opts(OptList, <<>>).
encode_m3ua_opts([], Bin) ->
Bin;
-encode_m3ua_opts([Head|Tail], Bin) ->
- OptBin = encode_m3ua_opt(Head),
+encode_m3ua_opts([{Iei, Attr}|Tail], Bin) ->
+ OptBin = encode_m3ua_opt(Iei, Attr),
encode_m3ua_opts(Tail, <<Bin/binary, OptBin/binary>>).
-encode_m3ua_opt({?M3UA_IEI_PROTOCOL_DATA, Mtp3}) when is_record(Mtp3, mtp3_msg) ->
+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) ->
+ PayBin = <<Opc:32/big, Dpc:32/big, Si:8, Ni:8, 0:8, Sls:8, Payload/binary>>,
+ encode_m3ua_opt(?M3UA_IEI_PROTOCOL_DATA, PayBin);
+encode_m3ua_opt(Iei, Data) when is_integer(Iei), is_binary(Data) ->
Length = byte_size(Data) + 4,
PadLen = get_num_pad_bytes(Length),
- <<Iei:16/big, Length:16/big, 0:PadLen/integer-unit:8, Data/binary>>.
+ <<Iei:16/big, Length:16/big, Data/binary, 0:PadLen/integer-unit:8>>.