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

openSUSE Build Service is sponsored by