1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

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.
This commit is contained in:
Orefkov Aleksander 2021-10-19 13:39:33 +03:00 committed by Andy Green
parent e9c92ec161
commit 63db023f58
2 changed files with 39 additions and 0 deletions

View file

@ -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,

View file

@ -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: