Ответ на сообщения WILL/WONT, соответствующие запросу опции эхо-повтора

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

На запрос опции ECHO сервер отвечает сообщением WILL или WONT, информируя клиентскую программу, будет ли он по-прежнему выполнять эхо-повтор символов или прекратит эхо-повтор. Согласно спецификации конечного автомата, при поступлении такого сообщения должна быть вызвана процедура do__echo. /* Файл do_echo - процедура do_echo */

В спецификации протокола TELNET указано, что сервер может передать сообщение WILL или WONT, чтобы объявить о своей готовности применять конкретную опцию; одно из этих сообщений может быть также отправлено в ответ на запрос клиента. Поэтому, если клиент передал запрос, содержащий команду DO или DONT, сообщение, переданное сервером, представляет собой ответ; в ином случае оно является извещением о готовности сервера применять конкретную опцию.

В клиентской программе для принятия решения о том, какие действия должны быть выполнены в ответ на получение сообщений WILL или WONT, используется информация о текущем состоянии конечного автомата. Глобальная переменная doecho содержит ненулевое значение, если клиент в настоящее время ожидает, что эхо-повтор символов будет осуществляться сервером. Если сервер прислал сообщение WILL и в клиентской программе уже разрешен дистанционный эхо-повтор, клиент не отвечает на это сообщение. Аналогичным образом, клиент не отвечает, если сервер прислал сообщение WONT и в клиенте запрещен дистанционный эхо-повтор. Однако если сервер прислал сообщение WILL, а клиент в настоящее время отключил дистанционный эхо-повтор, в клиентской программе вызывается процедура tcsetattr для отмены локального эхо-повтора символов. Если в клиенте при получении сообщения WONT отменен локальный эхо-повтор, то в клиентской программе предполагается, что сервер запретил дистанционный эхо-повтор. Поэтому в клиентской программе вызывается процедура tcsetattr для разрешения локального эхо-повтора. Клиентская программа передает ответ DO или DONT только при изменении в ней режима эхо-повтора.

Ответ на сообщения WILL/WONT, соответствующие не поддерживаемым опциям

При получении клиентской программой запроса WILL или WONT на применение опции, которая в ней не предусмотрена, вызывается процедура dojiotsup для формирования ответа DONT. /* Файл dojiotsup - процедура dojiotsup */

int
do notsup(FILE *sfp, FILE *tfp, int c) { "
(void) putc(TCIAC, sfp); (void) putc(TCDONT, sfp); (void) putc((char)c, sfp); return 0;
}

Ответ на сообщения WILL/WONT, соответствующие опции подавления символов GA

В клиентской программе процедура dojioga используется для формирования ответа при получении от сервера запросов WILL или WONT на подавление символов GA (Go-Ahead — Передача управления), предусмотренных протоколом TELNET. /* Файл dojioga - процедура dojioga */

Как и в случае с другими опциями, клиент не отвечает, если его текущая установка для этой опции соответствует запросу сервера. Если же сервер требует изменить установку этой опции, клиент меняет текущую установку на противоположную, применяя операцию отрицания к глобальной целочисленной переменной noga, и передает ответ DO или DONT.