aboutsummaryrefslogtreecommitdiffstats
path: root/lib/diameter
diff options
context:
space:
mode:
authorAnders Svensson <[email protected]>2011-09-27 20:26:47 +0200
committerAnders Svensson <[email protected]>2011-09-27 20:26:47 +0200
commitd897eea38983f0adfa0e8a2dc483879bc1126f94 (patch)
tree6b17d52c4e9dc2d6215363302c346bd8c6512e6d /lib/diameter
parent571bc8c6135cb902e7cf9429f1bfad67284f8f23 (diff)
parent58fe7b5e48ad95f14b05aae43a3a32122695da4e (diff)
downloadotp-d897eea38983f0adfa0e8a2dc483879bc1126f94.tar.gz
otp-d897eea38983f0adfa0e8a2dc483879bc1126f94.tar.bz2
otp-d897eea38983f0adfa0e8a2dc483879bc1126f94.zip
Merge branch 'dev' into major
Conflicts: lib/diameter/src/app/Makefile
Diffstat (limited to 'lib/diameter')
-rw-r--r--lib/diameter/src/app/Makefile16
-rw-r--r--lib/diameter/src/app/diameter.app.src2
-rw-r--r--lib/diameter/src/app/diameter.appup.src22
-rw-r--r--lib/diameter/src/app/diameter_callback.erl8
-rw-r--r--lib/diameter/src/app/diameter_dbg.erl147
-rw-r--r--lib/diameter/src/app/diameter_internal.hrl2
-rw-r--r--lib/diameter/src/app/diameter_lib.erl12
-rw-r--r--lib/diameter/src/app/modules.mk12
-rw-r--r--lib/diameter/src/compiler/Makefile10
-rw-r--r--lib/diameter/test/diameter_app_SUITE.erl12
-rw-r--r--lib/diameter/test/diameter_codec_SUITE.erl5
-rw-r--r--lib/diameter/test/diameter_relay_SUITE.erl2
-rw-r--r--lib/diameter/vsn.mk2
13 files changed, 119 insertions, 133 deletions
diff --git a/lib/diameter/src/app/Makefile b/lib/diameter/src/app/Makefile
index 80e1fc7be2..96b7736a90 100644
--- a/lib/diameter/src/app/Makefile
+++ b/lib/diameter/src/app/Makefile
@@ -66,12 +66,20 @@ SPEC_ERL_FILES = \
SPEC_HRL_FILES = \
$(SPEC_FILES:%.dia=%.hrl)
+MODULES = \
+ $(RUNTIME_MODULES) \
+ $(HELP_MODULES)
+
APP_MODULES = \
- $(MODULES) \
+ $(RUNTIME_MODULES) \
$(SPEC_MODULES)
+TARGET_MODULES = \
+ $(APP_MODULES) \
+ $(HELP_MODULES)
+
TARGET_FILES = \
- $(APP_MODULES:%=$(EBIN)/%.$(EMULATOR)) \
+ $(TARGET_MODULES:%=$(EBIN)/%.$(EMULATOR)) \
$(APP_TARGET) \
$(APPUP_TARGET)
@@ -133,17 +141,15 @@ info:
# ----------------------------------------------------
# Generate the app file and then modules into in. This shouldn't know
-# about ../{compiler,transport} but good enough for now.
+# about ../transport but good enough for now.
$(APP_TARGET): $(APP_SRC) \
../../vsn.mk \
modules.mk \
- ../compiler/modules.mk \
../transport/modules.mk
sed -e 's;%VSN%;$(VSN);' $< > $@
M=`echo $(APP_MODULES) | sed -e 's/^ *//' -e 's/ *$$//' -e 'y/ /,/'`; \
echo "/%APP_MODULES%/s//$$M/;w;q" | tr ';' '\n' \
| ed -s $@
- $(MAKE) -C ../compiler $(APP_TARGET) APP_TARGET=$(APP_TARGET)
$(MAKE) -C ../transport $(APP_TARGET) APP_TARGET=$(APP_TARGET)
$(APPUP_TARGET): $(APPUP_SRC) ../../vsn.mk
diff --git a/lib/diameter/src/app/diameter.app.src b/lib/diameter/src/app/diameter.app.src
index 119997953e..a806b5c78a 100644
--- a/lib/diameter/src/app/diameter.app.src
+++ b/lib/diameter/src/app/diameter.app.src
@@ -20,7 +20,7 @@
{application, diameter,
[{description, "Diameter protocol"},
{vsn, "%VSN%"},
- {modules, [%APP_MODULES%,%COMPILER_MODULES%,%TRANSPORT_MODULES%]},
+ {modules, [%APP_MODULES%,%TRANSPORT_MODULES%]},
{registered, []},
{applications, [stdlib, kernel]},
{env, []},
diff --git a/lib/diameter/src/app/diameter.appup.src b/lib/diameter/src/app/diameter.appup.src
index 2b96153575..6d8ceadb92 100644
--- a/lib/diameter/src/app/diameter.appup.src
+++ b/lib/diameter/src/app/diameter.appup.src
@@ -20,8 +20,28 @@
{"%VSN%",
[
+ {"0.9",
+ [
+ {load_module, diameter, soft_purge, soft_purge, []},
+ {load_module, diameter_capx, soft_purge, soft_purge, []},
+ {load_module, diameter_codec, soft_purge, soft_purge, [diameter_lib]},
+ {load_module, diameter_lib, soft_purge, soft_purge, []},
+ {load_module, diameter_types, soft_purge, soft_purge, []},
+ {load_module, diameter_gen_base_accounting, soft_purge, soft_purge, []},
+ {load_module, diameter_gen_base_rfc3588, soft_purge, soft_purge, []},
+ {load_module, diameter_gen_relay, soft_purge, soft_purge, []},
+ {update, diameter_service, soft, soft_purge, soft_purge, [diameter_lib]},
+ {update, diameter_config, soft, soft_purge, soft_purge, []},
+ {update, diameter_peer, soft, soft_purge, soft_purge, []},
+ {update, diameter_peer_fsm, soft, soft_purge, soft_purge, [diameter_lib]},
+ {update, diameter_reg, soft, soft_purge, soft_purge, []},
+ {update, diameter_sctp, soft, soft_purge, soft_purge, []},
+ {update, diameter_stats, soft, soft_purge, soft_purge, []},
+ {update, diameter_sync, soft, soft_purge, soft_purge, []},
+ {update, diameter_watchdog, soft, soft_purge, soft_purge, [diameter_lib]}
+ ]
+ }
],
[
]
}.
-
diff --git a/lib/diameter/src/app/diameter_callback.erl b/lib/diameter/src/app/diameter_callback.erl
index fcf9a8fc1e..6d5c8cdca1 100644
--- a/lib/diameter/src/app/diameter_callback.erl
+++ b/lib/diameter/src/app/diameter_callback.erl
@@ -60,28 +60,28 @@ pick_peer([Peer|_], _, _SvcName, _State) ->
%%% ----------------------------------------------------------
prepare_request(Pkt, _SvcName, _Peer) ->
- Pkt.
+ {send, Pkt}.
%%% ----------------------------------------------------------
%%% # prepare_retransmit/3
%%% ----------------------------------------------------------
prepare_retransmit(Pkt, _SvcName, _Peer) ->
- Pkt.
+ {send, Pkt}.
%%% ----------------------------------------------------------
%%% # handle_request/3
%%% ----------------------------------------------------------
handle_request(_Pkt, _SvcName, _Peer) ->
- discard.
+ {protocol_error, 3001}. %% DIAMETER_COMMAND_UNSUPPORTED
%%% ----------------------------------------------------------
%%% # handle_answer/4
%%% ----------------------------------------------------------
handle_answer(#diameter_packet{msg = Ans}, _Req, _SvcName, _Peer) ->
- {ok, Ans}.
+ Ans.
%%% ---------------------------------------------------------------------------
%%% # handle_error/4
diff --git a/lib/diameter/src/app/diameter_dbg.erl b/lib/diameter/src/app/diameter_dbg.erl
index b18f34e13d..5b0ac3a3b6 100644
--- a/lib/diameter/src/app/diameter_dbg.erl
+++ b/lib/diameter/src/app/diameter_dbg.erl
@@ -68,12 +68,6 @@
-define(VALUES(Rec), tl(tuple_to_list(Rec))).
-%%% ----------------------------------------------------------
-%%% # log/4
-%%%
-%%% Called to have something to trace on for happenings of interest.
-%%% ----------------------------------------------------------
-
log(_Slogan, _Mod, _Line, _Details) ->
ok.
@@ -82,9 +76,6 @@ log(_Slogan, _Mod, _Line, _Details) ->
%%% ----------------------------------------------------------
help() ->
- ?INFO:usage(usage()).
-
-usage() ->
not_yet_implemented.
%%% ----------------------------------------------------------
@@ -99,30 +90,23 @@ table(T)
when (T == diameter_peer) orelse (T == diameter_reg) ->
?INFO:format(collect(T), fields(T), fun ?INFO:split/2);
-table(diameter_service = T) ->
- Fs = [name, started] ++ fields(T) ++ [peerT,
- connT,
- share_peers,
- use_shared_peers,
- shared_peers,
- local_peers,
- monitor],
- ?INFO:format(T,
- fun(R) ->
- [I,N,S|Vs] = ?VALUES(R),
- {Fs, [N,I] ++ ?VALUES(S) ++ Vs}
- end,
- fun ?INFO:split/2);
-
table(Table)
when is_atom(Table) ->
case fields(Table) of
undefined = No ->
No;
Fields ->
- ?INFO:format(Table, Fields, fun ?INFO:split/2)
+ ?INFO:format(Table, Fields, fun split/2)
end.
+split([started, name | Fs], [S, N | Vs]) ->
+ {name, [started | Fs], N, [S | Vs]};
+split([[F|FT]|Fs], [Rec|Vs]) ->
+ [_, V | VT] = tuple_to_list(Rec),
+ {F, FT ++ Fs, V, VT ++ Vs};
+split([F|Fs], [V|Vs]) ->
+ {F, Fs, V, Vs}.
+
%%% ----------------------------------------------------------
%%% # TableName()
%%% ----------------------------------------------------------
@@ -146,14 +130,14 @@ table(Table)
%%% ----------------------------------------------------------
tables() ->
- format_all(fun ?INFO:split/3).
-
-format_all(SplitFun) ->
- ?INFO:format(field(?LOCAL), SplitFun, fun collect/1).
+ ?INFO:format(field(?LOCAL), fun split/3, fun collect/1).
field(Tables) ->
lists:map(fun(T) -> {T, fields(T)} end, lists:sort(Tables)).
+split(_, Fs, Vs) ->
+ split(Fs, Vs).
+
%%% ----------------------------------------------------------
%%% # modules()
%%% ----------------------------------------------------------
@@ -396,76 +380,24 @@ stop() ->
%% tp/1
tpl(T) ->
- dbg(tpl, dbg(T)).
+ dbg(tpl, T).
tp(T) ->
- dbg(tp, dbg(T)).
-
-%% dbg/1
-
-dbg(x) ->
- [{M, x, []} || M <- [diameter_tcp,
- diameter_etcp,
- diameter_sctp,
- diameter_peer_fsm,
- diameter_watchdog]];
-
-dbg(log) ->
- {?MODULE, log, 4};
-
-dbg({log = F, Mods})
- when is_list(Mods) ->
- {?MODULE, F, [{['_','$1','_','_'],
- [?ORCOND([{'==', '$1', M} || M <- Mods])],
- []}]};
-
-dbg({log = F, Mod}) ->
- dbg({F, [Mod]});
-
-dbg(send) ->
- {diameter_peer, send, 2};
-
-dbg(recv) ->
- {diameter_peer, recv, 2};
-
-dbg(sendrecv) ->
- [{diameter_peer, send, 2},
- {diameter_peer, recv, 2}];
-
-dbg(decode) ->
- [{diameter_codec,decode,2}];
-
-dbg(encode) ->
- [{diameter_codec,encode,2,[]},
- {diameter_codec,encode,3,[]},
- {diameter_codec,encode,4}];
-
-dbg(transition = T) ->
- [{?MODULE, log, [{[T,M,'_','_'],[],[]}]}
- || M <- [diameter_watchdog, diameter_peer_fsm]];
-
-dbg(T) ->
- T.
+ dbg(tp, T).
%% dbg/2
-dbg(TF, L)
+dbg(F, L)
when is_list(L) ->
- {ok, lists:foldl(fun(T,A) -> {ok, X} = dbg(TF, T), [X|A] end, [], L)};
+ [dbg(F, X) || X <- L];
dbg(F, M)
when is_atom(M) ->
- dbg(F, {M});
+ apply(dbg, F, [M, x]);
dbg(F, T)
when is_tuple(T) ->
- [_|_] = A = tuple_to_list(T),
- {ok,_} = apply(dbg, F, case is_list(lists:last(A)) of
- false ->
- A ++ [[{'_',[],[{exception_trace}]}]];
- true ->
- A
- end).
+ apply(dbg, F, tuple_to_list(T)).
%% ===========================================================================
%% ===========================================================================
@@ -493,15 +425,19 @@ peers(Name) ->
peers(_, undefined) ->
[];
-peers(Name, {Cs,As}) ->
- mk_peer(Name, connector, Cs) ++ mk_peer(Name, acceptor, As).
-
-mk_peer(Name, T, Ts) ->
- [[Name | mk_peer(T,Vs)] || Vs <- Ts].
-
-mk_peer(Type, Vs) ->
- [Ref, State, Opts, WPid, TPid, SApps, Caps]
- = get_values(Vs, [ref, state, options, watchdog, peer, apps, caps]),
+peers(Name, Ts) ->
+ lists:flatmap(fun(T) -> mk_peers(Name, T) end, Ts).
+
+mk_peers(Name, [_, {type, connect} | _] = Ts) ->
+ [[Name | mk_peer(Ts)]];
+mk_peers(Name, [R, {type, listen}, O, {accept = A, As}]) ->
+ [[Name | mk_peer([R, {type, A}, O | Ts])] || Ts <- As].
+%% This is a bit lame: service_info works to build this list and out
+%% of something like what we want here and then we take it apart.
+
+mk_peer(Vs) ->
+ [Type, Ref, State, Opts, WPid, TPid, SApps, Caps]
+ = get_values(Vs, [type,ref,state,options,watchdog,peer,apps,caps]),
[Ref, State, [{type, Type} | Opts], s(WPid), s(TPid), SApps, Caps].
get_values(Vs, Ks) ->
@@ -509,9 +445,13 @@ get_values(Vs, Ks) ->
s(undefined = T) ->
T;
+s({Pid, _Started, _State}) ->
+ state(Pid);
+s({Pid, _Started}) ->
+ state(Pid).
%% Collect states from watchdog/transport pids.
-s(Pid) ->
+state(Pid) ->
MRef = erlang:monitor(process, Pid),
Pid ! {state, self()},
receive
@@ -541,7 +481,18 @@ fields(diameter_stats) ->
[]
end;
-?FIELDS(diameter_service);
+fields(diameter_service) ->
+ [started,
+ name,
+ record_info(fields, diameter_service),
+ peerT,
+ connT,
+ share_peers,
+ use_shared_peers,
+ shared_peers,
+ local_peers,
+ monitor];
+
?FIELDS(diameter_event);
?FIELDS(diameter_uri);
?FIELDS(diameter_avp);
diff --git a/lib/diameter/src/app/diameter_internal.hrl b/lib/diameter/src/app/diameter_internal.hrl
index 78645b1912..63b35550a8 100644
--- a/lib/diameter/src/app/diameter_internal.hrl
+++ b/lib/diameter/src/app/diameter_internal.hrl
@@ -44,7 +44,7 @@
%% Something to trace on.
-define(LOG(Slogan, Details),
- diameter_dbg:log(Slogan, ?MODULE, ?LINE, Details)).
+ diameter_lib:log(Slogan, ?MODULE, ?LINE, Details)).
-define(LOGC(Bool, Slogan, Details), ((Bool) andalso ?LOG(Slogan, Details))).
%% Compensate for no builtin ?FUNC for use in log reports.
diff --git a/lib/diameter/src/app/diameter_lib.erl b/lib/diameter/src/app/diameter_lib.erl
index f65e356444..362d593b24 100644
--- a/lib/diameter/src/app/diameter_lib.erl
+++ b/lib/diameter/src/app/diameter_lib.erl
@@ -30,7 +30,8 @@
ipaddr/1,
spawn_opts/2,
wait/1,
- fold_tuple/3]).
+ fold_tuple/3,
+ log/4]).
-include("diameter_internal.hrl").
@@ -260,3 +261,12 @@ ft(undefined, {_, T}) ->
T;
ft(Value, {Idx, T}) ->
setelement(Idx, T, Value).
+
+%%% ----------------------------------------------------------
+%%% # log(Slogan, Mod, Line, Details)
+%%%
+%%% Called to have something to trace on for happenings of interest.
+%%% ----------------------------------------------------------
+
+log(_, _, _, _) ->
+ ok.
diff --git a/lib/diameter/src/app/modules.mk b/lib/diameter/src/app/modules.mk
index a7a78b1a9d..c133e6f64e 100644
--- a/lib/diameter/src/app/modules.mk
+++ b/lib/diameter/src/app/modules.mk
@@ -22,17 +22,13 @@ SPEC_FILES = \
diameter_gen_base_accounting.dia \
diameter_gen_relay.dia
-MODULES = \
+RUNTIME_MODULES = \
diameter \
diameter_app \
- diameter_callback \
diameter_capx \
diameter_config \
- diameter_dbg \
diameter_codec \
diameter_dict \
- diameter_exprecs \
- diameter_info \
diameter_lib \
diameter_misc_sup \
diameter_peer \
@@ -49,6 +45,12 @@ MODULES = \
diameter_watchdog \
diameter_watchdog_sup
+HELP_MODULES = \
+ diameter_callback \
+ diameter_exprecs \
+ diameter_dbg \
+ diameter_info
+
INTERNAL_HRL_FILES = \
diameter_internal.hrl \
diameter_types.hrl
diff --git a/lib/diameter/src/compiler/Makefile b/lib/diameter/src/compiler/Makefile
index 3ab76064ac..779013bfbc 100644
--- a/lib/diameter/src/compiler/Makefile
+++ b/lib/diameter/src/compiler/Makefile
@@ -94,16 +94,6 @@ info:
@echo ""
# ----------------------------------------------------
-# Special Build Targets
-# ----------------------------------------------------
-
-# Invoked from ../app to add modules to the app file.
-$(APP_TARGET): force
- M=`echo $(MODULES) | sed -e 's/^ *//' -e 's/ *$$//' -e 'y/ /,/'`; \
- echo "/%COMPILER_MODULES%/s//$$M/;w;q" | tr ';' '\n' \
- | ed -s $@
-
-# ----------------------------------------------------
# Release Target
# ----------------------------------------------------
ifneq ($(ERL_TOP),)
diff --git a/lib/diameter/test/diameter_app_SUITE.erl b/lib/diameter/test/diameter_app_SUITE.erl
index d710fa155d..104785b4e6 100644
--- a/lib/diameter/test/diameter_app_SUITE.erl
+++ b/lib/diameter/test/diameter_app_SUITE.erl
@@ -86,13 +86,21 @@ vsn(Config) ->
%% ===========================================================================
%% # modules/1
%%
-%% Ensure that the app file module list match the installed beams.
+%% Ensure that the app file modules and installed modules differ by
+%% compiler/help modules.
%% ===========================================================================
modules(Config) ->
Mods = fetch(modules, fetch(app, Config)),
Installed = code_mods(),
- {[], []} = {Mods -- Installed, Installed -- Mods}.
+ Help = [diameter_callback,
+ diameter_codegen,
+ diameter_dbg,
+ diameter_exprecs,
+ diameter_info,
+ diameter_spec_scan,
+ diameter_spec_util],
+ {[], Help} = {Mods -- Installed, lists:sort(Installed -- Mods)}.
code_mods() ->
Dir = code:lib_dir(?APP, ebin),
diff --git a/lib/diameter/test/diameter_codec_SUITE.erl b/lib/diameter/test/diameter_codec_SUITE.erl
index 0c004b3edb..30c60be8e9 100644
--- a/lib/diameter/test/diameter_codec_SUITE.erl
+++ b/lib/diameter/test/diameter_codec_SUITE.erl
@@ -21,9 +21,8 @@
%% Test encode/decode of dictionary-related modules. Each test case
%% runs multiple tests in parallel since many of the tests are just
%% the same code with different in-data: implementing each test as a
-%% single testcase would make for much duplication with ct's
-%% requirement of one function per testcase. (Instead of allowing a
-%% testcase to be an MFA instead of function name, say.)
+%% single testcase would make for much duplication with ct's current
+%% requirement of one function per testcase.
%%
-module(diameter_codec_SUITE).
diff --git a/lib/diameter/test/diameter_relay_SUITE.erl b/lib/diameter/test/diameter_relay_SUITE.erl
index 0cda2df8ca..6b2fda7855 100644
--- a/lib/diameter/test/diameter_relay_SUITE.erl
+++ b/lib/diameter/test/diameter_relay_SUITE.erl
@@ -26,7 +26,7 @@
%% / |
%% CLIENT.REALM1 |
%% \ |
-%% ---- RELAY.REALM3 ---- SERVER2.REALM3
+%% ---- RELAY.REALM3 ---- SERVER1.REALM3
%% \
%% --- SERVER2.REALM3
%%
diff --git a/lib/diameter/vsn.mk b/lib/diameter/vsn.mk
index 9f822e4e85..c783450c9f 100644
--- a/lib/diameter/vsn.mk
+++ b/lib/diameter/vsn.mk
@@ -18,7 +18,7 @@
# %CopyrightEnd%
APPLICATION = diameter
-DIAMETER_VSN = 0.9
+DIAMETER_VSN = 0.10
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(DIAMETER_VSN)$(PRE_VSN)"