summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Nilsson <hans@erlang.org>2019-08-16 13:13:40 +0200
committerHans Nilsson <hans@erlang.org>2019-09-20 10:31:47 +0200
commita9050738f80a588e75742842fb64fa4bdc4ab448 (patch)
treef7dac16a20d6d3c3420f12b6f767696680740d53
parent01085d27142e96bf3ae6f76caa072ace041e64ca (diff)
downloaderlang-a9050738f80a588e75742842fb64fa4bdc4ab448.tar.gz
ssh: Add global_requests to ssh_connection_handler
-rw-r--r--lib/ssh/src/ssh_connection_handler.erl18
1 files changed, 18 insertions, 0 deletions
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,
@@ -242,6 +243,12 @@ 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(),
non_neg_integer(),
@@ -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),