Ответ на запрос DO/DONT

Опубликовано в Технологии > Серверные технологии Продолжение

Для передачи клиентом серверу информации о типе терминала должны быть выполнены два действия. Во-первых, сервер запрашивает клиента, применяется ли в нем опция termtype (тип терминала). Во-вторых, если клиент выражает свое согласие на применение опции termtype, сервер использует опцию уточнения для передачи запроса на получение строки с обозначением типа терминала пользователя. Мы предлагаем надежный Porta Potti 145 Qube купить по выгодным ценам в нашей компании.

В операционной системе Linux клиент находит информацию о типе терминала пользователя, проверяя переменную TERM в среде процесса. Для этого клиент вызывает библиотечную функцию getenv, которая находит указанную переменную и возвращает указатель на ее строковое значение.

При поступлении запроса на применение опции termtype клиент вызывает процедуру will_termtype. Этот код находится в файле will_termtype.c.

int
will termtype(FILE *sfp, FILE *tfp, int c) {
if (termtype) {
if (option_cmd TCDO) return 0; } else if (option_cmd =s TCDONT)
return 0; termtype = !termtype; if (termtype)
if (Item && ((term getenv(HTERM")))
termtype Itermtype;    /* Запрос не может быть выполнен */ (void) putc(TCIAC, sfp); if (termtype)
(void) putc(TCWILL, sfp); else
(void) putc(TCWONT, sfp); (void) putc((char)c, sfp);
if (termtype) {   /* Установить режим передачи двоичных данных, передать */ /* команды WILL и DO */ option cmd = TCWILL;
(void)~do_txbinary(sfp, tfp, TOTXBINARY); option cmd = TCDO;
(void)"will txbinary(sfp, tfp, TOTXBINARY);
}
return 0;
} 

Процедура will_termtype действует так же, как и другие обработчики опций. В ней используется глобальная переменная termtype для регистрации информации о том, что сервер ранее уже запрашивал опцию termtype, и выполняется проверка того, приведет ли текущий запрос к изменению состояния. В случае положительного ответа вызывается функция getenv для получения значения, связанного с переменной среды TERM. Если такая переменная не существует, клиент отвечает, что им не будет выполнен данный запрос.

Сервер запрашивает информацию о типе терминала для того, чтобы выполняемые на нем приложения могли подготовить вывод, приемлемый для пользовательского терминала. Например, в текстовом редакторе информация о типе терминала используется при подготовке последовательностей управляющих символов, которые представляют собой команды очистки экрана, перемещения курсора или выделения текста. Поэтому клиент ожидает, что после получения информации о типе терминала удаленное приложение будет передавать управляющие последовательности, подходящие для этого терминала. Поскольку такие последовательности нельзя передавать в кодировке NVT, процедура will_termtype передает сообщение WILL, которое извещает о готовности клиента использовать двоичную передачу, и сообщение DO с запросом к серверу на применение двоичной передачи. Поскольку функции do_txbinary и will_txbinary могут быть вызваны из кода обработки опций конечного автомата, в них для управления обработкой используется глобальная переменная option__cmd. При непосредственном вызове этих функций другие процедуры должны инициализировать переменную option_cmd явно, как если бы клиент перед вызовом этих функций получил соответствующее сообщение WILL или DO от сервера.