/crypto/heimdal/appl/telnet/telnetd/termstat.c

https://bitbucket.org/freebsd/freebsd-head/ · C · 138 lines · 58 code · 16 blank · 64 comment · 6 complexity · 5c5348c8d284d9a38d3c225cd66d8b72 MD5 · raw file

  1. /*
  2. * Copyright (c) 1989, 1993
  3. * The Regents of the University of California. All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright
  11. * notice, this list of conditions and the following disclaimer in the
  12. * documentation and/or other materials provided with the distribution.
  13. * 3. All advertising materials mentioning features or use of this software
  14. * must display the following acknowledgement:
  15. * This product includes software developed by the University of
  16. * California, Berkeley and its contributors.
  17. * 4. Neither the name of the University nor the names of its contributors
  18. * may be used to endorse or promote products derived from this software
  19. * without specific prior written permission.
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. * SUCH DAMAGE.
  32. */
  33. #include "telnetd.h"
  34. RCSID("$Id$");
  35. /*
  36. * local variables
  37. */
  38. int def_tspeed = -1, def_rspeed = -1;
  39. #ifdef TIOCSWINSZ
  40. int def_row = 0, def_col = 0;
  41. #endif
  42. /*
  43. * flowstat
  44. *
  45. * Check for changes to flow control
  46. */
  47. void
  48. flowstat(void)
  49. {
  50. if (his_state_is_will(TELOPT_LFLOW)) {
  51. if (tty_flowmode() != flowmode) {
  52. flowmode = tty_flowmode();
  53. output_data("%c%c%c%c%c%c",
  54. IAC, SB, TELOPT_LFLOW,
  55. flowmode ? LFLOW_ON : LFLOW_OFF,
  56. IAC, SE);
  57. }
  58. if (tty_restartany() != restartany) {
  59. restartany = tty_restartany();
  60. output_data("%c%c%c%c%c%c",
  61. IAC, SB, TELOPT_LFLOW,
  62. restartany ? LFLOW_RESTART_ANY
  63. : LFLOW_RESTART_XON,
  64. IAC, SE);
  65. }
  66. }
  67. }
  68. /*
  69. * clientstat
  70. *
  71. * Process linemode related requests from the client.
  72. * Client can request a change to only one of linemode, editmode or slc's
  73. * at a time, and if using kludge linemode, then only linemode may be
  74. * affected.
  75. */
  76. void
  77. clientstat(int code, int parm1, int parm2)
  78. {
  79. /*
  80. * Get a copy of terminal characteristics.
  81. */
  82. init_termbuf();
  83. /*
  84. * Process request from client. code tells what it is.
  85. */
  86. switch (code) {
  87. case TELOPT_NAWS:
  88. #ifdef TIOCSWINSZ
  89. {
  90. struct winsize ws;
  91. def_col = parm1;
  92. def_row = parm2;
  93. /*
  94. * Change window size as requested by client.
  95. */
  96. ws.ws_col = parm1;
  97. ws.ws_row = parm2;
  98. ioctl(ourpty, TIOCSWINSZ, (char *)&ws);
  99. }
  100. #endif /* TIOCSWINSZ */
  101. break;
  102. case TELOPT_TSPEED:
  103. {
  104. def_tspeed = parm1;
  105. def_rspeed = parm2;
  106. /*
  107. * Change terminal speed as requested by client.
  108. * We set the receive speed first, so that if we can't
  109. * store seperate receive and transmit speeds, the transmit
  110. * speed will take precedence.
  111. */
  112. tty_rspeed(parm2);
  113. tty_tspeed(parm1);
  114. set_termbuf();
  115. break;
  116. } /* end of case TELOPT_TSPEED */
  117. default:
  118. /* What? */
  119. break;
  120. } /* end of switch */
  121. netflush();
  122. }