Информационная безопасность

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



IsTransactionMode(void) (узнать, выставлен ли флаг режима транзакции)

bool IsUpdateMode(void) (узнать, выставлен ли флаг режима обновления)

. Структура USER:

Представляет описание структуры - описателя файла-письма. Содержит поля:

char name [ADDRESS_MAX_LENGTH] (имя почтового ящика)

char domain [ADDRESS_MAX_LENGTH] (имя почтового домена)password [ADDRESS_MAX_LENGTH] (пароль на почтовый ящик) lock (флаг, определяющий, заперт ли почтовый ящик)

. Класс CONF:

Представляет описание абстрактного объекта, описывающего всю конфигурацию POP3-сервера. Содержит поля:

fstream conf_file (из этого файла при запуске программы считываем настройки POP3-сервера)

char ip_address[32] (ip-адрес этого сервера)

int port (порт, на который будем принимать POP3-запросы (обычно 110)

int echo (выводить ли на экран каждую POP3-транзакцию)

char Path [MAX_PATH] (путь к исполняемому файлу сервера)

char Domain [ADDRESS_MAX_LENGTH] (домен сервера (напр. mailserver1.com)_REF file [MAX_USERS] (массив описателей для файлов - писем)f_index (его индекс)highest_number_accessed (непонятная хрень, смотрите RFC 1225) c_mes (номер обрабатываемого файла-письма для соответствующих команд)

int total_size (суммарный размер файлов-писем в почтовом ящике)

CONF(void) (конструктор, обнуляющий все поля)

void Init(void) (считать настройки сервера из файла conf.inf)

void ProcessConfigCommands(void) (обработать команды настройки сервера)

int ParseMailDrop (char* user) (Название функции навеяно RFC 1225. Функция просматривает почтовый ящик, идентифицирует отдельные

файлы-письма, определяет размер каждого и общий их размер.)

// 7 функций для работы с пользователями

// кстати, пользователь - это папка с файлом password.inf

bool IsUserExistent (char* User) (Проверяем, существует ли такой пользователь)

int DeleteUser(void) (Удалить пользователя)

int AddUser(void) (Создать пользователя)

void Help(void) (Вывести на экран информацию о конфигурационных командах)

int ListUsers(void) (Вывести список пользователей)

char* GetPassword (char* user, char* password) (узнать текущий пароль) SetPassword(void) (установить новый пароль)

. Класс DISPATCH_SERVER_SOCKET:

Представляет описание диспетчерского сокета POP3-сервера. Содержит поля:

long connection_time (время подключения)

struct sockaddr_in server_address, client_address (адресная структура сервера и клиента) retval, size_of_client_address (количество полученных байт, размер клиентской адресной структуры)

WSADATA wsaData (структура для загрузки библиотеки сокетов)

SOCKET dispatch_server_socket, msg_server_socket (диспетчерский сокет POP3-сервера, виртуальный сокет для каждого POP3-подключения)

DWORD dwThreadID (идентификатор новой нити)

DISPATCH_SERVER_SOCKET (CONF& conf) (конструктор диспетчерского сокета, принимает конфигурационный объект)

CONF conf (конструктор конфигурационного объекта, обнуляет все поля)

int accept_connect(void) (принимает входящие подключения)

. Класс SERVER_SOCKET:

Представляет описание виртуального сокета POP3-сервера (создаваемого для каждого подключения POP3-сервера и закрываемого при завершении подключения). Содержит поля:

char Buffer [SIZE_OF_BUFFER] (буфер для приёма / отправки почтовых транзакций)

SOCKET msg_server_socket (конструктор, инициализирующий поля)

int query (флаг, который разрешает / запрещает ответ на запрос)

int quit (флаг, который показывает, что сеанс почтовой связи окончен)

CONF conf (конструктор, инициализирующий поля)

long connection_time (время подлючения) report_file (в этот файл запишем всё, что сервер получает и отправляет)

USER user (почтовый ящик, из которого мы забираем почту за одно подключение. Для обращения к каждому почтовому ящику клиент всегда создаёт новое подключение, даже если эти ящики находятся на одном сервере)

char forward_path [ADDRESS_MAX_LENGTH] (здесь не используется. Но могла бы (см. RFC-1225)

char reverse_path [ADDRESS_MAX_LENGTH] (здесь не используется. Но могла бы (см. RFC-1225)

fstream mes_file (сюда записываем сообщение, пришедшее серверу за 1 почтовую транзакцию с клиентом. Может фактически содержать в себе несколько e-mailов)

char mes_path [MAX_PATH] (уникальное имя файла - сообщения)

MODE mode (конструктор, инициализирующий поля)

int not_this_command (счётчик нераспознавания принятой команды)

SERVER_SOCKET(void) (конструктор, инициализирующий поля)

int recv_data(void) (получить информацию через сокет)

int send_data(void) (отправить информацию через сокет)

int shutdown_and_closesocket(void) (мягко выключить сокет и закрыть его)

void erase_buffer(void) (стереть буфер) set_buffer (char*) (установить значение в буфере)

int ReplyOnClientConnection(void) (послать ответ клиенту на его подключение)

int ProcessClientQuery(void) (обработать запрос клиента)

SERVER_SOCKET& operator=(SERVER_SOCKET& right) (перегруженное присваивание из-за строк)

Модуль Server.cpp cодержит следующие элементы:

Описания функций:

DISPATCH_SERVER_SOCKET:DISPATCH_SERVER_SOCKET (CONF& conf_ref) - Инициализируем библиотеку WS2_32.DLL, Создаём базовый(диспетчерский) сокет сервера, настроенный на TCP, Записываем в адресную структуру IP адрес сервера и порт сервера, Связываем адрес сервера с базовым(диспетчерским) сокетом сервера, Переводим базовый(диспетчерский) сокет сервера на режим прослушивание / диспетчеризация сигналов на подключение и устанавливаем размер очереди одновременных обращений к серверу.

int DISPATCH_SERVER_SOCKET:accept_connect(void) - Ждём очередное подключение к серверу (функцией connect()) клиента и,

дождавшись, возвращаем виртуальный сокет сервера - для двухстороннего обмена сообщениями с данным клиентом. Выводим на экран время подключения клиента, его IP-адрес и порт. Для каждого подключившегося клиента создаём нить и передаём в неё адрес виртуального сокета сервера для двухстороннего обмена сообщениями с данным клиентом (нити нужны здесь для того, чтобы позволить серверу работать одновременно с несколькими клиентами).

SERVER_SOCKET:SERVER_SOCKET(void) - (конструктор, инициал?/p>