• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision6960 (tree)
Time2017-10-25 02:53:34
Authordoda

Log Message

TELNET TERMINAL SPEED OPTION (RFC 1079) に対応 #37599

FreeBSD の telnetd に -D report オプションを指定した状態で、TERMINAL
SPEED OPTION を受け取っているのを確認。ただし TTY のスピードは変わらず。

設定は SSH と共通で TerminalSpeed を使用する。
Transmit / Receive は送信側 (Tera Term) から見た方向なので、

・Transmit = SSH TTY Mode ISPEED
・Receive = SSH TTY Mode OSPEED

としている。

Change Summary

Incremental Difference

--- trunk/teraterm/teraterm/telnet.c (revision 6959)
+++ trunk/teraterm/teraterm/telnet.c (revision 6960)
@@ -102,6 +102,7 @@
102102 tr.HisOpt[SGA].Accept = TRUE;
103103 tr.HisOpt[ECHO].Accept = TRUE;
104104 tr.MyOpt[TERMTYPE].Accept = TRUE;
105+ tr.MyOpt[TERMSPEED].Accept = TRUE;
105106 tr.MyOpt[NAWS].Accept = TRUE;
106107 tr.HisOpt[NAWS].Accept = TRUE;
107108 tr.WinSize.x = ts.TerminalWidth;
@@ -261,23 +262,10 @@
261262 (tr.SubOptBuff[0] == TERMTYPE) &&
262263 (tr.SubOptBuff[1] == 1))
263264 {
264-#if 1
265265 _snprintf_s(TmpStr, sizeof(TmpStr), _TRUNCATE, "%c%c%c%c%s%c%c",
266266 IAC, SB, TERMTYPE, 0, ts.TermType, IAC, SE);
267267 // 4 バイト目に 0 が入るので、ずらして長さをとる
268268 i = strlen(TmpStr + 4) + 4;
269-#else
270- TmpStr[0] = IAC;
271- TmpStr[1] = SB;
272- TmpStr[2] = TERMTYPE;
273- TmpStr[3] = 0;
274- strcpy(&TmpStr[4],ts.TermType);
275- i = 4 + strlen(ts.TermType);
276- TmpStr[i] = IAC;
277- i++;
278- TmpStr[i] = SE;
279- i++;
280-#endif
281269 CommRawOut(&cv,TmpStr,i);
282270
283271 if (tr.LogFile!=0)
@@ -291,6 +279,24 @@
291279 tr.WinSize.y = tr.SubOptBuff[3]*256+ tr.SubOptBuff[4];
292280 tr.ChangeWinSize = TRUE;
293281 }
282+ else if ((tr.MyOpt[TERMSPEED].Status == Yes) &&
283+ (tr.SubOptCount >= 2) &&
284+ (tr.SubOptBuff[0] == TERMSPEED) &&
285+ (tr.SubOptBuff[1] == 1))
286+ {
287+ _snprintf_s(TmpStr, sizeof(TmpStr),
288+ _TRUNCATE,"%c%c%c%c%d,%d%c%c",
289+ IAC, SB, TERMSPEED, 0,
290+ ts.TerminalInputSpeed,
291+ ts.TerminalOutputSpeed,
292+ IAC,SE);
293+ // 4 バイト目に 0 が入るので、ずらして長さをとる
294+ i = strlen(TmpStr + 4) + 4;
295+ CommRawOut(&cv, TmpStr, i);
296+
297+ if (tr.LogFile)
298+ TelWriteLog(TmpStr, i);
299+ }
294300 tr.SubOptCount = 0;
295301 TelStatus = TelIdle;
296302 return ;
--- trunk/teraterm/teraterm/vtwin.cpp (revision 6959)
+++ trunk/teraterm/teraterm/vtwin.cpp (revision 6960)
@@ -3714,6 +3714,8 @@
37143714 TelEnableHisOpt(BINARY);
37153715 }
37163716
3717+ TelEnableMyOpt(TERMSPEED);
3718+
37173719 TelStartKeepAliveThread();
37183720 }
37193721 else if (!ts.DisableTCPEchoCR) {
Show on old repository browser