ch.ethz.ssh2.channel
Class ChannelManager

java.lang.Object
  extended by ch.ethz.ssh2.channel.ChannelManager
All Implemented Interfaces:
MessageHandler

public class ChannelManager
extends java.lang.Object
implements MessageHandler

ChannelManager. Please read the comments in Channel.java.

Besides the crypto part, this is the core of the library.

Version:
$Id: ChannelManager.java,v 1.15 2006/08/11 12:24:01 cplattne Exp $
Author:
Christian Plattner, plattner@inf.ethz.ch

Field Summary
private  java.util.Vector channels
           
private  int globalFailedCounter
           
private  int globalSuccessCounter
           
private  java.util.Vector listenerThreads
           
private  boolean listenerThreadsAllowed
           
private static Logger log
           
private  int nextLocalChannel
           
private  java.util.HashMap remoteForwardings
           
private  boolean shutdown
           
private  TransportManager tm
           
private  java.util.HashMap x11_magic_cookies
           
 
Constructor Summary
ChannelManager(TransportManager tm)
           
 
Method Summary
private  int addChannel(Channel c)
           
 X11ServerData checkX11Cookie(java.lang.String hexFakeCookie)
           
 void closeAllChannels()
           
 void closeChannel(Channel c, java.lang.String reason, boolean force)
           
 int getAvailable(Channel c, boolean extended)
           
private  Channel getChannel(int id)
           
 int getChannelData(Channel c, boolean extended, byte[] target, int off, int len)
           
 void handleMessage(byte[] msg, int msglen)
           
 void msgChannelClose(byte[] msg, int msglen)
           
 void msgChannelData(byte[] msg, int msglen)
           
 void msgChannelEOF(byte[] msg, int msglen)
           
 void msgChannelExtendedData(byte[] msg, int msglen)
           
 void msgChannelFailure(byte[] msg, int msglen)
           
 void msgChannelOpen(byte[] msg, int msglen)
           
 void msgChannelOpenConfirmation(byte[] msg, int msglen)
           
 void msgChannelOpenFailure(byte[] msg, int msglen)
           
 void msgChannelRequest(byte[] msg, int msglen)
           
 void msgChannelSuccess(byte[] msg, int msglen)
           
 void msgChannelWindowAdjust(byte[] msg, int msglen)
           
 void msgGlobalFailure()
           
 void msgGlobalRequest(byte[] msg, int msglen)
           
 void msgGlobalSuccess()
           
 Channel openDirectTCPIPChannel(java.lang.String host_to_connect, int port_to_connect, java.lang.String originator_IP_address, int originator_port)
           
 Channel openSessionChannel()
           
 void registerThread(IChannelWorkerThread thr)
           
 void registerX11Cookie(java.lang.String hexFakeCookie, X11ServerData data)
           
private  void removeChannel(int id)
           
 void requestCancelGlobalForward(int bindPort)
           
 void requestExecCommand(Channel c, java.lang.String cmd)
           
 int requestGlobalForward(java.lang.String bindAddress, int bindPort, java.lang.String targetAddress, int targetPort)
           
 void requestPTY(Channel c, java.lang.String term, int term_width_characters, int term_height_characters, int term_width_pixels, int term_height_pixels, byte[] terminal_modes)
           
 void requestShell(Channel c)
           
 void requestSubSystem(Channel c, java.lang.String subSystemName)
           
 void requestX11(Channel c, boolean singleConnection, java.lang.String x11AuthenticationProtocol, java.lang.String x11AuthenticationCookie, int x11ScreenNumber)
           
 void sendData(Channel c, byte[] buffer, int pos, int len)
           
 void sendEOF(Channel c)
           
 void sendOpenConfirmation(Channel c)
           
 void unRegisterX11Cookie(java.lang.String hexFakeCookie, boolean killChannels)
           
private  void waitForChannelSuccessOrFailure(Channel c)
           
 int waitForCondition(Channel c, long timeout, int condition_mask)
          Wait until for a condition.
private  void waitForGlobalSuccessOrFailure()
           
private  void waitUntilChannelOpen(Channel c)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

private static final Logger log

x11_magic_cookies

private java.util.HashMap x11_magic_cookies

tm

private TransportManager tm

channels

private java.util.Vector channels

nextLocalChannel

private int nextLocalChannel

shutdown

private boolean shutdown

globalSuccessCounter

private int globalSuccessCounter

globalFailedCounter

private int globalFailedCounter

remoteForwardings

private java.util.HashMap remoteForwardings

listenerThreads

private java.util.Vector listenerThreads

listenerThreadsAllowed

private boolean listenerThreadsAllowed
Constructor Detail

ChannelManager

public ChannelManager(TransportManager tm)
Method Detail

getChannel

private Channel getChannel(int id)

removeChannel

private void removeChannel(int id)

addChannel

private int addChannel(Channel c)

waitUntilChannelOpen

private void waitUntilChannelOpen(Channel c)
                           throws java.io.IOException
Throws:
java.io.IOException

waitForGlobalSuccessOrFailure

private final void waitForGlobalSuccessOrFailure()
                                          throws java.io.IOException
Throws:
java.io.IOException

waitForChannelSuccessOrFailure

private final void waitForChannelSuccessOrFailure(Channel c)
                                           throws java.io.IOException
Throws:
java.io.IOException

registerX11Cookie

public void registerX11Cookie(java.lang.String hexFakeCookie,
                              X11ServerData data)

unRegisterX11Cookie

public void unRegisterX11Cookie(java.lang.String hexFakeCookie,
                                boolean killChannels)

checkX11Cookie

public X11ServerData checkX11Cookie(java.lang.String hexFakeCookie)

closeAllChannels

public void closeAllChannels()

closeChannel

public void closeChannel(Channel c,
                         java.lang.String reason,
                         boolean force)
                  throws java.io.IOException
Throws:
java.io.IOException

sendEOF

public void sendEOF(Channel c)
             throws java.io.IOException
Throws:
java.io.IOException

sendOpenConfirmation

public void sendOpenConfirmation(Channel c)
                          throws java.io.IOException
Throws:
java.io.IOException

sendData

public void sendData(Channel c,
                     byte[] buffer,
                     int pos,
                     int len)
              throws java.io.IOException
Throws:
java.io.IOException

requestGlobalForward

public int requestGlobalForward(java.lang.String bindAddress,
                                int bindPort,
                                java.lang.String targetAddress,
                                int targetPort)
                         throws java.io.IOException
Throws:
java.io.IOException

requestCancelGlobalForward

public void requestCancelGlobalForward(int bindPort)
                                throws java.io.IOException
Throws:
java.io.IOException

registerThread

public void registerThread(IChannelWorkerThread thr)
                    throws java.io.IOException
Throws:
java.io.IOException

openDirectTCPIPChannel

public Channel openDirectTCPIPChannel(java.lang.String host_to_connect,
                                      int port_to_connect,
                                      java.lang.String originator_IP_address,
                                      int originator_port)
                               throws java.io.IOException
Throws:
java.io.IOException

openSessionChannel

public Channel openSessionChannel()
                           throws java.io.IOException
Throws:
java.io.IOException

requestPTY

public void requestPTY(Channel c,
                       java.lang.String term,
                       int term_width_characters,
                       int term_height_characters,
                       int term_width_pixels,
                       int term_height_pixels,
                       byte[] terminal_modes)
                throws java.io.IOException
Throws:
java.io.IOException

requestX11

public void requestX11(Channel c,
                       boolean singleConnection,
                       java.lang.String x11AuthenticationProtocol,
                       java.lang.String x11AuthenticationCookie,
                       int x11ScreenNumber)
                throws java.io.IOException
Throws:
java.io.IOException

requestSubSystem

public void requestSubSystem(Channel c,
                             java.lang.String subSystemName)
                      throws java.io.IOException
Throws:
java.io.IOException

requestExecCommand

public void requestExecCommand(Channel c,
                               java.lang.String cmd)
                        throws java.io.IOException
Throws:
java.io.IOException

requestShell

public void requestShell(Channel c)
                  throws java.io.IOException
Throws:
java.io.IOException

msgChannelExtendedData

public void msgChannelExtendedData(byte[] msg,
                                   int msglen)
                            throws java.io.IOException
Throws:
java.io.IOException

waitForCondition

public int waitForCondition(Channel c,
                            long timeout,
                            int condition_mask)
Wait until for a condition.

Parameters:
c - Channel
timeout - in ms, 0 means no timeout.
condition_mask - minimum event mask
Returns:
all current events

getAvailable

public int getAvailable(Channel c,
                        boolean extended)
                 throws java.io.IOException
Throws:
java.io.IOException

getChannelData

public int getChannelData(Channel c,
                          boolean extended,
                          byte[] target,
                          int off,
                          int len)
                   throws java.io.IOException
Throws:
java.io.IOException

msgChannelData

public void msgChannelData(byte[] msg,
                           int msglen)
                    throws java.io.IOException
Throws:
java.io.IOException

msgChannelWindowAdjust

public void msgChannelWindowAdjust(byte[] msg,
                                   int msglen)
                            throws java.io.IOException
Throws:
java.io.IOException

msgChannelOpen

public void msgChannelOpen(byte[] msg,
                           int msglen)
                    throws java.io.IOException
Throws:
java.io.IOException

msgChannelRequest

public void msgChannelRequest(byte[] msg,
                              int msglen)
                       throws java.io.IOException
Throws:
java.io.IOException

msgChannelEOF

public void msgChannelEOF(byte[] msg,
                          int msglen)
                   throws java.io.IOException
Throws:
java.io.IOException

msgChannelClose

public void msgChannelClose(byte[] msg,
                            int msglen)
                     throws java.io.IOException
Throws:
java.io.IOException

msgChannelSuccess

public void msgChannelSuccess(byte[] msg,
                              int msglen)
                       throws java.io.IOException
Throws:
java.io.IOException

msgChannelFailure

public void msgChannelFailure(byte[] msg,
                              int msglen)
                       throws java.io.IOException
Throws:
java.io.IOException

msgChannelOpenConfirmation

public void msgChannelOpenConfirmation(byte[] msg,
                                       int msglen)
                                throws java.io.IOException
Throws:
java.io.IOException

msgChannelOpenFailure

public void msgChannelOpenFailure(byte[] msg,
                                  int msglen)
                           throws java.io.IOException
Throws:
java.io.IOException

msgGlobalRequest

public void msgGlobalRequest(byte[] msg,
                             int msglen)
                      throws java.io.IOException
Throws:
java.io.IOException

msgGlobalSuccess

public void msgGlobalSuccess()
                      throws java.io.IOException
Throws:
java.io.IOException

msgGlobalFailure

public void msgGlobalFailure()
                      throws java.io.IOException
Throws:
java.io.IOException

handleMessage

public void handleMessage(byte[] msg,
                          int msglen)
                   throws java.io.IOException
Specified by:
handleMessage in interface MessageHandler
Throws:
java.io.IOException