nedoPC.org

Community of electronics hobbyists established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 22 Oct 2021 10:52



Reply to topic  [ 66 posts ]  Go to page 1, 2, 3, 4, 5  Next
Project SprinterNet 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
У нас тут время роадмапов - вот моя "дорожная карта" :)
1) делается макетка сетевой карточки для Спринтера на базе вот этого прототипа;
2) делается набор драйверов для работы с сокетами через эту карточку (WizNET W5100);
3) пишется/портируется набор сетевых программ, начиная с браузера (SprinterNet Browser);
4) на этом этапе уже можно пользоваться простыми сайтами (см. тут);
5) пишется сервер, который делает обработку сложных случаев (HTTPS, большие JPEG/PNG, работа с большими архивами);
6) делается боевой вариант платы на продажу/раздачу дизайнов как опенсорц;
7) при наличии интереса покупаем 4096 MAC-адресов для внедрения в боевые платы.

P.S. Сделал репу на гитлабе 30 января 2021: https://gitlab.com/sprinter-computer/net (основная лицензия - Affero GPL)

_________________
:eugeek: https://twitter.com/Shaos1973


05 Jan 2021 23:37
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Отпочковано из соседнего топика
Shaos wrote:
Вобщем как я и написал чуть выше, я делаю SprinterNet - Ethernet для Спринтера, который начинался в 2016 году как Ethernet для TS2068 (по идее можно сделать единую PCB от которой надо будет отпиливать лишние части, чтобы получить либо SprinterNet-ISA8, либо SprinterNet-TS2068). На борту кроме модуля WizNet (на базе W5100) есть GPIO, 2Кб ОЗУ, 8Кб ПЗУ, SPI EEPROM 25C320 на 4КБ (для хранения MAC-адреса и настроек сети - можно наверное память и побольше поставить, например 25LC1024 на 128КБ, тогда её можно как квазидиск задействовать) и, в будущем, слот для SD-карточки. ПЗУ чтобы сразу иметь "драйвера" без необходимости что-то доустанавливать в DSS, а ОЗУ - для хранения рабочей области переменных для этих самых "драйверов". Можно даже единый код иметь для Спринтера и Timex Sinclair 2068, определяя тип машины программно ;)

Минимальный набор драйверов - функции работы с BSD-сокетами, чтобы можно было программировать любые TCP/IP примеры "из книжки", а также функции работы с EEPROM (чтобы давать пользователю функции, обходящие запрещённые зоны, где хранятся MAC-адрес и настройки сети) и SD-карточкой (если будет). Внешними будут программы, использующие эти сокеты (программы естественно разные для разных машин) - HTTP сервер (я его уже писал для W5100 в 2007 году правда в кодах PIC17), HTTP клиент (браузер), а также можно скажем FTP клиента и NTP клиента ещё сделать. Вобщем как-то так...

P.S. Ещё идея у меня была т.к. WizNet не хранит в себе MAC-адрес (его надо программно прописывать), можно под мою карманную корпорацию официально зарезервировать диапазон MAC-адресов, записав адреса оттуда в EEPROM-ы, которые раздавать вместе с платами. Сейчас блок из 4096 адресов стоит $780 выплаченных однократно - подробнее см.https://standards.ieee.org/products-services/regauth/oui36/index.html) :dj:

P.P.S. Как альтернатива покупке блока адресов может выступать EEPROM с зашитым в него MAC-адресом типа 93AA46AE48 (1K Microwire Serial EEPROM with EUI-48), хотя по сути это тоже самое т.к. судя по документации, юзер может перезаписать байты, где записан MAC-адрес.

P.P.P.S. Можно не давать пользователю API на доступ к записи в EEPROM байтов и блоков, а вместо этого выдать абстрактный API для некоего key=value persistant storage (с замахом на поддержку cookies в будущем).

Про BSD-сокеты:
https://en.wikipedia.org/wiki/Berkeley_sockets
https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BA%D0%B5%D1%82%D1%8B_%D0%91%D0%B5%D1%80%D0%BA%D0%BB%D0%B8

Предполагаемый API выполняемый из ПЗУ: http://www.nedopc.org/forum/viewtopic.php?f=60&t=20283&start=45

_________________
:eugeek: https://twitter.com/Shaos1973


05 Jan 2021 23:39
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
По софту - хотелось бы довести браузер SNB до возможности работать с nedoPC-форумом и nedoPC-вики - для этого например надо поддержать cookies:

Attachment:
nedoPC-org-header.gif
nedoPC-org-header.gif [ 27.14 KiB | Viewed 3904 times ]
(cжатие можно отменить)

Браузер можно научить отрисовывать SCR, GIF и даже небольшие JPG (есть достаточно компактный целочисленный декодер на сях)

_________________
:eugeek: https://twitter.com/Shaos1973


05 Jan 2021 23:43
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Диапазоны адресов карточки SprinterNet (описание изменено, чтобы соответствовать прототипу №3):
Code:
0xC0XX - WizNET registers (read/write controlled by TX/RX)
0xC1XX - CONTROL (write only):
   bit 0 - TX/RX (0 is TX/write, 1 is RX/read)
   bit 1 - SPI0 - (SPI device: 00-Nothing, 01-EEPROM, 10-SD/MMC, 11-External)
   bit 2 - SPI1 /
   bit 3 - SCK (sync for SPI)
   bit 4 - OUT1 (user output 1)
   bit 5 - OUT2 (user output 2)
   bit 6 - OUT3 (user output 3)
   bit 7 - MOSI (serial output to SPI)
0xC2XX - SPI (bit 0 - read only from MISO SPI)
0xC3XX - INPUTS (read only)
0xC4XX - WizNET socket 0 (read/write controlled by TX/RX)
0xC5XX - WizNET socket 1 (read/write controlled by TX/RX)
0xC6XX - WizNET socket 2 (read/write controlled by TX/RX)
0xC7XX - WizNET socket 3 (read/write controlled by TX/RX)
0xC800...0xCFFF - RAM 2K (read/write)
0xD000...0xD7FF - ROM 2K (always read only)
0xD800...0xDFFF - ROM 2K (switchable on write)
0xE000...0xFFFF - WizNET buffers (RX or TX)
Программно проверено, что регистры и читаются, и пишутся, как и область TX, а вот в область RX писать нельзя - оттуда только читаем.
W5100 имеет четыре сокета, каждый из которых может иметь 1,2,4 или 8 килобайт отведённых под него в области RX и в области TX (размеры в разных областях задаются независимо друг от друга и могут отличаться).

_________________
:eugeek: https://twitter.com/Shaos1973


10 Jan 2021 07:56
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
В связи с уже доказанной кривизной спринтеровской исы слегка изменил логику работы схемы - теперь контрольный бит TX/RX (расположенный по адресу #C100), кроме переключения областей в последних 8кб, теперь ещё и управляет установкой чтения либо записи из визнета либо SPI:
TX (0) - означает, что мы пишем в визнет или SPI - при этом чтение запрещено (защита от мусорных /MEMR);
RX (1) - означает, что мы читаем из визнета или SPI - при этом чтение разрешено (собственно как и запись, которая может работать нестабильно).

ПЗУ разбито на 4 окна, переключемых путём записи в переключаемую область ПЗУ (0xD800...0xDFFF), но для пущей логичности можно считать адресом переключения #DFFF - это адрес последнего байта страницы ПЗУ, в который можно записать порядковый номер страницы плюс некая константа - например #A0, #A1, #A2, #A3, что позволит прочитать этот байт обратно после записи, чтобы удостовериться, что переключение произошло (описанный выше контрольный бит TX/RX не распространяется на ПЗУ, ОЗУ, триггеры и GPIO). Нулевая страница ПЗУ также всегда видна по адресам 0xD000...0xD7FF. В первых трёх байтах будет JP на инициализацию (3 байта), следом за которым (или по другому заранее известному адресу) может идти наименование платы и версия железа и прошивки - текстовая строка, завершающаяся нулём, например "SprinterNet v1.0.1 build 32 (2021-02-01)", 0

Пользователям будет рекомендовано использовать API из ПЗУ для работы с WIZNet и EEPROM, чтобы в будущем была возможность заменить сетевой модулёк или микросхему EEPROM.

ПЗУ в будущем также можно увеличить в объёмах (теоретически до 512 килобайт, адресуя 2КБ-страницы полными байтами вместо теперешних двух битов).

P.S. Также имея уникальные значения в последнем байте каждой страницы, можно достаточно просто узнать размер ПЗУ - пробуем переключиться на страницу #5F, записывая это число в #DFFF, и далее читаем обратно байт по адресу #DFFF:
- если там #A3, то размер ПЗУ 8К (как сейчас);
- если там #A7, то размер ПЗУ 16К;
- если там #AF, то размер ПЗУ 32К;
- если там #BF, то размер ПЗУ 64К;
- если там #FF, то размер ПЗУ 128К.
Большие размеры наверное нет особого смысла задействовать, хотя ничего не мешает дойти до 512К...

_________________
:eugeek: https://twitter.com/Shaos1973


12 Jan 2021 06:46
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Решил ещё более усугубить разделение чтения и записи для SPI - новый дизайн платы будет иметь немного другой формат регистра управления и работы со SPI - описание выше изменено, чтобы это отразить

Code:
   бит 0 - TX/RX (0 is TX/write, 1 is RX/read)
   бит 1 - SPI0 - (SPI device: 00-Nothing, 01-EEPROM, 10-SD/MMC, 11-External)
   бит 2 - SPI1 /
   бит 3 - SCK (sync for SPI)
   бит 4 - OUT1 (user output 1)
   бит 5 - OUT2 (user output 2)
   бит 6 - OUT3 (user output 3)
   бит 7 - MOSI (serial output to SPI)

_________________
:eugeek: https://twitter.com/Shaos1973


23 Jan 2021 23:08
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Попробовал написать простые PHP-скрипты для сервера, который делают перевод доменных имён в IP-адрес:
Code:
<?php
$host = $_GET["host"];
$ip = gethostbyname($host);
echo $ip;
?>
и забирание HTTPS-контента с возвращением его через HTTP:
Code:
<?php
$host = $_GET["host"];
$data = file_get_contents("https://".$host);
echo $data;
?>
Как ни странно - они работают :mrgreen:

В боевом варианте наверное надо предусмотреть работу только некоторых сайтов по списку, а то в дискорде сразу же предложили через мой сервер в порнхаб залезть :no:

P.S. Например есть очень симпатичный архив роялти-фри фоток: https://www.pxfuel.com (там иконки фоток шириной 350 пикселов, что вполне согласуется с полным разрешением графики Спринтера в 352x288, и поиск по ключевым словам через аргументы в урл, а также есть изменение размера картинки под произвольные размеры)

P.P.S. Ещё есть сайт анимированных гифок (упомянут в NedoOS): https://acegif.com

P.P.P.S. Ну и на спектрумовые ресурсы тоже можно так ходить - https://vtrd.in и https://worldofspectrum.net/ (в последнем случае можно добраться до SCR и ZIP-файлов через HTTP)

_________________
:eugeek: https://twitter.com/Shaos1973


23 Jan 2021 23:23
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Вот чуть более навороченный резолвер, который возвращает IP-адрес в 16-ричном виде:
Code:
<?php
$host = $_GET["host"];
$ip = explode(".",gethostbyname($host));
$ip1 = dechex(intval($ip[0]));
$ip2 = dechex(intval($ip[1]));
$ip3 = dechex(intval($ip[2]));
$ip4 = dechex(intval($ip[3]));
if(strlen($ip1)==1) {
 $ip1 = '0'.$ip1;
}
if(strlen($ip2)==1) {
 $ip2 = '0'.$ip2;
}
if(strlen($ip3)==1) {
 $ip3 = '0'.$ip3;
}
if(strlen($ip4)==1) {
 $ip4 = '0'.$ip4;
}
echo $ip1,$ip2,$ip3,$ip4;
?>

Возможно надо всё объединить в один index.php, чтобы обращаться сюда как http://sprinternet:8080/?host=...&op=... и т.д. (IP-адрес имени sprinternet уже будет сохранён в hosts компьютера). Кроме того это упростит ведение учёта - каждое использование объединённого PHP-скрипта будет фиксироваться в базе данных. Возможный набор операций:
op=resolv - возвращает IP-адрес по имени сервера host (операция по умолчанию);
op=version - возвращает версию серверного программного обеспечения;
op=unixtime - возвращает количество секунд прошедших с нуля часов 1 января 1970 года относительно сейчас либо относительно момента указанного в параметрах запроса (url-encoded param);
op=https - забирает содержимое указанной веб-страницы по HTTPS и возвращает по HTTP (имя сервера указано в параметре host, а необязательный путь к файлу - в url-encoded параметре param).

P.S. Вот пример получения текущего времени (если запущено без параметров) и перевода строки с датой и временем (например из куков) в unixtime (если с url-encoded параметром param, например param=Sat%2C%2029-Jan-2022%2003%3A28%3A17%20GMT вернёт 61f4b451):
Code:
<?php
$param = $_GET["param"];
if($param){
  $time = strtotime(urldecode($param));
} else {
  $time = time();
}
echo dechex($time);
?>

_________________
:eugeek: https://twitter.com/Shaos1973


28 Jan 2021 20:12
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Для управления серверной частью через браузер (например добавление разрешённых сайтов или новых пользователей и т.д.) хотелось бы прикрутить https:// для которого нужен сертификат (кроме того сертификат нужен например для вебхуков телеграм-ботов, с которыми я уже начал играться). Существует бесплатный вариант - LetsEncrypt, но там надо ставить какого-то демона и я сомневаюсь что эти сертификаты совместимы со старыми браузерами - например я этот текст пишу из Safari 4.1.3 из MacOS X 10.4 на своём стареньком PowerBook G4 и по HTTPS он мало что показывает, но кое-что таки показывет - вот хотелось бы понять какие сертификаты с ним всё ещё совместимы...

P.S. Примеры HTTPS-сайтов всё ещё как-то работающих в старом сафари:

https://www.cnn.com - Verified by GlobalSign nv-sa (от $249 в год), TLS 1.2, однако сам globalsign.com НЕ открывается
https://www.google.com - Verified by Google Trust Services, TLS 1.3 (не нашёл способов купить такой сертификат - видимо гугл только сам для себя его печёт)
https://archive.org (сам архив, но не машина времени) - Verified by GoDaddy.com, Inc. (от $64 в год), TLS 1.2, однако сам godaddy.com НЕ открывается
https://hackaday.io - Verified by DigiCert Inc. (от $218 в год), TLS 1.2 (но НЕ hackaday.com который Verified by LetsEncrypt), однако сам digicert.com НЕ открывается...

и сайтов уже нормально не работающих, но и не ругающихся на несовместимость сертификата:

https://www.youtube.com
https://www.gmail.com

P.P.S. Вот чуть подробнее про разницу сертификатов DigiCert для hackaday.io (открывается в старом сафари) и обственно самого digicert.com (не открывается в старом сафари):

Attachment:
Screenshot from 2021-01-30 18-59-02.png
Screenshot from 2021-01-30 18-59-02.png [ 65.25 KiB | Viewed 3626 times ]

а также archive.org (открывается) и godaddy.com (не открывается):

Attachment:
Screenshot from 2021-01-30 19-07-35.png
Screenshot from 2021-01-30 19-07-35.png [ 68.14 KiB | Viewed 3626 times ]

видимо трюк в том, что это должен быть сертификат TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 128 bit keys, TLS 1.2 чтобы открываться в сафари 10-летней давности...

_________________
:eugeek: https://twitter.com/Shaos1973


30 Jan 2021 19:00
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Shaos wrote:
Возможно надо всё объединить в один index.php, чтобы обращаться сюда как http://sprinternet:8080/?host=...&op=... и т.д. (IP-адрес имени sprinternet уже будет сохранён в hosts компьютера). Кроме того это упростит ведение учёта - каждое использование объединённого PHP-скрипта будет фиксироваться в базе данных. Возможный набор операций:
op=resolv - возвращает IP-адрес по имени сервера host (операция по умолчанию);
op=version - возвращает версию серверного программного обеспечения;
op=unixtime - возвращает количество секунд прошедших с нуля часов 1 января 1970 года относительно сейчас либо относительно момента указанного в параметрах запроса (url-encoded param);
op=https - забирает содержимое указанной веб-страницы по HTTPS и возвращает по HTTP (имя сервера указано в параметре host, а необязательный путь к файлу - в url-encoded параметре param).

Возможное расширение для передачи сообщений:
op=auth - в параметре user передаётся имя пользователя, в param - хэш пароля (зависит от даты, т.е. пригоден только до полуночи по гринвичу), а в ответ с сервера уходит sid (Session ID) со временем жизни скажем сутки;
op=chat - вернуть все сообщения для пользователя (который идентифицируется полем sid) и если в param что-то есть, то это новое сообщение от пользователя (там в начале может быть указан идентификатор канала куда пишем), а для перемотки прочитанного можно пользоваться числовым параметром start (у каждого сообщения есть ID, который инкрементируется автоматически).
Та же самая авторизация может быть использована для некоторых других операций, например op=https и может быть даже op=resolv (чтобы исключить abuse со стороны случайных интернетчиков).

P.S. Добавил репу: https://gitlab.com/sprinter-computer/net (лицензия будет Affero GPL)

_________________
:eugeek: https://twitter.com/Shaos1973


30 Jan 2021 22:44
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Shaos wrote:
op=unixtime - возвращает количество секунд прошедших с нуля часов 1 января 1970 года относительно сейчас либо относительно момента указанного в параметрах запроса (url-encoded param)

можно расширить ответ (попутно поменяв имя операции с unixtime на просто time) - следом за 4 байтами unixtime (8 шестнадцатиричных символов) в хексе возвращать дату и время в нулевой таймзоне (GMT): YYYYMMDDHHMMSS (7 байтов или 14 символов в BCD - т.е. всего 22 символа):
Code:
<?php
$param = $_GET["param"];
if($param){
  $time = strtotime(urldecode($param));
} else {
  $time = time();
}
echo dechex($time),gmdate("YmdHis",$time);;
?>
это может оказаться полезным скажем для настройки часов Спринтера - надо будет в EEPROM сохранять таймзону и флаг летнего перевода времени ну или просто смещение от GMT, которое пользователю надо будет ручками менять 2 раза в год для стран, где летом время сдвигается:

Attachment:
DST_in_the_world.jpg
DST_in_the_world.jpg [ 182.72 KiB | Viewed 3569 times ]

P.S. В мире существует целый ряд временных зон с "нецелым" смещением от GMT: https://www.worldtimeserver.com/learn/unusual-time-zones/
Самые странные из них:
Quote:
...
As an example, at 12:00 AM in an area using Coordinated Universal Time (UTC) it is 5:30 AM in India.
...
Nepal is fifteen minutes ahead of India's time zone. That means, when it is 12:00 AM in Greenwich -- at the Prime Meridian -- it is 5:45 AM in the greater Nepal area and Kathmandu.
...
Australia : Eucla and nearby towns use UTC + 8:45.
...
The Chatham Islands -- located in New Zealand -- observe Chatham Standard Time which has a forty-five minute offset from Coordinated Universal Time. It is the only area that uses such an alteration.
The offset is labeled as UTC + 12:45 during winter months and UTC + 13:45 during summer months when Daylight Saving is active.

Соответственно в EEPROM карточки SprinterNet надо будет сохранять таймзону с шагом в 15 минут (четверть часа) - соответственно надо уметь представлять числа от -12 до +14 с шагом в 1/4 (см. https://www.timeanddate.com/time/map/) - можно умножить количество смещаемых часов (со знаком и с дробной частью) на 4 и в пределах байта это будет значение от -48 (#D0) до +56 (#38), причём например таймзона +13:45 (сейчас на островах Chatham т.к. у них там летнее время в данный момент) будет представлено как +55 (#37).

_________________
:eugeek: https://twitter.com/Shaos1973


01 Feb 2021 02:21
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Shaos wrote:
видимо трюк в том, что это должен быть сертификат TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 128 bit keys, TLS 1.2 чтобы открываться в сафари 10-летней давности...

Сделал себе сертификат Letsencrypt :rotate:

Attachment:
Screenshot from 2021-02-01 03-11-24.png
Screenshot from 2021-02-01 03-11-24.png [ 32.04 KiB | Viewed 3561 times ]

https://sprinternet.io даже открывается в старом Сафари из MacOS X 10.4 на моём PowerBook G4 :lol:

P.S. Хотя официальная проверялка не может его проверить: https://www.ssllabs.com/ssltest/analyze.html?d=sprinternet.io
Quote:
Assessment failed: Unable to connect to the server

P.P.S. А на другом компе проверялка сработала :kruto:


Attachments:
cert.png
cert.png [ 279.62 KiB | Viewed 3545 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
01 Feb 2021 05:13
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
хотелось бы прикрутить https:// для которого нужен сертификат ...

С этим https:// ситуация странная довольно-таки... :-?
Когда https:// вдруг появился повсеместно, я вдруг в собственную почту не мог зайти, :o
но потом нашел довольно интересный браузер:
Attachment:
dp.gif
dp.gif [ 24.95 KiB | Viewed 3525 times ]

Он по многим https:// заходил легко и просто, как словно https:// не существует! :roll:
Другое дело, что у него с HTML были большие траблы, но вот с https:// он на удивление
как-то умудрялся справляться!
Хотя в общем - довольно кривой браузер... :-?

_________________
iLavr


02 Feb 2021 02:37
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19933
Location: Silicon Valley
Reply with quote
Интересный браузер - корнями уходит в 90е, но последняя версия выложена в 2013 году - попробую собрать в линухе

https://sourceforge.net/projects/dplus-browser/

P.S. Он от кучи либ линуксовых зависит, в том числе ssh2, nghttp2 и curl (классическая тулза, которая умеет открывать https://) - ставлю по одной, чтобы собралось...

P.P.S. Не, не собирается - какой-то затык с зависимостями в libcurl...

_________________
:eugeek: https://twitter.com/Shaos1973


02 Feb 2021 05:44
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Ты знаешь, у меня сложилось вот какое впечатление о проблеме с https:// для которого нужен сертификат ...

Я поначалу просматривал всякие форумы по браузеру Опера, чтобы как-то заставить его работать,
так там излагали следующее: когда Опера 9.64 упирается в непонятный ей https://, она
выкатывает страницу своих оправданий про сертификат и шифрование, но на этом и тормозит.

Люди пишут, что в версии чуть более ранней, чем Опера 9.64 на этой страничке была заодно
и кнопочка типа: [Игнорировать и продолжить соединение] - как-то так...

Так вот мне кажется, что браузер D+ игнорирует по умолчанию: в силу своей простоты он не заморачивается
на этот повод. Если всё совсем уж плохо - он просто молча висит, но не зависает - выключить его можно.

_________________
iLavr


02 Feb 2021 06:01
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 66 posts ]  Go to page 1, 2, 3, 4, 5  Next

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  

Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.