Changes for page Сетевое API - MAXIOL Landisk technology ®
Last modified by Max on 2025/02/28 23:56
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 1 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -92,30 +92,37 @@ 92 92 93 93 ==== **Преимущества использования MAXIOL Landisk Technology®** ==== 94 94 95 -(% class="wikigeneratedid" id="H41E44243A43043743E44244344144243044043543244843844543D43E44143844243543B43543942243544543D43E43B43E43343844F43843743143043243B44F43544243E44243D43543E43144543E43443843C43E44144243843844143F43E43B44C43743E43243044244C44443843743844743544143A43843543443844143A43544244B2C43645144144243A43843543443844143A43843843C43043343D43844243D44B43543B43543D44244B2C43A43E44243E44044B43544143E43244043543C43543D43543C43244B44543E43444F44243843744144244043E44F43844244043543144344E44244143B43E43643D43E43343E43E43144143B44343643843243043D43844F." %) 96 -**Отказ от устаревших носителей** 95 +===== **Отказ от устаревших носителей** ===== 96 + 97 +(% class="wikigeneratedid" %) 97 97 Технология избавляет от необходимости использовать физические дискеты, жёсткие диски и магнитные ленты, которые со временем выходят из строя и требуют сложного обслуживания. 98 98 99 -(% class="wikigeneratedid" id="H41F44043E44144243E44243043843D442435433440430446438438MAXIOLLandiskTechnologyAE44143E43243C43544144243843C43044144043043743B43844743D44B43C43843C43E43443543B44F43C43844043544244043E-43A43E43C43F44C44E44243544043E4322C43F43E43443443544043643843243044E44943843C43844043043143E44244344143143B43E44743D44B43C43844344144244043E43944144243243043C4382C44744243E43443543B43043544243545144343D43843243544044143043B44C43D44B43C44043544843543D43843543C." %) 100 -**Простота интеграции** 100 +===== **Простота интеграции** ===== 101 + 102 +(% class="wikigeneratedid" %) 101 101 MAXIOL Landisk Technology® совместима с различными моделями ретро-компьютеров, поддерживающими работу с блочными устройствами, что делает её универсальным решением. 102 102 103 -(% class="wikigeneratedid" id="H41343843143A43E44144244C43843C43044144844243043143844044343543C43E44144244C41F43E43B44C43743E43243044243543B43843C43E43344344244544043043D43844244C43D43543E43344043043D43844743543D43D43E43543A43E43B43844743544144243243E43E43144043043743E43243443844143A43E43243D4304414354404324354404352C44343F44043043243B44F44244C43843C43843843144B44144244043E43F43544043543A43B44E44743044244C44144F43C43543643444343D43843C43843143543743D43543E43144543E43443843C43E44144243844443843743844743544143A43E43343E43F43544043543D43E44143043443043D43D44B445." %) 104 -**Гибкость и масштабируемость** 105 +===== **Гибкость и масштабируемость** ===== 106 + 107 +(% class="wikigeneratedid" %) 105 105 Пользователи могут хранить неограниченное количество образов дисков на сервере, управлять ими и быстро переключаться между ними без необходимости физического переноса данных. 106 106 107 -(% class="wikigeneratedid" id="H42343443043B45143D43D44B43943443E44144244343F41143B43043343E43443044044F44143544243543243E43C44343F43E43443A43B44E44743543D43844E43F43E43B44C43743E43243044243543B43843C43E43344344244043043143E44243044244C44143E43144043043743043C43843443844143A43E43243843743B44E43143E43944243E44743A43843C4384404302C43844143F43E43B44C43744344F44143243E43844043544244043E-43A43E43C43F44C44E44243544044B44243043A2C43144343444243E43E43D43843F43E43443A43B44E44743543D44B43A43B43E43A43043B44C43D44B43C43D43043A43E43F43844243543B44F43C." %) 108 -**Удалённый доступ** 110 +===== **Удалённый доступ** ===== 111 + 112 +(% class="wikigeneratedid" %) 109 109 Благодаря сетевому подключению пользователи могут работать с образами дисков из любой точки мира, используя свои ретро-компьютеры так, будто они подключены к локальным накопителям. 110 110 111 -(% class="wikigeneratedid" id="H41D43043445143643D43E44144244C43844143E44544043043D43D43E44144244C43443043D43D44B44541844143F43E43B44C43743E43243043D43843543E43143B43044743D43E43343E44544043043D43843B43844943043C43843D43843C43843743844044343544244043844143A43F43E44243544043843443043D43D44B4452C43043244144244043E43543D43D44B43543C43544543043D43843743C44B43F44043E43243544043A43844643543B43E44144243D43E44144243843E43143544143F43544743843243044E44243844543A43E44044043543A44243D43E43544544043043D43543D43843543843F435440435434430447443." %) 112 -**Надёжность и сохранность данных** 115 +===== **Надёжность и сохранность данных** ===== 116 + 117 +(% class="wikigeneratedid" %) 113 113 Использование облачного хранилища минимизирует риск потери данных, а встроенные механизмы проверки целостности обеспечивают их корректное хранение и передачу. 114 114 115 -(% class="wikigeneratedid" id="H41F43E43443443544043643A43044043544244043E-44D43A43E44143844144243543C44BMAXIOLLandiskTechnologyAE43F43E43C43E43343043544244143E44544043043D44F44244C44643844444043E43243E43543D43044143B4354344384352C43F44043543443E44144243043243B44F44F44343443E43143D44B43943844143E43244043543C43543D43D44B43944143F43E44143E43144043043143E44244B44144344144243044043543244843843C43843244B44743844143B43844243543B44C43D44B43C43844143844144243543C43043C438." %) 116 -**Поддержка ретро-экосистемы** 120 +===== **Поддержка ретро-экосистемы** ===== 121 + 122 +(% class="wikigeneratedid" %) 117 117 MAXIOL Landisk Technology® помогает сохранять цифровое наследие, предоставляя удобный и современный способ работы с устаревшими вычислительными системами. 118 118 125 + 119 119 ==== **Перспективы развития** ==== 120 120 121 121 В будущем планируется расширение возможностей технологии, включая: ... ... @@ -123,13 +123,142 @@ 123 123 * Поддержку **новых протоколов связи** для улучшенной совместимости с различными ретро-компьютерами. 124 124 * Развитие **системы авторизации и управления доступом**, чтобы обеспечить безопасное совместное использование облачного хранилища. 125 125 * Оптимизацию работы **в низкоскоростных сетях**, что позволит использовать сервис даже на устаревших интернет-подключениях. 133 +* Интеграция с поисковой системой [[Архива MAXIOL>>https://mirrors.pdp-11.ru/]]. 126 126 127 127 Таким образом, **MAXIOL Landisk Technology®** открывает перед владельцами ретро-компьютеров **новую эру облачного взаимодействия**, делая их работу с данными более удобной, надёжной и безопасной. 128 128 129 -== S ub-paragraph ==137 +== DNS имя и TCP порт для подключения к MAXIOL Landisk Technology® == 130 130 131 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 139 +1. **DNS имя**: **landisk.maxiol.com** 140 +Это доменное имя указывает на сервер **MAXIOL Landisk Technology®**, позволяя клиентским устройствам автоматически подключаться к серверу без ввода IP-адреса. Оно облегчает доступ к облачному хранилищу для ретро-компьютеров. 141 +1. **TCP Порт**: **34162** 142 +Порт **34162** используется для безопасной и надежной передачи данных между клиентом и сервером через протокол **TCP**. Он обеспечивает стабильное соединение и исключает конфликты с другими приложениями. 132 132 133 - ==Sub-paragraph==144 +При подключении клиент разрешает доменное имя в IP-адрес, затем устанавливает соединение с сервером через порт **34162**, что позволяет начать обмен блоками данных между сервером и ретро-компьютером. 134 134 135 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 146 +== Структура запроса == 147 + 148 +В **MAXIOL Landisk Technology®** как клиент, так и сервер написаны на языке C, что позволяет эффективно управлять памятью и работать с низкоуровневыми операциями ввода/вывода. Структуры запросов, отправляемых на сервер, имеют строгую формализованную форму, которая обеспечивает правильную передачу данных между клиентом и сервером. Эти структуры определяются с учетом специфики языка C, включая синтаксис описания структур данных и использование указателей. 149 + 150 + 151 +{{code language="c++"}} 152 +// структура пакета запроса 153 +typedef __packed struct landisk_reqest 154 +{ 155 + unsigned int num_block; // номер блока (32 бита) 156 + unsigned short int command; // команда 157 + unsigned char reserved[32]; // зарезервировано 158 + unsigned char data[512]; // данные - если они отправляются 159 + char path[386]; // путь до диска 160 + unsigned short int crc; // CRC команды 161 +} landisk_reqest_t; 162 +{{/code}} 163 + 164 +при открытии файла блок данных (data[512]) рассматривается как пакет информации следующей структуры 165 + 166 +{{code language="c++"}} 167 +// структура пакета открытия файла, информационные параметры 168 +typedef __packed struct landisk_reqest_status 169 +{ 170 + unsigned long timestamp; // локальное время контроллера (unix-time) 171 + unsigned long uptime; // аптайм в секундах 172 + unsigned long ip_addr; // локальный ip адрес контроллера 173 + unsigned long dns_srv1; // ip адреса DNS-серверов 174 + unsigned long dns_srv2; 175 + unsigned short int tzone; // таймзона в минутах 176 + unsigned short int platform; // номер платформы 177 + unsigned short int controller; // тип контроллера 178 + unsigned short int version; // версия прошивки контроллера 179 + char build[32]; // дата билда прошивки контроллера 180 + char url[64]; // URL производителя контроллера 181 +} landisk_reqest_status_t; 182 +{{/code}} 183 + 184 +пакет информации настоятельно рекомендуется заполнять полностью 185 +\\~/~/ platform - номер платформы 186 +1 - PDP-11 - БК 10/11M 187 +2 - PDP-11 - остальные - ДВК Э60 УКНЦ оригинальные машины итд 188 +3 - MSX 189 +\\для добавления вашей платформы пишите в комментарии к этой статье. 190 +\\~/~/ controller - тип контроллера 191 +1 - AZБК 192 +2 - AZ - для всех остальных PDP-11 машин 193 +3 - Carnivore2+ 194 +\\для добавления вашего контроллера пишите в комментарии к этой статье. 195 + 196 +=== Команды === 197 + 198 +{{code language="c++"}} 199 +// команды 200 +#define LANDISK_CMD_OPEN 1 // в ответ успешность/ошибка, и если успешно - размер диска 201 +#define LANDISK_CMD_READ 2 // чтение блока 202 +#define LANDISK_CMD_WRITE 3 // запись блока 203 +#define LANDISK_CMD_CLOSE 4 // закрытие файла 204 +#define LANDISK_CMD_OPENDIR 5 // открыть оглавление по указанному пути 205 +#define LANDISK_CMD_READDIR 6 // прочитать одну запись оглавления в буфер 206 +#define LANDISK_CMD_SEARCH_REQ 7 // послать запрос поиска 207 +#define LANDISK_CMD_READ_SREQ 8 // прочитать одну запись результата поиска в буфер 208 +{{/code}} 209 + 210 + 211 +== Структура ответа == 212 + 213 +Формат ответа 214 + 215 +{{code language="c++"}} 216 +// структура пакета ответа с данными 217 +typedef __packed struct landisk_answer 218 +{ 219 + unsigned short int result; // результат 220 + unsigned char data[512]; // принятые данные 221 + unsigned short int crc; // CRC ответа 222 +} landisk_answer_t; 223 +{{/code}} 224 + 225 +=== Статус файла === 226 + 227 +при открытии файла, сервер возвращает статус файла, в блоке данных (data[512]) 228 + 229 +{{code language="c++"}} 230 +// структура пакета ответа статуса файла 231 +typedef __packed struct landisk_answer_status 232 +{ 233 + unsigned char fattr; // File attribute 234 + unsigned short int fdate; // Fat date 235 + unsigned short int ftime; // Fat time 236 + unsigned int fsize; // File size 237 +} landisk_answer_status_t; 238 +{{/code}} 239 + 240 +=== Коды результатов выполнения команд === 241 + 242 +{{code language="c++"}} 243 +// ответы 244 +#define LANDISK_ANS_OK 0x0000 // команда выполнена успешно 245 +#define LANDISK_ANS_ERROR 0x0001 // флаг ошибки, устанавливается при любой ошибке 246 +#define LANDISK_ANS_ACCESS_DENIED 0x0002 // нет доступа, устанавливается при любой ошибке доступа 247 +#define LANDISK_ANS_NEED_REG 0x0004 // нет доступа - нужна регистрация 248 +#define LANDISK_ANS_RO_ONLY 0x0008 // нет доступа на запись- данный диск только для чтения 249 +#define LANDISK_ANS_NOT_EXISTS 0x0010 // нет данного образа - неверный путь до файла образа или директории 250 +{{/code}} 251 + 252 +=== Стратегия работы === 253 + 254 +~1. первая команда должна быть открытие файла (LANDISK_CMD_OPEN) 255 +при запросе на открытие надо указать блок параметров (landisk_reqest_status_t) 256 +в ответ будет прислан блок landisk_answer_t но data[512] надо рассматривать как landisk_answer_status_t 257 +2. далее можно посылать команды чтения 258 +3. на данный момент [февраль 2025] поддержаны команды LANDISK_CMD_OPEN, LANDISK_CMD_READ, LANDISK_CMD_WRITE, LANDISK_CMD_CLOSE 259 +4. В конце работы желательно (но не обязательно) послать команды закрытия дисков. 260 + 261 +=== Ограничения === 262 + 263 +(% class="wikigeneratedid" id="H41E43344043043D43844743543D43844F:1.43D43543143E43B43543510043743043F44043E44143E43243244143543A44343D43444344143E43443D43E43343EIP2843843D43044743544144043043143E44243043544243143B43E43A43043D442438-DDOS43843743043143043D43844243443043D43D44B439IP43D43043D43543A43E44243E44043E43543244043543C44F292.43D43543143E43B435435104424382243243844144F4494384452244143E43543443843D43543D43843943D430IP." %) 264 +~1. не более 100 запросов в секунду с одного IP (иначе сработает блок анти-DDOS и забанит данный IP на некоторое время) 265 +2. не более 10ти "висящих" соединений на IP. 266 + 267 +=== Исходные коды === 268 + 269 +==== Код подсчета CRC ==== 270 + 271 +[[attach:1740422838699-683.cpp||target="_blank"]]
- 1740422838699-683.cpp
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.SuperMax - Size
-
... ... @@ -1,0 +1,1 @@ 1 +4.0 KB - Content
-
... ... @@ -1,0 +1,70 @@ 1 + 2 + 3 +//Таблица для рассчета CRC16 4 +const unsigned char auchCRCHi[256]= 5 +{ 6 + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 7 + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 8 + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 9 + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 10 + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 11 + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 12 + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 13 + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 14 + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 15 + 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 16 + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 17 + 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 18 + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 19 + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 20 + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 21 + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 22 + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 23 + 0x40 24 +}; 25 + 26 +const unsigned char auchCRCLo[256]= 27 +{ 28 + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 29 + 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 30 + 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 31 + 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 32 + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 33 + 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 34 + 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 35 + 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 36 + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 37 + 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 38 + 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 39 + 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 40 + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 41 + 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 42 + 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 43 + 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 44 + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 45 + 0x40 46 +}; 47 + 48 + 49 +unsigned short int crc16(unsigned char *p, unsigned short int len) 50 +{ 51 + unsigned short int crc_hi; 52 + unsigned short int crc_lo; 53 + unsigned short int n; 54 + 55 + n = (unsigned short int)len; 56 + 57 + crc_hi = 0xFF; 58 + crc_lo = 0xFF; 59 + 60 + do 61 + { 62 + unsigned short int i = crc_hi ^ *p++; 63 + crc_hi = crc_lo ^ auchCRCHi[i]; 64 + crc_lo = auchCRCLo[i]; 65 + } 66 + while (--n); 67 + 68 + return ((crc_lo << 8) | crc_hi); 69 +} 70 +