Локальные сети персональных компьютеров. Работа с сервером Novell NetWare


Программа SLIST - часть 5


#include <stdlib.h> #include <stdio.h> #include <mem.h> #include <string.h> #include <dos.h> #include "sap.hpp"

// ==================================================== // Конструктор класса SLIST // ====================================================

SLIST::SLIST(int ServiceType) {

// Проверяем наличие сетевой оболочки и определяем ее версию

MajorVersion = 0;

asm push si GetNetWareShellVersion(&MajorVersion, &MinorVersion, &Revision); asm pop si

// Если оболочка не загружена, завершаем работу // программы с сообщением об ошибке

if(MajorVersion == 0) { printf("\nОболочка NetWare не загружена\n"); errno = 0xff; return; }

// Проверяем тип SAP-запроса

if (ServiceType != 1 && ServiceType != 3) { errno = NOT_SUPPORTED; return; } // Запоминаем тип запроса

QueryType = ServiceType;

// Инициализируем драйвер протокола IPX

IPXInitialize();

// Открываем короткоживущий динамический сокет

SrcSocket = 0x00; errno = IPXOpenSocket(&SrcSocket, SHORT_LIVED);

// Заполняем таблицу имен серверов нулями

memset(ServerName,0,sizeof(ServerName));

// Подготавливаем блоки ECB для приема // пакетов от SAP-протокола

for(int i=0;i<MAX_SERVERS;i++) {

// Заполняем блок ECB

ReceiveSAPPacket(&Query[i]);

// Ставим в очередь на прием пакета

IPXListenForPacket(&Query[i].theECB); }

// Если не было ошибок, посылаем запрос

if (!errno) { SendSAPPacket();

// Ждем примерно одну секунду

sleep(1);

// Переписываем имена серверов и другую информацию

GetServersName(); GetServersInfo(); } }

// ==================================================== // Деструктор класса SLIST // ====================================================

SLIST::~SLIST() {

// Отменяем ожидающие блоки ECB

for(int i=0;i<MAX_SERVERS;i++) { IPXCancelEvent(&Query[i].theECB); }

// Закрываем сокет

IPXCloseSocket(SrcSocket); }

// ==================================================== // Посылка SAP-запроса // ==================================================== void SLIST::SendSAPPacket(void) {




- Начало -  - Назад -  - Вперед -



Книжный магазин