Выработка ответа DO/DONT на запрос опции двоичной передачи
Сервер может передавать клиенту символы либо в закодированном виде с использованием кодировки сетевого виртуального терминала, либо в незакодированном виде с использованием 8-битовых двоичных значений. Глобальная переменная rcvbinary управляет тем, будет ли клиент ожидать получения данных в виде двоичных символов или символов в кодировке NVT. Для формирования ответа при получении от сервера запроса WILL или WONT на применение опции двоичной передачи клиент вызывает процедуру do_txbinary. Как и другие процедуры управления опциями, процедура do_txbinary была разработана так, что она может вызываться для формирования запроса к серверу на использование двоичного режима или для подготовки ответа на извещение, полученное от сервера. В этой процедуре для определения способа дальнейших действий используется глобальная переменная option_cmd и предполагается, что эта переменная содержит входящий запрос. Процедура do_txbinary проверяет, ожидает ли клиент, что сервер будет передавать данные в двоичном коде, устанавливает значение переменной rcvbinary в соответствии с входящим запросом и передает серверу ответ, если значение переменной rcvbinary изменилось. в подарок! С продвижением сайтов в Яндексе может конкурировать только баннеры.
int
do txbinary(FILE *sfp, FILE *tfp, int c) { "
if (rcvbinary) {
if (option_cmd « TCWILL) return 0; } else if (option_cmd *= TCWONT)
return 0; rcvbinary = !rcvbinary; (void) putc(TCIAC, sfp); if (rcvbinary)
(void) putc(TCD0, sfp); else
(void) putc(TCDONT, sfp);
(void) putc((char)c, sfp); return 0;
}
Ответ за запросы DO/DONT, содержащие требования по применению неподдерживаемых опций
Сервер передает клиенту сообщения DO или DONT, содержащие требования к клиенту, соответственно, разрешить или запретить указанную опцию. Выражая свою готовность применять указанную опцию, клиент отвечает сообщением WILL; если же клиент не будет применять эту опцию, он отвечает сообщением WONT. Как показывает схема конечного автомата, приведенная на рис. 26.4, если клиент не поддерживает конкретную опцию, он вызывает процедуру willjiotsup. Процедура willjiotsup отправляет серверу сообщение WONT о том, что данная опция клиентом не поддерживается. /* Файл willjiotsup - процедура willjiotsup */
int
will notsup(FILE *sfp, FILE *tfp, int c) {
(void) putc(TCIAC, sfp); (void) putc(TCWONT, sfp); (void) putc((char)c, sfp); return 0;
}
Ответ на запрос DO/DONT по применению опции двоичной передачи
Непосредственно после запуска клиентская программа использует кодировку сетевого виртуального терминала NVT для всех данных, передаваемых на сервер. Хотя кодировка NVT включает большинство печатаемых символов, в ней не предусмотрены коды для всех управляющих символов. Обычно серверы, которые функционируют в операционных системах, поддерживающих приложения с экранным интерфейсом, должны иметь возможность передавать произвольные символьные данные. Поэтому такие серверы обычно извещают клиентскую программу о своей готовности передавать двоичные данные и запрашивают клиентскую программу, будет ли она также передавать двоичные данные.
Сервер передает запрос DO на применение опции двоичной передачи, требуя, чтобы клиент приступил к использованию 8-битовой, незакодированной передачи. После получения такого запроса клиент вызывает процедуру will_txbinary.
int
will txbinary(FILE *sfp, FILE *tfp, int c) {
if (sndbinary) {
if (optionjjmd TCDO) return 0; } else if (option_cmd TCDONT)
return 0; sndbinary - Isndbinary; (void) putc(TCIAC, sfp); if (sndbinary)
(void) putc(TCWILL, sfp); else
(void) putc(TCWONT, sfp); (void) putc((char)c, sfp); return 0;
}
Для управления режимом передачи в клиенте используется глобальная переменная sndbinary. Если запрос требует изменения состояния, клиент подтверждает запрос, передавая ответ WILL или WONT.