summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-04-04 15:59:49 +0200
committerHarald Welte <laforge@gnumonks.org>2011-04-04 15:59:49 +0200
commit0f2f59679118d485d957dbc5a572dbe06d7eb77c (patch)
tree9e8360ce547bef84075a1b8b4a7dc487d5032d34 /src
parentb2d3abfbb141b4e6da45dd9fe9ebba647e8affac (diff)
Move #primitive{} into osmo_util.erl/hrl
Diffstat (limited to 'src')
-rw-r--r--src/osmo_util.erl13
-rw-r--r--src/sccp_codec.erl2
-rw-r--r--src/sccp_scoc.erl56
-rw-r--r--src/sccp_scrc.erl1
4 files changed, 39 insertions, 33 deletions
diff --git a/src/osmo_util.erl b/src/osmo_util.erl
index 28bd030..87f6968 100644
--- a/src/osmo_util.erl
+++ b/src/osmo_util.erl
@@ -23,6 +23,12 @@
-export([digit_list2int/1, int2digit_list/1]).
-export([reload_config/0]).
-export([tuple_walk/3, tuple_walk_print_cb/3]).
+-export([make_prim/4, make_prim/3]).
+
+-include("osmo_util.hrl").
+
+-compile({parse_transform, exprecs}).
+-export_records([primitive]).
% Convert a list of digits to an integer value
digit_list2int(Int, []) ->
@@ -127,3 +133,10 @@ tuple_fieldlist_walk(Path, TplName, [Head|List], TupleCb, Args, OutList) ->
tuple_walk_print_cb(Path, Tpl, _Args) when is_list(Path), is_tuple(Tpl) ->
io:format("~p:~p~n", [Path, Tpl]),
Tpl.
+
+% helper function to create a #primitive record
+make_prim(Subsys, GenName, SpecName) ->
+ make_prim(Subsys, GenName, SpecName, []).
+make_prim(Subsys, GenName, SpecName, Param) ->
+ #primitive{subsystem = Subsys, gen_name = GenName,
+ spec_name = SpecName, parameters = Param}.
diff --git a/src/sccp_codec.erl b/src/sccp_codec.erl
index ac24f87..c1918a3 100644
--- a/src/sccp_codec.erl
+++ b/src/sccp_codec.erl
@@ -26,7 +26,7 @@
-compile(export_all).
-compile({parse_transform, exprecs}).
--export_records([global_title, primitive, sccp_addr, sccp_msg]).
+-export_records([global_title, sccp_addr, sccp_msg]).
parse_point_code(BinPC, PCind) when is_binary(BinPC) ->
case PCind of
diff --git a/src/sccp_scoc.erl b/src/sccp_scoc.erl
index 181287f..f726eb2 100644
--- a/src/sccp_scoc.erl
+++ b/src/sccp_scoc.erl
@@ -20,6 +20,7 @@
-module(sccp_scoc).
-behaviour(gen_fsm).
+-include("osmo_util.hrl").
-include("sccp.hrl").
-export([start_link/1]).
@@ -28,8 +29,6 @@
-export([idle/2, conn_pend_in/2, conn_pend_out/2, active/2, disconnect_pending/2,
reset_incoming/2, reset_outgoing/2, bothway_reset/2, wait_conn_conf/2]).
--export([make_prim/4, make_prim/3]).
-
%% gen_fsm callbacks
% Appendix C.4 of Q.714 (all in milliseconds)
@@ -82,20 +81,13 @@ handle_event({timer_expired, tx_inact_timer}, State, LoopDat) ->
{protocol_class, Class}, {seq_segm, 0}, {credit, 0}],
Msg = #sccp_msg{msg_type = ?SCCP_MSGT_IT, parameters = Params},
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC','CONNECTION-MSG', request, Msg)),
+ osmo_util:make_prim('OCRC','CONNECTION-MSG', request, Msg)),
{next_state, State, LoopDat};
handle_event({timer_expired, rx_inact_timer}, State, LoopDat) ->
io:format("FIXME: T(iar) is expired, release connection~n", []),
% FIXME: Initiate connection release procedure
{next_state, State, LoopDat}.
-% helper function to create a #primitive record
-make_prim(Subsys, GenName, SpecName) ->
- make_prim(Subsys, GenName, SpecName, []).
-make_prim(Subsys, GenName, SpecName, Param) ->
- #primitive{subsystem = Subsys, gen_name = GenName,
- spec_name = SpecName, parameters = Param}.
-
% helper function to send a primitive to the user
send_user(_LoopDat = #state{user_pid = Pid}, Prim = #primitive{}) ->
Pid ! {sccp, Prim}.
@@ -134,7 +126,7 @@ idle(#primitive{subsystem = 'N', gen_name = 'CONNECT',
% determine protocol class and credit
LoopDat1 = LoopDat#state{local_reference = make_ref(), class = 2},
gen_fsm:send_event(LoopDat1#state.scrc_pid,
- make_prim('OCRC','CONNECTION', indication, Param)),
+ osmo_util:make_prim('OCRC','CONNECTION', indication, Param)),
% start connection timer
{next_state, conn_pend_out, LoopDat1, ?CONNECTION_TIMER};
@@ -147,7 +139,7 @@ idle(#primitive{subsystem = 'RCOC', gen_name = 'CONNECTION',
Class = proplists:get_value(protocol_class, Params),
LoopDat1 = LoopDat#state{remote_reference = RemRef, class = Class},
% send N-CONNECT.ind to user
- send_user(LoopDat1, make_prim('N', 'CONNECT', indication, [{scoc_pid, self()}|Params])),
+ send_user(LoopDat1, osmo_util:make_prim('N', 'CONNECT', indication, [{scoc_pid, self()}|Params])),
%#primitive{subsystem = 'N', gen_name = 'CONNECT', spec_name = indication}
{next_state, conn_pend_in, LoopDat1};
@@ -155,7 +147,7 @@ idle(#primitive{subsystem = 'RCOC', gen_name = 'CONNECTION',
idle(#primitive{subsystem = 'RCOC', gen_name = 'ROUTING FAILURE',
spec_name = indication}, LoopDat) ->
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'CONNECTION REFUSED', indication)),
+ osmo_util:make_prim('OCRC', 'CONNECTION REFUSED', indication)),
{next_state, idle, LoopDat};
%FIXME: request type 2 ?!?
@@ -164,7 +156,7 @@ idle(#primitive{subsystem = 'RCOC', gen_name = 'ROUTING FAILURE',
idle(#primitive{subsystem = 'RCOC', gen_name = 'RELEASED',
spec_name = indication}, LoopDat) ->
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASE COMPLETE', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASE COMPLETE', indication)),
{next_state, idle, LoopDat};
% RCOC-RELEASE_COMPLETE.ind from SCRC
@@ -175,7 +167,7 @@ idle(#primitive{subsystem = 'RCOC', gen_name = 'RELEASE COMPLETE',
idle(#primitive{subsystem= 'RCOC', gen_name = 'DATA',
spec_name = indication, parameters = Param}, LoopDat) ->
% FIXME: if source reference, send error
- send_user(LoopDat, make_prim('N', 'DATA', indication, Param)),
+ send_user(LoopDat, osmo_util:make_prim('N', 'DATA', indication, Param)),
{next_state, idle, LoopDat}.
% STATE Connection pending incoming
@@ -187,7 +179,7 @@ conn_pend_in(#primitive{subsystem = 'N', gen_name = 'CONNECT',
{src_local_ref, LoopDat#state.local_reference},
{protocol_class, LoopDat#state.class}] ++ Param,
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'CONNECTION', confirm, OutParam)),
+ osmo_util:make_prim('OCRC', 'CONNECTION', confirm, OutParam)),
% start inactivity timers
LoopDat1 = start_inact_timers(LoopDat),
{next_state, active, LoopDat1};
@@ -197,24 +189,24 @@ conn_pend_in(#primitive{subsystem = 'N', gen_name = 'DISCONNECT',
spec_name = request, parameters = Param}, LoopDat) ->
% release resourcers (local ref may have to be released an frozen)
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'CONNECTION REFUSED', indication, Param)),
+ osmo_util:make_prim('OCRC', 'CONNECTION REFUSED', indication, Param)),
{next_state, idle, LoopDat}.
disc_ind_stop_rel_3(LoopDat) ->
% send N-DISCONNECT.ind to user
- send_user(LoopDat, make_prim('N', 'DISCONNECT',indication)),
+ send_user(LoopDat, osmo_util:make_prim('N', 'DISCONNECT',indication)),
% stop inactivity timers
stop_inact_timers(LoopDat),
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASED', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASED', indication)),
% start release timer
{next_state, disconnect_pending, LoopDat, ?RELEASE_TIMER}.
rel_res_disc_ind_idle_2(LoopDat) ->
% release resources and local reference (freeze)
% send N-DISCONNECT.ind to user
- send_user(LoopDat, make_prim('N', 'DISCONNECT', indication)),
+ send_user(LoopDat, osmo_util:make_prim('N', 'DISCONNECT', indication)),
{next_state, idle, LoopDat}.
@@ -229,7 +221,7 @@ conn_pend_out(routing_failure, LoopDat) ->
rel_res_disc_ind_idle_2(LoopDat);
conn_pend_out(released, LoopDat) ->
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASE COMPLETE', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASE COMPLETE', indication)),
rel_res_disc_ind_idle_2(LoopDat);
% other N-PDU Type
conn_pend_out(other_npdu_type, LoopDat) ->
@@ -256,7 +248,7 @@ rel_freeze_idle(LoopDat) ->
% STATE Wait connection confirmed
wait_conn_conf(released, LoopDat) ->
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASE COMPLETE', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASE COMPLETE', indication)),
stop_c_tmr_rel_idle_5(LoopDat);
wait_conn_conf(connection_confirm, LoopDat) ->
% stop connection timer (implicit)
@@ -275,7 +267,7 @@ wait_conn_conf(routing_failure, LoopDat) ->
relsd_tmr_disc_pend_6(LoopDat) ->
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASED', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASED', indication)),
% start release timer
{next_state, disconnect_pending, LoopDat, ?RELEASE_TIMER}.
@@ -301,7 +293,7 @@ active(released, LoopDat) ->
% stop inactivity timers
stop_inact_timers(LoopDat),
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASE COMPLETE', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASE COMPLETE', indication)),
{next_state, idle, LoopDat};
active(error, LoopDat) ->
% send N-DISCONNECT.ind to user
@@ -311,7 +303,7 @@ active(error, LoopDat) ->
% stop inactivity timers
stop_inact_timers(LoopDat),
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASE COMPLETE', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASE COMPLETE', indication)),
{next_state, idle, LoopDat};
active(rcv_inact_tmr_exp, LoopDat) ->
disc_ind_stop_rel_3(LoopDat);
@@ -342,13 +334,13 @@ active(#primitive{subsystem = 'RCOC', gen_name = 'CONNECTION-MSG',
% FIXME check for M-bit=1 and put data in Rx queue
% N-DATA.ind to user
UserData = proplists:get_value(user_data, Msg#sccp_msg.parameters),
- send_user(LoopDat, make_prim('N', 'DATA', indication, {user_data, UserData})),
+ send_user(LoopDat, osmo_util:make_prim('N', 'DATA', indication, {user_data, UserData})),
{next_state, active, LoopDat1};
% Reset procedures
active(#primitive{subsystem = 'N', gen_name = 'RESET',
spec_name = request, parameters = Param}, LoopDat) ->
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RESET', request, Param)),
+ osmo_util:make_prim('OCRC', 'RESET', request, Param)),
% start reset timer
% restart send inact timer
LoopDat1 = restart_tx_inact_timer(LoopDat),
@@ -359,7 +351,7 @@ active(internal_reset_req, LoopDat) ->
send_user(LoopDat, #primitive{subsystem = 'N', gen_name = 'RESET',
spec_name = indication}),
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RESET', request)),
+ osmo_util:make_prim('OCRC', 'RESET', request)),
% start reset timer
% restart send inact timer
LoopDat1 = restart_tx_inact_timer(LoopDat),
@@ -372,7 +364,7 @@ active(reset_req, LoopDat) ->
% restart send inactivity timer
LoopDat1 = restart_tx_inact_timer(LoopDat),
% N-RESET.ind to user
- send_user(LoopDat, make_prim('N', 'RESET', indication)),
+ send_user(LoopDat, osmo_util:make_prim('N', 'RESET', indication)),
% reset variables and discard all queued and unacked msgs
{next_state, reset_incoming, LoopDat1}.
@@ -393,7 +385,7 @@ disconnect_pending(other_npdu_type, LoopDat) ->
{next_state, disconnect_pending, LoopDat};
disconnect_pending(timeout, LoopDat) ->
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASED', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASED', indication)),
% start interval timer
% FIXME start repeat release timer
{next_state, disconnect_pending, ?RELEASE_REP_TIMER};
@@ -403,13 +395,13 @@ disconnect_pending(intv_tmr_exp, LoopDat) ->
% FIXME: this is currently ending up in normal 'timeout' above
disconnect_pending(repeat_release_tmr_exp, LoopDat) ->
gen_fsm:send_event(LoopDat#state.scrc_pid,
- make_prim('OCRC', 'RELEASED', indication)),
+ osmo_util:make_prim('OCRC', 'RELEASED', indication)),
% FIXME restart repeat release timer
{next_state, disconnect_pending}.
res_out_res_conf_req(LoopDat) ->
% N-RESET.conf to user
- send_user(LoopDat, make_prim('N', 'RESET', confirm)),
+ send_user(LoopDat, osmo_util:make_prim('N', 'RESET', confirm)),
% stop reset timer (implicit)
% restart receive inactivity timer
LoopDat1 = restart_rx_inact_timer(LoopDat),
diff --git a/src/sccp_scrc.erl b/src/sccp_scrc.erl
index 9ca3705..bd8cddc 100644
--- a/src/sccp_scrc.erl
+++ b/src/sccp_scrc.erl
@@ -21,6 +21,7 @@
-behaviour(gen_fsm).
-export([start_link/1, init/1, idle/2]).
+-include("osmo_util.hrl").
-include("sccp.hrl").