Сбор символов имени файла протокола
Для чтения последовательности символов, которые будут использоваться в качестве имени файла протокола в конечном автомате вывода в сокет, применяется исполнительная процедура scrgetc. Файл scrgetc.c содержит следующий код.
int
scrgetc(FILE *sfp, FILE *tfp, int c) {
scrname[scrindex++] = c;
if (scrindex>= SFBUFSZ) { /* Имя файла слишком велико */ fprintf(tfp, "\nname too long\n"); if (tcsetattr)0, TCSADRAIN, Soldtty) <0)
errexit("tcsetattr: %s\n", strerror(errno)); return -1;
}
return 0;
}
При поступлении каждого символа клиент вызывает процедуру scrgetc, которая добавляет символ к строке scrname. скачать скайп
Открытие файла протокола
При обнаружении признака конца строки, введенной пользователем, клиент вызывает процедуру scrwrap для открытия файла протокола.
Процедура scrwrap добавляет к собранной строке нулевой завершающий символ, переустанавливает для дальнейшего использования глобальную переменную scrindex и вызывает функцию open для открытия файла протокола. В случае успешного получения нового дескриптора файла протокола процедура scrwrap вызывает функцию fdopen для создания стандартного указателя файла ввода/вывода, соответствующего файлу протокола, и помещает этот указатель в глобальную переменную scrfp. Перед возвратом управления процедура scrwrap вызывает процедуру tcsetattr для переустановки режимов терминала в значения, которые они имели до их изменения процедурой scrinit.
Прекращение ведения протокола
После того как пользователь принимает решение прекратить ведение протокола, конечный автомат вывода в сокет вызывает исполнительную процедуру unscript.
Процедура unscript выводит для пользователя информационное сообщение о том, что клиент прекратил ведение протокола, вызывает системную функцию fstat для получения информация о результирующем файле протокола и выводит сообщение с информацией о размерах файла протокола. И наконец, процедура unscript закрывает файл протокола и очищает глобальный указатель файла scrfp.
Вывод информации о состоянии
Пользователь может получить информацию о состоянии текущего соединения, введя команду KCSTATUS вслед за вводом на клавиатуре управляющего символа. Для вывода информации о состоянии соединения в конечном автомате вывода в сокет вызывается процедура status.
/* Файл status - процедура status */ tinclude tinclude tinclude tinclude extern char doecho, sndbinary, rcvbinary; /* Опции TELNET */
extern char *host, scrname[]; extern FILE *scrfp;
Процедура status выводит такую информацию, как имя удаленного хоста, локальный и удаленный порты протокола TCP, применяемые для соединения, и список действующих опций.