Сбор символов имени файла протокола

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

Для чтения последовательности символов, которые будут использоваться в качестве имени файла протокола в конечном автомате вывода в сокет, применяется исполнительная процедура 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, применяемые для соединения, и список действующих опций.