Add code to actually replace the prefix of the called party number in ISUP IAM
diff --git a/src/sctp_handler.erl b/src/sctp_handler.erl
index 4439fd6..1523611 100644
--- a/src/sctp_handler.erl
+++ b/src/sctp_handler.erl
@@ -182,14 +182,20 @@
Isup = isup_codec:parse_isup_msg(Payload),
io:format("ISUP Decode: ~p~n", [Isup]),
% FIXME
+ %mangle_rx_isup(From, Isup#isup_msg.msg_type, Isup),
case Isup#isup_msg.msg_type of
?ISUP_MSGT_IAM ->
io:format("ISUP Encode In: ~p~n", [Isup]),
Isup_out = isup_codec:encode_isup_msg(Isup),
io:format("ISUP Encode Out: ~p~n", [Isup_out]),
% FIXME
- Mtp3;
+ if Isup_out == Payload -> ok;
+ true -> io:format("ISUP DATA NOT EQUAL!~n")
+ end,
+ % return modified MTP3 payload
+ Mtp3#mtp3_msg{payload = Isup_out};
_ ->
+ % return UNmodified MTP3 payload
Mtp3
end;
% mangle the SCCP content
@@ -201,3 +207,28 @@
% default: do nothing
mangle_rx_mtp3_serv(_L, _From, _, Mtp3) ->
Mtp3.
+
+-define(MSRN_PFX_MSC, [8,9,0,9,9]).
+-define(MSRN_PFX_STP, [9,2,9,9,4,2,0,0]).
+
+mangle_rx_isup(From, MsgType, Msg = #isup_msg{parameters = Params}) when
+ MsgType == ?ISUP_MSGT_IAM ->
+ CalledNum = proplists:get_value(?ISUP_PAR_CALLED_P_NUM, Params),
+ DigitsIn = CalledNum#party_number.phone_number,
+ Last2DigF = lists:sublist(DigitsIn, length(DigitsIn)-2, 3),
+ case From of
+ from_stp ->
+ DigitsOut = ?MSRN_PFX_MSC ++ Last2DigF,
+ io:format("IAM MSRN rewrite (MSC->STP): ~p -> ~p~n",
+ [DigitsIn, DigitsOut]);
+ from_msc ->
+ DigitsOut = DigitsIn,
+ io:format("No support for MSC->STP MSRN rewrite~n")
+ end,
+ CalledNumOut = CalledNum#party_number{phone_number=DigitsOut},
+ ParamsDel = proplists:delete(?ISUP_PAR_CALLED_P_NUM, Params),
+ ParamsOut = [{?ISUP_PAR_CALLED_P_NUM, CalledNumOut}|ParamsDel],
+ #isup_msg{parameters = ParamsOut};
+% default case: no mangling
+mangle_rx_isup(_From, _Type, Msg) when is_record(Msg, isup_msg) ->
+ Msg.