From 67b003dcad27b6ce58f4f19ae1fd4da67d09f43f Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 10 Oct 2011 21:43:27 +0200 Subject: [PATCH] add dummy ss7 service dumper module Instead of implementing a real subsystem, it just dumps all MTP3 payload messages of specified service --- ebin/osmo_ss7.app | 1 + src/ss7_service_dump.erl | 64 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/ss7_service_dump.erl diff --git a/ebin/osmo_ss7.app b/ebin/osmo_ss7.app index 20f143f..f3d5f05 100644 --- a/ebin/osmo_ss7.app +++ b/ebin/osmo_ss7.app @@ -11,6 +11,7 @@ sccp_codec, osmo_ss7_sup, osmo_ss7_app, ss7_links, ss7_link_m3ua, ss7_link_ipa_client, + ss7_service_dump, osmo_ss7_gtt, osmo_ss7_pcap ]}, diff --git a/src/ss7_service_dump.erl b/src/ss7_service_dump.erl new file mode 100644 index 0000000..f28869d --- /dev/null +++ b/src/ss7_service_dump.erl @@ -0,0 +1,64 @@ +% SS7 service handler for dumping MTP3 payload (testing) + +% (C) 2010-2011 by Harald Welte +% +% All Rights Reserved +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU Affero General Public License as +% published by the Free Software Foundation; either version 3 of the +% License, or (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU Affero General Public +% License +% along with this program. If not, see . + +-module(ss7_service_dump). +-behaviour(gen_fsm). +-export([start_link/1, init/1, idle/2]). + +-include_lib("osmo_ss7/include/osmo_util.hrl"). +-include_lib("osmo_ss7/include/mtp3.hrl"). +-include_lib("osmo_ss7/include/isup.hrl"). +-include_lib("osmo_ss7/include/sccp.hrl"). + +-record(loop_dat, { + ssns +}). + +start_link(Ssns) -> + gen_fsm:start_link(ss7_service_dump, [Ssns], []). + +init(Ssn) when is_integer(Ssn) -> + init([Ssn]); +init(Ssns) when is_list(Ssns) -> + bind_services(Ssns), + {ok, idle, #loop_dat{ssns = Ssns}}. + +bind_services([]) -> + ok; +bind_services([Head|Tail]) -> + ok = ss7_links:bind_service(Head, "ss7_service_dump"), + bind_services(Tail). + +parse_mtp3(#mtp3_msg{service_ind = ?MTP3_SERV_SCCP, payload = Payload}) -> + sccp_codec:parse_sccp_msg(Payload); +parse_mtp3(#mtp3_msg{service_ind = ?MTP3_SERV_ISUP, payload = Payload}) -> + isup_codec:parse_isup_msg(Payload). + +idle(#primitive{subsystem = 'MTP', gen_name = 'TRANSFER', + spec_name = indication, parameters = Mtp3Msg}, LoopDat) -> + io:format("ss7_service_dump in: ~p~n", [Mtp3Msg]), + try parse_mtp3(Mtp3Msg) of + Parsed -> + io:format("ss7_service_dump out: ~p~n", [Parsed]) + catch + _ -> + io:format("ss7_service_dump parser error~n") + end, + {next_state, idle, LoopDat}.