File 2952-ssh-Change-ssh-modules-to-use-the-new-ssh_dbg-behavi.patch of Package erlang
From 33770e0b4dbc745481fe4e47a1c675122d89bfc7 Mon Sep 17 00:00:00 2001
From: Hans Nilsson <hans@erlang.org>
Date: Wed, 4 Dec 2019 17:41:21 +0100
Subject: [PATCH 2/2] ssh: Change ssh modules to use the new ssh_dbg behaviour
---
lib/ssh/src/ssh_acceptor.erl | 24 +++++-----
lib/ssh/src/ssh_cli.erl | 16 ++++---
lib/ssh/src/ssh_client_channel.erl | 61 ++++++++++++-------------
lib/ssh/src/ssh_connection_handler.erl | 82 ++++++++++++++++++----------------
lib/ssh/src/ssh_message.erl | 34 +++++++-------
lib/ssh/src/ssh_sftp.erl | 16 ++++---
lib/ssh/src/ssh_sftpd.erl | 17 ++++---
lib/ssh/src/ssh_shell.erl | 16 ++++---
lib/ssh/src/ssh_transport.erl | 44 +++++++++++-------
9 files changed, 176 insertions(+), 134 deletions(-)
diff --git a/lib/ssh/src/ssh_acceptor.erl b/lib/ssh/src/ssh_acceptor.erl
index 11ce80354e..dae34f858f 100644
--- a/lib/ssh/src/ssh_acceptor.erl
+++ b/lib/ssh/src/ssh_acceptor.erl
@@ -33,7 +33,8 @@
%% spawn export
-export([acceptor_init/5, acceptor_loop/6]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
-define(SLEEP_TIME, 200).
@@ -202,18 +203,21 @@ handle_error(Reason) ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [connections];
+ssh_dbg_trace_points() -> [connections].
-dbg_trace(flags, connections, _) -> [c];
-dbg_trace(on, connections, _) -> dbg:tp(?MODULE, acceptor_init, 5, x),
- dbg:tpl(?MODULE, handle_connection, 5, x);
-dbg_trace(off, connections, _) -> dbg:ctp(?MODULE, acceptor_init, 5),
- dbg:ctp(?MODULE, handle_connection, 5);
-dbg_trace(format, connections, {call, {?MODULE,acceptor_init,
- [_Parent, Port, Address, _Opts, _AcceptTimeout]}}) ->
+ssh_dbg_flags(connections) -> [c].
+
+ssh_dbg_on(connections) -> dbg:tp(?MODULE, acceptor_init, 5, x),
+ dbg:tpl(?MODULE, handle_connection, 5, x).
+
+ssh_dbg_off(connections) -> dbg:ctp(?MODULE, acceptor_init, 5),
+ dbg:ctp(?MODULE, handle_connection, 5).
+
+ssh_dbg_format(connections, {call, {?MODULE,acceptor_init,
+ [_Parent, Port, Address, _Opts, _AcceptTimeout]}}) ->
[io_lib:format("Starting LISTENER on ~s:~p\n", [ntoa(Address),Port])
];
-dbg_trace(format, connections, {return_from, {?MODULE,handle_connection,5}, {error,Error}}) ->
+ssh_dbg_format(connections, {return_from, {?MODULE,handle_connection,5}, {error,Error}}) ->
["Starting connection to server failed:\n",
io_lib:format("Error = ~p", [Error])
].
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl
index 7f04fcb804..0345eaf0eb 100644
--- a/lib/ssh/src/ssh_cli.erl
+++ b/lib/ssh/src/ssh_cli.erl
@@ -33,7 +33,8 @@
%% ssh_server_channel callbacks
-export([init/1, handle_ssh_msg/2, handle_msg/2, terminate/2]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
%% state
-record(state, {
@@ -651,12 +652,15 @@ not_zero(A, _) ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [terminate];
+ssh_dbg_trace_points() -> [terminate].
-dbg_trace(flags, terminate, _) -> [c];
-dbg_trace(on, terminate, _) -> dbg:tp(?MODULE, terminate, 2, x);
-dbg_trace(off, terminate, _) -> dbg:ctpg(?MODULE, terminate, 2);
-dbg_trace(format, terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
+ssh_dbg_flags(terminate) -> [c].
+
+ssh_dbg_on(terminate) -> dbg:tp(?MODULE, terminate, 2, x).
+
+ssh_dbg_off(terminate) -> dbg:ctpg(?MODULE, terminate, 2).
+
+ssh_dbg_format(terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
["Cli Terminating:\n",
io_lib:format("Reason: ~p,~nState:~n~s", [Reason, wr_record(State)])
].
diff --git a/lib/ssh/src/ssh_client_channel.erl b/lib/ssh/src/ssh_client_channel.erl
index 3bd1e1fdf1..605f71b8ac 100644
--- a/lib/ssh/src/ssh_client_channel.erl
+++ b/lib/ssh/src/ssh_client_channel.erl
@@ -72,7 +72,8 @@
cache_info/2, cache_find/2,
get_print_info/1]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
-record(state, {
cm,
@@ -388,64 +389,64 @@ adjust_window(_) ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [terminate, channels, channel_events];
+ssh_dbg_trace_points() -> [terminate, channels, channel_events].
+ssh_dbg_flags(channels) -> [c];
+ssh_dbg_flags(terminate) -> [c];
+ssh_dbg_flags(channel_events) -> [c].
-dbg_trace(flags, channels, A) -> [c] ++ dbg_trace(flags, terminate, A);
-dbg_trace(on, channels, A) -> dbg:tp(?MODULE, init, 1, x),
- dbg_trace(on, terminate, A);
-dbg_trace(off, channels, A) -> dbg:ctpg(?MODULE, init, 1),
- dbg_trace(off, terminate, A);
-dbg_trace(format, channels, {call, {?MODULE,init, [[KVs]]}}) ->
+ssh_dbg_on(terminate) -> dbg:tp(?MODULE, terminate, 2, x);
+ssh_dbg_on(channels) -> dbg:tp(?MODULE, init, 1, x),
+ ssh_dbg_on(terminate);
+ssh_dbg_on(channel_events) -> dbg:tp(?MODULE, handle_call, 3, x),
+ dbg:tp(?MODULE, handle_cast, 2, x),
+ dbg:tp(?MODULE, handle_info, 2, x).
+
+ssh_dbg_off(terminate) -> dbg:ctpg(?MODULE, terminate, 2);
+ssh_dbg_off(channels) -> dbg:ctpg(?MODULE, init, 1),
+ ssh_dbg_off(terminate);
+ssh_dbg_off(channel_events) -> dbg:ctpg(?MODULE, handle_call, 3),
+ dbg:ctpg(?MODULE, handle_cast, 2),
+ dbg:ctpg(?MODULE, handle_info, 2).
+
+ssh_dbg_format(channels, {call, {?MODULE,init, [[KVs]]}}) ->
["Server Channel Starting:\n",
io_lib:format("Connection: ~p, ChannelId: ~p, CallBack: ~p\nCallBack init args = ~p",
[proplists:get_value(K,KVs) || K <- [cm, channel_id, channel_cb]]
++ [channel_cb_init_args(KVs)])
];
-dbg_trace(format, channels, {return_from, {?MODULE,init,1}, {stop,Reason}}) ->
+ssh_dbg_format(channels, {return_from, {?MODULE,init,1}, {stop,Reason}}) ->
["Server Channel Start FAILED!\n",
io_lib:format("Reason = ~p", [Reason])
];
-dbg_trace(format, channels, F) ->
- dbg_trace(format, terminate, F);
-
-
-dbg_trace(flags, terminate, _) -> [c];
-dbg_trace(on, terminate, _) -> dbg:tp(?MODULE, terminate, 2, x);
-dbg_trace(off, terminate, _) -> dbg:ctpg(?MODULE, terminate, 2);
-dbg_trace(format, terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
+ssh_dbg_format(channels, F) ->
+ ssh_dbg_format(terminate, F);
+ssh_dbg_format(terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
["Server Channel Terminating:\n",
io_lib:format("Reason: ~p,~nState:~n~s", [Reason, wr_record(State)])
];
-dbg_trace(flags, channel_events, _) -> [c];
-dbg_trace(on, channel_events, _) -> dbg:tp(?MODULE, handle_call, 3, x),
- dbg:tp(?MODULE, handle_cast, 2, x),
- dbg:tp(?MODULE, handle_info, 2, x);
-dbg_trace(off, channel_events, _) -> dbg:ctpg(?MODULE, handle_call, 3),
- dbg:ctpg(?MODULE, handle_cast, 2),
- dbg:ctpg(?MODULE, handle_info, 2);
-dbg_trace(format, channel_events, {call, {?MODULE,handle_call, [Call,From,State]}}) ->
+ssh_dbg_format(channel_events, {call, {?MODULE,handle_call, [Call,From,State]}}) ->
[hdr("is called", State),
io_lib:format("From: ~p~nCall: ~p~n", [From, Call])
];
-dbg_trace(format, channel_events, {return_from, {?MODULE,handle_call,3}, Ret}) ->
+ssh_dbg_format(channel_events, {return_from, {?MODULE,handle_call,3}, Ret}) ->
["Server Channel call returned:\n",
io_lib:format("~p~n", [ssh_dbg:reduce_state(Ret)])
];
-dbg_trace(format, channel_events, {call, {?MODULE,handle_cast, [Cast,State]}}) ->
+ssh_dbg_format(channel_events, {call, {?MODULE,handle_cast, [Cast,State]}}) ->
[hdr("got cast", State),
io_lib:format("Cast: ~p~n", [Cast])
];
-dbg_trace(format, channel_events, {return_from, {?MODULE,handle_cast,2}, Ret}) ->
+ssh_dbg_format(channel_events, {return_from, {?MODULE,handle_cast,2}, Ret}) ->
["Server Channel cast returned:\n",
io_lib:format("~p~n", [ssh_dbg:reduce_state(Ret)])
];
-dbg_trace(format, channel_events, {call, {?MODULE,handle_info, [Info,State]}}) ->
+ssh_dbg_format(channel_events, {call, {?MODULE,handle_info, [Info,State]}}) ->
[hdr("got info", State),
io_lib:format("Info: ~p~n", [Info])
];
-dbg_trace(format, channel_events, {return_from, {?MODULE,handle_info,2}, Ret}) ->
+ssh_dbg_format(channel_events, {return_from, {?MODULE,handle_info,2}, Ret}) ->
["Server Channel info returned:\n",
io_lib:format("~p~n", [ssh_dbg:reduce_state(Ret)])
].
diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl
index ad5a54a2e2..d200dac33c 100644
--- a/lib/ssh/src/ssh_connection_handler.erl
+++ b/lib/ssh/src/ssh_connection_handler.erl
@@ -74,7 +74,8 @@
renegotiate/1, alg/1 % Export intended for test cases
]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
-define(send_disconnect(Code, DetailedText, StateName, State),
@@ -2284,14 +2285,37 @@ update_inet_buffers(Socket) ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [terminate, disconnect, connections, connection_events, renegotiation];
-
-dbg_trace(flags, connections, A) -> [c] ++ dbg_trace(flags, terminate, A);
-dbg_trace(on, connections, A) -> dbg:tp(?MODULE, init_connection_handler, 3, x),
- dbg_trace(on, terminate, A);
-dbg_trace(off, connections, A) -> dbg:ctpg(?MODULE, init_connection_handler, 3),
- dbg_trace(off, terminate, A);
-dbg_trace(format, connections, {call, {?MODULE,init_connection_handler, [Role, Sock, Opts]}}) ->
+ssh_dbg_trace_points() -> [terminate, disconnect, connections, connection_events, renegotiation].
+
+ssh_dbg_flags(connections) -> [c | ssh_dbg_flags(terminate)];
+ssh_dbg_flags(renegotiation) -> [c];
+ssh_dbg_flags(connection_events) -> [c];
+ssh_dbg_flags(terminate) -> [c];
+ssh_dbg_flags(disconnect) -> [c].
+
+ssh_dbg_on(connections) -> dbg:tp(?MODULE, init_connection_handler, 3, x),
+ ssh_dbg_on(terminate);
+ssh_dbg_on(connection_events) -> dbg:tp(?MODULE, handle_event, 4, x);
+ssh_dbg_on(renegotiation) -> dbg:tpl(?MODULE, init_renegotiate_timers, 2, x),
+ dbg:tpl(?MODULE, pause_renegotiate_timers, 2, x),
+ dbg:tpl(?MODULE, check_data_rekeying_dbg, 2, x),
+ dbg:tpl(?MODULE, start_rekeying, 2, x);
+ssh_dbg_on(terminate) -> dbg:tp(?MODULE, terminate, 3, x);
+ssh_dbg_on(disconnect) -> dbg:tpl(?MODULE, send_disconnect, 7, x).
+
+
+ssh_dbg_off(disconnect) -> dbg:ctpl(?MODULE, send_disconnect, 7);
+ssh_dbg_off(terminate) -> dbg:ctpg(?MODULE, terminate, 3);
+ssh_dbg_off(renegotiation) -> dbg:ctpl(?MODULE, init_renegotiate_timers, 2),
+ dbg:ctpl(?MODULE, pause_renegotiate_timers, 2),
+ dbg:ctpl(?MODULE, check_data_rekeying_dbg, 2),
+ dbg:ctpl(?MODULE, start_rekeying, 2);
+ssh_dbg_off(connection_events) -> dbg:ctpg(?MODULE, handle_event, 4);
+ssh_dbg_off(connections) -> dbg:ctpg(?MODULE, init_connection_handler, 3),
+ ssh_dbg_off(terminate).
+
+
+ssh_dbg_format(connections, {call, {?MODULE,init_connection_handler, [Role, Sock, Opts]}}) ->
DefaultOpts = ssh_options:handle_options(Role,[]),
ExcludedKeys = [internal_options, user_options],
NonDefaultOpts =
@@ -2312,41 +2336,29 @@ dbg_trace(format, connections, {call, {?MODULE,init_connection_handler, [Role, S
[Sock,inet:ntoa(IPp),Portp,inet:ntoa(IPs),Ports,
NonDefaultOpts])
];
-dbg_trace(format, connections, F) ->
- dbg_trace(format, terminate, F);
+ssh_dbg_format(connections, F) ->
+ ssh_dbg_format(terminate, F);
-dbg_trace(flags, connection_events, _) -> [c];
-dbg_trace(on, connection_events, _) -> dbg:tp(?MODULE, handle_event, 4, x);
-dbg_trace(off, connection_events, _) -> dbg:ctpg(?MODULE, handle_event, 4);
-dbg_trace(format, connection_events, {call, {?MODULE,handle_event, [EventType, EventContent, State, _Data]}}) ->
+ssh_dbg_format(connection_events, {call, {?MODULE,handle_event, [EventType, EventContent, State, _Data]}}) ->
["Connection event\n",
io_lib:format("EventType: ~p~nEventContent: ~p~nState: ~p~n", [EventType, EventContent, State])
];
-dbg_trace(format, connection_events, {return_from, {?MODULE,handle_event,4}, Ret}) ->
+ssh_dbg_format(connection_events, {return_from, {?MODULE,handle_event,4}, Ret}) ->
["Connection event result\n",
io_lib:format("~p~n", [event_handler_result(Ret)])
];
-dbg_trace(flags, renegotiation, _) -> [c];
-dbg_trace(on, renegotiation, _) -> dbg:tpl(?MODULE, init_renegotiate_timers, 2, x),
- dbg:tpl(?MODULE, pause_renegotiate_timers, 2, x),
- dbg:tpl(?MODULE, check_data_rekeying_dbg, 2, x),
- dbg:tpl(?MODULE, start_rekeying, 2, x);
-dbg_trace(off, renegotiation, _) -> dbg:ctpl(?MODULE, init_renegotiate_timers, 2),
- dbg:ctpl(?MODULE, pause_renegotiate_timers, 2),
- dbg:ctpl(?MODULE, check_data_rekeying_dbg, 2),
- dbg:ctpl(?MODULE, start_rekeying, 2);
-dbg_trace(format, renegotiation, {call, {?MODULE,init_renegotiate_timers,[_State,D]}}) ->
+ssh_dbg_format(renegotiation, {call, {?MODULE,init_renegotiate_timers,[_State,D]}}) ->
["Renegotiation init\n",
io_lib:format("rekey_limit: ~p ({ms,bytes})~ncheck_data_size: ~p (ms)~n",
[?GET_OPT(rekey_limit, (D#data.ssh_params)#ssh.opts),
?REKEY_DATA_TIMOUT])
];
-dbg_trace(format, renegotiation, {call, {?MODULE,pause_renegotiate_timers,[_State,_D]}}) ->
+ssh_dbg_format(renegotiation, {call, {?MODULE,pause_renegotiate_timers,[_State,_D]}}) ->
["Renegotiation pause\n"];
-dbg_trace(format, renegotiation, {call, {?MODULE,start_rekeying,[_Role,_D]}}) ->
+ssh_dbg_format(renegotiation, {call, {?MODULE,start_rekeying,[_Role,_D]}}) ->
["Renegotiation start rekeying\n"];
-dbg_trace(format, renegotiation, {call, {?MODULE,check_data_rekeying_dbg,[SentSinceRekey, MaxSent]}}) ->
+ssh_dbg_format(renegotiation, {call, {?MODULE,check_data_rekeying_dbg,[SentSinceRekey, MaxSent]}}) ->
["Renegotiation check data sent\n",
io_lib:format("TotalSentSinceRekey: ~p~nMaxBeforeRekey: ~p~nStartRekey: ~p~n",
[SentSinceRekey, MaxSent, SentSinceRekey >= MaxSent])
@@ -2354,10 +2366,7 @@ dbg_trace(format, renegotiation, {call, {?MODULE,check_data_rekeying_dbg,[SentSi
-dbg_trace(flags, terminate, _) -> [c];
-dbg_trace(on, terminate, _) -> dbg:tp(?MODULE, terminate, 3, x);
-dbg_trace(off, terminate, _) -> dbg:ctpg(?MODULE, terminate, 3);
-dbg_trace(format, terminate, {call, {?MODULE,terminate, [Reason, StateName, D]}}) ->
+ssh_dbg_format(terminate, {call, {?MODULE,terminate, [Reason, StateName, D]}}) ->
ExtraInfo =
try
{conn_info(peer,D),
@@ -2390,11 +2399,8 @@ dbg_trace(format, terminate, {call, {?MODULE,terminate, [Reason, StateName, D]}}
]
end;
-dbg_trace(flags, disconnect, _) -> [c];
-dbg_trace(on, disconnect, _) -> dbg:tpl(?MODULE, send_disconnect, 7, x);
-dbg_trace(off, disconnect, _) -> dbg:ctpl(?MODULE, send_disconnect, 7);
-dbg_trace(format, disconnect, {call,{?MODULE,send_disconnect,
- [Code, Reason, DetailedText, Module, Line, StateName, _D]}}) ->
+ssh_dbg_format(disconnect, {call,{?MODULE,send_disconnect,
+ [Code, Reason, DetailedText, Module, Line, StateName, _D]}}) ->
["Disconnecting:\n",
io_lib:format(" Module = ~p, Line = ~p, StateName = ~p,~n"
" Code = ~p, Reason = ~p,~n"
diff --git a/lib/ssh/src/ssh_message.erl b/lib/ssh/src/ssh_message.erl
index 7c86a81108..47cbec1513 100644
--- a/lib/ssh/src/ssh_message.erl
+++ b/lib/ssh/src/ssh_message.erl
@@ -32,7 +32,9 @@
-export([encode/1, decode/1, decode_keyboard_interactive_prompts/2]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
+
ucl(B) ->
try unicode:characters_to_list(B) of
@@ -606,34 +608,36 @@ encode_signature({ed_pub, ed448,_}, _SigAlg, Signature) ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [ssh_messages, raw_messages];
+ssh_dbg_trace_points() -> [ssh_messages, raw_messages].
+
+ssh_dbg_flags(ssh_messages) -> [c];
+ssh_dbg_flags(raw_messages) -> [c].
-dbg_trace(flags, ssh_messages, _) -> [c];
-dbg_trace(on, ssh_messages, _) -> dbg:tp(?MODULE,encode,1,x),
- dbg:tp(?MODULE,decode,1,x);
-dbg_trace(off, ssh_messages, _) -> dbg:ctpg(?MODULE,encode,1),
- dbg:ctpg(?MODULE,decode,1);
+ssh_dbg_on(P) when P==ssh_messages ;
+ P==raw_messages ->
+ dbg:tp(?MODULE,encode,1,x),
+ dbg:tp(?MODULE,decode,1,x).
-dbg_trace(flags, raw_messages, A) -> dbg_trace(flags, ssh_messages, A);
-dbg_trace(on, raw_messages, A) -> dbg_trace(on, ssh_messages, A);
-dbg_trace(off, raw_messages, A) -> dbg_trace(off, ssh_messages, A);
+ssh_dbg_off(P) when P==ssh_messages ;
+ P==raw_messages ->
+ dbg:ctpg(?MODULE,encode,1),
+ dbg:ctpg(?MODULE,decode,1).
-dbg_trace(format, ssh_messages, {call,{?MODULE,encode,[Msg]}}) ->
+ssh_dbg_format(ssh_messages, {call,{?MODULE,encode,[Msg]}}) ->
Name = string:to_upper(atom_to_list(element(1,Msg))),
["Going to send ",Name,":\n",
wr_record(ssh_dbg:shrink_bin(Msg))
];
-dbg_trace(format, ssh_messages, {return_from,{?MODULE,decode,1},Msg}) ->
+ssh_dbg_format(ssh_messages, {return_from,{?MODULE,decode,1},Msg}) ->
Name = string:to_upper(atom_to_list(element(1,Msg))),
["Received ",Name,":\n",
wr_record(ssh_dbg:shrink_bin(Msg))
];
-
-dbg_trace(format, raw_messages, {call,{?MODULE,decode,[BytesPT]}}) ->
+ssh_dbg_format(raw_messages, {call,{?MODULE,decode,[BytesPT]}}) ->
["Received plain text bytes (shown after decryption):\n",
io_lib:format("~p",[BytesPT])
];
-dbg_trace(format, raw_messages, {return_from,{?MODULE,encode,1},BytesPT}) ->
+ssh_dbg_format(raw_messages, {return_from,{?MODULE,encode,1},BytesPT}) ->
["Going to send plain text bytes (shown before encryption):\n",
io_lib:format("~p",[BytesPT])
].
diff --git a/lib/ssh/src/ssh_sftp.erl b/lib/ssh/src/ssh_sftp.erl
index 97dd333089..11d48bb1e5 100644
--- a/lib/ssh/src/ssh_sftp.erl
+++ b/lib/ssh/src/ssh_sftp.erl
@@ -52,7 +52,8 @@
%% TODO: Should be placed elsewhere ssh_sftpd should not call functions in ssh_sftp!
-export([info_to_attr/1, attr_to_info/1]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
-record(state,
{
@@ -1833,12 +1834,15 @@ format_channel_start_error(Reason) ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [terminate];
+ssh_dbg_trace_points() -> [terminate].
-dbg_trace(flags, terminate, _) -> [c];
-dbg_trace(on, terminate, _) -> dbg:tp(?MODULE, terminate, 2, x);
-dbg_trace(off, terminate, _) -> dbg:ctpg(?MODULE, terminate, 2);
-dbg_trace(format, terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
+ssh_dbg_flags(terminate) -> [c].
+
+ssh_dbg_on(terminate) -> dbg:tp(?MODULE, terminate, 2, x).
+
+ssh_dbg_off(terminate) -> dbg:ctpg(?MODULE, terminate, 2).
+
+ssh_dbg_format(terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
["Sftp Terminating:\n",
io_lib:format("Reason: ~p,~nState:~n~s", [Reason, wr_record(State)])
].
diff --git a/lib/ssh/src/ssh_sftpd.erl b/lib/ssh/src/ssh_sftpd.erl
index bf921f0ff3..b8dc905d4d 100644
--- a/lib/ssh/src/ssh_sftpd.erl
+++ b/lib/ssh/src/ssh_sftpd.erl
@@ -38,7 +38,9 @@
-export([init/1, handle_ssh_msg/2, handle_msg/2, terminate/2]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
+
-record(state, {
xf, % [{channel,ssh_xfer states}...]
@@ -950,12 +952,15 @@ maybe_increase_recv_window(ConnectionManager, ChannelId, Options) ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [terminate];
+ssh_dbg_trace_points() -> [terminate].
+
+ssh_dbg_flags(terminate) -> [c].
+
+ssh_dbg_on(terminate) -> dbg:tp(?MODULE, terminate, 2, x).
+
+ssh_dbg_off(terminate) -> dbg:ctpg(?MODULE, terminate, 2).
-dbg_trace(flags, terminate, _) -> [c];
-dbg_trace(on, terminate, _) -> dbg:tp(?MODULE, terminate, 2, x);
-dbg_trace(off, terminate, _) -> dbg:ctpg(?MODULE, terminate, 2);
-dbg_trace(format, terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
+ssh_dbg_format(terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
["SftpD Terminating:\n",
io_lib:format("Reason: ~p,~nState:~n~s", [Reason, wr_record(State)])
].
diff --git a/lib/ssh/src/ssh_shell.erl b/lib/ssh/src/ssh_shell.erl
index cdc9a6df5b..39329875d8 100644
--- a/lib/ssh/src/ssh_shell.erl
+++ b/lib/ssh/src/ssh_shell.erl
@@ -35,7 +35,8 @@
%% Spawn export
-export([input_loop/2]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
-record(state,
{
@@ -188,12 +189,15 @@ get_ancestors() ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [terminate];
+ssh_dbg_trace_points() -> [terminate].
-dbg_trace(flags, terminate, _) -> [c];
-dbg_trace(on, terminate, _) -> dbg:tp(?MODULE, terminate, 2, x);
-dbg_trace(off, terminate, _) -> dbg:ctpg(?MODULE, terminate, 2);
-dbg_trace(format, terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
+ssh_dbg_flags(terminate) -> [c].
+
+ssh_dbg_on(terminate) -> dbg:tp(?MODULE, terminate, 2, x).
+
+ssh_dbg_off(terminate) -> dbg:ctpg(?MODULE, terminate, 2).
+
+ssh_dbg_format(terminate, {call, {?MODULE,terminate, [Reason, State]}}) ->
["Shell Terminating:\n",
io_lib:format("Reason: ~p,~nState:~n~s", [Reason, wr_record(State)])
].
diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl
index 13cd1dc646..9a4ae5bbc6 100644
--- a/lib/ssh/src/ssh_transport.erl
+++ b/lib/ssh/src/ssh_transport.erl
@@ -55,7 +55,8 @@
get_host_key/2,
call_KeyCb/3]).
--export([dbg_trace/3]).
+-behaviour(ssh_dbg).
+-export([ssh_dbg_trace_points/0, ssh_dbg_flags/1, ssh_dbg_on/1, ssh_dbg_off/1, ssh_dbg_format/2]).
-define(MIN_DH_KEY_SIZE, 400).
@@ -1983,34 +1984,43 @@ trim_tail(Str) ->
%%%# Tracing
%%%#
-dbg_trace(points, _, _) -> [alg, ssh_messages, raw_messages, hello];
+ssh_dbg_trace_points() -> [alg, ssh_messages, raw_messages, hello].
-dbg_trace(flags, hello, _) -> [c];
-dbg_trace(on, hello, _) -> dbg:tp(?MODULE,hello_version_msg,1,x),
- dbg:tp(?MODULE,handle_hello_version,1,x);
-dbg_trace(off, hello, _) -> dbg:ctpg(?MODULE,hello_version_msg,1),
- dbg:ctpg(?MODULE,handle_hello_version,1);
+ssh_dbg_flags(alg) -> [c];
+ssh_dbg_flags(hello) -> [c];
+ssh_dbg_flags(raw_messages) -> ssh_dbg_flags(hello);
+ssh_dbg_flags(ssh_messages) -> ssh_dbg_flags(hello).
-dbg_trace(C, raw_messages, A) -> dbg_trace(C, hello, A);
-dbg_trace(C, ssh_messages, A) -> dbg_trace(C, hello, A);
-dbg_trace(flags, alg, _) -> [c];
-dbg_trace(on, alg, _) -> dbg:tpl(?MODULE,select_algorithm,4,x);
-dbg_trace(off, alg, _) -> dbg:ctpl(?MODULE,select_algorithm,4);
+ssh_dbg_on(alg) -> dbg:tpl(?MODULE,select_algorithm,4,x);
+ssh_dbg_on(hello) -> dbg:tp(?MODULE,hello_version_msg,1,x),
+ dbg:tp(?MODULE,handle_hello_version,1,x);
+ssh_dbg_on(raw_messages) -> ssh_dbg_on(hello);
+ssh_dbg_on(ssh_messages) -> ssh_dbg_on(hello).
-dbg_trace(format, hello, {return_from,{?MODULE,hello_version_msg,1},Hello}) ->
+ssh_dbg_off(alg) -> dbg:ctpl(?MODULE,select_algorithm,4);
+ssh_dbg_off(hello) -> dbg:ctpg(?MODULE,hello_version_msg,1),
+ dbg:ctpg(?MODULE,handle_hello_version,1);
+ssh_dbg_off(raw_messages) -> ssh_dbg_off(hello);
+ssh_dbg_off(ssh_messages) -> ssh_dbg_off(hello).
+
+
+
+
+ssh_dbg_format(hello, {return_from,{?MODULE,hello_version_msg,1},Hello}) ->
["Going to send hello message:\n",
Hello
];
-dbg_trace(format, hello, {call,{?MODULE,handle_hello_version,[Hello]}}) ->
+ssh_dbg_format(hello, {call,{?MODULE,handle_hello_version,[Hello]}}) ->
["Received hello message:\n",
Hello
];
-
-dbg_trace(format, alg, {return_from,{?MODULE,select_algorithm,4},{ok,Alg}}) ->
+ssh_dbg_format(alg, {return_from,{?MODULE,select_algorithm,4},{ok,Alg}}) ->
["Negotiated algorithms:\n",
wr_record(Alg)
- ].
+ ];
+ssh_dbg_format(raw_messages, X) -> ssh_dbg_format(hello, X);
+ssh_dbg_format(ssh_messages, X) -> ssh_dbg_format(hello, X).
?wr_record(alg).
--
2.16.4