aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2009-01-23 14:19:46 +0000
committerKenny Root <kenny@the-b.org>2009-01-23 14:19:46 +0000
commitb1f8f94ff046f59958bb5af0534aab81d1d8d9d4 (patch)
tree39e45f6d7c074a110ab9704f38c1a566c5e8c343
parent569080860fc43408b0c009508b7ad452120f1a6c (diff)
downloadsshlib-b1f8f94ff046f59958bb5af0534aab81d1d8d9d4.tar.gz
sshlib-b1f8f94ff046f59958bb5af0534aab81d1d8d9d4.tar.bz2
sshlib-b1f8f94ff046f59958bb5af0534aab81d1d8d9d4.zip
Comply with RFC 4254 on window-change packet
* Always send false for "want reply" * We don't need to wait since a reply should not be sent. * Allow the sending of (informational) pixel dimensions.
-rw-r--r--lib/src/main/java/com/trilead/ssh2/Session.java23
-rw-r--r--lib/src/main/java/com/trilead/ssh2/channel/ChannelManager.java14
-rw-r--r--lib/src/main/java/com/trilead/ssh2/packets/PacketSessionPtyResize.java14
3 files changed, 33 insertions, 18 deletions
diff --git a/lib/src/main/java/com/trilead/ssh2/Session.java b/lib/src/main/java/com/trilead/ssh2/Session.java
index c41d837..30efa6f 100644
--- a/lib/src/main/java/com/trilead/ssh2/Session.java
+++ b/lib/src/main/java/com/trilead/ssh2/Session.java
@@ -130,7 +130,26 @@ public class Session
terminal_modes);
}
- public void resizePTY(int width, int height) throws IOException {
+ /**
+ * Inform other side of connection that our PTY has resized.
+ * <p>
+ * Zero dimension parameters are ignored. The character/row dimensions
+ * override the pixel dimensions (when nonzero). Pixel dimensions refer to
+ * the drawable area of the window. The dimension parameters are only
+ * informational.
+ *
+ * @param term_width_characters
+ * terminal width, characters (e.g., 80)
+ * @param term_height_characters
+ * terminal height, rows (e.g., 24)
+ * @param term_width_pixels
+ * terminal width, pixels (e.g., 640)
+ * @param term_height_pixels
+ * terminal height, pixels (e.g., 480)
+ * @throws IOException
+ */
+ public void resizePTY(int term_width_characters, int term_height_characters, int term_width_pixels,
+ int term_height_pixels) throws IOException {
synchronized (this)
{
/* The following is just a nicer error, we would catch it anyway later in the channel code */
@@ -138,7 +157,7 @@ public class Session
throw new IOException("This session is closed.");
}
- cm.resizePTY(cn, width, height);
+ cm.resizePTY(cn, term_width_characters, term_height_characters, term_width_pixels, term_height_pixels);
}
/**
diff --git a/lib/src/main/java/com/trilead/ssh2/channel/ChannelManager.java b/lib/src/main/java/com/trilead/ssh2/channel/ChannelManager.java
index e582a52..fb4beae 100644
--- a/lib/src/main/java/com/trilead/ssh2/channel/ChannelManager.java
+++ b/lib/src/main/java/com/trilead/ssh2/channel/ChannelManager.java
@@ -678,7 +678,8 @@ public class ChannelManager implements MessageHandler
}
- public void resizePTY(Channel c, int width, int height) throws IOException {
+ public void resizePTY(Channel c, int term_width_characters, int term_height_characters,
+ int term_width_pixels, int term_height_pixels) throws IOException {
PacketSessionPtyResize spr;
synchronized (c) {
@@ -686,7 +687,8 @@ public class ChannelManager implements MessageHandler
throw new IOException("Cannot request PTY on this channel ("
+ c.getReasonClosed() + ")");
- spr = new PacketSessionPtyResize(c.remoteID, true, width, height);
+ spr = new PacketSessionPtyResize(c.remoteID, term_width_characters, term_height_characters,
+ term_width_pixels, term_height_pixels);
c.successCounter = c.failedCounter = 0;
}
@@ -696,14 +698,6 @@ public class ChannelManager implements MessageHandler
+ c.getReasonClosed() + ")");
tm.sendMessage(spr.getPayload());
}
-
- try {
- //waitForChannelSuccessOrFailure(c);
- this.waitForChannelRequestResult(c);
- } catch (IOException e) {
- throw (IOException) new IOException("PTY request failed")
- .initCause(e);
- }
}
diff --git a/lib/src/main/java/com/trilead/ssh2/packets/PacketSessionPtyResize.java b/lib/src/main/java/com/trilead/ssh2/packets/PacketSessionPtyResize.java
index 27b5f00..1e3b558 100644
--- a/lib/src/main/java/com/trilead/ssh2/packets/PacketSessionPtyResize.java
+++ b/lib/src/main/java/com/trilead/ssh2/packets/PacketSessionPtyResize.java
@@ -4,15 +4,17 @@ public class PacketSessionPtyResize {
byte[] payload;
public int recipientChannelID;
- public boolean wantReply;
public int width;
public int height;
+ public int pixelWidth;
+ public int pixelHeight;
- public PacketSessionPtyResize(int recipientChannelID, boolean wantReply, int width, int height) {
+ public PacketSessionPtyResize(int recipientChannelID, int width, int height, int pixelWidth, int pixelHeight) {
this.recipientChannelID = recipientChannelID;
- this.wantReply = wantReply;
this.width = width;
this.height = height;
+ this.pixelWidth = pixelWidth;
+ this.pixelHeight = pixelHeight;
}
public byte[] getPayload()
@@ -23,11 +25,11 @@ public class PacketSessionPtyResize {
tw.writeByte(Packets.SSH_MSG_CHANNEL_REQUEST);
tw.writeUINT32(recipientChannelID);
tw.writeString("window-change");
- tw.writeBoolean(wantReply);
+ tw.writeBoolean(false);
tw.writeUINT32(width);
tw.writeUINT32(height);
- tw.writeUINT32(0);
- tw.writeUINT32(0);
+ tw.writeUINT32(pixelWidth);
+ tw.writeUINT32(pixelHeight);
payload = tw.getBytes();
}