ssh_channel
ssh_channel
模块
ssh_channel
模块摘要
-behaviour(ssh_channel).
描述
SSH服务(客户端和服务器)实现为通过SSH连接复用并通过SSH连接协议进行通信的通道。 该模块提供了一个回调API,用于处理通用通道方面,如流量控制和关闭消息。 它允许回调函数处理服务(应用程序)特定的部分。 这种行为还可以确保通道进程承认OTP进程的主体,以便它可以成为主管树的一部分。 这是通道进程实现子系统的要求,该子系统将被添加到ssh应用程序主管树中。
注
实施ssh
子系统时,请使用-behaviour(ssh_daemon_channel)
而不是-behaviour(ssh_channel)
。原因是,对于子系统唯一相关的回调函数是init/1
,handle_ssh_msg/2
,handle_msg/2
,和terminate/2
。所以,ssh_daemon_channel
行为是行为的有限版本ssh_channel
。
数据类型
在此模块中多次使用的类型定义,或抽象表示数据类型的预期用途,或两者:
boolean() =
true | false
string() =
ASCII字符列表
timeout() =
infinity | integer()
以毫秒为单位
ssh_connection_ref() =
opaque() - 由ssh:connect/3
SSH通道进程返回或发送到该通道进程
ssh_channel_id() =
integer()
ssh_data_type_code() =
1
(“stderr”)| 0
(“正常”)是有效值,请参见RFC 4254
第5.2节
输出
call(ChannelRef, Msg) ->call(ChannelRef, Msg, Timeout) -> Reply | {error, Reason}
类型
由.. ssh_channel:start_link/4
.返回
通过发送消息并等待直到回复到达或发生超时来对通道进程进行同步调用。通道调用Module:handle_call/3
来处理消息。如果通道过程不存在,{error, closed}
则返回。
cast(ChannelRef, Msg) -> ok
类型
由ssh_channel:start_link/4
将异步消息发送到通道进程并立即返回,忽略目标节点或通道进程是否不存在。通道调用Module:handle_cast/2
来处理消息。
enter_loop(State) -> _
类型
由ssh_channel:init/1
使现有流程成为ssh_channel
流程。不返回,而是调用进程进入ssh_channel
进程接收循环并成为一个进程ssh_channel process
。该过程必须已经使用其中一个启动函数开始proc_lib
,请参阅proc_lib(3)
STDLIB中的手册页。用户负责进程的任何初始化,并且必须调用ssh_channel:init/1
。
init(Options) -> {ok, State} | {ok, State, Timeout} | {stop, Reason}
类型
必须提出下列备选办法:
{channel_cb, atom()}
实现信道行为的模块。
{init_args(), list()}
init
回调模块函数的参数列表。
{cm, connection_ref()}
引用ssh
返回的连接ssh:connect/3
{channel_id, channel_id()}
ssh
频道的ID 。
注
该功能通常不被用户调用。如果通道过程需要在proc_lib
调用ssh_channel:start/4
或帮助的帮助下启动,用户只需要返回ssh_channel:start_link/4
。
reply(Client, Reply) -> _
类型
这个函数可以被一个通道用来发送一个回复给一个客户端,这个客户端call/[2,3]
在返回值不能被定义的时候调用回应Module:handle_call/3
。
Client
必须是From
提供给回调函数的参数handle_call/3
。Reply
是一个任意的术语,作为返回值返回给客户端ssh_channel:call/[2,3].
start(SshConnection, ChannelId, ChannelCb, CbInitArgs) ->start_link(SshConnection, ChannelId, ChannelCb, CbInitArgs) -> {ok, ChannelRef} | {error, Reason}
类型
由ssh_connection:session_channel/[2,4]
.返回
实现通道服务特定部分的模块的名称。
参数列表init
函数在回调模块中。
启动处理SSH通道的进程。它由ssh
守护进程在内部调用,或由ssh
客户机实现明确调用。行为将该trap_exit
标志设置为true
。
回调暂停
回调函数可以返回的超时值具有与gen_server
.如果超时,handle_msg/2
被称为handle_msg(timeout, State)
...
输出
Module:code_change(OldVsn, State, Extra) -> {ok, NewState}
类型
在升级的情况下,OldVsn
是Vsn
和在降级的情况下,OldVsn
是{down,Vsn}
。Vsn
由vsn
回调模块的旧版本的属性定义Module
。如果未定义此类属性,则版本是BEAM文件的校验和。
通道的内部状态。
从{advanced,Extra}
更新指令的一部分。
在代码更改时转换进程状态。
当在发布升级或降级期间更新其内部状态时,也就是当指令{update,Module,Change,...},其中Change = {advanced,Extra },在appup文件中给出。 有关更多信息,请参阅系统文档中的第9.11.6节“版本处理指令”。
注
根据OTP发布概念进行的软件升级并非直接针对服务器端,因为子系统通道进程由ssh
应用程序产生,因此被添加到其管理程序树中。如果回调函数可以处理两个版本的状态,但在升级用户应用程序时可以升级子系统通道,但此功能无法以正常方式使用。
Module:init(Args) -> {ok, State} | {ok, State, timeout()} | {stop, Reason}
类型
最后一个参数ssh_channel:start_link/4
。
进行必要的初始化,如果初始化成功,则返回初始通道状态。
有关超时的详细信息,请参阅CALLBACK TIME-OUTS
...
Module:handle_call(Msg, From, State) -> Result
类型
将用作ssh_channel:reply/2
的返回值。ssh_channel:call/[2,3]
处理通过调用ssh_channel:call/[2,3]
有关超时的详细信息,请参阅CALLBACK TIME-OUTS
...
Module:handle_cast(Msg, State) -> Result
类型
处理通过调用ssh_channel:cast/2
...
有关超时的详细信息,请参阅CALLBACK TIME-OUTS
...
Module:handle_msg(Msg, State) -> {ok, State} | {stop, ChannelId, State}
类型
处理发送到信道的SSH连接协议、呼叫或强制转换消息以外的其他消息。
可能的Erlang'EXIT'消息将由该函数处理,并且所有通道都将处理以下消息。
{ssh_channel_up, ssh_channel_id(), ssh_connection_ref()}
这是频道收到的第一条消息。 它在ssh_channel:init / 1函数成功返回之前发送。 如果服务器想要在没有先收到消息的情况下向客户端发送消息,这将特别有用。 如果该消息对您的特定场景无用,请立即返回{ok,State}来忽略它。
Module:handle_ssh_msg(Msg, State) -> {ok, State} | {stop, ChannelId, State}
类型
处理可能需要服务特定注意的SSH连接协议消息。有关详细信息,请参阅ssh_connection:event()
...
下面的消息由ssh_channel
行为。
{closed, ssh_channel_id()}
如果此类消息尚未发送,则通道行为会向另一侧发送关闭消息。然后它有理由终止该频道normal
。
Module:terminate(Reason, State) -> _
类型
该函数在通道进程即将终止时调用。 在调用此函数之前,先调用ssh_connection:close / 2(如果它尚未被调用)。 此功能可以进行任何必要的清理。 当它返回时,通道进程终止并具有Reason Reason。 返回值被忽略。