From a9050738f80a588e75742842fb64fa4bdc4ab448 Mon Sep 17 00:00:00 2001 From: Hans Nilsson Date: Fri, 16 Aug 2019 13:13:40 +0200 Subject: ssh: Add global_requests to ssh_connection_handler --- lib/ssh/src/ssh_connection_handler.erl | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl index 69d3c3b18f..76479fffe3 100644 --- a/lib/ssh/src/ssh_connection_handler.erl +++ b/lib/ssh/src/ssh_connection_handler.erl @@ -51,6 +51,7 @@ start_channel/5, request/6, request/7, reply_request/3, + global_request/5, send/5, send_eof/2, info/1, info/2, @@ -241,6 +242,12 @@ request(ConnectionHandler, ChannelId, Type, false, Data, _) -> reply_request(ConnectionHandler, Status, ChannelId) -> cast(ConnectionHandler, {reply_request, Status, ChannelId}). +%%-------------------------------------------------------------------- +global_request(ConnectionHandler, Type, true, Data, Timeout) -> + call(ConnectionHandler, {global_request, Type, Data, Timeout}); +global_request(ConnectionHandler, Type, false, Data, _) -> + cast(ConnectionHandler, {global_request, Type, Data}). + %%-------------------------------------------------------------------- -spec send(connection_ref(), channel_id(), @@ -1178,6 +1185,10 @@ handle_event(cast, {unknown,Data}, StateName, D) when ?CONNECTED(StateName) -> Msg = #ssh_msg_unimplemented{sequence = Data}, {keep_state, send_msg(Msg,D)}; +handle_event(cast, {global_request, Type, Data}, StateName, D) when ?CONNECTED(StateName) -> + {keep_state, send_msg(ssh_connection:request_global_msg(Type,false,Data), D)}; + + %%% Previously handle_sync_event began here handle_event({call,From}, get_print_info, StateName, D) -> Reply = @@ -1255,6 +1266,13 @@ handle_event({call,From}, {request, ChannelId, Type, Data, Timeout}, StateName, {keep_state, D, cond_set_idle_timer(D)} end; +handle_event({call,From}, {global_request, Type, Data, Timeout}, StateName, D) when ?CONNECTED(StateName) -> + Id = make_ref(), + D = send_msg(ssh_connection:request_global_msg(Type, true, Data), + add_request(true, Id, From, D)), + start_channel_request_timer(Id, From, Timeout), + {keep_state, D, cond_set_idle_timer(D)}; + handle_event({call,From}, {data, ChannelId, Type, Data, Timeout}, StateName, D0) when ?CONNECTED(StateName) -> {Repls,D} = send_replies(ssh_connection:channel_data(ChannelId, Type, Data, D0#data.connection_state, From), -- cgit v1.2.1