diff options
author | Orefkov Aleksander <orefkov@gmail.com> | 2021-10-19 13:39:33 +0300 |
---|---|---|
committer | Andy Green <andy@warmcat.com> | 2021-10-19 17:24:07 +0100 |
commit | 63db023f585dc4f312ee9f9ef8da90b9910e69ca (patch) | |
tree | 5f650b185926bb34e6c92c415e8c5ce10246657b | |
parent | e9c92ec161b4069e4f47a88f6a37f8ce84b3ea87 (diff) | |
download | libwebsockets-63db023f585dc4f312ee9f9ef8da90b9910e69ca.tar.gz |
pugins: sshd: handle window-change request
Added processing of window-change request, according to RFC 4254 6.7
https://datatracker.ietf.org/doc/html/rfc4254#section-6.7
For processing called callback pty_req with empty terminal and modes.
-rw-r--r-- | plugins/ssh-base/include/lws-ssh.h | 5 | ||||
-rw-r--r-- | plugins/ssh-base/sshd.c | 34 |
2 files changed, 39 insertions, 0 deletions
diff --git a/plugins/ssh-base/include/lws-ssh.h b/plugins/ssh-base/include/lws-ssh.h index 029d2fc0..6b1dbf81 100644 --- a/plugins/ssh-base/include/lws-ssh.h +++ b/plugins/ssh-base/include/lws-ssh.h @@ -275,6 +275,11 @@ enum { SSHS_NVC_CHRQ_SUBSYSTEM, + SSHS_NVC_CHRQ_WNDCHANGE_TW, + SSHS_NVC_CHRQ_WNDCHANGE_TH, + SSHS_NVC_CHRQ_WNDCHANGE_TWP, + SSHS_NVC_CHRQ_WNDCHANGE_THP, + SSHS_NVC_CH_EOF, SSHS_NVC_CH_CLOSE, diff --git a/plugins/ssh-base/sshd.c b/plugins/ssh-base/sshd.c index cb02f022..fb5afffe 100644 --- a/plugins/ssh-base/sshd.c +++ b/plugins/ssh-base/sshd.c @@ -1483,6 +1483,12 @@ again: SSHS_NVC_CHRQ_SUBSYSTEM); break; } + if (!strcmp(pss->name, "window-change")) { + lwsl_info("%s: window-change\n", __func__); + state_get_u32(pss, + SSHS_NVC_CHRQ_WNDCHANGE_TW); + break; + } if (pss->rq_want_reply) goto chrq_fail; @@ -1638,6 +1644,34 @@ again: break; #endif + /* CHRQ window-change */ + + case SSHS_NVC_CHRQ_WNDCHANGE_TW: + pss->args.pty.width_ch = pss->len; + state_get_u32(pss, SSHS_NVC_CHRQ_WNDCHANGE_TH); + break; + case SSHS_NVC_CHRQ_WNDCHANGE_TH: + pss->args.pty.height_ch = pss->len; + state_get_u32(pss, SSHS_NVC_CHRQ_WNDCHANGE_TWP); + break; + case SSHS_NVC_CHRQ_WNDCHANGE_TWP: + pss->args.pty.width_px = pss->len; + state_get_u32(pss, SSHS_NVC_CHRQ_WNDCHANGE_THP); + break; + case SSHS_NVC_CHRQ_WNDCHANGE_THP: + pss->args.pty.height_px = pss->len; + pss->args.pty.term[0] = 0; + pss->args.pty.modes = NULL; + pss->args.pty.modes_len = 0; + n = 0; + if (pss->vhd->ops && pss->vhd->ops->pty_req) + n = pss->vhd->ops->pty_req(pss->ch_temp->priv, + &pss->args.pty); + if (n) + goto chrq_fail; + pss->parser_state = SSHS_MSG_EAT_PADDING; + break; + /* SSH_MSG_CHANNEL_DATA */ case SSHS_NVC_CD_RECIP: |