Home_ru
jNode - это серверная платформа, написанная на Java и предназначенная для работы в любых FTN-сетях. Основная задача, которая ставилась при разработке этого продукта - это работа узла Фидонет в автоматическом режиме в течение долгого времени и легкая доработка необходимых утилит.
- Иван Агарков - ведущий разработчик, менеджер проекта.
- Кирилл Темненков - разработчик
- 2:5020/848 - 1.4
- 2:5020/849 - 1.4
- 2:5020/828 - 1.4
- 2:5020/570 - 1.4
- 2:5055/182 - 0.5.6beta1
- 2:5020/2141 - 1.5 stable (jre 1.6 compatible)
- Slackware Linux 2.6 i686, PostgreSQL9, JRE1.7
- Arch Linux 3.12 x86_64, PostgreSQL9, JRE1.7
- Arch Linux 3.12 x86_64, MySQL5, JRE1.7
- QNAP TS459 ( СХД ) i586, MySQL5, JRE1.7
- FreeBSD 8.x, i386, MySQL5, OpenJDK 1.6
- ?? Linux ??, H2 1.3.??, JRE1.7
- OS/2 WSeB (Warp Server for e-Buisness) ACP2, H2 1.3.XX, JRE1.6
В момент, когда соединение с удаленным компьютером установлено, вызывается функция FtnTosser.getMessagesForLink(link), которая сканирует таблицы netmail, echomailawait, filemailawait, filesforlink в поисках сообщений для узла, с которым установлено соединение. Найденные сообщения пакуются в соответствии с флагами packnetmail и packechomail из таблицы linkoptions, а затем кладутся в папку binkp.inbound под именами out_$ID.XX, где $ID - id узла в таблице links. Дескрипторы созданных файлов передаются внутри класса Message. Коннектор текущего протокола отправляет данные, и, после подтверждения принимающей стороной, удаляет созданные файлы. Полученные файлы кладутся в память или на жесткий диск в папку binkp.tmp, а затем вызывается функция FtnTosser.tossIncoming(message), которая распаковывает данные в папку binkp.inbound следующим образом:
- .pkt - (u|s)inb.pkt - где первый байт - флаг парольного или непарольного соединения
- .(mo|tu|we|th|fr|sa|su)[0-9a-z] - распаковываются *.pkt внутри и так-же кладутся в виде (u|s)inb.pkt
- .tic - кладутся как есть
- другие файлы - кладутся в том случае, если получены по парольному соединению
- все остальное - удаляется
После получения файлов отправляется запрос тоссеру TosserQueue.getInstanse().toss(), который будит спящий поток тоссера и заставляет его разобрать полученные файлы.
Основная функция, которая тоссит сообщения - FtnTosser.tossInboundDirectory(). Работает следующим образом:
- Нетмейл для роботов отправляет роботам через IRobot.execute(message)
- Нетмейл для остальных прогоняет через нодлист, реврайт и роутинг и пишет в базу с флагом send=false и lastupdate=now()
- При наличии флага ARQ - отправляется сообщение на узел-отправитель.
- При наличии фрага FILEATT - следом за нетмейлом отправляется файл, который к нему приаттачен.
- Эхомейл из непарольных пакетов уничтожается
- Эхомейл из парольных пакетов - проверяется существование арии в таблице echoarea ( если ее нету, то в случае наличия опции areaautocreate в таблице linkoptions она создается и создавший ее узел к ней подписывается ), проверяется подписка узла на арию, проверяются дюпы по таблице dupes. Если все хорошо - этомейл записывается в таблицу echomail, а в таблицу echomailawait добавляется запись для всех подписчиков вида $link_id,$new_echomail_id, где link_id - id линка из таблицы links, а new_echomail_id - id нового сообщения из таблицы echomail
- .TIC-файлы проверяются аналогичным образом, только таблицы filearea, filemail, filemailawait и флаг fileautocreate соответственно.
- Остальные файлы хранятся до ручного разбора