commit f6e87749a8eb25874eab6800f8b6008c6031cf67 from: marcus date: Tue Oct 25 09:36:39 2005 UTC window resize support for SSH v1 commit - e31860f264d1dd3b9d2c27d8c39bc04bb4c97ed9 commit + f6e87749a8eb25874eab6800f8b6008c6031cf67 blob - fd30ca34ad6ea26f26486163973f06448fc0023d blob + 192936f35de51b007e89e7060d4e6467ed5bf95a --- de/mud/jta/plugin/SSH.java +++ de/mud/jta/plugin/SSH.java @@ -32,6 +32,7 @@ import de.mud.jta.PluginConfig; import de.mud.jta.VisualPlugin; import de.mud.jta.event.ConfigurationListener; +import de.mud.jta.event.SetWindowSizeListener; import de.mud.jta.event.OnlineStatusListener; import de.mud.jta.event.TerminalTypeRequest; import de.mud.jta.event.WindowSizeRequest; @@ -103,6 +104,17 @@ public class SSH extends Plugin implements FilterPlugi } }); + bus.registerPluginListener(new SetWindowSizeListener() { + public void setWindowSize(int columns, int rows) { + try { + handler.setWindowSize(columns,rows); + } catch (java.io.IOException e) { + System.err.println("IO Exception in set window size"); + } + } + }); + + // reset the protocol handler just in case :-) bus.registerPluginListener(new OnlineStatusListener() { public void online() { blob - 61ac10e088543674bc87f70224b6dccfdd8d0b7f blob + d6cf7af013104bbf00bae5f326958e7765eedfb4 --- de/mud/ssh/SshIO.java +++ de/mud/ssh/SshIO.java @@ -104,6 +104,7 @@ public abstract class SshIO { private final byte SSH_CMSG_USER = 4; private final byte SSH_CMSG_AUTH_PASSWORD = 9; private final byte SSH_CMSG_REQUEST_PTY = 10; + private final byte SSH_CMSG_WINDOW_SIZE = 11; private final byte SSH_CMSG_EXEC_SHELL = 12; private final byte SSH_SMSG_SUCCESS = 14; private final byte SSH_SMSG_FAILURE = 15; @@ -197,6 +198,14 @@ public abstract class SshIO { crypto = null; } + public void setWindowSize(int columns,int rows) + throws IOException { + if (phase == PHASE_INIT) { + System.err.println("sshio:setWindowSize(), sizing in init phase not supported.\n"); + } + System.err.println("SSHIO:setWindowSize("+columns+","+rows+")"); + Send_SSH_CMSG_WINDOW_SIZE(columns,rows); + } synchronized public void sendData(String str) throws IOException { if (debug > 1) System.out.println("SshIO.send(" + str + ")"); @@ -603,6 +612,7 @@ public abstract class SshIO { break; case SSH_SMSG_FAILURE: + if (debug > 1) System.err.println("SSH_SMSG_FAILURE"); if (lastPacketSentType == SSH_CMSG_AUTH_PASSWORD) {// password incorrect ??? System.out.println("failed to log in"); Send_SSH_MSG_DISCONNECT("Failed to log in."); @@ -861,6 +871,24 @@ public abstract class SshIO { } /** + * Send_SSH_CMSG_WINDOW_SIZE + * string TERM environment variable value (e.g. vt100) + * 32-bit int terminal height, rows (e.g., 24) + * 32-bit int terminal width, columns (e.g., 80) + * 32-bit int terminal width, pixels (0 if no graphics) (e.g., 480) + */ + private String Send_SSH_CMSG_WINDOW_SIZE(int c, int r) throws IOException { + SshPacket1 p = new SshPacket1(SSH_CMSG_WINDOW_SIZE); + + p.putInt32(r); // Int32 rows + p.putInt32(c); // Int32 columns + p.putInt32(0); // Int32 x pixels + p.putInt32(0); // Int32 y pixels + sendPacket1(p); + return ""; + } + + /** * Send_SSH_CMSG_REQUEST_PTY * string TERM environment variable value (e.g. vt100) * 32-bit int terminal height, rows (e.g., 24)