Adrenalin v0.72
OS Windows
(95
и выше).Содержание.
Adrenalin
- файлэхопроцессор для платформы Win32
,
распространяемый вместе с исходными текстами на правах freeware
(Вы можете использовать данную программу/исходные тексты и распространять
её/исходники без ограничений, при условии, что Вы не извлекаете из
этого прибыли без ведома автора). Автор программы - Андрей Купришов
(Andrey Kuprishov, 2:5023/19.27@fidonet).
|
Adrenalin
предназначен для использования в FTN
-сетях (сетях,
построенных и функционирующих по принципу сети Fidonet
). Поэтому технические
аспекты работы таких сетей останутся за рамками данной документации, а основной
акцент будет сделан на тех терминах, которые используются непосредственно при
работе файлэхопроцессора.
FTN
-сетей используются файлэхи.
Файлэха обладает как минимум именем, характеризующим тематику файлов, которые
по ней передаются (например, файлэха BOOK
служит для обмена файлами, содержащими
тексты различных литературных произведений).
tic
).
Тик-файл содержит информацию о файле данных: кто его отправил, в какую файлэху,
когда, с каким описанием и так далее. Задача файлэхопроцессора в общем случае
сводится к переносу файла из каталога, в который складывает файлы мэйлер, в
каталог соответствующей файлэхи, а затем к подготовке информации для мэйлера, если
данный файл должен быть отправлен другим подписчикам файлэхи. На этапе подготовки
информации мэйлеру файлэхопроцессор создаёт новые тик-файлы для каждого подписчика.
toss
).
hatch
).
purge
).
Adrenalin
(или на один из псевдонимов
используемого Вами файлэхопроцессора, например Allfix
). Адреналин ищет подобные
письма в указанном ему netmail
-каталоге, и по возможности отвечает на них.
Затрудняюсь охарактеризовать этот процесс одним словом, но он тоже играет
немаловажную роль в функционировании файлэх.
2.1. Обмен информацией с мэйлером.
Для того, чтобы подписчики получили файлы (и тики), файлэхопроцессор должен "сообщить" мэйлеру, кому какие файлы следует отправить. Существует ряд способов подготовки подобной информации, как то:
|
2.1.1. Binkley-style Outbound
.
Binkley-style Outbound
можно в SU.FIDOTECH FAQ
.
FileBoxes
можно в документации к
мэйлеру T-Mail
от Andy Elkin.
adrenalin.exe
), следующие конфигурационные файлы: adrenalin.xml
, links.xml
и
areas.xml
. Для успешного чтения xml
-файлов Адреналину необходима библиотека
MiniSAX.dll
, она должна находиться в том же каталоге, в котором находится adrenalin.exe
,
в каталоге System32
или в одном из каталогов, определённых в переменной окружения PATH
.
Данная библиотека входит в стандартную поставку Адреналина.
about_xml.txt
в подкаталоге docs
находится небольшое описание xml
(это фрагмент письма из
конференции ADRENALIN.SUPPORT
). Рекомендую ознакомиться
с ним, прежде чем Вы приступите к редактированию
xml
-конфигов.
XML
, некоторые символы необходимо кодировать при их использовании
внутри тагов или же в значениях атрибутов. Подобные символы перечислены
ниже:
|
Вася <ZIZOP> Пупкин
,
то в links.xml
его придётся указать следующим образом:
<sysop>Вася <ZIZOP> Пупкин</sysop>
Вася & Co
,
то в links.xml
его необходимо указать так:
<sysop>Вася & Co</sysop>
adrenalin.xml
, на основе которого Вы будете
создавать свой конфигурационный файл, снабжён комментариями.
<!--
и заканчивается
последовательностью -->
. Комментарии можно использовать везде,
где можно вставить подэлемент. Рекомендую не удалять, а заключать в комментарии те
элементы конфигурации, которые Вы не хотите использовать (может пригодиться :).
xml
-файла можно указать
используемую кодировку. Формат первой строки в этом случае таков:
<?xml version="1.0" encoding="cp866" ?>
cp866
(например, для создания netmail
-сообщений). Вы можете создавать
конфигурационные файлы в любой кодировке, но Адреналин автоматически переконвертирует
значения в cp866
только из кодировок Windows-1251
и
koi8-r
. Текст, представленный в других кодировках, останется без изменений.
adrenalin.xml - в cp866
;
links.xml
- в Windows-1251
;
areas.xml
- в koi8-r
.
3.1. adrenalin.xml.
Adrenalin.xml
- конфигурационный файл, содержащий основные настройки
файлэхопроцессора (адреса системы, рабочие каталоги, и так далее).
В общем виде формат файла выглядит так:
<adrenalin>
<sysop>
...
</sysop>
<paths>
...
</paths>
<log>
...
</log>
<mail>
...
</mail>
...
</adrenalin>
Рассмотрим структуру и содержание adrenalin.xml
. Элементы,
в описании которых явно сказано, что они не являются обязательными, могут
не указываться. Все остальные элементы должны присутствовать в конфигурации.
-
sysop
-
Элемент описывает сисопа и станцию, на которой установлен Адреналин.
Содержит следующие подэлементы:
-
name
-
имя системного оператора (попросту говоря, Ваше имя),
используется файлэхопроцессором при написании служебных писем
другим системам, и при отчёте перед Вами.
Внимание: длина имени не должна превышать 35 символов
(в противном случае имя обрезается).
-
address
-
основной адрес системы; если поинт не указан, используется
ноль, если домен не указан, используется домен
fidonet.org
-
aka
-
дополнительный адрес системы (
Also Known As
),
те элементы адреса, которые не указаны, будут рассчитаны
на основе основного адреса.
Можно указать любое количество AKA
-адресов,
как и не указывать их вовсе.
Пример:
<sysop>
<name>Andrey Kuprishov</name>
<address>2:5023/27</address>
<aka>.1</aka>
<aka>16.30</aka>
</sysop>
-
paths
-
Элемент содержит подэлементы, определяющие рабочие каталоги.
-
inbound
-
каталог, в котором будет осуществляться поиск тик-файлов и
соответствующих файлов, пришедших по файлэхам, при выполнении команды
TOSS
.
-
binkOutbound
-
каталог
Bink-style Outbound
для основного адреса системы.
Можно указать атрибут useDomain
(допустимые значения:
yes
или no
). Этот атрибут позволяет задать
режим формирования BSO
-каталога при отправке файлов на
системы в другой домен.
Если он установлен в yes
, то при создании
BSO
на систему из другого домена имя домена будет
использовано в качестве имени каталога.
Если указано значение no
, то независимо от доменного
адреса Адреналин будет руководствоваться лишь номером зоны.
Для совместимость с мэйлером T-Mail
устанавливайте данный
атрибут в no
(T-Mail
не поддерживает доменные
имена каталогов BSO).
Значение по умолчанию: no
Пример:
Основной адрес системы - 2:5023/27@fidonet
,
у системы есть линк с адресом 16:16/1@devnet
,
binkOutbound
задан в виде C:\FIDO\OUTBOUND
.
Тогда для отправки файлов линку Адреналин создаст каталог
C:\FIDO\OUTBOUND.16
при атрибуте useDomain="no"
и каталог C:\FIDO\DEVNET.16
при атрибуте useDomain="yes"
.
Можно не указывать элемент binkOutbound
, если Вы будете
использовать только fileBoxes
.
-
fileBoxes
-
каталог для файловых адресных ящиков; в этом каталоге
будут создаваться ящики для тех линков, посылка файлов которым
осуществляется с помощью
FileBoxes
.
-
longFileBoxes
-
каталог для файловых адресных ящиков, имеющих длинные имена.
Примечание: элементы fileBoxes
и
longFileBoxes
являются взаимоисключающими, т.е.
Вы можете задать использование либо коротких, либо длинных
имён файловых ящиков.
Можно не указывать ни fileBoxes
, ни longFileBoxes
,
если Вы планируете использовать только Bink-style outbound
.
-
netmail
-
каталог для работы с нетмэйлом; в этом каталоге Адреналин
при выполнении команды
FIX
будет осуществлять поиск
netmail
-запросов к файлэхопроцессору и создавать
ответы (речь идёт о *.msg
-файлах).
-
badTics
-
каталог для плохих тик-Файлов (распознаных, как
TIC
, но
имеющих логические ошибки).
Внимание: файл, указанный в "плохом" тике, останется в
Inbound
-каталоге.
-
newTics
-
каталог, в котором будут создаваться
tic
-Файлы для отправки
их на соответствующие системы-линки (только в режиме binkOutbound
;
поскольку в режиме fileBoxes
tic
-файлы будут созданы
непосредственно в файловых адресных ящиках).
Если Вы не стали указывать элемент binkOutbound
,
Вы можете не указывать и этот элемент.
-
processedTics
-
каталог, в который будут переноситься обработанные при
тоссинге
tic
-Файлы. При переносе tic
-файлы
переименовываются (чтобы не затереть ранее сохранённые файлы), новое
имя регистрируется в лог-файле.
Данный элемент необязателен. Если он неопределён, то после обработки
tic
-файлы будут удаляться.
-
autocreatedAreas
-
базовый каталог для автоматически создаваемых областей.
Его можно будет переопределить индивидуально для каждого линка.
Необязательный атрибут longPaths
(допустимые значения: yes
или no
)
определяет алгоритм выбора подкаталогов для автоматически создаваемых
областей; yes
означает, что имя каталога будет совпадать
с именем файлэхи, no
означает, что совпадать будут лишь
первые 8 символов, причём точки будут заменены на знаки подчёркивания;
в том случае, если подобное имя каталога уже существует, каталог будет
дополнен 3-хсимвольным индексом, увеличивающимся до тех пор, пока не будет
найдено ещё не используемое имя каталога.
Значение атрибута по умолчанию: yes
Пример:
<paths>
<inbound>..\files\in</inbound>
<binkOutbound useDomain="no">..\bso</binkOutbound>
<fileBoxes>..\t-mail\fBoxes</fileBoxes>
<netmail>..\netmail</netmail>
<badTics>tics\bad</badTics>
<newTics>tics\new</newTics>
<processedTics>tics\processed</processedTics>
<autocreatedAreas longPaths="yes">..\fechos</autocreatedAreas>
</paths>
-
alias
-
Необязательный элемент, определяющий псевдоним для файлэхопроцессора
на который он будет "откликаться" при просмотре нетмэйл-сообщений.
Можно указать несколько элементов, тем самым задав несколько псевдонимов.
Пользователи могут писать и на имя Adrenalin
, которое не надо
указывать в качестве псевдонима.
Пример:
<alias>Allfix</alias>
<alias>DMTic</alias>
-
log
-
элемент содержит настройки логгирования.
-
commonFile
-
Имя основного лог-файла, в который помещается общая информация
о работе Адреналина.
-
requestsFile
-
Имя лог-файла, в который будет помещаться информация об обработке
netmail
-запросов к Адреналину. Если элемент не указан,
данная информация не будет протоколироваться.
-
showMustGoOn
-
Наличие данного элемента означает, что при тоссинге
на экране будет отображаться информация об обрабатываемых файлах.
Если элемент отсутствует, информация не будет отображаться.
-
logMsgNames
-
Наличие данного элемента означает, что при выполнении команды
FIX
в лог-файл будут заноситься имена
просматриваемых msg-файлов.
Если элемент отсутствует, имена не будут записываться.
Пример:
<log>
<commonFile>..\log\adrenalin.log</commonFile>
<requestsFile>..\log\adrreq.log</requestsFile>
<showMustGoOn />
<logMsgNames />
</log>
-
descriptions
-
Параметры работы с описаниями.
-
autoDescFile
-
Имя файла, в котором Адреналин попытается найти описание для
автоматически создаваемой файлэхи.
Формат файла аналогичен формату файла FILEECHO LIST R50
и подобных ему, т.е. файл должен содержать строки вида
Area <name> <desc> ...
Например:
Area R50-LIST R50_Nodelist_Segment RC50_2:50/0
Если элемент отсутствует, подбор описания производиться не будет.
Можно перечислить несколько элементов, тем самым указав несколько
файлов для поиска описания.
Пример:
<descriptions>
<autoDescFile>filelist.198</autoDescFile>
</descriptions>
-
files
-
Параметры работы с файлами.
-
renamePlan
-
План переименования файлов. Используется, когда в
файлэху прибыл файл, а в ней уже есть файл с
аналогичным именем. Параметр
renamePlan
анализируется при тоссинге и хатчинге файлов.
Если он указан, то старый файл не будет перезаписан
новым, вместо этого адреналин переименует старый файл.
Включайте renamePlan
, если Вы не хотите, чтобы
старые файлы затирались новыми, в том числе и по ошибке отправителя.
План переименования можно настроить персонально для
каждой файлэхи, как и просто отключить (см. описание
areas.xml
).
renamePlan
не влияет на обработку
параметра Replaces
в tic
-файле: Replaces
обрабатывается до анализа renamePlan
и файл, указанный в
Replaces
, всегда удаляется. В последующих версиях программы
данное поведение может быть изменено.
При переименовании файла адреналин обновляет файл
файллиста (например, files.bbs
).
Адреналин поддерживает следующие планы переименования, указываемые с помощью
атрибута type
елемента renamePlan
:
increaseExt
У старого файла будет наращиваться
расширение (имя book1.ha
превратится
в book1.hb
, затем в book1.hc
, ...,
в book1.hz
, book1.ia, book1.ib
, ...).
Увеличение расширения будет производиться
до тех пор, пока мы не найдём ещё не
используемое имя. В него и переименуем файл.
Если мы достигнем последнего возможного расширения
(для буквенных расширений файла book1.ha
это будет
.zz
), но так и не найдём незанятого имени,
то произойдёт переключение на план переименования
addExtSuffix
.
addExtPrefix
Расширение старого файла будет предварено номером
(имя cookbook.ha
превратится в
cookbook.0.ha
, если такое имя занято, то в
cookbook.1.ha
, и так далее).
addExtSuffix
Старый файл получит новое, числовое расширение в дополнение
к тому, что уже было (имя unzip.zip
превратится
в unzip.zip.0
, если такое имя занято, то в
unzip.zip.1
, и так далее).
-
fileList
-
Настройки файллиста.
-
name
-
Имя файла файллиста. Такие файлы находятся в каталогах файлэх.
Значение по умолчанию: files.bbs
-
format
-
Формат строки файллиста; в формате можно указывать таги, которые
будут заменены соответствующими значениями (именем, размером или
описанием) для обрабатываемого файла.
Определение формата выглядит следующим образом:
%[width][.precision][[modificator]type]
type
-
определяет тип поля, возможные значения:
n
- имя файла,
s
- размер файла,
S
- размер файла, для наглядности
содержащий запятые после каждых
3-х цифр, отсчитываемых справа;
d
- описание файла
modificator
-
определяет форматирование самого поля,
возможные значения:
u
- привести поле к верхнему регистру
l
- привести поле к нижнему регистру
width
-
определяет ширину поля; если значение будет меньше указанной
ширины, то оно будет дополнено пробелами до этой ширины;
выравнивание по умолчанию - по левому краю; если ширина
отрицательная, то выравнивание будет выполнено по правому
краю
precision
-
максимальная длина поля, если поле превышает по длине
precision
, то оно будет обрезано справа
Примечание 1:
вместо s(S)
можно использовать k(K)
и
m(M)
для указания размера в килобайтах и мегабайтах
соответственно. По умолчанию размер указывается
в байтах. Для автоматического подбора размера (если < 1024 байт, то в
байтах, если меньше 1024 кбайт, то в килобайтах, если больше 1024
килобайт, то в мегабайтах) используйте вместо s(s)
a(A)
.
Примечание 2:
чтобы выравнивать описания по некоторому размеру
(например, чтобы длина строки файллиста не превышала 79 символов)
с автоматическим переносом слов на новую строку, можно указать
вместо типа d
тип w
(от window
) с шириной поля описания (НЕ всей строки).
Если указать precision
, то именно это количество
пробелов будет отступаться в начале каждой следующей строки.
А если precision
не указан, то отступаться будет
количество пробелов, равное числу символов перед описанием в
самой первой строке.
Например, чтобы в каждой строке, начиная со второй,
отступалось 37 пробелов, а длина каждой строки поля описания не
превышала 40 символов, используйте параметр w
так:
%40.37w
Многострочное описание будет сформировано из
значений тага Desc
тик-файла и значений тагов
LDesc
(если таковые присутствуют). Если первый из
тагов LDesc
начинается со строки, являющейся значением
тага Desc
(длинное описание начинается с короткого),
то Desc
не будет использоваться (не произойдёт
дублирования строки).
Примеры:
%12un [%6S] %d
%12.12ln [%-6k] %.3d
%12n [%-6A] %57w
Значение по умолчанию: %12n %d
-
sort
-
Наличие данного элемента заставляет Адреналин сортировать
файлы в файллисте по имени. Адреналин сортирует изменённые
файллисты перед завершением работы. Файллист может быть изменён
в результате тоссинга/хатчинга файлов.
Положение многострочных описаний не нарушается (они сортируются
совместно с именами файлов, к которым относятся).
Пример:
<fileList>
<name>descript.ion</name>
<format>%12n [%6S] %d</format>
<sort />
</fileList>
-
mail
-
Элемент определяет параметры работы с netmail-сообщениями.
-
killProcessed
-
Наличие элемента означает, что обработанные письма будут удаляться.
Если элемент не указан, то после обработки на письмо будет
ставиться атрибут
Received
.
-
replyAttributes
-
Элемент позволяет указать атрибуты, устанавливаемые на сообщение-ответ.
Атрибуты перечисляются с помощью подэлементов
attr
.
Возможные значения атрибутов:
AuditReq
ConfirmReq
Crash
Direct
FileAttached
FileReq
FileUpdateReq
HoldForPickup
Immediate
IsReturnReceipt
KillFileSent
KillSent
Local
Lock
Orphan
Private
Received
ReturnReceiptReq
Sent
Transit
TruncateFile
Если элемент не используется, то на письма будут ставиться атрибуты
Local
и Private
.
Пример:
<replyAttributes>
<attr>Local</attr>
<attr>Private</attr>
<attr>KillSent</attr>
</replyAttributes>
-
creationLimit
-
Элемент задаёт ограничения на размер создаваемых сообщений.
Анализируется лишь информационная часть сообщения (без заголовка
и служебных строк), поэтому реальные сообщения будут чуть больше.
Если элемент отсутствует, ограничения на размер нет.
-
kBytes
-
Максимальный размер в килобайтах.
-
lines
-
Максимальный размер в строках.
Можно указать как оба элемента (килобайты и строки), так и один из них.
-
noNotify
-
Элемент указывает Адреналину, что не надо посылать сисопу уведомление
о результатах выполнения команды.
Поддерживается только значение basePurge
.
-
notifyOnErrors
-
Если элемент указан, то Адреналин будет ставить сисопа в известность
об ошибках (с помощью
netmail
-сообщений) помимо их логгирования.
-
notifyOnWarnings
-
Если элемент указан, то Адреналин будет ставить сисопа в известность
о предупреждениях (с помощью
netmail
-сообщений) помимо их логгирования.
Пример:
<mail>
<replyAttributes>
<attr>Local</attr>
<attr>Private</attr>
<attr>KillSent</attr>
</replyAttributes>
<creationLimit>
<kBytes>10</kBytes>
<lines>200</lines>
</creationLimit>
<noNotify>basePurge</noNotify>
<notifyOnErrors />
<notifyOnWarnings />
</mail>
-
lngFile
-
Задаёт имя языкового файла, по умолчанию используется файл
adrenalin.lng
.
Порядок строк файла крайне важен. Каждая строка может быть либо
пустой, либо должна содержать заключённую в двойные кавычки
последовательность символов. Эти строки используются Адреналином в
ответах линкам. Если после закрывающих двойных кавычек через пробел
указан символ '\
', то следующая строка будет считаться продолжением
многострочного сообщения.
В языковом файле также допустимы комментарии, они должны начинаться с
символа ';
'.
Вы можете создать на основе Adrenalin.lng
свои языковые файлы. Каждое
сообщение файла Adrenalin.lng
предварено комментарием-пояснением.
В поставку входит файл russian.lng
. Что в нём, я надеюсь, понятно.
При его использовании не забудьте заменить моё имя на своё.
-
forwardExpirationTime
-
"Время жизни" строки в
forwards.lst
с информацией об отфорварженной
эхе, в днях. Указывает, через сколько дней запись в forwards.lst
перестаёт быть актуальной и линк-автор форварда, в случае автосоздания области,
уже не будет на неё автоматически подписан.
Значение по умолчанию: 0
(не учитывается).
-
maxTicAge
-
Максимальный возраст
tic
-файла, в часах. Tic
-файл,
находящийся в одиночестве (без соответствующего файла данных) в
inbound
-каталоге дольше указанного времени, будет
перенесён в badTics
-каталог.
По умолчанию данный параметр неопределён.
-
warningInsteadOfError
-
Элемент позволяет указать случаи, когда ошибку стоит рассматривать как
предупреждение.
На данный момент реализована лишь одна ситуация:
incorrectCRC32
-
в тик-файле отсутствует таг CRC
,
или его значение не совпадает с CRC32
соответствующего файла.
Внимание: включать данное предупреждение не
рекомендуется, так как это может привести к
распространению на Ваших линков битых файлов
или файлов, не соответствующих тикам.
Пример:
<warningInsteadOfError>incorrectCRC32</warningInsteadOfError>
-
hatchOriginAddress
-
Задаёт, какой адрес будет подставляться в поле
Origin
тиков,
создаваемых для линков при хатчинге;
если main
, то для всех линков будет подставляться основной адрес
системы;
если aka
, то для каждого линка будет подставляться соответствующий
ему aka
-адрес.
Значение по умолчанию: aka
Пример:
<hatchOriginAddress>main</hatchOriginAddress>
-
allAKASeen
-
Если данный элемент указан, то при форвардинге файлов на даунлинков
в соответствующие
tic
-файлы будут добавлены строки
Seenby
, содержащие все адреса системы;
если элемент отсутствует, то будут использоваться лишь необходимые
адреса (адрес АКА
для соответствующего линка).
Целесообразно использовать данный элемент для предотвращения зацикливания
файлэх (если какой-либо пользователь подписался на неё у 2-х и более линков).
-
handleReplaces
-
Наличие элемента говорит Адреналину о том, что надо обрабатывать ключевое слово
Replaces
в приходящих tic
-файлах: файл, указанный в
строке Replaces
tic
-Файла, будет удалён.
Примечание: Адреналин не обрабатывает маски файлов в параметре
Replaces
.
-
freeDriveSpaceLimit
-
Элемент просит Адреналин проверять при запуске наличие свободного места
на заданном диске. Если на диске недостаточно места, то Адреналин
создаст служебное письмо сисопу и прервёт выполнение, не производя никаких
дальнейших действий. Можно задать несколько таких элементов для проверки
нескольких дисков.
Проверяемый путь указывается как значение атрибута path
.
При указании размера можно использовать запятую для большей наглядности.
Обратите внимание, что необходимо указывать не букву диска, а путь.
Пример:
<freeDriveSpaceLimit path="C:\">4,096</freeDriveSpaceLimit>
-
fileFlags
-
Элемент определяет настройки файлов-флажков. Он может и отсутствовать, если
файлы-флажки не требуются.
Файлы-флажки - файлы нулевого размера, создаваемые Адреналином либо в случае
какого-то события (например, по завершении команды FIX
,
когда было обработан хотя бы одно письмо), либо в случае обработки во время
тоссинга файла, имя которого подходит под маску.
Рассмотрим, как с помощью подэлементов задать файлы-флажки:
-
onEvent
-
Элемент задаёт файл-флажок, создаваемый по событию. Тело элемента -
имя файла-флажка. Тип события указывается с помощью атрибута
type
. Возможные значения:
fix
- по выполнении команды FIX
, если созданы
письма-ответы;
toss
- по выполнении команды TOSS
, если обработан
хотя бы один файл;
hatch
- при успешном выполнении команды HATCH
;
any
- произошло любое из вышеперечисленных событий.
Можно указать любое количество файлов-флажков.
-
onFile
-
Элемент задаёт файл-флажок, создаваемый при обработке файла во время
тоссинга/хатчинга. Тело элемента - имя файла-флажка.
Атрибут
mask
позволяет указать маску для файла.
Примечание: настройки областей (см. описание areas.xml
)
позволяют определить файлы-флажки, создаваемые по приходу файла в
конкретную область.
Пример:
<fileFlags>
<onEvent type="fix">..\t-mail\flags\fixed.t-m</onEvent>
<onFile mask="*.jpg">..\t-mail\flags\pic_arrived.t-m</onFile>
</fileFlags>
3.2. links.xml.
В общем виде документ, описывающий линки - links.xml
- выглядит так:
<links>
<link>
...
</link>
<link>
...
</link>
...
</links>
Во время работы Адреналин может перезаписать links.xml
,
если изменились настройки линков (например, если какой-либо линк перевёл себя в пассивный
режим с помощью команды %pause
).
Корневым элементом документа является элемент links
.
У него нет атрибутов, но он может содержать любое количество подэлементов link
.
Элемент link
(являющийся подэлементом элемента links
)
также не имеет атрибутов, но имеет следующие подэлементы:
-
name
-
Определяет имя сисопа, будет использоваться в следующих
версиях Адреналина для обращения к сисопу в нетмэйл-сообщениях;
данный элемент содержит строку данных, описывающую имя сисопа.
Пример:
<name>Vasya Pupkin</name>
-
address
-
Адрес линка. Напомню формат адреса:
[[Zone:]Net/]Node[.Point][@Domain]
Отсутствующие компоненты будут дополняться только
путём анализа основного адреса вашей системы.
Пример:
<address>27.999</address>
-
useAKA
-
Какое
АКА
из наших использовать для общения с линком.
Cодержит строку, описывающую АКА
.
Адрес должен быть одним из ваших АКА
-адресов или основным адресом;
если для линка не указан соответствующий АКА
-адрес, то он
будет выбран автоматически (будет использоваться максимально
близкий адрес, причём анализ "близости" адресов происходит по
схеме: домен -> зона -> сеть -> нода).
Пример:
<useAKA>27.0</useAKA>
-
outbound
-
Элемент описывает, каким образом будут подготавливаться к отправке
файлы для этого линка; данный элемент не содержит подэлементов, но
имеет следующие атрибуты:
type
-
binkley
или fileBoxes
,
по умолчанию binkley
flavour
-
как мэйлеру следует отправлять файлы,
возможные значения
атрибута для Bink-style Outbound
:
normal
, direct
, crash
,
hold
, immediate
;
для FileBoxes
:
normal
, hold
;
по умолчанию hold
.
Пример:
<outbound type="binkley" flavour="direct" />
-
security
-
Элемент, подэлементы которого определяют права и возможности
линка (пароль, приоритеты, доступ к группам).
-
password
-
Содержит строку данных, являющуюся паролем на тик-файлы
и
netmail
для данного линка.
-
sendPriority
-
Приоритет на отправку нам файлов, линк сможет
посылать файлы лишь в те файлэхи, для которых установлен
приоритет на отправку, не превышающий приоритет линка.
Значение по умолчанию: 0
-
receivePriority
-
Приоритет на получение файлов от нас, линк сможет получать
файлы лишь по тем файлэхам, для которых
установлен приоритет на получение, не превышающий приоритет линка.
Значение по умолчанию: 0
-
group
-
Группа, к которой линк имеет доступ, этот элемент содержит
строку символов, являющуюся именем группы;
для одного линка можно указать любое количество групп, к которым
он имеет доступ - просто добавьте нужное количество подэлементов
group
в security
.
Пример:
<security>
<password>superpwd</password>
<sendPriority>10</sendPriority>
<receivePriority>10</receivePrioriry>
<group>PICS</group>
<group>MUSIC</group>
</security>
-
allowAreaCreation
-
Наличие данного элемента разрешает линку создавать у нас области
(придёт от него файл в неизвестную нам файлэху, и она
автоматически создастся). Подэлементы данного элемента:
-
path
-
Каталог, в котором будет создан подкаталог области.
Если данный элемент отсутствует, подкаталог файлэхи будет создан
в каталоге, заданном параметром AutoCreated
основного файла конфигурации.
-
defaultGroup
-
В какую группу будет записана новая область.
-
sendPriority
-
Приоритет на отправку файлов, который будет назначен
области.
Значение по умолчанию: 0
-
receivePriority
-
Приоритет на отправку файлов, который будет назначен
области.
Значение по умолчанию: 0
-
passthrough
-
Если данный подэлемент присутствует, то автоматически созданная эха
получит признак
passthrough
.
-
openForResend
-
Если данный подэлемент присутствует, то автоматически созданная эха
получит признак
openForResend
.
Пример:
<allowAreaCreation>
<path>..\AreasFromLink</path>
<defaultGroup>NewFechos</defaultGroup>
<receivePriority>10</receivePrioriry>
<passthrough />
</allowAreaCreation>
-
status
-
Статус линка. Элемент содержит описание статуса.
Возможные значения:
passive
-
пассивный режим, в этом режиме система может
посылать нам файлы, но сама от нас файлы не получает; данный
режим линк может включать и отключать дистанционно,
посредством менеджера подписки, используя команды %lock
и %unlock
.
unavailable
-
режим недоступности, в этом режиме все операции с данной системой
полностью заморожены (мы не посылаем и не получаем от неё файлы,
и не обрабатываем сообщения от этой системы); отключить данный
режим дистанционно нельзя.
Пример:
<status>passive</status>
-
robotName
-
Задаёт имя робота файлэх для линка, которому Адреналин будет писать
при форвардинге.
Значение по умолчанию: Allfix
Пример:
<robotName>Adrenalin</robotName>
-
availAreas
-
Задаёт имя файла со списком доступных на данном линке областей для
подписки. Каждая строка файла является именем области.
Пример:
<availAreas>C:\FIDO\AvailAreas\areas_from_27.999.lst</availAreas>
3.3. areas.xml.
В общем виде документ, описывающий области - areas.xml
- выглядит так:
<areas>
<group ...>
<area ...>
...
</area>
...
</group>
<group ...>
...
</group>
...
</areas>
Корневым элементом документа является элемент areas
.
У него нет атрибутов, но он может содержать любое количество подэлементов group
.
Элемент group
описывает группу областей. Помимо ряда атрибутов (см. ниже)
он может содержать любое количество подэлементов area
, каждый из которых
описывает файлэху.
-
group
-
Описывает группу файлэх. Атрибуты:
name
-
имя группы, начиная с версии 0.70alpha1
может быть произвольной последовательностью символов;
имена групп не различаются по регистру букв.
description
-
описание группы; данный атрибут не является обязательным.
-
area
-
Элемент описывает область (файлэхоконференцию).
Атрибуты:
name
-
имя области.
description
-
описание области (необязательный атрибут).
path
-
путь к файлам области.
sendPriority
-
приоритет на отправку файлов в файлэху;
линк сможет отправить файл лишь в том случае, если его приоритет
на отправку не меньше данного значения.
Значение по умолчанию: 0
receivePriority
-
приоритет на получение файлов по файлэхе;
линк получит файл лишь в том случае, если его приоритет
на получение не меньше данного значения.
Значение по умолчанию: 0
Элемент area
может содержать следующие подэлементы:
-
passthrough
-
Данный элемент не содержит в себе ничего (ни атрибутов, ни вложенных
элементов), но само его наличие указывает на то, что данная файлэха
является "проходной" (смотрите описание режимов пуржинга, некоторые
из них имеют прямое отношение к
passthrough
-областям).
-
vetoManualPurge
-
Пустой элемент (без атрибутов и подэлементов),
его наличие показывает, что для данной области запрещена (
veto
)
ручная зачистка по маске, данная опция введена для того, чтобы избежать
случайного уничтожения содержимого области при указании
в команде PURGE
масок областей, например:
Adrenalin.exe purge *
-
openForResend
-
Пустой элемент (без атрибутов и подэлементов),
его наличие показывает, что область открыта для команды
%RESEND
, даже если пользователь не подписан
на данную область.
-
outbound
-
Данный элемент, если он указан, позволяет задать способ отправки
файлов области линкам независимо от того, какой тип
outbound
определён у самих линков.
Единственный атрибут type
может иметь значение либо
binkley
, либо fileBoxes
.
Если линку в его настройках был указан binkley-outbound
,
а в параметрах эхи указан fileBoxes
, то для всех способов
отправки файлов линку, отличных от hold
(direct
, crash
, immediate
)
будет использован способ normal
(FileBoxes
просто не поддерживает способы, отличные от normal
и
hold
).
-
fileFlag
-
Элемент позволяет задать файл-флажок, который будет создан в случае
попадания в область файла (в результате тоссинга или хатчинга), подходящего
под маску.
Маска для файлов указывается с помощью атрибута mask
,
а имя файла-флажка указывается в теле элемента.
Можно указать несколько элементов fileFlag
.
Пример:
<area name="NODEDIFF">
...
<fileFlag mask="nodediff.z??">..\T-Mail\Flags\rebuild_ndl.t-m</fileFlag>
...
</area>
-
renameFilePlan
-
План переименования файлов. Используется, когда в
файлэху прибыл файл, а в ней уже есть файл с
аналогичным именем.
План переименования можно задать глобально, для всех файлэх,
с помощью параметра adrenalin/files/renamePlan
в файле adrenalin.xml
. Для каждой файлэхи можно индивидуально
задать план переименования, в том числе и отключить.
План переименования определяется атрибутом type
,
который может принимать следующие значения: increaseExt
,
addExtPrefix
, addExtSuffix
и none
.
Значение none
отключает план переименования, остальные значения
описаны в документации по adrenalin.xml
, в пункте, посвящённом
renamePlan
.
-
linked
-
Элемент позволяет указать линка, подкючённого к данной области.
Данный элемент может иметь специальный атрибут,
routing
,
позволяющий явно указать возможности линка. Возможные значения
атрибута:
send
-
линк может только посылать файлы в область,
независимо от того, какими приоритетами он обладает.
receive
-
линк может только получать файлы из области,
независимо от того, какими приоритетами он обладает.
bidirectional
-
линк может и получать, и посылать файлы,
независимо от того, какими приоритетами он обладает.
Для каждого подключённого линка Вам необходимо задать элемент linked
.
Пример:
<linked>27.1</linked>
<linked>100:1/1.76@Somenet</linked>
<linked routing="receive">11</linked>
Пример (фрагмент моей конфигурации):
<areas>
<group name="KLG">
<area name="NET5023"
path="..\FileEchos\NET5023"
sendPriority="50">
<vetoManualPurge />
<linked>11</linked>
<linked>27.16</linked>
<linked>27.17</linked>
<linked>27.15</linked>
<linked>27.52</linked>
<linked>27.55</linked>
<linked>27.59</linked>
<linked>27.2500</linked>
<linked>27.62</linked>
<linked>27.84</linked>
<linked>27.86</linked>
<linked>47</linked>
<linked>35</linked>
</area>
</group>
<group name="33's">
<area name="MAD.FILES"
path="..\FileEchos\MAD.FILES"
sendPriority="200">
<outbound type="fileBoxes" />
<linked>27.11</linked>
<linked>27.62</linked>
<linked>27.45</linked>
<linked>17</linked>
<linked>27.55</linked>
<linked routing="send">33</linked>
<linked>27.84</linked>
<linked>27.86</linked>
<linked>47</linked>
</area>
</group>
</areas>
4. Работа с программой.
При запуске без параметров файлэхопроцессор выводит на экран небольшую
справочную информацию. Чтобы файлэхопроцессор выполнил какие-либо общественно полезные
действия, необходимо указать ему вид деятельности с помощью параметров командной строки.
4.1. Тоссинг входящих тиков и файлов.
При запуске файлэхопроцессора с параметром toss
он просматривает каталог входящих файлов (Inbound
) и
тоссит тик-файлы и соответствующие файлы данных:
adrenalin.exe toss
Файлэхопроцессор сканирует Inbound
-каталог
в поиске файлов, удовлетворяющих маске *.ti?
;
это позволяет не пропустить те тик-файлы, которые были переименованы
мэйлером при получении тик-файла с таким же именем (а обычно в таком случае мэйлер
увеличивает последнюю букву имени файла, который уже лежит
в Inbound
-каталоге).
Файлы, на которые ссылаются обнаруженные тик-файлы,
переносятся в соответствующие каталоги, а затем подготавливаются к отправке
подписчикам, если таковые имеются (файлэхопроцессор создаёт новые тик-файлы
и готовит файлы к отправке линкам, либо с помощью Bink-style outbound
,
либо с помощью FileBoxes
).
При тоссинге происходит обновление файла newfiles.txt
в каталоге Адреналина. Для каждого обработанного файла данных
в этот файл помещаются следующие строки:
Area <имя файлэхи>
File <имя файла>
Size <размер файла, в байтах>
Desc <описание>
Origin <адрес, с которого файл был захатчен>
Uplink <адрес, с которого этот файл пришёл на Вашу станцию>
В случае автосоздания новой файловой области происходит
обновление файла newareas.txt
, и в него помещается строка
следующего содержания:
Fileecho area <имя области> created by <адрес отправителя тика>
Если в результате тоссинга будет успешно обработан хотя бы один
тик-файл, то произойдёт обновление файла traffic.dat
.
В первую строку файла записывается время, начиная с которого ведётся учёт
трафика, последующие строки имеют вид:
<имя области> <трафик в байтах>
Оформлением трафика в более читабельный текст занимается программка
на Перле traffic.pl
. Она входит в стандартную поставку файлэхопроцессора.
Когда файлэхопроцессор готовит файлы к отправке другой системе,
работая с Bink-style Outbound
, может возникнуть ситуация,
когда с этой же системой работает другое приложение (например, в это время
мэйлер выполняет с системой обмен файлами), и Bink-style Outbound
заблокирован (в нём существует флажок занятости, bsy
-файл).
В случае обнаружения флага занятости Адреналин будет работать с так называемым
"pending outbound
" вместо основного, используя для этого
подкаталог bso.tmp
в том каталоге, где находится adrenalin.exe
.
При очередном тоссинге Адреналин в первую очередь проверяет pending outbound
на наличие в нём файлов и добавляет их содержимое к настоящему
Bink-style Outbound
.
Аналогичный метод отложенной отправки (pending outbound
)
используется также и при хатчинге файлов.
По команде tossbad
Адреналин выполняет тоссинг "плохих" тиков.
Команда по своему действию аналогична команде toss
, за исключением
того, что сканируется BadTics
-каталог. Поиск файлов с данными
осуществляется в Inbound
-каталоге. Команда предназначена для
случаев, когда, например, тик-файлы считались некорректными из-за
неправильной настройки программы (например, неправильно прописанного пароля)
или же файлы для тиков отсутствовали, и тик-файлы были перемещены в BadTics
каталог, а файлы данных прибыли с опозданием.
4.2. Обработка нетмэйл-запросов к Адреналину.
По команде fix
Адреналин обрабатывает нетмэйл-запросы:
adrenalin.exe fix
Поиск запросов осуществляется в Netmail
-каталоге.
Запрос - письмо, имя адресата которого совпадает с одним из псевдонимов программы или
с именем Adrenalin
, а адрес назначения совпадает с одним из адресов
Вашей системы. Адреналин обрабатывает найденные запросы и создаёт необходимые письма-ответы
в том же каталоге. Письма запросов удаляются либо получают атрибут Received
,
в зависимости от значения параметра KillProcessedMail
(см. описание параметров
файла adrenalin.cfg
).
В запросах к Адреналину можно использовать следующие команды:
%help
-
программа вернёт руководство по использованию менеджера подписки;
%list
-
запрос списка Ваших областей, доступных данному линку;
%query
-
запрос списка областей, к которым подключён линк;
%linked
-
то же, что и %query
;
%unlinked
-
запрос списка областей, к которым линк не подключён, но на
которые он может подписаться;
%lock
-
команда переводит линка в пассивный режим;
%unlock
-
выход из пассивного режима;
%avail
-
запрос списка областей, доступных на аплинках;
%resend
-
пересылает содержимое файлэхи;
файлэхопроцессор создаёт тик-файлы для каждого отсылаемого файла.
Формат: %resend <имя области> [<маска файлов> ...]
Пример:
%resend NODEDIFF nodediff.z*
+<имя фэхи>
-
попытка подписаться на область; вместо имени фэхи возможно использование масок, содержащих
спецсимволы '*
' и '?
'
-<имя фэхи>
-
попытка отписаться от области; вместо имени фэхи возможно использование масок, содержащих
спецсимволы '*
' и '?
'
Каждый запрос должен находиться на отдельной строке письма.
В поле Subject
(тема) письма-запроса должен стоять
пароль данного линка.
4.3. Хатчинг файлов в файлэху.
По команде hatch
файлэхопроцессор осуществляет
хатчинг файла в указанную файлэху (с его копированием в соответствующий
каталог, созданием тик-файлов для подписчиков, подготовкой файлов к отправке линкам).
Эта команда имеет следующий формат:
hatch <file> <area> <desc> [-r <Replaces>] [-L] [-release <date> [<time>] [-delete]]
Если использована опция -L
, то файл не будет
перенесён в каталог файлэхи, а в BSO
-файлах будет указано
его полное имя.
Вместо имени файла, который надо захатчить, можно указать файл,
содержащий список файлов для хатчинга. При этом имя файла-списка надо
предварить символом '@
' при указании в командной строке.
Формат файла-списка:
<file> [<description>]
...
Если имя файла для хатчинга содержит пробелы, то оно должно быть
заключено в двойные кавычки. Если описание для какого-либо файла не указано,
будет взято описание из командной строки.
Пример:
файл to_hatch.lst
содержит следующие строки:
super1.zip Super-Puper1
super2.zip
Команда для хатчинга:
hatch @to_hatch.lst MYGOODAREA "some desc"
В результате её выполнения в фэху MYSUPERAREA
будут захатчены
файлы super1.zip
(с описанием Super-Puper1
, взятым из файла)
и super2.zip
(с описанием some desc
, взятым из командной строки).
Внимание: если указано значение Replaces
, то в тик-Файлы будет
добавлен параметр Replaces
, но на нашей системе файл НЕ будет заменён.
В версии 0.71alpha4
режим хатчинга был дополнен возможностью отложенного
хатчинга. В параметрах хатчинга можно указать дату и, при желании, время, когда Адреналин
непосредственно захатчит файл. Адреналин запомнит имя файла, описание, область, в которую
надо хатчить, время хатчинга в специальном служебном файле suspended.xml
.
Адреналин проверяет этот файл при каждом тоссинге (выполнении команды toss
).
Если пришло время хатчить (текущее время превышает время, указанное в файле), Адреналин
захатчит файл. Если Адреналин на момент хатчинга не найдёт файл или файлэху, он ругнётся
в лог и поместит в suspended.xml
соответствующую запись об ошибке
(с помощью элемента error
, например,
<error>file not found</error>
).
Отложенный хатчинг выполняется с помощью аргумента -release
, после которого
следует указать дату. Допустимые форматы даты: DD.MM
и DD.MM.YYYY
.
DD
- день месяца (01
- первый, 28
- двадцать восьмой
и так далее), MM
- месяц года (01
- январь, 03
- март), YYYY
- год от рождества христова. Если использован первый формат
(DD.MM
), то подразумевается текущий год.
Помимо даты хатчинга можно указать и время (следующим параметром, используя либо
формат HH:MM
, либо формат HH:MM:SS
). Если время не указано,
подразумевается 00:00:00
, и, следовательно, файл будет реально захатчен
при первом же тоссинге в указанную дату.
При отложенном хатчинге можно использовать дополнительный параметр -delete
,
в случае его указания Адреналин, выполняя реальный хатчинг файла в заданную дату, удалит
файл после хатчинга. Данный параметр нельзя использовать совместно с параметром
-L
, поскольку нельзя одновременно оставить файл на том же месте
(не копировать в файлэху) и удалить его (он будет недоступен линкам).
Пример: у нас есть 3 достаточно больших видеоролика, поэтому мы хатчим их по одному в день
adrenalin.exe hatch clip1.avi CLIPS "Cool clip [1/3]" -release 21.03
adrenalin.exe hatch clip2.avi CLIPS "Cool clip [2/3]" -release 22.03
adrenalin.exe hatch clip3.avi CLIPS "Cool clip [3/3]" -release 23.03
4.4. Пуржинг (зачистка) файлэх.
Адреналин поддерживает три основных режима зачистки файлэх. Прежде чем
рассмотреть каждый из них, необходимо заметить, что в версии 0.70alpha2
зачистка корректно работает лишь с Bink-style Outbound, поэтому я крайне не рекомендую
использовать её даже в случае, если только часть линков или избранные области
используют FileBoxes
.
Команды зачистки:
purge
-
"очищает" файлэхи, т.е. удаляет из них те файлы, для которых
отсутствуют тик-файлы (эта предпосылка с большой долей вероятности
позволяет считать, что подписчики получили файлы).
Данную команду можно использовать двумя способами:
1)
без параметров, в этом случае файлы будут удалены только из проходных
(pass-through
) файлэх;
2)
с параметрами - именами файлэх, которые надо "зачистить";
в имени файлэхи можно использовать спец. символы '*
'
(ноль или более любых символов) и '?
' (один любой символ);
если имя файлэхи предварено символом '-
', то данная
файлэха (файлэхи) будут исключены из предварительно полученного
списка очищаемых файлэх. Таким образом, следующая строка вызовет
удаление файлов из всех файлэх, кроме файлэхи BOOK
и файлэх, имена которых начинаются с XDOC
:
Adrenalin.exe purge * -BOOK -XDOC*
Для того, чтобы уберечься от случайного удаления файлов из
некоторых файлэх, вы можете наложить на них вето (см. задание
областей). Такие файлэхи будут зачищаться лишь при явном их
указании. Поясним на примере. Предположим, у нас есть
две области - BOOK
и NODEDIFF
,
причём для файлэхи BOOK
наложено вето на пуржинг.
Тогда выполнение следующей команды вызовет очистку лишь области
NODEDIFF
:
Adrenalin.exe purge *
Чтобы очистить и область BOOK
,
Вы должны указать её явно:
Adrenalin.exe purge * BOOK
timepurge
-
удаляет из Bink-style Outbound
ссылки на тики и файлы старше
указанного значения, а также удаляет старые тики.
Формат команды:
<hours> [<mask>]+
где
<hours>
- время (в часах), по которому оценивается
степень старости тиков;
<mask>
- маска для адресов линков, в маске
возможно использование спецсимволов '*
' (любая, даже пустая,
последовательность символов) и '?
' (один любой символ).
Например, */27.*
для обработки всех узлов с номером 27
.
Если маска не указана, будут обработаны все линки.
basepurge
-
удаляет из файлэх файлы старше указанного срока. Информация о
времени прихода файлов берётся из files.db
.
Формат команды:
<days> [areamask]+
где
<days>
- время (в днях), по которому оценивается
возраст файлов;
<areamask>
- маска для областей.
Если ни одна маска не указана, то будут зачищены все области, кроме
тех, на которые наложено вето.
В данном режиме пуржинга из таких областей нельзя удалить файлы, даже
непосредственно указав имена областей.
По окончании зачистки создаётся письмо сисопу со списком удалённых
файлов.
Данная команда не проводит корректировку BSO
и не удаляет тики.
4.5. Дополнительные режимы работы.
Адреналин поддерживает ряд других, ещё не освещённых выше команд.
debug
-
эта "недокументированная" команда позволяет проверить, насколько
правильно Адреналин считал настройки из файлов конфигурации. Вся
информация выводится в STDOUT
(в общем случае на
экран), поэтому для полноценного анализа советую перенаправить
вывод в файл:
Adrenalin.exe DEBUG > debug.txt
help
-
выводит на экран более детальную справку, чем та, что печатается
при запуске Адреналина без параметров.
relink
-
автоматически формирует письмо файлэхороботу указанной системы,
содержащее запрос на подписку на те фэхи, на которые мы на этой
системе подписаны.
Формат команды:
<address> [<robot name>]
где
<address>
- адрес системы, с которой надо перелинковаться
(требования к адресу такие же, как и предъявляемые к адресам
линков в файле конфигурации).
<robot name>
- необязательный параметр, задающий
имя работа,которому будет адресовано письмо. Если имя робота не
указано, то будет использовано имя робота из описания линка.
Если линку не назначено имя робота, то письмо адресуется
роботу AllFix
.
hand
-
имитирует письмо от линка Адреналину.
Формат команды:
<addr> <command>+
<addr>
- адрес линка (требования к адресу
такие же, как и предъявляемые к адресам линков в
файле конфигурации).
<command>
- любая команда.
Пример:
adrenalin.exe hand 27.1 %list +aftn*
changegroup
-
добавляет или удаляет группу из описания указанных линков,
тем самым избавляя Вас от необходимости редактировать
links.xml
вручную.
Формат команды:
changegroup (+|-)<group> <links mask>
Чтобы добавить группу, предварите её имя плюсом, чтобы удалить -
минусом.
<links mask>
- маска для линков, которые
надо отредактировать на предмет доступа к группе.
Примеры:
adrenalin.exe changegroup +NewLocalGroup 2:5023/27.*
- разрешает доступ к группе с именем NewLocalGroup
всем моим поинтам.
adrenalin.exe changegroup -MUSIC 3:*/*
- запрещает доступ к группе MUSIC
всей Австралии.
Примечание: Вы можете использовать в данной команде даже имена
пока ещё не существующих групп (тех, которые не прописаны в
areas.xml
).
5. Благодарности.
Хочу выразить свою признательность всем людям, так или иначе оказавшим
мне помощь в создании данной программы, присылавшим свои пожелания и
конструктивную критику, а также всем подписчикам ADRENALIN.SUPPORT
(даже тем, кто ни разу не написал в эху).