diff options
author | Kenny Root <kenny@the-b.org> | 2009-01-23 14:19:46 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-01-23 14:19:46 +0000 |
commit | b1f8f94ff046f59958bb5af0534aab81d1d8d9d4 (patch) | |
tree | 39e45f6d7c074a110ab9704f38c1a566c5e8c343 /lib/src/main | |
parent | 569080860fc43408b0c009508b7ad452120f1a6c (diff) | |
download | sshlib-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.
Diffstat (limited to 'lib/src/main')
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(); } |