openenvutils/telnetserver/src/termstat.c
changeset 0 2e3d3ce01487
child 4 0fdb7f6b0309
equal deleted inserted replaced
-1:000000000000 0:2e3d3ce01487
       
     1 // termstat.c
       
     2 //
       
     3 // © Portions Copyright (c) Symbian Software Ltd 2007. All rights reserved.
       
     4 //
       
     5 /*
       
     6  * Copyright (c) 1989, 1993
       
     7  *	The Regents of the University of California.  All rights reserved.
       
     8  *
       
     9  * Redistribution and use in source and binary forms, with or without
       
    10  * modification, are permitted provided that the following conditions
       
    11  * are met:
       
    12  * 1. Redistributions of source code must retain the above copyright
       
    13  *    notice, this list of conditions and the following disclaimer.
       
    14  * 2. Redistributions in binary form must reproduce the above copyright
       
    15  *    notice, this list of conditions and the following disclaimer in the
       
    16  *    documentation and/or other materials provided with the distribution.
       
    17  * 3. 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 
       
    34 #include "telnetd.h"
       
    35 
       
    36 #ifndef __SYMBIAN32__
       
    37 __RCSID("$Heimdal: termstat.c,v 1.12 2001/08/29 00:45:23 assar Exp $"
       
    38         "$NetBSD: termstat.c,v 1.2 2003/08/07 09:15:30 agc Exp $");
       
    39 #endif
       
    40 
       
    41 /*
       
    42  * local variables
       
    43  */
       
    44 int def_tspeed = -1, def_rspeed = -1;
       
    45 #ifdef	TIOCSWINSZ
       
    46 int def_row = 0, def_col = 0;
       
    47 #endif
       
    48 
       
    49 /*
       
    50  * flowstat
       
    51  *
       
    52  * Check for changes to flow control
       
    53  */
       
    54 void
       
    55 flowstat(void)
       
    56 {
       
    57     if (his_state_is_will(TELOPT_LFLOW)) {
       
    58 	if (tty_flowmode() != flowmode) {
       
    59 	    flowmode = tty_flowmode();
       
    60 	    output_data("%c%c%c%c%c%c",
       
    61 			IAC, SB, TELOPT_LFLOW,
       
    62 			flowmode ? LFLOW_ON : LFLOW_OFF,
       
    63 			IAC, SE);
       
    64 	}
       
    65 	if (tty_restartany() != restartany) {
       
    66 	    restartany = tty_restartany();
       
    67 	    output_data("%c%c%c%c%c%c",
       
    68 			IAC, SB, TELOPT_LFLOW,
       
    69 			restartany ? LFLOW_RESTART_ANY
       
    70 			: LFLOW_RESTART_XON,
       
    71 			IAC, SE);
       
    72 	}
       
    73     }
       
    74 }
       
    75 
       
    76 /*
       
    77  * clientstat
       
    78  *
       
    79  * Process linemode related requests from the client.
       
    80  * Client can request a change to only one of linemode, editmode or slc's
       
    81  * at a time, and if using kludge linemode, then only linemode may be
       
    82  * affected.
       
    83  */
       
    84 void
       
    85 clientstat(int code, int parm1, int parm2)
       
    86 {
       
    87     /*
       
    88      * Get a copy of terminal characteristics.
       
    89      */
       
    90     init_termbuf();
       
    91 
       
    92     /*
       
    93      * Process request from client. code tells what it is.
       
    94      */
       
    95     switch (code) {
       
    96     case TELOPT_NAWS:
       
    97 #ifdef	TIOCSWINSZ
       
    98 	{
       
    99 	    struct winsize ws;
       
   100 
       
   101 	    def_col = parm1;
       
   102 	    def_row = parm2;
       
   103 
       
   104 	    /*
       
   105 	     * Change window size as requested by client.
       
   106 	     */
       
   107 
       
   108 	    ws.ws_col = parm1;
       
   109 	    ws.ws_row = parm2;
       
   110 	    ioctl(ourpty, TIOCSWINSZ, (char *)&ws);
       
   111 	}
       
   112 #endif	/* TIOCSWINSZ */
       
   113 
       
   114     break;
       
   115 
       
   116     case TELOPT_TSPEED:
       
   117 	{
       
   118 	    def_tspeed = parm1;
       
   119 	    def_rspeed = parm2;
       
   120 	    /*
       
   121 	     * Change terminal speed as requested by client.
       
   122 	     * We set the receive speed first, so that if we can't
       
   123 	     * store seperate receive and transmit speeds, the transmit
       
   124 	     * speed will take precedence.
       
   125 	     */
       
   126 	    tty_rspeed(parm2);
       
   127 	    tty_tspeed(parm1);
       
   128 	    set_termbuf();
       
   129 
       
   130 	    break;
       
   131 
       
   132 	}  /* end of case TELOPT_TSPEED */
       
   133 
       
   134     default:
       
   135 	/* What? */
       
   136 	break;
       
   137     }  /* end of switch */
       
   138 
       
   139     netflush();
       
   140 
       
   141 }