Commit Diff


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)