Provided by: erlang-manpages_18.3-dfsg-1ubuntu3.1_all bug

NAME

       ssh_channel - -behaviour(ssh_channel).

DESCRIPTION

       SSH  services  (clients and servers) are implemented as channels that are multiplexed over
       an SSH connection and communicates over the  SSH Connection Protocol. This module provides
       a  callback API that takes care of generic channel aspects, such as flow control and close
       messages. It lets the callback functions take care of the service  (application)  specific
       parts. This behavior also ensures that the channel process honors the principal of an OTP-
       process so that it can be part of a supervisor tree. This  is  a  requirement  of  channel
       processes  implementing  a subsystem that will be added to the ssh applications supervisor
       tree.

   Note:
       When  implementing  an  ssh  subsystem,  use  -behaviour(ssh_daemon_channel)  instead   of
       -behaviour(ssh_channel).  The  reason  is  that  the  only relevant callback functions for
       subsystems  are  init/1,  handle_ssh_msg/2,  handle_msg/2,  and   terminate/2.   So,   the
       ssh_daemon_channel behaviour is a limited version of the ssh_channel behaviour.

DATA TYPES

       Type  definitions that are used more than once in this module, or abstractions to indicate
       the intended use of the data type, or both:

         boolean() =:
           true | false

         string() =:
           list of ASCII characters

         timeout() =:
           infinity | integer() in milliseconds

         ssh_connection_ref() =:
           opaque() -as returned by ssh:connect/3 or sent to an SSH channel process

         ssh_channel_id() =:
           integer()

         ssh_data_type_code() =:
           1 ("stderr") | 0 ("normal") are the valid values, see RFC 4254 Section 5.2

EXPORTS

       call(ChannelRef, Msg) ->
       call(ChannelRef, Msg, Timeout) -> Reply | {error, Reason}

              Types:

                 ChannelRef = pid()
                   As returned by ssh_channel:start_link/4
                 Msg = term()
                 Timeout = timeout()
                 Reply = term()
                 Reason = closed | timeout

              Makes a synchronous call to the channel process by sending a  message  and  waiting
              until a reply arrives, or a time-out occurs. The channel calls Module:handle_call/3
              to handle the message. If the channel process does not exist,  {error,  closed}  is
              returned.

       cast(ChannelRef, Msg) -> ok

              Types:

                 ChannelRef = pid()
                   As returned by ssh_channel:start_link/4
                 Msg = term()

              Sends  an  asynchronous  message to the channel process and returns ok immediately,
              ignoring if the destination node or channel process does  not  exist.  The  channel
              calls Module:handle_cast/2 to handle the message.

       enter_loop(State) -> _

              Types:

                 State = term()
                   as returned by ssh_channel:init/1

              Makes  an  existing  process  an  ssh_channel process. Does not return, instead the
              calling  process  enters  the  ssh_channel  process  receive  loop  and  become  an
              ssh_channel  process.  The  process  must  have been started using one of the start
              functions in proc_lib, see the proc_lib(3erl) manual page in stdlib.  The  user  is
              responsible for any initialization of the process and must call ssh_channel:init/1.

       init(Options) -> {ok, State} | {ok, State, Timeout} | {stop, Reason}

              Types:

                 Options = [{Option, Value}]
                 State = term()
                 Timeout = timeout()
                 Reason = term()

              The following options must be present:

                {channel_cb, atom()}:
                  The module that implements the channel behaviour.

                {init_args(), list()}:
                  The list of arguments to the init function of the callback module.

                {cm, connection_ref()}:
                  Reference to the ssh connection as returned by ssh:connect/3

                {channel_id, channel_id()}:
                  Id of the ssh channel.

          Note:
              This  function  is  normally not called by the user. The user only needs to call if
              the channel process needs to be started with help of proc_lib  instead  of  calling
              ssh_channel:start/4 or ssh_channel:start_link/4.

       reply(Client, Reply) -> _

              Types:

                 Client = opaque()
                 Reply = term()

              This  function  can  be  used  by a channel to send a reply to a client that called
              call/[2,3]  when  the  reply  cannot  be   defined   in   the   return   value   of
              Module:handle_call/3.

              Client  must  be the From argument provided to the callback function handle_call/3.
              Reply is an arbitrary term, which is given back to the client as the  return  value
              of ssh_channel:call/[2,3].

       start(SshConnection, ChannelId, ChannelCb, CbInitArgs) ->
       start_link(SshConnection,  ChannelId, ChannelCb, CbInitArgs) -> {ok, ChannelRef} | {error,
       Reason}

              Types:

                 SshConnection = ssh_connection_ref()
                 ChannelId = ssh_channel_id()
                   As returned by  ssh_connection:session_channel/[2,4].
                 ChannelCb = atom()
                   Name of the module implementing the service-specific parts of the channel.
                 CbInitArgs = [term()]
                   Argument list for the init function in the callback module.
                 ChannelRef = pid()

              Starts a process that handles an SSH channel. It is called internally, by  the  ssh
              daemon,  or  explicitly  by  the  ssh client implementations. The behavior sets the
              trap_exit flag to true.

CALLBACK TIME-OUTS

       The time-out values that can be returned by the callback functions have the same semantics
       as  in a gen_server. If the time-out occurs, handle_msg/2 is called as handle_msg(timeout,
       State).

EXPORTS

       Module:code_change(OldVsn, State, Extra) -> {ok, NewState}

              Types:

                 OldVsn = term()
                   In the case of an upgrade, OldVsn is Vsn, and in  the  case  of  a  downgrade,
                   OldVsn  is  {down,Vsn}.  Vsn  is  defined  by  the vsn attribute(s) of the old
                   version of the callback module Module. If no such attribute  is  defined,  the
                   version is the checksum of the BEAM file.
                 State = term()
                   Internal state of the channel.
                 Extra = term()
                   Passed "as-is" from the {advanced,Extra} part of the update instruction.

              Converts process state when code is changed.

              This  function is called by a client-side channel when it is to update its internal
              state during a  release  upgrade  or  downgrade,  that  is,  when  the  instruction
              {update,Module,Change,...},  where  Change={advanced,Extra},  is given in the appup
              file. For more information, refer to Section 9.11.6 Release  Handling  Instructions
              in the System Documentation.

          Note:
              Soft  upgrade  according to the OTP release concept is not straight forward for the
              server side, as subsystem channel processes are spawned by the ssh application  and
              hence  added  to  its  supervisor tree. The subsystem channels can be upgraded when
              upgrading the user application, if the callback functions can handle  two  versions
              of the state, but this function cannot be used in the normal way.

       Module:init(Args) -> {ok, State} | {ok, State, timeout()} | {stop, Reason}

              Types:

                 Args = term()
                   Last argument to ssh_channel:start_link/4.
                 State = term()
                 Reason = term()

              Makes  necessary  initializations  and  returns  the  initial  channel state if the
              initializations succeed.

              For more detailed information on time-outs, see Section CALLBACK TIME-OUTS.

       Module:handle_call(Msg, From, State) -> Result

              Types:

                 Msg = term()
                 From = opaque()
                   Is to be used as argument to ssh_channel:reply/2
                 State = term()
                 Result = {reply, Reply,  NewState}  |  {reply,  Reply,  NewState,  timeout()}  |
                 {noreply,  NewState}  |  {noreply , NewState, timeout()} | {stop, Reason, Reply,
                 NewState} | {stop, Reason, NewState}
                 Reply = term()
                   Will be the return value of ssh_channel:call/[2,3]
                 NewState = term()
                 Reason = term()

              Handles messages sent by calling ssh_channel:call/[2,3]

              For more detailed information on time-outs,, see Section CALLBACK TIME-OUTS.

       Module:handle_cast(Msg, State) -> Result

              Types:

                 Msg = term()
                 State = term()
                 Result = {noreply, NewState} | {noreply, NewState, timeout()} |  {stop,  Reason,
                 NewState}
                 NewState = term()
                 Reason = term()

              Handles messages sent by calling ssh_channel:cast/2.

              For more detailed information on time-outs, see Section CALLBACK TIME-OUTS.

       Module:handle_msg(Msg, State) -> {ok, State} | {stop, ChannelId, State}

              Types:

                 Msg = timeout | term()
                 ChannelId = ssh_channel_id()
                 State = term()

              Handles other messages than SSH Connection Protocol, call, or cast messages sent to
              the channel.

              Possible Erlang 'EXIT' messages is to be handled by this function and all  channels
              are to handle the following message.

                {ssh_channel_up, ssh_channel_id(), ssh_connection_ref()}:
                  This is the first message that the channel receives. It is sent just before the
                  ssh_channel:init/1 function returns successfully. This is especially useful  if
                  the  server  wants  to  send  a message to the client without first receiving a
                  message from it. If the message is not useful  for  your  particular  scenario,
                  ignore it by immediately returning {ok, State}.

       Module:handle_ssh_msg(Msg, State) -> {ok, State} | {stop, ChannelId, State}

              Types:

                 Msg = ssh_connection:event()
                 ChannelId = ssh_channel_id()
                 State = term()

              Handles  SSH Connection Protocol messages that may need service-specific attention.
              For details, see  ssh_connection:event().

              The following message is taken care of by the ssh_channel behavior.

                {closed, ssh_channel_id()}:
                  The channel behavior sends a close message to the other side, if such a message
                  has not already been sent. Then it terminates the channel with reason normal.

       Module:terminate(Reason, State) -> _

              Types:

                 Reason = term()
                 State = term()

              This  function is called by a channel process when it is about to terminate. Before
              this function is called,  ssh_connection:close/2  is called, if  it  has  not  been
              called  earlier. This function does any necessary cleaning up. When it returns, the
              channel process terminates with reason Reason. The return value is ignored.