From a5f6b3441e26919a2be67929487c07a388ae96f6 Mon Sep 17 00:00:00 2001 From: Hans Nilsson Date: Fri, 16 Aug 2019 13:12:10 +0200 Subject: ssh: Add a simple per-connection term storage --- lib/ssh/src/ssh_connection_handler.erl | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl index 3b99627f4d..991348b156 100644 --- a/lib/ssh/src/ssh_connection_handler.erl +++ b/lib/ssh/src/ssh_connection_handler.erl @@ -54,6 +54,8 @@ global_request/5, send/5, send_eof/2, + store/3, + retrieve/2, info/1, info/2, connection_info/2, channel_info/3, @@ -336,6 +338,15 @@ close(ConnectionHandler, ChannelId) -> ok end. + +%%-------------------------------------------------------------------- +store(ConnectionHandler, Key, Value) -> + cast(ConnectionHandler, {store,Key,Value}). + +retrieve(ConnectionHandler, Key) -> + call(ConnectionHandler, {retrieve,Key}). + + %%==================================================================== %% Test support %%==================================================================== @@ -1353,6 +1364,18 @@ handle_event({call,From}, {close, ChannelId}, StateName, D0) {keep_state_and_data, [{reply,From,ok}]} end; +handle_event(cast, {store,Key,Value}, _StateName, #data{connection_state=C0} = D) -> + C = #connection{options = ?PUT_INTERNAL_OPT({Key,Value}, C0#connection.options)}, + {keep_state, D#data{connection_state = C}}; + +handle_event({call,From}, {retrieve,Key}, _StateName, #data{connection_state=C0}) -> + try ?GET_INTERNAL_OPT(Key, C0#connection.options) of + Value -> + {keep_state_and_data, [{reply,From,{ok,Value}}]} + catch + error:{badkey,Key} -> + {keep_state_and_data, [{reply,From,undefined}]} + end; %%===== Reception of encrypted bytes, decryption and framing handle_event(info, {Proto, Sock, Info}, {hello,_}, #data{socket = Sock, -- cgit v1.2.1