Работа с драйвером IPX.

Работа с драйвером должна начинаться с проверки, загружен ли драйвер в память, и определения адреса его вызова.

Для выполнения этих операций необходимо вызвать прерывание 2Fh, с AX=7A00h; если после возврата из прерывания AL=FFh, то драйвер загружен и регистровая пара ES:DS содержит адрес API (Application Programm Interface - интерфейс для приложений) точки входа в драйвер. Для выполнения какой-либо функции необходимо загрузить ее номер в BX и обратиться к подпрограмме с адресом API.

После инициализации драйвера необходимо выполнить инициализацию СЕРВЕРА (машины или программы, обслуживающей запросы) и КЛИЕНТА (машины или программы формирующей запросы к серверу). В сети может быть несколько серверов и несколько клиентов, кроме того на каждом компьютере могут быть одновременно запушены программы-серверы и программы-клиенты.

Инициализация сводится к присвоению программам двухбайтовых номеров-сокетов. Можно использовать произвольные номера, но в реальной сети часть номеров может быть зарезервирована за определенными программами.

Номера сокетов могут присваиваться программам на постоянной основе, либо выделяться динамически.

Для приема или передачи пакета прикладная программа должна подготовить пакет данных и построить БЛОК УПРАВЛЕНИЯ СОБЫТИЕМ - ECB (Event Control Block). В блоке ECB содержится адресная информация для передачи пакета, адрес передаваемого пакета и дополнительная информация.

Формат блока ECB:

· LINK - Указатель на следующий ECB (последовательно может передаваться несколько пакетов, а поскольку передача идет асинхронно с инициирующей передачу программой необходимо отслеживать каждую передачу отдельно);

· ESRAdress - адрес программы ESR (программы пользователя, получающей управление после окончания передачи; если такой программы нет, то поле должно содержать нули);

· InUse - флаг состояния ECB (указывает на текущее состояние пакета:

· 00h - операция завершена,
FFh - ECB используется для передачи данных
FEh - ECB используется для приема данных
FDh - ECB находится в ожидании окончания зададанного интервала времени
FBh - операция завершена, но обработка ECB не закончена);

· CCode - Код результата выполнения операции:

· 00h - операция выполнена без ошибок (гарантий приема адресатом нет!)
FFh - передающее оборудование неисправно или получен пакет на неизвестный сокет
FEh - станция-приемник неисправна или отсутствует
FDh - ошибка в оформлении пакета
FCh - обмен был прекращен специальной функцией драйвера IPX;

· Socket - Сокет, связанный с данным ECB (с программой, создавшей данный ECB);

· IPXWorkspace - Рабочий буфер драйвера IPX;

· DriverWorkspace - Рабочий буфер драйвера адаптера;

· ImmAdress - Адрес узла связи (при передаче внутри одной сети - адресстанции-получателя, при межсетевой передаче - адрес "моста" между сетями);

· FragmentCnt - Количество фрагментов, на которые надо разбить принятый пакет или из которых надо собрать передаваемый (удобно при обмене большими массивами формировать отдельно заголовок пакета и блок данных. Поле содержит подполя, количество подполей опредеделяется количеством фрагментов: Address - адрес фрагмента, Size - длина фрагмента ...).

Основные функции API драйвера IPX:

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

· Функции для работы с сетевыми адресами - позволяют вычислить адрес станции получателя, отправителя или свой собственный адрес.

· Функции занимающиеся приемом и передачей пакетов - организуют очереди на прием и передачу пакетов. Порядок передачи (и приема) может не соответствовать порядку поступления запросов.

· Функции обслуживания времени - позволяют синхронизировати процессы обмена во времени.