Сетевое API - AZSERVER
редакция от 2025-01-11
Концепция сетевых дисков:
1. Технически это блочный интерфейс к любому файлу расположенному в пространстве имен.
2. На данный момент поддержаны 2 пространства имен N:\ и R:\
3. Пространство N: - сетевой диск из архива - те любой образ c https://mirrors.pdp-11.ru/
данный путь считается корнем
соответственно для монтирования диска OVERKIL.IMG
расположенного по пути
https://mirrors.pdp-11.ru/_bk0010-11...ollection/IMG/
надо указать следующее имя файла
N:/_bk0010-11-11m/soft/SuperMax_collection/IMG/OVERKIL.IMG
4. Форматы запросов и ответов (упакованные структуры) указаны ниже.
Лицензирование
В связи с тем, что сетевое API создается в расчете на все ретроплатформы, API является открытым решением, единственным условием использования которого в своих решениях является обязательное указание
MAXIOL Landisk technology ®
это должно быть указано и в документации на Ваше решение и при использовании данной функции на стороне ретроплатформы.
Данные для подключения:
DNS name - landisk.maxiol.com
TCP Port - 34162
Структуры
Код:
// структура пакета запроса
typedef __packed struct landisk_reqest
{
unsigned int num_block; // номер блока (32 бита)
unsigned short int command; // команда
unsigned char reserved[32]; // зарезервировано
unsigned char data[512]; // данные - если они отправляются
char path[386]; // путь до диска
unsigned short int crc; // CRC команды
} landisk_reqest_t;
при открытии файла блок данных (data) рассматривается как пакет информации
Код:
// структура пакета открытия файла, информационные параметры
typedef __packed struct landisk_reqest_status
{
unsigned long timestamp; // локальное время контроллера (unix-time)
unsigned long uptime; // аптайм в секундах
unsigned long ip_addr; // локальный ip адрес контроллера
unsigned long dns_srv1; // ip адреса DNS-серверов
unsigned long dns_srv2;
unsigned short int tzone; // таймзона в минутах
unsigned short int platform; // номер платформы
unsigned short int controller; // тип контроллера
unsigned short int version; // версия прошивки контроллера
char build[32]; // дата билда прошивки контроллера
char url[64]; // URL производителя контроллера
} landisk_reqest_status_t;
пакет информации настоятельно рекомендуется заполнять полностью
// номер платформы
1 - PDP-11 - БК 10/11M
2 - PDP-11 - остальные - те ДВК Э60 УКНЦ оригинальные машины итд
3 - MSX
если вашей платформы нет в списке - пишите мне
// тип контроллера
1 - AZБК
2 - AZ - для всех остальных PDP-11 машин
3 - Carnivore2+
для добавления в список Вашего контроллера - пишите мне.
Код:
// команды
#define LANDISK_CMD_OPEN 1 // в ответ успешность/ошибка, и если успешно - размер диска
#define LANDISK_CMD_READ 2 // чтение блока
#define LANDISK_CMD_WRITE 3 // запись блока
#define LANDISK_CMD_CLOSE 4 // закрытие файла
#define LANDISK_CMD_OPENDIR 5 // открыть оглавление по указанному пути
#define LANDISK_CMD_READDIR 6 // прочитать одну запись оглавления в буфер
#define LANDISK_CMD_SEARCH_REQ 7 // послать запрос поиска
#define LANDISK_CMD_READ_SREQ 8 // прочитать одну запись результата поиска в буфер
Код:
// структура пакета ответа с данными
typedef __packed struct landisk_answer
{
unsigned short int result; // результат
unsigned char data[512]; // принятые данные
unsigned short int crc; // CRC ответа
} landisk_answer_t;
Код:
// структура пакета ответа статуса файла
typedef __packed struct landisk_answer_status
{
unsigned char fattr; // File attribute
unsigned short int fdate; // Fat date
unsigned short int ftime; // Fat time
unsigned int fsize; // File size
} landisk_answer_status_t;
это стандартный набор информации о файле-образе в FATформате.
Код:
// ответы
#define LANDISK_ANS_OK 0x0000 // команда выполнена успешно
#define LANDISK_ANS_ERROR 0x0001 // флаг ошибки, устанавливается при любой ошибке
#define LANDISK_ANS_ACCESS_DENIED 0x0002 // нет доступа, устанавливается при любой ошибке доступа
#define LANDISK_ANS_NEED_REG 0x0004 // нет доступа - нужна регистрация
#define LANDISK_ANS_RO_ONLY 0x0008 // нет доступа на запись- данный диск только для чтения
#define LANDISK_ANS_NOT_EXISTS 0x0010 // нет данного образа - неверный путь до файла образа или директории
Для расчета CRC используется ф-я
[attachmentid=10855]
Стратегия работы
1. первая команда должна быть открытие файла (LANDISK_CMD_OPEN)
при запросе на открытие надо указать блок параметров (landisk_reqest_status_t)
в ответ будет прислан блок landisk_answer_t но data[512] надо рассматривать как landisk_answer_status_t
2. далее можно посылать команды чтения
3. на данный момент поддержаны команды LANDISK_CMD_OPEN, LANDISK_CMD_READ, LANDISK_CMD_WRITE, LANDISK_CMD_CLOSE
4. В конце работы желательно (но не обязательно) послать команды закрытия дисков.
Ограничения:
1. не более 100 запросов в секунду с одного IP (иначе сработает блок анти-DDOS и забанит данный IP на некоторое время)
2. не более 10ти "висящих" соединений на IP.
ps: актуальную версию смотрите тут https://forum.maxiol.com/index.php?s...ndpost&p=59531