Аргус - это почтово-файловая транспортная система, предназначенная для многолинейной работы в сетях Dialup (коммутируемых модемных соединений) и TCP/IP (транспортного протокола сети Интернет) одновременно. Главная задача системы Аргус - прием и передача файлов в автоматическом режиме.
Основными достоинствами системы Аргус являются:
Система Аргус разрабатывалась с учетом всех преимуществ интерфейса Win32, реализованного в Windows NT и в Windows 95. Такими преимуществами являются: возможность одновременного выполнения параллельных процессов (что дает ощутимый выигрыш в мультипроцессорных системах), расширенный графический интерфейс пользователя, поточный механизм обмена с коммуникационными устройствами, и.т.д.
Благодаря распределенности и параллельности процессов Аргуса, системные ресурсы Windows используются максимально эффективно и экономично.
Одно из главных новшеств системы Аргус - ее истинная многолинейность, благодаря чему координация линий производится быстро и эффективно. Теоретических ограничений на количество одновременно активных сеансов связи (соединений) не существует, на практике все зависит от имеющихся в распоряжении системных ресурсов. Обмен данными с одним и тем же почтовым узлом может производиться как по Dial-up, так и по TCP/IP, в зависимости от текущей доступности интерфейса.
Модемные (Dial-up) линии активизируются либо автоматически, при старте системы, либо по команде оператора System / Open Dialup Line. Для каждой активизированной модемной линии необходим как минимум коммуникационный порт, следовательно, количество одновременно открытых модемных линий ограничено количеством свободных коммуникационных портов.
Линии TCP/IP создаются и освобождаются динамически, под управлением TCP/IP Daemon. Как только с системой Аргус произошло очередное входящее/исходящее соединение, Daemon динамически открывает новую линию почтовой системы и инициирует соответствующий почтовый протокол. По окончании сеанса связи Daemon закрывает линию и завершает TCP/IP соединение.
В почтовой системе Аргус введена поддержка протоколо-независимого транспортного интерфейса WinSocket 2.0, который открывает множество новых возможностей. Такими возможностями являются параллельная работа с разными транспортными протоколами (не только TCP/IP), протоколо-независимое преобразование имен хостов (например, SAP, X.500, и.т.д., а не только DNS), Win32-overlapped режим ввода-вывода, общие сокеты, условные соединения, обмен данными во время соединения / разрыва, и.т.д.
В Shareware-версии системы Аргус поддерживается один из самых распространенных транспортных протоколов WinSocket 2.0 - TCP/IP (транспортный протокол сети Интернет).
Благодаря использованию WinSocket 2.0 и Win32, преобразование имен, установка и завершение соединений, операции ввода/вывода TCP/IP - все это происходит параллельно и не мешает работе TCP/IP-стека и всей системы в целом. Контролем за TCP/IP-линиями почтовой системы занимается TCP/IP Daemon.
Система Аргус взаимодействует с другими системами по стандартам, о которых пойдет речь в этой главе. Так как почтово-транспортная система Аргус построена на базе FTN (Fidonet Technology Network), в ней поддерживаются стандарты и предложения, принятые комитетом FTN. Кроме того, поддерживаются некоторые общие стандарты, свойственные для почтовых систем стандарта FTN.
В этой главе содержится описание стандартов и предложений, принятых комитетом FTN. Затрагиваются лишь основные моменты, которые желательно знать любому пользователю, имеющему дело с настройкой и эксплуатацией почтовой системы FTN, коей является система Аргус. Оригинальные документы находятся на ftp://ftp.fidonet.org
Список узлов (Nodelist) - это официальный документ в рамках сети. Использование и поддержка списка узлов является удобным способом распространения и обновления данных об узлах сети.
Система Аргус поддерживает список узлов стандарта FTS-0005, который соответствует списку узлов сети Public Fidonet Network (PFN), публикуемому каждую пятницу. Этот формат исторически известен как St. Louis nodelist format.
Список узлов стандарта FTS-0005 представляет собой ASCII-файл. Имя файла соответствует маске NODELIST.%%%, где %%% - это три цифры, представляющие число (дополненное слева нулями) дней с начала года до пятницы, в которую был опубликован. Файл списка узлов содержит два типа строк: строки комментариев, начинающиеся с символа “;” и строки данных. Каждая строка завершается парой ASCII-симолов перевода строки (CR) и возврата каретки (LF). Строк данных не может содержать пробелов и символов табуляции. Файл завершается ASCII-символом конца файла (десятичный код 26, или “Ctrl-Z”).
Система Аргус снимает множество ограничений, накладываемых на список узлов стандартом FTS-0005. Так, например, маска NODELIST.%%% не является обязательной для Аргуса, как и символ конца файла, а пятница не является единственно допустимым днем недели для опубликования.
Каждая строка данных списка узлов состоит из восьми полей, разделенных запятой “,”. Так как использование пробельных символов в строке данных не допускается, вместо них применяется символ подчеркивания “_”.
Zone | Служит для определения зоны и ее координатора. Все последующие строки данных описывают регионы, сети, и узлы этой зоны. Узлы, определенные сразу после ключевого слова “Zone”, но до первого определения региона или хоста, являются административными узлами зоны. |
Region | Служит для определения региона в пределах зоны и его координатора. Узлы, определенные сразу после ключевого слова “Region”, но до первого “Zone”, “Region” или “Host”, называются независимыми узлами данного региона. |
Host | Служит для определения сети и ее координатора. Узлы, определенные после ключевого слова “Host”, но до первого “Zone”, “Region” или “Host”, являются узлами (или членами) данной сети. |
Hub | Определяет узел, который является главным в подсегменте сети. Подсегмент включает все узлы до первого “Zone”, “Region”, “Host” или “Hub”. |
Pvt | Определяет служебный узел в рамках сети. В соответствии с FTS-0005, этот флаг позволяет узлу иметь неопубликованный номер телефона. |
Hold | Определяет временно нефункционирующий узел, на который почта обычно передается через сетевого координатора. |
Down | Определяет полностью нефункционирующий узел, подлежащий скорому удалению из списка узлов. На этот узел почта передаваться не может. |
пусто | Определяет обычный узел. |
Номера зон должны быть уникальными. Номера регионов и сетей должны быть уникальными только в пределах своей зоны. Номера главных узлов подсегментов уникальны в пределах своей сети. Номера узлов уникальны в пределах сети (в пределах региона, для независимых узлов региона, и в пределах зоны, для административных узлов зоны).
Поле номера телефона может содержать, вместо номера, зарезервированную строку “-Unpublished-”. По стандарту FTS-0005, узел с неопубликованным телефоном должен обязательно иметь ключевой слово Pvt в первом поле. Аргус такое ограничение не накладывает, и строка “-Unpublished-” может присутствовать вместо номера телефона у любого узла, в таком случае прозвонка на такой узел просто не будет производиться.
Вот несколько примеров строк данных списка узлов:
Zone,2,Europe_&_more,Belgium,Ward_Dossche,32-3-4480880,9600,CM,XX,U,K12,Z19
Region,46,Ukraine_and_Moldova,Donetsk_Ukraine,Anton_Kuznetsov,380-622-322106,9600,V34,V32B,V42B,CM,MO,XA,U,ENC
Host,469,Moldova_Net,Moldova,Michael_Karpov,373-2-246484,9600,V34,XX,MO,U,TSF
Hub,38,RIT_Zeppelin,Kishinau,Auto_Pilot,373-2-246888,9600,CM,MO,V34,XA,ZYX
,84,Blue_Carnation,Kishinau,Max_Masyutin,373-2-511511,9600,ZYX,XA
EMSI - это универсальный протокол инициирования сеанса связи, разработанный для модемных соединений, производимых как по семибитовым, так и по восьмибитовым каналам. Благодаря своей простоте, протокол EMSI имеет неограниченные возможности для расширения. Все последующие версии протокола обратно совместимы с предыдущими. Обмен данными осуществляется путем передачи пакетов переменной длинны, состоящих из ASCII-символов в диапазоне 32-127, и защищенных контрольной суммой.
Протокол соединения EMSI сводится к передаче сторонами друг другу следующих данных: параметры коммуникационной линии (например, 8N1, 7E1, 7O2, и т.д.), опции вызывающей/отвечающей системы, типы поддерживаемых протоколов передачи файлов (а также данные о том, обрабатывает ли система файловые запросы, поддерживает ли передачу файлов с длинными именами, и т.д.), данные о почтовой системе (код продукта, имя почтовой системы, номер версии и серийный номер). Все вышеперечисленные поля Аргус генерирует автоматически. Кроме этого, при EMSI-соединении передаются дополнительные данные из списка узлов, которые заполняются при настройке системы Аргус в диалоге Config/Dialup/Station: имя станции, список адресов (AKA), имя системного оператора, географическое положение станции, номер телефона и дополнительные флаги, а также пароль на сеанс связи. Пароль прописывается в Config/Passwords.
После успешного EMSI-соединения начинается сеанс передачи файлов.
Во время сеанса, Аргус может инициировать один из семи (перечисленных ниже в порядке увеличения предпочтения) типов протоколов передачи файлов.
ZedZip | Классический Zmodem (однонаправленный протокол передачи). Максимальный размером блока - 1K |
ZedZap | Zmodem с максимальным размером блока 8K, за счет этого - улучшенная эффективность на качественных линиях |
DirZap | ZedZap, с улучшенной на 5% эффективностью, за счет прямой передачей всех управляющих символов |
Hydra | Двунаправленный (истинно дуплексный) протокол. Описан в отдельной главе |
FTS-0001 | Протокол, поддержка которого на входящем сеансе связи является техническим требованием любого узла сети FidoNet. В рамках сеанса FTS-0001 поддерживаются заголовки пакетов FSC-0039 и FSC-0045 для извлечения данных об удаленной системе. Обратите внимание на следующие ограничения: - Исходящие сеансы связи на FTS-0001 не производятся. - Во время сеанса FTS-0001 Аргус не передает файлы удаленной системе. Производится только прием. - Длина пароля ограничена восемью символами (столько места отведено под пароль в заголовке пакета FTS-0001/FSC-0039/FSC-0045). Узлы с паролем длиннее восьми символов не смогут установить парольное FTS-0001 соединение с Аргусом. - Skip File / Reject File (а также refuse/delay) недоступны. - Докачка не производится. - Некоторые FTS-0001-системы не предоставляют время/дату создания файла. - В протоколе FTS-0001 не предусмотрено решение проблем 2000-го года. Протокол FTS-0001 не рекомендуется к применению. Его наличие в системе Аргус обусловлено необходимостью соответствия техническим требованием Fidonet как самой крупной FTN-сети. |
BinkP | Протокол BinkP был изначально разработан для использования на каналах связи, исключающих возможность ошибок. В сетях Интернет контролем ошибок занимается протокол TCP (Transport Control Protocol), находящийся на уровне OSI Transport Layer. В качестве Transport Layer'а для использования BinkP через Dial-up применяется собственный алгоритм Niagara. Основные преимущества алгоритма Niagara - эффективная коррекция ошибок в условиях модемных линий и асинхронной передачи, а также защита от эффекта "обратной петли". |
BinkP / Encrypted | Шифрованный сеанс связи BinkP. В этом режиме передаваемый и принимаемый потоки данных шифруются алгоритмом DES/CBC с 56-битным ключом. Шифрование ведется на уровне между Transport Layer (TCP or Niagara) и Protocol Layer (BinkP). Имейте ввиду, что шифрование несет нагрузку на CPU. Используемую программную реализацию алгоритма DES разработал Eric Young (eay@mincom.oz.au). Кроме того используется RSA Data Security, Inc. MD5 Message-Digest Algorithm. |
Протокол передачи файлов “Гидра” разработали Joaquim H. Homrighausen и Arjen G. Lentz в 1993 году. Гидра сочетает в себе преимущества более ранних протоколов - Zmodem и Janus. Основное достижение протокола Гидра (как и протокола EMSI) - это простота и расширяемость, несмотря на изначально высокую эффективность, особенно при двунаправленной передаче. Все последующие версии протокола обратно совместимы с предыдущими. Для работы протокола достаточно канала, пропускающего символы в диапазоне 32-126 и служебный символ 24. Гидра хорошо приспособлена к тайм-аутам (спутниковые / сетевые / модемные задержки), и, несмотря на это, сохраняет максимальную надежность, устойчивость и скорость.
В древнегреческой мифологии имя Гидры принадлежало дочери Тифона и Ехидны, змее чудовищных размеров, с девятью головами, из которых восемь - смертных, и одна (центральная) - бессмертна.
Далеко не все узлы сети имеют возможность работать круглосуточно, поэтому в 1996 году David J. Thomas предложил ввести в список узлов дополнительный опциональный флаг, указывающий время работы узла. Этот флаг имеет форму Txy, где x представляет время начала, а y - время завершения работы узла, в соответствии со следующим форматом:
A | 0:00 | F | 5:00 | K | 10:00 | P | 15:00 | U | 20:00 | ||||
a | 0:30 | f | 5:30 | k | 10:30 | p | 15:30 | u | 20:30 | ||||
B | 1:00 | G | 6:00 | L | 11:00 | Q | 16:00 | V | 21:00 | ||||
b | 1:30 | g | 6:30 | l | 11:30 | q | 16:30 | v | 21:30 | ||||
C | 2:00 | H | 7:00 | M | 12:00 | R | 17:00 | W | 22:00 | ||||
c | 2:30 | h | 7:30 | m | 12:30 | r | 17:30 | w | 22:30 | ||||
D | 3:00 | I | 8:00 | N | 13:00 | S | 18:00 | X | 23:00 | ||||
d | 3:30 | i | 8:30 | n | 13:30 | s | 18:30 | x | 23:30 | ||||
E | 4:00 | J | 9:00 | O | 14:00 | T | 19:00 | ||||||
e | 4:30 | j | 9:30 | o | 14:30 | t | 19:30 |
Время указывается в UTC (Universal Co-ordinated Time), что соответствует времени Гринвичского меридиана без переводов на летнее/зимнее время.
Флаг Txy указывается после специального флага U.
Период работы станции может переваливать через полночь. Так, например, узлу, работающему с 18:00 до 6:00 UTC, соответствует флаг TSG.
Система Аргус позволяет объединять интервалы времени, используя перечисление флагов Txy. Например, TCh,TSW означает 2:00-6:30 и 18:00-22:00 UTC.
Кроме того, система Аргус поддерживает расширенный флаг TxyL, определяющий время работы узла по местному времени. Так, например, узлу, работающему с 18:00 до 6:00 по местному времени соответствует флаг TSGL.
Буфер отправки системы Binkley и файл-боксы.
Протокол BinkP
Этот раздел раскрывает принципы структуры буфера системы Binkley (Binkley-style outbound).
Буфер отправки системы Binkley был впервые применен в почтовой системе BinkleyTerm by Bit Bucket Software, после чего стал одним из стандартов де-факто для систем подобного рода.
Буфер системы Binkley служит для определения файлов, подлежащийх отправки. Кроме буфера Binkley, файлы можно отправить, используя файл-боксы.
Буфер системы Binkley представляет собой определенную структуру каталогов, содержащую файлы, подлежащие отправке. Буфер для текущей зоны (Default outbound zone) располагается в каталоге, указанном в поле Outbound окна настройки каталогов. Буфера для других зон содержатся в каталогах с такими же именами, как и для текущей зоны, с одним лишь отличием, что в поле расширения их имени содержатся три шестнадцатеричных цифры, представляющие 12-битое число, являющееся номером соответствующей зоны. Вот откуда растут корни ограничения максимального номера зоны числом 4095 (FFF в шестнадцатеричной системе).
OUTBOUND | Буфер для текущей зоны (Default outbound zone) |
OUTBOUND.001 | Буфер для зоны 1 (Северная Америка) |
OUTBOUND.03F | Буфер для зоны 63 (3F в шестнадцатеричной системе) |
Пакеты подразделяются по типу приоритетности и по способу привязки.
Система Аргус поддерживает четыре типа приоритетности, перечисленные в порядке уменьшения приоритетности: Crash, Direct, Normal и Hold. Имена типов имеют больше историческое, чем практическое значение.
По способу привязки, пакеты подразделяются на прямые почтовые и списки привязанных файлов.
Тип | Инициирует прозвонку | Передается при исходящем соединении | Расширение прямого почтового пакета | Расширение списка привязанных файлов |
Crash | да | да | CUT | CLO |
Direct | да | да | DUT | DLO |
Normal | нет | да | OUT | FLO |
Hold | нет | нет (зависит от Transmit Hold on outgoing). | HUT | HLO |
Список привязанных файлов - это текстовый файл, содержащий строки, каждая из которых несет путь к файлу, подлежащему отправке. После успешной отправки файл может быть удален (если в строке перед путем к файлу стоит символ ^) или урезан до нулевого размера (если в строке перед путем к файлу стоит символ #).
Имя файла пакета из буфера отправки состоит из восьми шестнадцатеричных цифр, первые четыре из которых представляют 32-битный номер сети соответствующей зоны, а остальные четыре - 32-битный номер узла. Отсюда и природа числа 65535, как максимальное значение номера сети и узла.
Рассмотрим типичный пакет с именем - 01D50026.CLO, являющийся списком привязанных файлов, подлежащий отправке на узел 469/38 с приоритетом Crash.
01D5 | шестнадцатеричное число 469 - номер сети |
0026 | шестнадцатеричное число 38 - номер узла |
.CLO | список привязанных файлов с приоритетом Crash |
#e:\fido\outbound\0000040.tu3
^d:\work\source\help\argus\hlpsrc.rar
e:\fido\staff\mw(all).rar
Это значит, что на узел будет передано 3 файла, причем e:\fido\outbound\0000040.tu3 после передачи будет урезан до нулевого размера, а d:\work\source\help\argus\hlpsrc.rar после передачи будет удален.
Для отправки определенным пойнтам узла, в соответствующем буфере (основном или для конкретной зоны) создается каталог с расширением .PNT, имя которого, по аналогии с именем пакета, представляет собой шестнадцатеричный номер сети и узла. В этот каталог помещаются прямые почтовые пакеты и списки привязанных файлов. Имя каталога представляет шестнадцатеричный номер пойнта соответствующего узла. Например, пакет с именем 0000001e.CUT, вложенный в каталог 01D50066.PNT, будет отправлен пойнту 469/102.30
Кроме пакетов, в буфере отправки системы Binkley содержатся файлы следующих типов:
.BSY | Индикатор занятости узла. |
.REQ | Список файлов, запрашиваемых у удаленного узла |
.HRQ | Список файлов, запрошенных удаленным узлом |
Outbound SmartMenu является мощнейшим инструментом для работы с элементами буфера отправки системы Binkley.
Outbound SmartMenu не предназначено для работы с файл-боксами и файлами, находящимися в файл-боксах.
SmartMenu может быть вызвано только при активной страничке Outboubd. Для вызова нажмите “пробел” или правую кнопку мыши на элементе буфера.
Идеологически SmartMenu разделено на четыре части. Первая служит для работы с текущим узлом, вторая - с текущим элементом буфера, третья - с группой элементов текущего узла, и четвертая - со всеми элементами буфера.
Графически SmartMenu представлено как динамическое Pop-up Menu (всплывающее меню), конструируемое на основе данных о текущем узле, текущем элементе буфера, группе элементов текущего узла и остальными элементами буфера.
Над элементами буфера отправки допустимы следующие действия:
Readdress | Переадресовать элементы. Переадресация элементов означает их отсоединение в буфере от прежнего узла и присоединение к новому узлу. Расширение переадресуемых *.?UT-файлов изменяется на PKT. |
Finalize | Произвести с элементами действие, аналогичное производимому по окончании успешной отправки. *.?UT и Kill-Sent-файлы будут удалены, размер Truncate-Sent файлов будет установлен в нулевое значеие. В любом случае файлы будут отсоединены, и при сеансе связи с узлом передаваться не будут. |
Change to Crash | Изменить тип приоритетности на Crash. При изменении типа приоритетности, как и в случае с Readdress, *.?UT-файлы переименовывается в *.PKT |
Change to Direct | Изменить тип приоритетности на Direct |
Change to Normal | Изменить тип приоритетности на Normal |
Change to Hold | Изменить тип приоритетности на Hold |
Unlink | Отсоединить файлы. *.?UT-файлы будут удалены, остальные же будут просто выписаны из соответствующих списков привязки (*.?LO). Kill-Sent и Truncae-Sent файлы останутся на диске неизмененными. Отсоединенные файлы при сеансе с узлом передаваться не будут. |
Remove Broken Links | Проверить списки привязки (*.?LO) и вычеркнуть из них ссылки на ненайденные файлы. |
Протокол BinkP, предназначенный для инициирования сеанса связи и передачи файлов по двунаправленному двоичному каналу, не допускающему ошибок (например, TCP/IP), был разработан в 1996 году Димой Маловым. BinkP сочетает в себе как протокол инициирования сеанса связи, так и протокол передачи файлов.
Появление протокола BinkP дало настоящий толчок развитию Fido-коммуникаций на базе транспорта Интернет. До этого, Fido-почта, долгие годы, если и передавалась через TCP/IP, то весьма неэффективно, используя протоколы, разработанные исключительно для модемных соединений - EMSI (для инициирования сеанса связи) и Zmodem / Гидра (для передачи файлов). Дело в том, что эти протоколы содержали большую избыточность по времени и по передаваемым данным. Эта избыточность необходима для контроля ошибок, возникающих только при асинхронной передачи и модуляции цифровых данных по телефонным линиям.
За счет отсутствия квитирования, инициирование сеанса связи через BinkP происходит во много раз быстрее, чем через EMSI при той же пропускной способности канала. Особый выигрыш ощущается на каналах с большой задержкой, особенно при передаче большого количества файлов малой длины.
Диалоговое окно Config / Encrypted Links позволяет определять узлы, соединения с которыми доступны только посредством шифрованного сеанса связи по протоколу BinkP. Для этого необходимо указать адрес узла и пароль, который преобразуется в DES-ключ для шифрования потоков данных. DES-ключи шифрованных сеансов связи хранятся в файле config.bin вместе с остальной конфигурацией, по одному ключу (56 бит) на один узел. Одним из способов защиты DES-ключей и данных конфигурации является Master Password.
В шифрованном сеансе связи BinkP, передаваемый и принимаемый потоки шифруются алгоритмом DES/CBC с 56-битным ключом. Шифрование ведется на уровне между Transport Layer (TCP or Niagara) и Protocol Layer (BinkP). Имейте ввиду, что шифрование несет нагрузку на CPU. Используемую программную реализацию алгоритма DES разработал Eric Young (eay@mincom.oz.au). Скорость шифрования потока составляет примерно 1 мегабайт в секунду на Pentium 120 MHz. Кроме того, для идентификации DES-ключей, используется RSA Data Security, Inc. MD5 Message-Digest Algorithm.
В качестве Transport Layer'а для использования BinkP через Dial-up применяется алгоритм Niagara. Основные преимущества алгоритма Niagara - эффективная коррекция ошибок и защита от эффекта "обратной петли". Этот эффект возникает, когда передающее устройство (модем), в силу каких-либо причин, переходит в режим непосредственного возврата передаваемых байтов передатчику. Таким образом, передатчик начинает передачу информации (файлы, и.т.д.) как бы “сам себе”. В отличии от протокола Niagara, протокол Гидра(FSC-0072) не защищен от эффекта "обратной петли".
В этой главе описываются основы асинхронных коммуникаций с использованием стандартного последовательного порта, а также такие свойства порта, как параметры линии, ошибки передачи и контроль потока данных.
Вы можете пропустить эту главу, если достаточно хорошо знакомы с концепциями работы последовательного порта, или используете систему Аргус только для работы по TCP/IP, однако, потратив несколько минут на ознакомление с ее содержимым, Вы, возможно, избавитесь от некоторого количества вопросов и затруднительных ситуаций в будущем.
Вместо представления изнурительного описания всего неохватного количества деталей последовательной асинхронной передачи, в этой главе излагаются только те детали, которые Вам желательно знать для настройки и работы с системой Аргус. Здесь излагаются концепции, о которых Вы должны иметь представление хотя бы перед тем, как подсоединить последовательное асинхронное устройство к вашему компьютеру.
Наиболее общее определение “последовательные коммуникации” подразумевает что-либо передающее и принимающее данные последовательным образом, где за одним битом следует другой в едином потоке, следующим по одному проводу. В “параллельных коммуникациях”, наоборот, множество бит передаются параллельно по множеству проводов. Термин “асинхронные коммуникации” означает, что поток данных включает стартовый и стоповый биты, которые отмечают начало и конец каждого символа в потоке данных. В “синхронных коммуникациях”, наоборот - стартовый и стоповый биты отсутствуют, но оба конца передачи синхронизированы по времени, чтобы быть готовым к началу и завершению передачи каждого символа.
Когда пользователи PC говорят об “асинхронных коммуникациях”, речь обычно идет о коммуникациях, обеспеченных “последовательными портами” (или “COM-портами”) компьютера. К этим портам можно подсоединить множество периферийных устройств, таких как модемы, принтеры, плоттеры, устройства ввода и лабораторные инструменты, в общем, любые устройства, которые работают по тем же стандартам, что и последовательный порт. В этих главах термин “устройство” подразумевает именно физическое устройство, подсоединенное к компьютеру через COM-порт.
Потому как низкоуровневые части последовательных коммуникаций строго стандартизированы, Вам, как правила, нет необходимости вдаваться в такие технические подробности, как напряжение линии, нумерация ножек, и т.д. Но Вам необходимо знать о параметрах линии и способе контроля потока данных. В системе Аргус, параметры линии выглядят следующим образом:
57600, CTS/RTS, 8N1
Это означает, что линия настроена на скорость передачи 57600 бод, используется тип контроля потока “CTS/RTS”, биты четности не используются, восемь бит данных, и один стоповый бит. Перед началом передачи оба конца должны иметь одинаковые параметры линии. В системе Аргус параметры линии настраиваются в диалоговом окне Config/Dialup/Ports.
Ниже приведены определения этих параметров, и руководства по правильной настройке значений.
Когда стоит выбор, обычно следует использовать наибольшую скорость передачи, чтобы достичь максимальной пропускной способности. Однако программная или аппаратная среда может наложить ограничения на скорость передачи. Производительность компьютера, тип микросхемы, обслуживающей COM-порт, качество линии, тип коммуникационного драйвера Windows, загруженность системы - и все это в целом и/или по отдельности может ограничить максимально возможную скорость передачи. Обычно, любой 386-машине под Windows NT или Windows 95 хватает ресурсов, чтобы нормально обеспечить скорость передачи в 9600 бод. Более быстрые машины, оснащенные процессором 486, либо одним или несколькими Pentium, позволяют нормально работать на скорости, максимальной для стандартного коммуникационного драйвера Windows - 115.2K бод.
Есть и другие факторы, влияющие на выбор скорости передачи. Например, если Вы используете модем на 14400 бод, нет особого смысла в скорости обмена 115200 между компьютером и модемом. Уменьшая скорость передачи, Вы уменьшаете вероятность возникновения ошибок и снижаете загрузку системы.
Протоколы EMSI и Гидра, поддерживаемые системой Аргус, могут работать как с восьми, так и с семибитовым байтом.
N | None | Бит четности не добавляется. Контроль четности не производится. |
O | Odd | Бит равен 1, если сумма бит байта данных нечетна и 0 в противном случае |
E | Even | Бит равен 1, если сумма бит байта данных четна и 0 в противном случае |
M | Mark | Бит всегда равен 1, вне зависимости от суммы бит байта данных. |
S | Space | Бит всегда равен 0, вне зависимости от суммы бит байта данных. |
При операциях асинхронного ввода/вывода (как и при любых формах ввода/вывода), естественно, могут происходить ошибки. Ошибки возникают, когда байт, полученный приемником, не соответствует байту, посланному передатчиком. Это обычно происходит вследствие электрических помех.
Ошибки, инициируемые асинхронным приемопередатчиком, передаются от драйвера COM-порта Windows системе Аргус через стандартные средства интерфейса Win32. Система Аргус, в свою очередь, сообщает об этих ошибках в хронологическом журнале, приблизительно в следующей форме:
ComError CE_FRAME, In=8b, OutB=0b
“CE_FRAME” - это один из возможных типов ошибок, возвращаемых драйвером Windows, “InB”/”OutB” - число байт, находившихся в буферах приема и передачи в момент возникновения ошибки. Одновременно может возникнуть несколько типов ошибок, в этом случае они будут перечислены в той же строке, отделенные символом |
Следующие четыре типа ошибок инициируются самим асинхронным приемопередатчиком. Эти ошибки подробно описаны далее.
CE_BREAK | The hardware detected a break condition |
CE_FRAME | The hardware detected a framing error |
CE_RXPARITY | The hardware detected a parity error |
CE_OVERRUN | A character-buffer overrun has occurred - the next character is lost |
CE_RXOVER | An input buffer overflow has occurred |
CE_TXFULL | The application tried to transmit a character, but the output buffer was full |
CE_IOE | An I/O error occurred during communications with the device |
CE_MODE | The requested mode is not supported |
CE_DNS | Windows 95 only: A parallel device is not selected |
CE_OOP | Windows 95 only: A parallel device signalled that it is out of paper |
CE_PTO | Windows 95 only: A time-out occurred on a parallel device |
Ошибки четности также возникают вследствие влияния помех на линию передачи, в этом случае ошибки появляются группой, иногда случайно, иногда с некоторой периодичностью, чередуясь с относительно долгими периодами безошибочной передачи. В этом случае решением проблемы может стать удаление кабеля от источников электромагнитных помех. Укоротить кабель - тоже выход.
Контроль потока данных (flow control) - это возможность приостанавливать поток данных при асинхронной передаче по запросу удаленной системы. Контроль потока данных необходим, когда скорость обработки принимаемых данных может быть меньше скорости поступления данных.
Случается, что данные поступают со слишком большой скоростью, а у компьютера не хватает процессорных ресурсов, необходимых для их обработки. Тогда, через некоторое время, может наступить переполнение буфера приема, и данные, поступающие от удаленной системы, будут потеряны.
Контроль потока данных можно рассматривать с двух сторон: контроль потока принимаемых данных и контроль потока передаваемых данных. Контроль потока принимаемых данных означает возможность сообщать удаленной стороне о том, что ей следует приостановить передачу данных. Контроль потока передаваемых данных означает возможность правильно отрабатывать запрос удаленной стороны о приостановке передачи данных.
Система Аргус практически никогда не пользуется контролем потока принимаемых данных. Чтением из порта занимается отдельный подпроцесс с повышенным приоритетом, и переполнения буфера приема практически никогда не происходит.
Если использовать 19200-BPS модем на скорости порта 38400, данные будут поступать от компьютера к модему с вдвое большей скоростью, то есть в среднем половину времени входной буфер модема будет заполнен, и модем будет запрашивать о приостановке передачи потока. Чтобы предотвратить потери данных, система Аргус должна правильно отрабатывать запросы модема на приостановку передачи потока.
Существует два типа контроля потока данных - аппаратный и программный.
Аппаратный контроль потока данных
Аппаратный контроль потока данных осуществляется при помощи контрольных сигналов последовательного кабеля. Название и значение этих сигналов соответствует спецификации RS-232.
Аппаратный контроль потока данных, в соответствии со стандартами, требует, чтобы модем поднял сигнал CTS перед тем, как PC начнет передавать символы. PC, в свою очередь, должен опустить сигнал RTS, когда его входной заполнится во время приема. Как только PC обработает весь входной буфер, он снова поднимает RTS.
Вот и все, что Вам необходимо знать об аппаратном контроле потока данных при работе с системой Аргус. Далее следует более детальный обзор темы.
PC | Устройство | |
data input | п | data output |
data output | р | data input |
DTR | р | DSR |
RTS | р | CTS |
DSR | п | DTR |
CTS | п | RTS |
DTR | data terminal ready | готовность устройства |
RTS | request to send | запрос на посылку |
DSR | data set ready | набор данных готов |
CTS | clear to send | передача разрешена |
Сигнал DTR поднимается системой Аргус сразу после инициализации COM-порта и означает, что Аргус работает с этим портом. RTS тоже поднимается после инициализации COM-порта, и означает готовность Аргуса принимать данные. Так как чтением из порта в системе Аргус занимается отдельный подпроцесс с повышенным приоритетом, и переполнения буфера приема практически никогда не происходит, сигнал RTS поднят постоянно.
DSR - это входной сигнал от устройства, означающий, что устройство подсоединено и включено, но не обязательно готово принимать данные. CTS это входной сигнал от устройства, означающий, что устройство, кроме того, что подсоединено и включено, готово к приему данных.
DTR и DSR применяются в системе Аргус не контроля потока данных, а для индикации готовности к работе. Для аппаратного контроля потока в системе Аргус применяются RTS/CTS - если это не запрещено в диалоге настройки порта. Эти сигналы обрабатываются драйвером Windows автоматически. При обнаружении заполнения буфера приема драйвер опускает RTS. При обнаружении падения сигнала CTS драйвер приостанавливает передачу.
Программный контроль потока данных
Программный контроль потока данных (XOn/XOff flow control) осуществляется двумя специальными символами: символ приостановления потока - XOff (ASCII 19) и символ продолжения потока - XOn (ASCII 17). Обычно в системе Аргус программный контроль потока данных не используется, но если разрешить его в диалоге настройки порта, коммуникационный драйвер будет приостанавливать передачу при получении символа XOff и продолжать при получении XOn.
В этой главе описывается среда Аргуса: расширенные графические элементы, менеджер прозвонок, окно линии почтовой системы, и главное меню.
В этой главе описываются расширенные элементы графического интерфейса, используемые в Аргусе:
Основным инструментом ввода и изображения строковых данных в Аргусе является сетка ввода строк. Сетки бывают двух видов - с фиксированным и переменным количеством строк.
Пример сетки с фиксированным числом строк
Пример сетки с переменным числом строк
Перемещаться по полям сетки можно клавишами-стрелками.
Перейти в режим изменения значения фокусированного поля можно одним из способов:
Вставить строку | Ctrl+Ins |
Удалить строку | Ctrl+Del |
Добавить строку | Ctrl+GrayPlus |
Переместить строку | Ухватиться мышью за номер строки и перенести ее в нужное место |
Edit cell | Перейти в режим изменения значения фокусированного поля (редактировать ячейку) |
Add row | Добавить строку в конец таблицы |
Insert row | Вставить строку |
Duplicate row | Дублировать строку |
Delete row | Удалить текущую строку |
Export table | Экспортировать содержимое таблицы в текстовый файл |
Import table | Импортировать из текстового файла содержимое таблицы |
Help on grid | Вызвать данную справку |
См. также Расширенные элементы графического интерфейса
Последние 200 записей линии почтовой системы хранятся в окне хронологии. Обычно прокрутка строк в этом окне производится автоматически, причем таким образом, чтобы последние занесенные строки были видимыми. Если перенести фокус на это окно, то автоматическая прокрутка приостанавливается, чтобы сделать удобным изучение всего содержимого окна. Если перенести фокус на другой элемент окна почтовой системы, то автоматическая прокрутка содержимого возобновляется.
См. также Расширенная хронология.
В правой части окна почтовой системы находятся окна-индикаторы активности модема во время ожидания звонка, инициализации модема, набора номера, и инициализации сеанса связи. В верхнем окне-индикаторе отображаются символы и управляющие спецсимволы, передаваемые модему, а в нижнем - символы, принимаемые от модема.
Обычные символы отображаются черным цветом, а управляющие - голубым.
Каждое окно-индикатор - это своеобразный терминал, или матрица размером 9x30, состоящая из символов стандартного набора ASCII.
См. также Расширенные элементы графического интерфейса
Если во время сеанса связи известно количество и суммарный размер передаваемых и принимаемых файлов, то для индикации прогресса используется специальный графический элемент. Он располагается в окне почтовой системы, и имеет вид секторной диаграммы, изображающей процент переданных или принятых данных и их суммарный размер.
При передаче файлов индикатор присутствует практически всегда, то при приеме - только если удаленная система заранее сообщила об объеме передаваемых данных.
См. также Расширенные элементы графического интерфейса
В правой нижней части окна почтовой системы расположен индикатор сигналов модема.
См. также Расширенные элементы графического интерфейса
Эта панель появляется во время сеанса связи. В ней содержится информация о присоединенном узле.
Connect - в этой секции указывается скорость соединения, а также протоколы коррекции ошибок и компрессии данных, которые используются при соединении.
Все остальные параметры показываются исходя из информации полученной им из EMSI
см. также Окно линии почтовой системы и Расширенные элементы графического интерфейса
Прозвонка на узел производится с интервалом в 2 минуты (+-50%). Этот интервал можно изменить в диалоге настройки Параметров Прозвонок.
В этой главе описывается графический интерфейс и работа с окном линии почтовой системы Аргус. В каждый момент времени это окно может отображать одну из активных линий. Для открытия линий воспользуйтесь пунктом Open Dialup Line меню System. Переключение между линиями осуществляется выбором соответствующей закладки в верхней части окна.
Окно состоит из следующих элементов: окна хронологии, индикаторов активности модема, индикатора сигналов модема .
Ожидание входящего звонка или возникновения прозвонки
Когда очередь прозвонок пуста (Буфер отправкиu пуст, либо в нем не присутствуют пакеты с приоритетом Crash или Direct), то почтовая система ждет либо появления прозвонки, либо входящего звонка. При этом в верхней части окна, в панели Status, выводится сообщение Idle.
см. также главу Менеджер прозвонок
Ожидание набора
Если очередь прозвонок не пуста, то в панели Status окна линии почтовой системы выводится сообщение Waiting to dial, далее следует адрес узла, который на данный момент является первым в очереди. В панели Timeout ведется отсчет времени до начала прозвонки.
Ожидание соединения
По окончании времени ожидания прозвонки, начинается набор номера вызываемого узла, надпись в панели Status меняется на Calling + номер вызываемого узла. В панели Timeout начинается отсчет времени до окончания ожидания соединения. Ожидание соединения происходит и при ответе почтовой системы на входящий звонок. Если до истечения времени ожидания соединение не произошло, то система переходит в режим ожидания набора следующего в очереди узла, либо в режим ожидания звонка.
Соединение
После того, как произошло соединение и успешный обмен EMSI пакетами между станциями, начинается собственно сеанс связи. Экран окна линии почтовой системы изменяется: вместо индикаторов активности модема появляется информационная панель присоединенной станции, вместо панелей Status и Timeout, появляются две панели индикации хода передачи (вверху) и приема (внизу) почтовых пакетов и файлов. Под панелями индикации хода приема/передачи пишется тип протокола сеанса связи и общее количество ошибок за сеанс.
При исходящем звонке, сперва инициализируется процесс передачи, а затем процесс приема. При входящем звонке - наоборот, сначала инициализируется прием почтовых пакетов и файлов, а затем передача. При наличии файловых запросов среди принятых пакетов, запросы обрабатываются и запрашиваемые файлы, если таковые найдены, передаются запрашивающей станции.
см. также Буфер отправки системы Binkley и файл-боксы.
Отсоединение
Отсоединение может произойти по нескольким причинам. Обычно это происходит когда ни вашей, ни присоединившейся станции нечего больше передавать. При этом происходит успешное завершение сеанса связи. Кроме того, отсоединение может произойти в результате потери несущей частоты модема (NO CARRIER), либо в результате слишком большого количества ошибок, или предельно низкого падения скорости передачи. В таких случаях, сеанс считается неудачным, и если вашей системе не удалось до конца передать пакеты или файлы во время такого сеанса, то Аргус попытается снова передать их при следующей возможности. Если с вашей станции был передан файловый запрос, во время выполнения которого сеанс прервался, то запрос будет передан повторно. Если ваша станция просто принимала файлы или пакеты, то будет сформирована повторная прозвонка на данный узел. При неудачном завершении входящего сеанса, Аргус ничего не предпринимает. В любом случае при удачном либо неудачном завершении сеанса, система переходит в состояние ожидания набора.
Time-out panel displays the countdown (in seconds) to the next expected event.
When button is pressed, the countdown is zeroed and the expected event is started. Line menu command has the same effect.
When button is pressed 30 seconds are added to the time-out. Line menu command has the same effect.
В этой главе рассматривается главное меню Аргуса, которое состоит из следующих пунктов:
Настройки системы влияют на правильность ее работы. Их необходимо произвести после первого же запуска системы Аргус на вашем компьютере. Почти все настройки осуществляются путем внесения определенных значений в поля окон, вызываемых посредством меню Config.
Эта глава содержит следующие разделы:
Для защиты конфигурационных данных системы Аргус предусмотрена возможность шифрования файла config.bin. В качестве алгоритма шифрования применяется DES/CBC с 56-битным ключом. Ключ формируется на основе вводимого пароля с помощью алгоритма MD5 (RSA Data Security, Inc. MD5 Message-Digest Algorithm).
Защита активизируется установкой Master Password (Config / Master Password/Set Up...). Master Password запрашивается при каждом запуске системы Аргус для расшифрования содержимого config.bin. Если Master Password, введенный при запуске системы Аргус, не будет соответствовать изначально установленному, данные конфигурации не смогут быть правильно расшифрованными. В этом случае остается возможным либо повторный ввод Master Password, либо выход из системы Аргус.
Использование Master Password полезно для предотвращения изучения конфигурации системы Аргус при попадания файла config.bin в руки злоумышленников. Master Password помогает избежать систем-двойников, которые могут возникнуть в случае незаметного похищения файла config.bin. Кроме того, Master Password позволяет избежать несанкционированных запусков системы Аргус.
Знание Master Password позволяет его снять (Config / Master Password/Remove...) или изменить (Config / Master Password/Change...). Перед снятием или изменением Master Password система Аргус требует ввести его еще раз. В этом случае возможным является либо правильный ввод Master Password, либо выход из системы Аргус.
Master Password нигде не хранится и формируется на основе вводимого Master Password, поэтому настоятельно рекомендуется все же не забывать Master Password, либо, перед установкой Master Password, сохранить оригинальный config.bin в надежном месте.
Для того чтобы система Аргус могла функционировать, ей необходимо знать пути к определенным файлам, а так же к каталогу для входящей и исходящей почты, и т.д. Настройка путей системы осуществляется в диалоговом окне Config / PathNames.
В этой главе описываются каталоги, с которыми работает Аргус (Home Directory и Special Directories), и их назначение.
Home Directory - основной каталог почтовой системы.
Special Directories - сетка ввода строк, в которой прописываются служебные каталоги почтовой системы: Secure inbound, Insecure inbound, Temporary inbound, Outbound и Log.
См. также Буфер отправки системы Binkley и файл-боксы.
В этой главе описываются служебные каталоги почтовой системы: Secure inbound, Insecure inbound, Temporary inbound, Outbound и Log.
Обычно все, или большинство этих каталогов, расположены в Home Directory. В этом случае, пути к ним можно указывать не полностью (C:\FIDO\ARGUS\LOG), а относительно Home Directory (LOG). То есть, если в строке пути служебного каталога не указан диск, то путь к нему считается относительным и строится из Home Directory. Если строка пути начинается с косой черты, то путь строится из корневого каталога того же диска, на котором расположен Home Directory.
Если в строке пути к служебному каталогу диск указан, то такой путь считается абсолютным и не зависит от Home Directory.
Пример трансляций записей таблицы Special Directories в строки пути. Пути строятся с учетом Home Directory C:\FIDO\ARGUS.
Запись | Транслируется в |
LOG | C:\FIDO\ARGUS\LOG |
IN\SEC | C:\FIDO\ARGUS\IN\SEC |
\IN\PROT | C:\IN\PROT |
R:\FL\OUT | R:\FL\OUT |
См. также Special Directories.
См. также Special Directories.
Если файл с таким именем уже существует в Inbound, то новый будет храниться здесь до тех пор, пока старый не будет удален или перенесен вследствие обработки другой программой. Если сеанс обрывается в момент приема файла, принятая часть будет сохранена здесь, чтобы впоследствии принимать этот файл не с начала, а с сохраненной позиции.
Для надежности работы, переданные файлы перемещаются из Temporary Inbound в Secure/Insecure Inbound или в файл-бокс путем операции "переименовать", а не "скопировать и удалить", поэтому оба каталога (исходный и назначения) должны находиться на одном томе или физическом диске.
См. также Special Directories.
См. также Special Directories и файл-боксы.
См. также Special Directories.
В этой главе описываются основные пункты конфигурации, которые желательно настроить перед началом работы с системой Аргус.
Список узлов представляет собой удобный способ распространения и обновления данных о структуре сети. Это официальный документ в рамках сети (более подробно описан в отдельной главе Список узлов (FTS-0005) ). Аргус имеет возможность работать как с одним или несколькими списками узлов, так и вообще без них.
Список узлов конфигурируются в диалоговом окне Nodelist Configuration меню Config.
* | любая комбинация символов |
? | любой символ |
% | цифра ('0'-'9') |
Количество файлов, ровно как и их суммарный размер, не ограничены.
Вы можете работать с Аргусом без списка узлов, прописав номера телефонов (Интернет - адреса) узлов, на которые Вы обычно звоните.
Пример содержимого таблицы Files, для использования стандартного FidoNet NodeList со списком пойнтов сети 5020.
Пример таблицы Phones
При таком содержимом таблицы Phones, префикс 7-095- будет заменен на пустую строку, то есть будет удаляться, префикс 373-2- на 8w0422, а ко всем остальным номерам будет добавлен 8w10. Таким образом, номер 373-2-146151 будет набран как 8w0422146151, номер 7-095-654321 как 7654321, а номер 46-46-738100 как 8w104646738100.
При работе в автономном режиме может возникать необходимость автоматической компиляции списка узлов, которая производится по обнаружению файла nodelist.ok в Home Directory.
В этой сетке ввода строк прописываются пароли на сеансы связи с определенными узлами. В одном поле Nodes можно перечислять несколько узлов через пробел. Использование адресных масок и регулярных выражений в текущей версии не допускается.
Если пришло входящее соединение от системы, ни на один из адресов которой у нас не прописан пароль, то такое соединение считается непарольным. Все файлы и почта, принятые с этой системы, помещаются в Insecure Inbound. Если удаленная система при таком соединении предложила свой пароль на сеанс связи, об этом сообщается в хронологическом журнале: “Remote proposes password....”
Если пароль, предложенный удаленной системой, не совпал с паролем, значащимся у нас (или удаленная система не предложила пароля), то такой сеанс связи прерывается. При этом в хронологическом журнале сообщается “Remote presented .... when .... required” (или “Remote presented no password when .... required”). Чтобы сообщить удаленной системе об ошибке пароля, ей передается наша часть EMSI-данных, с ключевым словом “BAD_PASSWORD” (или “NO_PASSWORD”), после чего в хронологическом журнале сообщается “Password security violation - disconnecting” и производится физическое отсоединение.
При совпадении паролей, сеанс считается парольным, все принятые файлы и почта помещается в Secure Inbound, а в хронологическом журнале сообщается “Password-protected session”.
Пример:
2:469/38 | SUPER
2:469/77 2:469/84 | PUPER
Дополнительный файл паролей загружается в память при запуске Аргуса, а также при обнаружении флага PASSWORD.OK в Home Directory. Результаты загрузки файла отражаются в хронологии прозвонок.
В диалоговом окне Startup Configuration настраиваются параметры, которые учитываются Аргусом только при запуске.
Вызов данного окна осуществляется через меню Config / Startup.
В списке Dialup Lines / Auto-open перечисляются модемные линии почтовой системы, которые будут автоматически открыты при запуске программы. Оставшиеся линии (которые можно будет открыть вручную, через System / Open Dialup Line) перечисляются в списке Dialup Lines / Manual-open.
Если Вы выделите одну или несколько линий из списка Manual-open, то после нажатия кнопки > эти линии попадут в список Auto-open, и впредь будут открываться автоматически при старте системы. Если Вы желаете снова вручную открывать какую либо линию, то выделите ее имя в списке Auto-open, и нажмите кнопку <.
См. также Расширенная хронология.
Кроме готовой текстовой хронологии, предназначенной для восприятия системным администратором, Аргус ведет также файлы расширенной хронологии:
access_log | Общая хронология переданных файлов в стандарте NCSA |
agent_log | Общая хронология типов удаленных почтовых систем в стандарте NCSA |
binary_log | Общая хронология (в двоичном формате) сеансов связи и переданных данных |
Формат файла binary_log совместим с используемым в T-Mail © Andy Elkin и BinkD © Dima Maloff. Для обработки результатов этого файла можно воспользоваться утилитой T-Hist © Michael Markowsky (2:5020/378@fidonet).
Здесь содержится информация, с которой необходимо ознакомиться для правильной настройки модемных соединений. Если Вы используете систему Аргус только для работы по TCP/IP, эту главу можно пропустить и перейти к конфигурации TCP/IP.
В этой главе описывается элементы основной панели конфигурации модемных соединений, а также все дополнительные окна конфигурации.
Глава включает следующие разделы:
Основная панель конфигурации модемных соединений состоит из шести страничек. Первые пять страничек предназначены для управления группами, а на шестой находится таблица переопределений узлов.
Lines | Конфигурация линий почтовой системы |
Station | Настройка EMSI-данных |
Ports | Настройка коммуникационных портов |
Modems | Конфигурация модемов |
Restrictions | Схемы ограничения прозвонок |
New | Позволяет создать новый элемент в группе, со значениями, принятыми по умолчанию. |
Edit | Редактирует выбранный элемент группы. |
Copy | Создает новый элемент в группе, со значениями, скопированными с выюранного элемента. |
Delete | Удаляет элемент из группы и переносит в список удаленных элементов. Последний элемент группы Lines, а также главный элемент любой другой группы удалить нельзя. |
Undelete | Восстанавливает все удаленные элементы (помещенные в список удаленных элементов). |
Default | Назначает выбранный элемент группы главным элементом, или “элементом по умолчанию”. Об этом свидетельствует перемещение красного кружка - маркера главного элемента. |
В этом окне происходит привязка компонентов групп и привязка событий к линии почтовой системы. Окно состоит из двух страничек - General и Events.
Line name | Название линии. Высвечивается в ярлычке окна почтовой системы при активизированной линии. |
Station template | EMSI-данные, используемые линией. |
Port | COM-port, используемый линией. |
Modem | Модем, используемый линией. |
Restrictions | Ограничения, используемые линией. |
Log file name | Имя файла хронологического журнала. Если полный путь не указан, файл располагается в каталоге Log. |
Fax inbound | Каталог, в который будут помещены принятые факсимильные документы в формате TIFF (Tagged Image Format File). |
Диалог настройки EMSI -данных состоит из трех страничек: Данные EMSI, Приглашение и AKA.
Station Name | Название почтовой (файловой) станции |
Address list | Список адресов станции (AKA), через пробел |
Sysop name | Имя системного оператора |
Location | Географическое положение станции |
Phone | Номер телефона |
Flags | Флаги |
В поле “Удаленные адреса” можно перечислять несколько адресов или масок / регулярных выражений через пробел. При совпадении одного из адресов поля “Удаленные адреса” с одним из адресов удаленной системы в качестве списка адресов нашей станции будут предъявлены адреса поля “Локальные адреса” соответствующего ряда. Формат поля “Локальные адреса” идентичен формату поля Address list таблицы данных EMSI.
Механизм AKA работает как на EMSI, так и на BinkP-соединении.
Первичным адресом удаленной системы при парольной сессии считается не первый из строки AKA, а первый запароленный адрес. Тем не менее, запаролено может быть сразу несколько адресов, при этом пароль должен быть единым для всех. Первичный адрес используется как адрес для привязки запрошенных файлов, а также во время SRIF-запросов, а также для ведения binary_log и access_log. Механизм сортировки входящих файлов по каталогам, в зависимости от адреса удаленной системы, также использует первичный адрес.
Параметры асинхронного коммуникационного порта: номер, скорость обмена, flow control и количество бит.
Скорости обмена свыше 38400 следует использовать с большой осторожностью, т.к. аппаратура или операционная система может не успевать обрабатывать поток, об этом может свидетельствовать появление в хронологическом журнале ошибок CE_BREAK, CE_OVERRUN, CE_FRAME, и.т.д.
Диалог установки битовых параметров линий вызывается нажатием соответствующей кнопки окна настройки коммуникационных портов.
Init | ATZ| | Строка инициализации модема. Посылается при запуске линии, по окончании сеанса связи, каждые две минуты вне сеансов (для проверки модема), и, перед набором номера. |
Answer | ATA! | Строка, посылаемая модему по обнаружению сигнала RING. После посылки этой строки происходит переход линии в режим ожидания соединения. |
Dial prefix | ATDP | Префикс команды набора номера. Полная команда набора номера состоит из префикса, собственно номера и суффикса, |
Dial suffix | ! | Суффикс команды набора номера. Суффикс в большинстве случаев состоит из единственного символа ! (спецсимвол CR без ожидания) |
Hangup | !`v~~^`!!` | Команда физического отсоединения. Большинство модемов производят отсоединение по опусканию сигнала DTR. Данная строка посылает CR, ожидает 0.1 сек, опускает DTR, ожидает 1.0 сек, подымает DTR, ожидает 0.1 сек, дважды посылает CR, и снова ожидает 0.1 сек. |
Info | none | Info command is sent to the modem after a session termination, before sending Init string. The result of this command is logged. You may use Response Log Format atom to format data came from a modem. By default, Info command is not defined, so no info command at all is sent. |
В поле первой колонки (Flag list) перечисляются флаги, во второй (Init/Prefix/Suffix) - замещенные Init string / Dial Prefix / Dial Suffix.
Флаги в поле Flag List можно перечислять, используя логические операции ИЛИ / И. "Пробел" означает ИЛИ, "запятая" - И. Приоритет И выше.
Пример перечисления флагов с использованием логических операций.
Поле колонки flags list | Трактовка |
PEP | PEP |
HST H16 | HST или H16 |
V32B,V42B | V32B вместе с V42B |
ZYX,V34 32T | или ZYX вместе с V34, или V32T |
Пример формирования строк инициализации модема и набора номера, на основе значений сеток General Commands и Flags List:
Номер телефона | 323323 |
Init | ATZ| |
Dial Prefix | ATDP |
Dial Suffix | ! |
Значение поля колонки Flags List | Строка инициализации перед прозвонкой | Строка набора номера | Комментарий |
ATB1|/ATM0DP/! | ATB1| | ATDP323323! | Init string - ATB1| Prefix - ATM0DP Suffix - ! |
ATM0|/ATDT | ATM0| | ATDT323323! | Init string - ATM0| Prefix - ATDT Suffix - ! |
ATH1| | ATH1| | ATDP323323! | Префикс и суффикс опущены - берем их из General Commands |
/ATX7DP/@! | ATX7DP323323@! | Одиночная точка на месте строки инициализации - строка инициализации пуста | |
ATB0|/./@! | ATB0| | ATDP323323@! | Одиночная точка на месте Dial Prefix - берем его из General Commands |
Интерпретация спецсимволов команд модема, используемых в сетке ввода строк Commands диалогового окна Modem Configuration
Символ | Код | Действие |
` | 60 | задержка 0.1 сек |
~ | 7E | задержка 0.5 сек |
^ | 5E | поднять DTR |
v | 76 | опустить DTR |
| | 7C | послать CR (0D) и ждать от модема ответа OK с таймаутом 3 сек |
! | 21 | послать CR без ожидания |
\ | 5C | послать следующий символ как есть (без интерпретации как специальный). Например, \~ - послать тильду |
Аргус имеет возможность, помимо передачи файлов по FTN-технологии, заниматься приемом факсов. Прием может осуществляться как посредством внешних программ-приемщиков, так и внутренними функцияси системы Аргус. Отправка факсов в текущей версии Аргуса не реализована.
В диалоге Конфигурация линий почтовой системы cущетвует поле "Fax Inbound", определяющее каталог, в который будут помещены принятые факсимильные документы в формате TIFF (Tagged Image Format File). Для получения имени принятого TIFF-файла используются макро-определения:
%PATHNAME% | полное имя файла (с путем), например d:\fl\infax\03Jan003.tif |
%PATH% | путь к файлу, папример d:\fl\infax\ |
%NAME% | имя файла (без расширения), например 03Jan003 |
%EXT% | расширение файла, например .tif |
Если при ответе на входящий звонок от модема поступило сообщение +FCON, CONNECT FAX, или +FCO - это служит сигналом для начала факсимильного приема. После обнаружения этой строки, в зависимости от значения Config / Dial-up / Modems / Fax / Fax Receiver / Internal-External, Аргус передает управление портом либо внутренним функциям приема факсов, либо внешней программе. Командная строка внешней программы задается в поле External Fax Receiver диалога конфигурации модемов. В этой строке можно использовать специальные параметры, согласно главе Сервисы. Префиксы командной строки внешней программы приема факсов те же, что и для Externals/Post-processors:
< | запустить с низким приоритетом (IDLE_PRIORITY_CLASS) |
+ | запустить с высоким приоритетом (HIGH_PRIORITY_CLASS) |
* | запустить с критическим приоритетом (REALTIME_PRIORITY_CLASS) |
? | запустить в скрытом режиме |
?? | запустить в скрытом бесконнсольном режиме (DETACHED_MODE), только для консольных Win32-приложений. |
> | '>' - вместо запуска приложения установить файл-флаг с именем, следующим за '>'. |
Пример настроек окна Config/Dialup/Modems для модема ZyXEL E+ для приема факсов с использованием программы BGFAX B.J. Guillot в качестве внешнего приемщика:
External Fax receiver | c:\bgfax\bgfax32.exe /fzyx c:\bgfax h%h z /dte:%b |
Commands/Init | ATZ|AT+FCLASS=6| |
Commands/Answer | AT+FAA=1;A! |
Внутренний приемщик факсов поддерживает наборы команда Class 2 и Class 2.0.
Class 1 внутренним приемщиком также не поддерживается.
Строки ответа для приема факсом внутренним приемщиком схожи с используемыми для внешнего:
Для модемов Class 2 | ~AT&F|AT+FCLASS=2|AT+FLID="ID"|AT+FAA=1;a! |
Для модемов Class 2.0 | ~AT&F|AT+FCLASS=2.0|AT+FLI="ID"|AT+FNR=1,1,1,1|at+FAA=1;a! |
Ограничения на прозвонку:
Условия перечисляются через пробел.
Элементы в строке комбинируются логической операцией И, строки в таблице - логической ИЛИ.
Пример
Required | +7-095- CM 2:50*/* HST |
Звонить на узел только если его телефон начинается на +7-095-, у него прописаны флажки СM и HST и он находится в 50-ом регионе второй зоны. |
Forbidden | 2:5020/666.* +7-095-212- ISDN |
Не звонить если адрес узла 2:5020/66*, и номер телефона узла начинается на +7-095-212-, и у узла прописан флажок ISDN. |
Сетка ввода строк, в которой можно переопределить для узла один или более номеров телефона, переопределить флаги и время работы вместо, указанных в списке узлов. Номер телефона можно указывать косвенно (через список узлов).
Рассмотрим случай, когда узел не находится в список узлов, а Вы указали номер его телефона без флагов. Поскольку время работы этого узла не указано (отсутствуют, флаги, в том числе описывающие время его работы), подразумевается, что такой узел может принимать звонки только в ZMH (а пойнт вообще никогда). Поэтому
появление пакета с приоритетом Crash или Direct в буфере отправки будет служить Аргусу сигналом звонить узлу только в его ZMH. Пойнту, в этом случае, Аргус звонить вообще не будет. Прозвонка может не происходить также и из-за того, что флаги узла прописаны не до конца, и/или могут не соответствовать Dial Restrictions.
Вы можете работать с Аргусом без списка узлов, указав здесь номера телефонов узлов, на которые Вы обычно звоните.
Формат переопределения узла:
номер,флаги
Номер в переопределении можно указывать как прямо, например +31-133-456-1850,CM так и косвенно (номер будет извлечен из текущего списка узлов) например 5:133/555,CM
Одно переопределение может содержать несколько узлов, перечисленных через пробел.
Значение поля колонки Node | Значение поля колонки Override | Комментарий |
55:133/561 | +31-133-456-1850 | Сменился номер |
55:133/562 | 55:133/562,U,TEX | Сменилось время работы узла |
5:133/555 | 5:133/555,U,TAB,TDE | Узел работает с 00:00 до 01:00 и с 03:00 до 04:00 по UTC |
55:133/563 | 55:133/563,CM,V34 | Появился новый (V.34) модем |
3:34/3443 | 333-031,CM 333-032,CM 333-033,CM | Круглосуточный трехлинейный узел |
3:383/513 | 3:383/513 3:383/550 3:383/560 | Три адреса у одного многолинейного узла |
3:383/514 | 3:383/513,HST,CM 3:383/550,V34,U,TACL | Первая линия работает круглосуточно, а вторая - с 00:00 до 02:00 по местному времени. |
Пример:
2:469/38 | 373-2-246-530,CM,ZYX 373-7-222-222,CM,HST
3:383/514 | 3:383/513,HST,CM 3:383/550,V34,U,TACL
Файл дополнительных переопределений загружается в память при запуске Аргуса, а также при обнаружении флага DUPOVR.OK в Home Directory. Результаты загрузки файла отражаются в хронологии прозвонок.
NOHYD | Запрещает протокол Гидра. |
NOZM | Запрещает протокол ZModem. Этот флаг является комбинацией флагов NODZA, NOZAP, NOZMO. См. также атом Transmit ZModem Disabled atom. |
NODZA | Запрещает протокол DirZap. |
NOZAP | Запрещает протокол ZedZap. |
NOZMO | Запрещает протокол ZedZip. |
NONIAGARA | Запрещает протокол Niagara. Этот протокол используется для установки сеанса связи BinkP (в.т.ч щифрованный BinkP) на модемных соединениях. См. также атом Transmit Niagara Disabled. |
NOEMSI | Запрещает протокол EMSI. См. также атом Transmit EMSI Disabled. |
NOYOOHOO | Запрещает протокол YooHoo handshake. См. также атом Transmit YooHoo Disabled. |
NODUMMYZ | Запрещает передачу пустого пакета при отсутствии исходящих файлов на ZModem. См. также атом Transmit Dummy-Z Disabled. |
Node | Override | Комментарий |
55:133/561 | 55:133/561,NOHYD | Не устанавливать протокол Гидра на исходящей сесии с узлом 55:133/561 |
55:133/562 | 55:133/562,NOZM | Не устанавливать протокол Zmodem на исходящей сесии с узлом 55:133/562 |
Argus Override Line Editor (Config/Dial-up/Nodes/Edit) allows more comfortable editing of an override line of Node Overrides Table. The Editor allocates one line of its string grid per remote's 'phone number. It also allows human-readable Online Time representation in local time e.g. while in Node Overrides Table you should specify U,TAB,TLX, here you can simpy write 03:00-04:00,14:00-02:00 if you are in GMT+2 time zone.
В этой главе описываются принципы работы системы Аргус по TCP/IP. Если Вы используете Аргус только для работы с коммутируемыми модемными соединениями, эту главу можно пропустить.
TCP/IP Daemon
Диалог кофигурации TCP/IP Daemon
Специальные флаги TCP/IP
Daemon - это своеобразный менеджер, управляющий динамическим созданием и освобождением линий почтовой системы, работающий с входящими/исходящими TCP/IP соединениями.
Как только с системой Аргус произошло очередное входящее/исходящее соединение, Daemon открывает новую линию почтовой системы и инициирует соответствующий почтовый протокол высокого уровня. По окончании сеанса связи Daemon закрывает линию и завершает соединение.
TCP/IP Daemon системы Аргус поддерживает три основных протокола высокого уровня, работающих по транспортному протоколу TCP/IP: Raw (или ifcico), Telnet и BinkP.
Диалог конфигурации TCP/IP Daemon вызывается посредством меню Config / TCP/IP Daemon.
В поле “Удаленные адреса” можно перечислять несколько адресов или масок через пробел. При совпадении одного из адресов поля “Удаленные адреса” с одним из адресов удаленной системы в качестве списка адресов нашей станции будут предъявлены адреса поля “Локальные адреса” соответствующего ряда. Формат поля “Локальные адреса” идентичен формату поля Address list таблицы данных Statioin.
Механизм AKA работает как на EMSI, так и на BinkP-соединении.
Первичным адресом удаленной системы при парольной сессии считается не первый из строки AKA, а первый запароленный адрес. Тем не менее, запаролено может быть сразу несколько адресов, при этом пароль должен быть единым для всех. Первичный адрес используется как адрес для привязки запрошенных файлов, а также во время SRIF-запросов, а также для ведения binary_log и access_log. Механизм сортировки входящих файлов по каталогам, в зависимости от адреса удаленной системы, также использует первичный адрес.
В строке ввода Auxiliary Nodes File можно указать путь к файлу дополнительных переопределений TCP/IP-узлов, которые будут использоваться помимо указанных в сетке. Формат файла следующий (переопределения одного узла на строку):
Адрес | Переопределения
Пример:
2:469/38 | 373-2-246-530,CM,ZYX 373-7-222-222,CM,HST
3:383/514 | 3:383/513,HST,CM 3:383/550,V34,U,TACL
Файл дополнительных переопределений загружается в память при запуске Аргуса, а также при обнаружении флага IPOVR.OK в Home Directory. Результаты загрузки файла отражаются в хронологии прозвонок.
Рассмотрим случай, когда узел не находится ни в список узлов, ни в DNS, а Вы указали адрес его хоста без флагов, указывающих время работы. Подразумевается, что такой узел может принимать звонки только в ZMH (а пойнт вообще никогда). Поэтому
появление пакета с приоритетом Crash или Direct в буфере отправки будет служить Аргусу сигналом устанавливать исходящие соединения с узлом только в его ZMH. С пойнтом, в этом случае, Аргус вообще не будет пытаться установить исходящее соединение. Прозвонка может не происходить также и из-за того, что флаги узла прописаны не до конца, и/или могут не соответствовать Dial Restrictions.
Вы можете работать с Аргусом без списка IP-узлов, указав здесь IP-адреса узлов, на которые Вы обычно звоните.
Таблица переопределений TCP/IP узлов схожа с таблицей переопределений модемных узлов.
Формат переопределения узла: адрес,флаги
Узел, работающий по IP должен обязательно содержать один из специальных TCP/IP-флагов.
Адрес в переопределении можно указывать как прямо, например 193.219.215.111,CM,IFC так и косвенно (номер будет извлечен из текущего списка узлов) например 5:133/555,CM,IFC
Одно переопределение может содержать несколько узлов, перечисленных через пробел.
Адрес можно задавать как в цифровом, так и в символьном (DNS) виде, то есть в виде имени Интернет-хоста. Для указания адреса в символьном виде, его необходимо заключать в кавычки: "fido.ritlabs.com",CM,IFC
Для переопределения IP-порта его значение указывается после адреса через символ подчеркивания: "fido.ritlabs.com"_23,CM,IFC или "193.219.215.111"_23,CM,IFC
Auxiliary TCP/IP node overrides file is loading into memory on Argus Start-up and by detection of IPOVR.OK file-flag in Argus Home Directory. Results of parsing of the file are logged in polls log.
IP addresses of FTN nodes can be from DNS by rendering their FTN addresses to host domain name and resolving this name. The rendering is performing by the following scheme:
[p<Point>.]f<Node>.n<Net>.z<Zone>.<RootDomain>
The default root domain for Fidonet-reserved FTN-zones (1,2,3,4,5,6) is fidonet.net. E.g., the IP address of node 1:2/3.4, according to this scheme, is to be the same as of host p4.f2.n3.z1.fidonet.net.
Root domains for each address mask are configured in DNS tab of TCP/IP Daemon Configuration dialogue. Address mask may also contain Regular Expressions.
См. также:
TCP | В соответствии со стандартом IP-листа, этот флаг обязателен для любого TCP/IP узла, однако система Аргус снимает это ограничение. |
IFC | Raw (ifcifo) (по умолчанию порт 60179) |
TEL или TELNET | Telnet (по умолчанию порт 23) |
BND или BINKD | BinkP (по умолчанию порт 24554) |
Рассмотрим основную сетку ввода строк из диалогового окна конфигурации файловых запросов. В ней перечисляются каталоги, в которых содержатся файлы, предназначенные для пересылки по запросам, пришедшим во время сеанса связи. Для каждого каталога может быть задан пароль. Количество определяемых каталогов не ограничено. Перечисленные в pathnames каталоги, вмесите с подкаталогами и файлами, называются "файловой базой".
В поле Alias сетки ввода строк Alias прописывается псевдоним файла, в поле Path - путь к файлу, который будет отдаваться по этому псевдониму, а в поле Password - необязательный пароль.
В псевдонимах файловых запросов можно использовать маски (как в поле Alias, так и в поле Path). Предшествующий символ '>' означает самый свежий файл, попадающий под эту маску. На один псевдоним можно назначить несколько файлов, перечислив их через пробел.
External Request Processing (SRIF)
Аргус имеет возможность вызывать внешний обработчик файловых запросов посредством стандарта SRIF (Standard Request Information File), который разработали Gordian Schuermann & Mirko Mucko.
Использование внешнего обработчика разрешается опцией Use SRIF. При этом остальные вышеописанные настройки файловых запросов игнорируются, и вся забота перекладывается на плечи внешнего обработчика. Суть метода SRIF заключается в передаче данных внешнему обработчику через временный файл, который создается почтовой системой при файловом запросе.
Имя исполнимого файла внешнего обработчика задается в поле Standard Request Information File - External Processor. Ключевое слово %SRIF% в этом поле заменяется на имя временного файла.
Пример поля при использовании AllFix © Harms Software Eng.:
c:\fido\allfix\allfix Rp -SRIF %SRIF%
Кроме того, введены новые спецпараметры (и соответствующие переменные окружения):
%w | ARGUS_NODE | Адрес узла назначения внешней прозвонки, например "2:469/38". |
%x | ARGUS_STATION | Имя узла (станции), если узел известен в списке FTS-0005. |
%v | ARGUS_LOCATION | Географическое положение узла, если узел известен в списке FTS-0005. |
%X | ARGUS_SYSOP | Имя сисопа, если узел известен в списке FTS-0005. |
%y | ARGUS_PHONE | Номер телефона или IP-адрес (или имя хоста) из списка FTS-0005 или определений. |
%Y | ARGUS_FLAGS | Флаги узла из списка FTS-0005 или определений. |
%W | ARGUS_SPEED | Скорость узла, если узел известен в списке FTS-0005. |
ДиапазонOk ДиапазонBusy ДиапазонNoC ДиапазонFail ТаймаутМинут ТаймаутКЗ
ДиапазонOk | диапазон кодов завершения, по которым прозвонка считается успешной. |
ДиапазонBusy | диапазон кодов завершения, по которым прозвонка считается завершившейся сигналом BUSY. |
ДиапазонNoC | диапазон кодов завершения, по которым прозвонка считается завершившейся вследствие неудачной попытки установки соединения. |
ДиапазонFail | диапазон кодов завершения, по которым прозвонка считается завершившейся вследствие неудачной попытки инициирования сеанса связи. |
ТаймаутМинут | максимально допустимое время для работы внешнего приложения. Если приложения не завершилось самостоятельно в течении этого периода, оно будет насильственно прервано, с кодом ошибки, установленным из переменной ТаймаутКЗ. Если значение ТаймаутКЗ пропущено, то может быть пропущено и значение ТаймаутМинут - в этом случает будет использоваться число 1, то есть приложение будет прервано черед одну минуту с кодом ТаймаутКЗ. |
ТаймаутКЗ | код завершения внешнего приложения по истечении времени, определенном переменной ТаймаутМинут. Значение ТаймаутКЗ может быть пропущено, в этом случае внешнее приложение сможет завершиться только по самостоятельному выходу, либо непосредственно перед завершением работы самой системы Аргус. |
Если код завершения находится вне всех четырех диапазонов, то такая прозвонка считается успешной.
Пример поля Options:
. 1 2,5-7 3,4 10 2
Это означает, что прозвонка считается Busy, если приложение завершилось с кодом 1, NoC с кодами 2,5,6,7, и Fail с кодами 3,4. Иные коды завершения служат поводом для успешного завершения прозвонки. Под время работы приложения отводится максимум 10 минут, если приложение не завершилось по истечении 10 минут самостоятельно, оно будет прервано с кодом завершения 2, который, в данном случае, находится в диапазоне NoC.
Событие служит для изменения параметров линии почтовой системы. Такими параметрами могут являться, например, командные строки модемов, доступность файловых запросов, минимально допустимая скорость соединения, и.т.д.
В отличие от периодического запуска приложений и периодических прозвонок, события сами по себе не выполняют глобальных действий в системе, и влияют только на параметры тех линий, к которым они привязаны.
Событие имеет периодичность, описываемую в формате cron, длительность воздействия на линию и список атомов.
Атом - это частица события, влияющая на один параметр конкретной линии, к которой событие привязано.
Так, например, событие, изменяющий строку инициализации модема и строку необходимых условий прозвонки, содержит два атома - атом замены строки инициализации модема и атом замены строки необходимых условий прозвонки.
Событие изменяет параметры только тех линий, к которым оно привязано!
События привязываются к линии в диалоге настройки линии Config / Dialup / Line на страничке Events.
см. также:
Описание формата Cron,
Список Атомов
Атом - это частица события, влияющая на один параметр конкретной линии, к которой событие привязано. Событие привязывается к линии и служит для изменения ее параметров.
Так, например, для изменения строки инициализации модема и строки необходимых условий прозвонки, событие, привязанное к линии, должно содержать два атома - атом замены строки инициализации модема и атом замены строки необходимых условий прозвонки.
В текущей версии поддерживаются следующие типы атомов:
Modem Command Init | Командная строка инициализации модема. Обычно используется для запрещения включения динамика модема в ночное время, либо для установки определенных протоколов по часовому расписанию. |
Modem Command Answer | Командная строка ответа модема на входящий звонок. Обычно используется для установки соединения требуемых протоколов в определенное время. |
Modem Command Prefix | Префикс командной строки модема набора номера. Обычно используется для установки определенных протоколов для исходящих соединений. А также для работы через внутренние мини-АТС в ночном режиме. |
Modem Command Suffix | Суффикс командной строки модема набора номера. |
Modem Command Hangup | Командная строка модема для отсоединения. Этот атом обычно применяется вместе с атомом Modem Command Init. |
Modem Disable Reinit | Запретить регулярную инициализацию модема. Этот атом не разрешает инициализировать модем, находящийся в режиме ожидания. |
Restriction Required Restriction Forbidden |
Строки необходимых/запрещенных условий прозвонок. Применяются для учета различной тарификации звонков в зависимости от времени суток, для учета особенности работы узлов (например, не работающих по праздникам). |
Replace Station | Замена всех установок станции, конфигурируемых в Config / Dialup / Station. Обычно используется на узлах, выполняющих разные функции в разное время. |
Replace Modem | Замена всех установок модема, конфигурируемых в Config /Dialup / Modems. Чаще всего применяется, когда модем обслуживает разные протоколы в зависимости от времени суток. При этом порт остается неизменным. |
Replace Restriction | Замена схемы ограничения прозвонок, конфигурируемой в Config / Dialup / Restrictions. Применяется вместо двух атомов Restriction Required и Restriction Forbidden. |
Accept Files Required Accept Files Forbidden |
Файлы допустимые к приему / запрещенные для приема. Чаще всего используется для запрещения в ZMH приема других файлов, кроме FTSC-0001-пакетов |
Accept Nodes Required Accept Nodes Forbidden |
Узлы допустимые к приему / запрещенные для приема. Может использоваться на хабах для распределения суточной нагрузки. |
Accept Nodes Only Pwd-Prot | Прерывать непарольные входящие сеансы. Этот атом не влияет на исходящие сеансы. |
Accept Link Required Accept Link Forbidden |
Протоколы соединения, допустимые к приему / запрещенные для приема. Протоколы перечисляются через пробел. Например, HST ARQ. Используется для запрещения соединения без коррекции ошибок в определенное время. |
Accept Speed Min | Минимально допустимая скорость входящих соединений. |
Transmit Speed Min | Минимально допустимая скорость исходящих соединений. |
Accept FReq Disable | Запретить отработку файловых запросов. |
Accept FReq Count Public | Ограничение запрашиваемых файлов по числу, для непарольных сеансов связи |
Accept FReq Count Pwd-Prot | Ограничение запрашиваемых файлов по числу, для парольных сеансов связи |
Accept FReq Duration Public | Ограничение запрашиваемых файлов по длительности сеанса связи, для непарольных сеансов связи |
Accept FReq Duration Pwd-Prot | Ограничение запрашиваемых файлов по длительности сеанса связи, для парольных сеансов связи |
Accept FReq Size Public | Ограничение запрашиваемых файлов по суммарному размеру, для непарольных сеансов связи |
Accept FReq Size Pwd-Prot | Ограничение запрашиваемых файлов по суммарному размеру, для парольных сеансов связи |
Accept Nodes Only Pwd-Prot | Допускать к приему только парольные узлы, для непарольных сеансов связи. Если во время действия этого атома непарольный узел попытается установить сеанс связи, произойдет отсоединение. |
Transmit Files Forbidden | Файлы, запрещенные для передачи. Этот атом не распространяется на файлы с приоритетом Crash, а также на файлы, присоединенные обработчиком файловых запросов. |
Transmit Files Required | Файлы допустимые к передаче. Этот атом не распространяется на файлы с приоритетом Crash, а также на файлы, присоединенные обработчиком файловых запросов. |
Rings | Число звонков перед поднятием трубки для ответа модемом. (0=запрет поднятия трубки) |
Accept Niagara Disabled Transmit Niagara Disabled |
Предотвращает использование протокола Niagara. Этот протокол используется протоколом BinkP (и шифрованным BinkP) на модемных соединениях. |
Accept Hydra Disabled Transmit Hydra Disabled |
Предотвращает использование протокола Hydra. |
Accept ZModem Disabled Transmit ZModem Disabled |
Предотвращает использование протокола ZModem. |
Accept FTS-0001 Disabled | Предотвращает использование протокола FTS-0001. |
Accept No Incoming | Не принимать входящие соединения. Во время активности этого атома, коммуникационный порт используется только для выходных звонков. В остальное время порт является доступным другим приложениям. |
Accept YooHoo Disabled Transmit YooHoo Disabled |
Предотвращает использование протокола YooHoo. |
Accept EMSI Disabled Transmit EMSI Disabled |
Предотвращает использование протокола EMSI. |
Door | Дополнительное приложение-сервис. Добавляет дополнительный сервис, который будет использоваться в дополнении к указанным в Config/External/Doors. |
Password | Дополнительный пароль. Добавляет дополнительный пароль, который будет учитываться в дополнении к указанным в Config/Passwords. |
Accept Dummy-Z Disabled Transmit Dummy-Z Disabled |
Запретить передачу пустого пакета на ZModem. Если этот атом не активен (по умолчанию), в случае отсутствия файлов для передачи, на протоколе ZModem будет передан пустой PKT-файл. Передача такого файла является мерой обеспечения нормального проведения сеанса ZModem. |
Текущая версия системы Аргус поддерживает три типа внешних приложений:
В сетке Post-processors диалогового окна Config/Externals настраиваются внешние программы-обработчики и сортировка принятых файлов по каталогам.
Специальная маска %ARCMAIL% идентична списку масок ArcMail (*.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa?)
Mask list | String to execute | Комментарий |
*.su? *.mo? *.tu? *.we? *.th? *.fr? *.sa? | c:\fido\lanius\squish.exe in out squash | Запустить эхопроцессор Squish по приходу почтовых пакетов |
%ARCMAIL% | c:\fido\lanius\squish.exe in out squash | Запустить эхопроцессор Squish по приходу почтовых пакетов |
*.tic | c:\fido\fileecho\allfix.exe file -tossbad | Запустить файлэхопроцессор Allfix по приходу TIC файлов |
Процессы могут быть запущены с определенным уровнем приоритета:
< | запустить с низким приоритетом (IDLE_PRIORITY_CLASS) |
+ | запустить с высоким приоритетом (HIGH_PRIORITY_CLASS) |
* | запустить с критическим приоритетом (REALTIME_PRIORITY_CLASS) |
> | '>' - вместо запуска приложения установить файл-флаг с именем, следующим за '>'. |
Возможен также запуск внешних приложения по окончании сеанса с определенными узлами - в этом случае вместо имен файлов или файловах масок необходимо перечислить (через пробел) адреса или маски адресов
Mask list | String to execute |
2:469/38 | playwav c:\wavs\complete38.wav |
2:*/0 | playwav c:\wavs\complete_nc.wav |
1:2/3 4:5/6.* | someapp.exe /some:parameter |
Иными словами, в поле Mask List можно указывать не только маски файлов, но и маски адресов. В поле "String to execute" можно переопределять входящий каталог для файлов, подходящих под маски поля Mask List. Для переопределения inbound-каталога ему должен предшествовать символ амперсант ('&').
Пример переопределения инбаунда для файлов, принятых от пойнтов узла 2:469/59,
эти файлы будут попадать в каталог INPNT
Mask list | String to execute |
2:469/59.* | &INPNT |
Если путь файл-бокса указан не полностью (как в данном примере) то такой файл-бокс будет расположен в Home Directory. Тут действует правило сокращения, принятое при указании путей в сетке Special Directories диалогового окна Config/Paths.
Если во входящем файл-боксе уже находится файл с таким же именем, как и у вновь принятого файла, этот вновь принятый файл будет храниться в Temporary inbound тех пор, пока старый не будет удален или перенесен вследствие обработки другой программой. В некоторых случаях требуется обеспечить такой способ работы, чтобы вновь принятые файлы перезаписывались поверх уже находящихся, а не хранились в Temporary Inbound. В этом случае, для определения такого файл-бокса, после символа амперсант используется символ "^", т.е. &^INPNT.
Путь файл-бокса может содержать макросы, представляющие адрес уделенной системы.
%ZONE | зона, десятичная (1-4 десятичные цифры) |
%NET | сеть, десятичная (1-5 десятичных цифр) |
%NODE | узел, десятичный (1-5 десятичных цифр) |
%POINT | пойнт, десятичный (1-5 десятичных цифр) |
%HZONE | зона, шестнадцатеричная (3 шестнадцатеричные цифры) |
%HNET | сеть, шестнадцатеричная (4 шестнадцатеричные цифры) |
%HNODE | узел, шестнадцатеричный (4 шестнадцатеричные цифры) |
%HPOINT | пойнт, шестнадцатеричный (4 шестнадцатеричные цифры) |
%XZONE | зона, 32-чная (2 цифры в radix-32) |
%XNET | сеть, 32-чная (3 цифры в radix-32) |
%XNODE | узел, 32-чный (3 цифры в radix-32) |
%XPOINT | пойнт, 32-чнай (2 цифры в radix-32) |
%YEAR | Год (4 цифры) |
%MONTHN | Месяц (2 цифры) |
%MONTHA | Месяц (3 буквы) |
%MONTHS | Месяц (2 буквы) |
%DAY | День месяца (2 цифры) |
%DOWN | День недели (1 цифра) |
%DOWA | День недели (3 буквы) |
%DOWS | День недели (2 буквы) |
%HOUR | Час (2 цифры) |
%MINUTE | Минута (2 цифры) |
%SECOND | Секунда (2 цифры) |
Сервисы - это специальные коммуникационные программы, которые запускаются из почтовой системы, когда от удаленной системы вместо пакета инициирования сеанса связи FTN приходит специальная строка.
Пользователь, соединяясь обычной терминальной программой со станцией, оснащенной системой Аргус, может воспользоваться сервисом, введя с клавиатуры специальную последовательность. Самой распространенной последовательностью для входа в BBS-сервисы являются два идущих подряд символа Escape. Так как символ Escape не являются печатными, вместо него в поле Enter используется символ косой черты (back slash).
Поле Door and parameters содержит путь к исполнимому файлу сервиса и специальные параметры.
Символ '?' перед командой/именем файла в строке Door and Paramenters сообщает о том, что процесс должен быть запущен в скрытом режиме, '!' - в нормальном режиме, а ?? - в DETACHED_MODE (без использования консоли). В отличие от ?, флаг ?? можно использовать только для Win32-консольных приложений. Попытка запуска DETACHED Win3.1 или DOS-приложения вызовет ошибку. По умолчанию процессы запускаются в минимизированном окне.
Процессы могут быть запущены с определенным уровнем приоритета:
< | запустить с низким приоритетом (IDLE_PRIORITY_CLASS) |
+ | запустить с высоким приоритетом (HIGH_PRIORITY_CLASS) |
* | запустить с критическим приоритетом (REALTIME_PRIORITY_CLASS) |
> | '>' - вместо запуска приложения установить файл-флаг с именем, следующим за '>'. |
После соединения, в момент ожидания входа пользователя, Аргус может высвечивать заставку-приглашение для пользователей терминальных программ. Заставка устанавливается в окне настройки EMSI-данных.
Вот как транслируется строка параметров "Door and parameters" в строку запуска, при скорости DTE 57600, DCE 21600, номере линии - 2 и port handle - 64:
Door and parameters | d:\max\maxn.exe -s%b -b%B -n%n -p%h |
Translated execution string | d:\max\maxn.exe -s57600 -b21600 -n2 -p64 |
Environment |
Description |
Dialup value |
TCP/IP value | |
%B | ARGUS_DCE | Скорость соединения |
DCE (modem to modem) |
Значение берется из “подразумеваемой скорости соединения” |
%b | ARGUS_DTE | Скорость порта |
DTE (computer to modem) |
такое же, как и %B |
%e | ARGUS_CONNECT | Строка CONNECT (пробелы заменены на подчеркивания) |
такая, как вернул модем, например "16800/ARQ/HST” |
формируется TCP/IP Daemonом на основе адреса и порта соединения, например: "To 194.213.233.33 #24554” |
%E | ARGUS_CONTROL | Транслированный код коррекции ошибок |
"MNP", если в строке CONNECT присутствует MNP, ARQ или REL, иначе пустая строка |
Всегда "TCP/IP" |
%L | ARGUS_NAME | Имя линии почтовой системы (пробелы заменены на подчеркивания) |
берется из названия линии, указанного в диалоге dialup/lines/line |
"TCP/IP" плюс порядковый номер TCP/IP соединения, например: "TCP/IP 3" |
%n | ARGUS_LINE | Номер линии почтовой системы |
Порядковый номер в списке dialup/lines, например "1" для первой линии |
порядковый номер TCP/IP соединения, например "2" для линии "TCP/IP 2" |
%h | ARGUS_HANDLE | Communication resource handle |
COM port Win32 handle |
WinSock2 overlapped socket handle |
%C | ARGUS_NUMBER | Номер порта |
Номер COM-порта, например "1" для COM1 или "4" для COM4 |
Номер TCP/IP-порт, например: 24554 для BinkP. |
%p | ARGUS_INDEX | Индекс порта |
Номер порта, считаемый с нуля, например "0" для COM1 или "3" для COM4 |
такой же, как и %C |
Параметр %Z следует использовать с большой осторожностью. При закрытии порта, драйвер Windows сбрасывает все контрольные сигналы UART (см. Контроль потока данных), в том числе DTR, который в большинстве модемов применяется для инициализации. Поэтому, для передачи COM-порта DOS- и Windows 3.1-приложениям, необходимо настроить модем так, чтобы он не воспринимал изменение сигнала DTR как сброс.
Специальные параметры используются также в строке External Fax Receiver диалога конфигурации модемов для запуска внешних программ по приему факсов.
См. также Конфигурация внешних приложений.
1. Добавьте драйвер FOSSIL в \winnt\system32\config.nt, например device=c:\dos\bnu.sys /p=01
2. Argus / Config / Dialup / Modems, выберите Ваш модем и добавьте к строке инициализации AT&C1&D0.
3. Добавьте к Argus / Advanced / Externals / Doors строку “Enter = pp” и “Door and Paramenters = c:\pb\proboard.exe %Z -b%B -p%C”
Аргус имеет возможность периодического запуска внешних приложений и выполнения команд системного интерпретатора (Advanced/Externals/Cron)
Внимание - выполнения команд системного интерпретатора возможно только для версии Аргус под Windows NT. Под Windows 95 возможен только запуск EXE-приложений и BAT-файлов. BAT-файлы под Windows 95 запускаются следующим способом: c:\windows\command.com /C myfile.bat.
Символ '?' перед командой/именем файла в строке String to Execute сообщает системе Аргус о том, что процесс должен быть запущен в скрытом режиме, а ?? - в DETACHED_MODE (без использования консоли). В отличии от ?, флаг ?? можно использовать только для Win32-консольных приложений. Попытка запуска DETACHED Win3.1 или DOS-приложения вызовет ошибку.
Процессы могут быть запущены с определенным уровнем приоритета:
< | запустить с низким приоритетом (IDLE_PRIORITY_CLASS) |
+ | запустить с высоким приоритетом (HIGH_PRIORITY_CLASS) |
* | запустить с критическим приоритетом (REALTIME_PRIORITY_CLASS) |
> | вместо запуска приложения установить файл-флаг с именем, следующим за '>'. |
Cм. также описание формата Cron.
Этот диалог позволяет задавать параметры прозвонок.
Поля Busy, No c. и Fail задают максимальные значения соответствующих счетчиков, по достижении которых прозвонка переводится в режим Отбой на заданное полем Stand-off minutes число минут.
Поле Retry Seconds задает число секунд между повторами прозвонки. В качестве реального значения интервала Stand-off minutes и Retry Seconds используется случайное число в диапазоне от n*0.5 до n*1.5 (то есть+-50%). Например, при установленном в Retry Seconds значении 100, повторные прозвонки будут происходить со случайным интервалом от 50 до 150 секунд.
If you are upgrading to Argus from a mailer listed below or wish to use Argus in conjunction with other mailer, you may easily import password configuration. Import passwords dialogue box is invoked from Config/Passwords, Import button. You may import override configuration as well.
If you are upgrading to Argus from a mailer listed below or wish to use Argus in conjunction with other mailer, you may easily import node overrides, this information will be inserted into node overrides table for dial-up lines and TCP/IP Daemon. Import nodes dialogue box is invoked from Config/Dialup / Nodes tab / Import button for Dial-up nodes and from Config/TCP/IP Daemon / Nodes tab / Import button for TCP/IP nodes.
You may type one or several, if allowed, (delimited by space character) 4D/5D FTN addresses in the input line. To pick previously entered addresses, press Alt+Down or use mouse to invoke drop-down list. You may click Browse button to Invoke Nodelist Browser window to pick a node from currently compiled nodelist.
Буфер отправки системы Binkley - не единственный способ определения файлов, подлежащих отправке. Аргус способен сканировать определенные каталоги, найденные файлы в которых будут считаться подлежащими отправке. Такие каталоги называются файл-боксами. Каждому такому каталогу (файл-боксу) соответствует узел, на который должны быть оправлены файлы из него, и статус отправки. Эти соответствия (между каталогом и узлом/статусом) назначаются в диалоговом окне Config/File-boxes (Ctrl+B).
Строка ввода Options/Root directory позволяет определить корневой каталог для всех файл-боксов, пути к которым определены в сетке Nodes. Правило добавления пути корневого каталога те же, что и принятое при указании путей в сетке Special Directories диалогового окна Config/Paths.
Значением строки колонки Node может быть FTN-адрес или упрощенная маска адресов; а также регулярное выражение.
Значением строки колонки Status может быть:
C | файл-бокс со статусом Crash |
D | файл-бокс со статусом Direct |
N | файл-бокс со статусом Normal |
H | файл-бокс со статусом Hold |
* | любой из вышеперечисленных статусов |
%ZONE | зона, десятичная (1-4 десятичные цифры) |
%NET | сеть, десятичная (1-5 десятичных цифр) |
%NODE | узел, десятичный (1-5 десятичных цифр) |
%POINT | пойнт, десятичный (1-5 десятичных цифр) |
%HZONE | зона, шестнадцатеричная (3 шестнадцатеричные цифры) |
%HNET | сеть, шестнадцатеричная (4 шестнадцатеричные цифры) |
%HNODE | узел, шестнадцатеричный (4 шестнадцатеричные цифры) |
%HPOINT | пойнт, шестнадцатеричный (4 шестнадцатеричные цифры) |
%XZONE | зона, 32-чная (2 цифры в radix-32) |
%XNET | сеть, 32-чная (3 цифры в radix-32) |
%XNODE | узел, 32-чный (3 цифры в radix-32) |
%XPOINT | пойнт, 32-чнай (2 цифры в radix-32) |
%STATUS | статус файл-бокса (C=Crash, D=Direct, N=Normal, H=Hold) |
%TSTATUS | то же, что и %STATUS, но пустое значение обозначает Normal. |
%STMAIL | то же, что и комбинация %XZONE%XNET%XNODE.%XPOINT%TSTATUS |
%LTMAIL | то же, что и комбинация %ZONE.%NET.%NODE.%POINT?%TSTATUS |
Значение поля колонки Path может задать путь к каталогу, в который будут перемещены файлы, отправленные из данного файл-бокса. Такой каталог называется каталогом отправленных файлов. Путь к каталогу отправленных файлов отделяется от пути к файл-боксу символом "|" и может содержать дополнительные макросы (помимо вышеописанных), представляющие текущую дату и время.
%YEAR | Год (4 цифры) |
%MONTHN | Месяц (2 цифры) |
%MONTHA | Месяц (3 буквы) |
%MONTHS | Месяц (2 буквы) |
%DAY | День месяца (2 цифры) |
%DOWN | День недели (1 цифра) |
%DOWA | День недели (3 буквы) |
%DOWS | День недели (2 буквы) |
%HOUR | Час (2 цифры) |
%MINUTE | Минута (2 цифры) |
%SECOND | Секунда (2 цифры) |
Если каталог отправленных файлов не определен (значение поля колонки Path содержит только путь к файл-боксу, символ-разделитеть "|" отсутствует), то отправленные файлы будут удаляться.
Файлы, находящиеся в файл-боксах отображаются в дереве Outbound Manager, но SmartMenu не будет производить операции с ними. SmartMenu производит операции только в файлами, привязанными к оправке через Буфер отправки системы Binkley.
Пример сетки File Boxes configuration:
Node | Status | Path |
2:469/38 | N | out38|sent38 |
В этом случае, файлы, скопированные в каталог c:\fl\out38 будут считаться подлежащими отправке на узел 2:469/38 с приоритетом Normal (типы приоритетов описаны в главе Буфер отправки системы Binkley. То есть при входящем или исходящем сеансе связи с узлом 2:469/38 файлы из каталога c:\fl\out38 будут ему передаваться. Переданные файлы будут перемещены в каталог c:\fl\sent38.
Пример с использованием макроса:
Node | Status | Path |
2:469/*.0 | N | out%NODE|sent%NODE |
Чтобы определить T-Mail-совместимое дерево файл-боксов в c:\t-mail\fboxes, используйте следующий пример:
Node | Status | Path |
*:*/*.* | * | c:\t-mail\fboxes\%STMAIL |
Эта глава включает следующие справочные разделы:
Прозвонка на узел только в его рабочее время
Объединения адресов в группы
Формат Cron
Прием факсов
Расширенная хронология
Для указания времени работы узла система Аргус использует FSC-0062-флаги Txy. Эти флаги указываются либо в соответствующем поле списка узлов, либо в таблице переопределений модемных- или TCP/IP-узлов. Если время работы узла не указано, прозвонка на него будет производиться только в его ZMH (а на пойнт - вообще никогда).
Флаг CM означает круглосуточный режим работы.
Для объединения адресов в группу по маске используется символ *
1:*/*.* | все адреса в первой зоне |
2:46*/*.* | весь 46-й регион второй зоны |
2:469/* | то же, что 2:469/*.* - все узлы и пойнты сети 2:469 |
2:469/*.0 | все 3-d узлы сети 2:469 (без пойнтов) |
2*:50*/10* | все узлы и пойнты, номер зоны которых начинается с 2 (например, 2, 21, 228), у которых номер сети начинается с 50 (например, 50,5030,501,5020,5079), и номера которых начинаются на 10 (например, 10, 101, 100, 1034). К примеру, этим условиям удовлетворяет адрес 21:501/1034 |
*:*/* | все адреса |
Формат Cron представляет собой простой, но достаточно мощный и гибкий способ описаний периодических действий.
Формат:
* * * * * | или | Минута Час День Месяц ДеньНедели |
Диапазон | |
Минута | 0-59 |
Час | 0-23 |
День | 1-31 |
Месяц | 1-12 |
ДеньНедели | 1-7 (1 = понедельник, 2 = вторник, ..., 7 = воскресенье) |
Действие происходит, только если удовлетворяются все условия.
Примеры:
* * * * * | Каждую минуту |
59 23 31 12 5 | За минуту до конца года, и если последний день года - пятница. |
45 17 7 6 * | Каждый год 7-го июня в 17:45 |
0,15,30,45 0,6,12,18 1,15,31 * * | По полным четвертям часа; в полночь, в 6 утра, по 1-м, 15-м и 31-м числам каждого месяца, только по рабочим дням недели |
0 12 * * 1-5 | В полдень по рабочим дням |
* * * 1,3,5,7,9,11 * | Каждую минуту в январе, марте, мае, июле, сентябре и ноябре |
1,2,3,5,20-25,30-35,59 23 31 12 * | В последний день года в 23:01, 23:02, 23:03, 23:05, 23:20, 23:21, 23:22, 23:23, 23:24, 23:25, 23:30, 23:31, 23:32, 23:33, 23:34, 23:35, 23:59 |
0 9 1-7 * 1 | Первый понедельник каждого месяца, в 9 утра |
0 0 1 * * | В полночь, первого числа, каждый месяц |
* 0-11 * * * | Каждую минуту до полудня |
* * * 1,2,3 * | Каждую минуту в январе, феврале и мае |
0 0 * * * | Каждый день в полночь |
0 0 * * 3 | Каждую среду в полночь |
Полная запись | Сокращенная запись |
* * * * * | * |
59 23 31 12 5 | 59 23 31 12 5 |
45 17 7 6 * | 45 17 7 6
|
0,15,30,45 0,6,12,18 1,15,31 * * | 0,15,30,45 0,6,12,18 1,15,31 |
0 12 * * 1-5 | 0 12 * * 1-5 |
* * * 1,3,5,7,9,11 * | * * * 1,3,5,7,9,11 |
1,2,3,5,20-25,30-35,59 23 31 12 * | 1,2,3,5,20-25,30-35,59 23 31 12 |
0 9 1-7 * 1 | 0 9 1-7 * 1 |
0 0 1 * * | 0 0 1 |
* 0-11 * * * | * 0-11 |
* * * 1,2,3 * | * * * 1,2,3 |
0 0 * * * | 0 0 |
0 0 * * 3 | 0 0 * * 3 |
Инспектор Узлов, вызываемый через Config/Node Inspector (Ctrl+I) - это диалоговое окно, позволяющее редактировать различные параметры узлов в одном месте, добавлять и удалять узлы.
Флаг - это временный файл, находящийся в Argus Home Directory. С помошбю флагов, внешний программы или оператор может побудить какое-то действие Аргуса. Аргус периодически сканирует Home Directory на предмет наличия флагов, и перед началом действия удаляет флаг.
Список флагов:
nodelist.ok | Компилировать список узлов. Идентичен пункту Compile Nodelist меню Tool или Shift-F6. |
exit.now | Выход. Идентичен пункту Exit меню System или Alt+X. |
password.ok | Импортировать дополнительный файл паролей |
dupovr.ok | Импортировать файл дополнительных переопределений модемных линий. |
ipovr.ok | Импортировать файл дополнительных переопределений TCP/IP. |
close.linename | Закрыть модемную линию и освободить COM-порт. То есть, для закрытия линии с названием "Line4", флаг должен называться "close.Line4" |
open.linename | Открыть модемную линию. |
close.ip | Закрыть TCP/IP daemon. |
open.ip | Открыть TCP/IP daemon. |
File Request Editor is a window invoked from Tool / Edit File Request. This window has a string grid with two columns "File" and "Password".
Values of "File" column are file names or aliases (also called magic names). When specifying an alias, you need not to know the real name of requested file. For example, FidoNet Nodelist is requestable from most FidoNet nodes as NODELIST while the real name of the Nodelist file is changing every week. Another example is the file list of a system, which is often requested using the Alias FILES. You may also specify a file mask, if remote mailer (a mailer on a node from which you request files) allows that. If remote mailer is Argus, aliases, file names and file masks (optionally) are allowed. Argus neither transmits nor handles full-path-name file requests. Note that if the value of "File" column has space a character, Argus will transmit to remote mailer space characters replaced to "\20" sequences.
Values of "Password" column are passwords for specified files, not session passwords.
You may send strings to modem interactively. Use Line/Send Modem Commands menu item or press F9. This works when the modem is idle. Modem control characters are allowed.
Node inspector (Ctrl+I), invoked by Tool/Browse Nodelis menu items is a window that allows browsing currently compiled nodelist in a form of a tree.
Regular Expressions may be used in file masks, address masks, Modem Responses and File-Boxes configuration, i.e. anywhere where generic masks are allowed (though Modem Responses do not allow generic masks)
Argus uses Perl-Compatible Regular Expressions library (c) 1997-2000 University of Cambridge. This library was written by Philip Hazel <ph10@cam.ac.uk>, University Computing Service, New Museums Site, Cambridge CB2 3QG, England, Phone: +44 1223 334714.
Information about Perl-Compatible Regular Expressions (PCRE) syntax is given in a separate chapter, written by Philip Hazel.
The syntax is:
before~#regularexpression#after
where "before" and "after" is optional text that will be compared as a generic mask (a character matches itself, '?' matches any character, '*' matches a sequence of characters).
"regularexpression" is a text of a Regular Expression.
'#' - delimiter character.
~#cat(aract|erpillar|)\..*#
will match a file named "cat", "cataract", or "caterpillar", with any extension.
the above example is equivalent to
~#cat(aract|erpillar|)#.*
because the text after delimiter (".*") is treated as a generic mask, i.e. '.' matches a dot character and '*' matches any sequence of characters.
Here is another example of using regular expressions in Modem Responses:
~#^RING(\x20\d)?$#
This will match word "RING", optionally following a digit after space character.
To avoid using string grid separator character in a Regular Expression, use hex codes (e.g. \x20 for space character) or corresponding patterns (e.g. \s , that will match any whitespace character).
If you plan using '#' character within a regular expression, you may also use it's hex code, but better way would be choosing another delimiter.
~`^RING(\x20#\d)?$`
To insert ~ character into a generic mask, double it to avoid using it as a regular expression marker.
When matching file names and path names - PCRE_CASELESS.
When matching modem responses - PCRE_MULTILINE, because the regular expression is matching against the entire multi-line input data stream coming from a modem.
In all other cases none of PCRE options are set by default.
Argus uses Perl-compatible regular expressions.(PCRE) library. The library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5, with just a few differences. The current implementation corresponds to Perl 5.005. The syntax and semantics of the regular expressions supported by PCRE are described in this chapter.
Regular expressions are also described in the Perl documentation and in a number of other books, some of which have copious examples. Jeffrey Friedl's "Mastering Regular Expressions", published by O'Reilly (ISBN 1-56592-257-3), covers them in great detail. The description here is intended as reference documentation.
A regular expression is a pattern that is matched against a subject string from left to right. Most characters stand for themselves in a pattern, and match the corresponding characters in the subject. As a trivial example, the pattern
The quick brown fox
matches a portion of a subject string that is identical to itself. The power of regular expressions comes from the ability to include alternatives and repetitions in the pattern. These are encoded in the pattern by the use of meta-characters, which do not stand for themselves but instead are interpreted in some special way.
There are two different sets of meta-characters: those that are recognised anywhere in the pattern except within square brackets, and those that are recognised in square brackets. Outside square brackets, the meta-characters are as follows:
\ | general escape character with several uses |
^ | assert start of subject (or line, in multiline mode) |
$ | assert end of subject (or line, in multiline mode) |
. | match any character except newline (by default) |
[ | start character class definition |
| | start of alternative branch |
( | start subpattern |
) | end subpattern |
? | extends the meaning of ( also 0 or 1 quantifier also quantifier minimizer |
* | 0 or more quantifier |
+ | 1 or more quantifier |
{ | start min/max quantifier |
\ | general escape character |
^ | negate the class, but only if the first character |
- | indicates character range |
] | terminates the character class |
The backslash character has several uses. Firstly, if it is followed by a non-alphameric character, it takes away any special meaning that character may have. This use of backslash as an escape character applies both inside and outside character classes.
For example, if you want to match a "*" character, you write "\*" in the pattern. This applies whether or not the following character would otherwise be interpreted as a meta-character, so it is always safe to precede a non-alphameric with "\" to specify that it stands for itself. In particular, if you want to match a backslash, you write "\\".
If a pattern is compiled with the PCRE_EXTENDED option, whitespace in the pattern (other than in a character class) and characters between a "#" outside a character class and the next newline character are ignored. An escaping backslash can be used to include a whitespace or "#" character as part of the pattern.
A second use of backslash provides a way of encoding non-printing characters in patterns in a visible manner. There is no restriction on the appearance of non-printing characters, apart from the binary zero that terminates a pattern, but when a pattern is being prepared by text editing, it is usually easier to use one of the following escape sequences than the binary character it represents:
\a | alarm, that is, the BEL character (hex 07) |
\cx | "control-x", where x is any character |
\e | escape (hex 1B) |
\f | formfeed (hex 0C) |
\n | newline (hex 0A) |
\r | carriage return (hex 0D) |
\t | tab (hex 09) |
\xhh | character with hex code hh |
\ddd | character with octal code ddd, or backreference |
After "\x", up to two hexadecimal digits are read (letters can be in upper or lower case).
After "\0" up to two further octal digits are read. In both cases, if there are fewer than two digits, just those that are present are used. Thus the sequence "\0\x\07" specifies two binary zeros followed by a BEL character. Make sure you supply two digits after the initial zero if the character that follows is itself an octal digit.
The handling of a backslash followed by a digit other than 0 is complicated. Outside a character class, PCRE reads it and any following digits as a decimal number. If the number is less than 10, or if there have been at least that many previous capturing left parentheses in the expression, the entire sequence is taken as a back reference. A description of how this works is given later, following the discussion of parenthesized subpatterns.
Inside a character class, or if the decimal number is greater than 9 and there have not been that many capturing subpatterns, PCRE re-reads up to three octal digits following the backslash, and generates a single byte from the least significant 8 bits of the value. Any subsequent digits stand for themselves. For example:
\040 | is another way of writing a space |
\40 | is the same, provided there are fewer than 40 previous capturing subpatterns |
\7 | is always a back reference |
\11 | might be a back reference, or another way of writing a tab |
\011 | is always a tab |
\0113 | is a tab followed by the character "3" |
\113 | is the character with octal code 113 (since there can be no more than 99 back references) |
\377 | is a byte consisting entirely of 1 bits |
\81 | is either a back reference, or a binary zero followed by the two characters "8" and "1" |
All the sequences that define a single byte value can be used both inside and outside character classes. In addition, inside a character class, the sequence "\b" is interpreted as the backspace character (hex 08). Outside a character class it has a different meaning (see below).
The third use of backslash is for specifying generic character types:
\d | any decimal digit |
\D | any character that is not a decimal digit |
\s | any whitespace character |
\S | any character that is not a whitespace character |
\w | any "word" character |
\W | any "non-word" character |
A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale- specific matching is taking place (see "Locale support" above). For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w.
These character type sequences can appear both inside and outside character classes. They each match one character of the appropriate type. If the current matching point is at the end of the subject string, all of them fail, since there is no character to match.
The fourth use of backslash is for certain simple assertions. An assertion specifies a condition that has to be met at a particular point in a match, without consuming any characters from the subject string. The use of subpatterns for more complicated assertions is described below. The backslashed assertions are
\b | word boundary |
\B | not a word boundary |
\A | start of subject (independent of multiline mode) |
\Z | end of subject or newline at end (independent of multiline mode) |
\z | end of subject (independent of multiline mode) |
A word boundary is a position in the subject string where the current character and the previous character do not both match \w or \W (i.e. one matches \w and the other matches \W), or the start or end of the string if the first or last character matches \w, respectively.
The \A, \Z, and \z assertions differ from the traditional circumflex and dollar (described below) in that they only ever match at the very start and end of the subject string, whatever options are set. They are not affected by the PCRE_NOTBOL or PCRE_NOTEOL options. The difference between \Z and \z is that \Z matches before a newline that is the last character of the string as well as at the end of the string, whereas \z matches only at the end.
Outside a character class, in the default matching mode, the circumflex character is an assertion which is true only if the current matching point is at the start of the subject string. Inside a character class, circumflex has an entirely different meaning (see below).
Circumflex need not be the first character of the pattern if a number of alternatives are involved, but it should be the first thing in each alternative in which it appears if the pattern is ever to match that branch. If all possible alternatives start with a circumflex, that is, if the pattern is constrained to match only at the start of the subject, it is said to be an "anchored" pattern. (There are also other constructs that can cause a pattern to be anchored.)
A dollar character is an assertion which is true only if the current matching point is at the end of the subject string, or immediately before a newline character that is the last character in the string (by default). Dollar need not be the last character of the pattern if a number of alternatives are involved, but it should be the last item in any branch in which it appears. Dollar has no special meaning in a character class.
The meaning of dollar can be changed so that it matches only at the very end of the string, by setting the PCRE_DOLLAR_ENDONLY option at compile or matching time. This does not affect the \Z assertion.
The meanings of the circumflex and dollar characters are changed if the PCRE_MULTILINE option is set. When this is the case, they match immediately after and immediately before an internal "\n" character, respectively, in addition to matching at the start and end of the subject string. For example, the pattern /^abc$/ matches the subject string "def
abc" in multiline mode, but not otherwise. Consequently, patterns that are anchored in single line mode because all branches start with "^" are not anchored in multiline mode. The PCRE_DOLLAR_ENDONLY option is ignored if PCRE_MULTILINE is set.
Note that the sequences \A, \Z, and \z can be used to match the start and end of the subject in both modes, and if all branches of a pattern start with \A is it always anchored, whether PCRE_MULTILINE is set or not.
Outside a character class, a dot in the pattern matches any one character in the subject, including a non-printing character, but not (by default) newline. If the PCRE_DOTALL option is set, then dots match newlines as well. The handling of dot is entirely independent of the handling of circumflex and dollar, the only relationship being that they both involve newline characters. Dot has no special meaning in a character class.
An opening square bracket introduces a character class, terminated by a closing square bracket. A closing square bracket on its own is not special. If a closing square bracket is required as a member of the class, it should be the first data character in the class (after an initial circumflex, if present) or escaped with a backslash.
A character class matches a single character in the subject; the character must be in the set of characters defined by the class, unless the first character in the class is a circumflex, in which case the subject character must not be in the set defined by the class. If a circumflex is actually required as a member of the class, ensure it is not the first character, or escape it with a backslash.
For example, the character class [aeiou] matches any lower case vowel, while [^aeiou] matches any character that is not a lower case vowel. Note that a circumflex is just a convenient notation for specifying the characters which are in the class by enumerating those that are not. It is not an assertion: it still consumes a character from the subject string, and fails if the current pointer is at the end of the string.
When caseless matching is set, any letters in a class represent both their upper case and lower case versions, so for example, a caseless [aeiou] matches "A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a caseful version would.
The newline character is never treated in any special way in character classes, whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE options is. A class such as [^a] will always match a newline.
The minus (hyphen) character can be used to specify a range of characters in a character class. For example, [d-m] matches any letter between d and m, inclusive. If a minus character is required in a class, it must be escaped with a backslash or appear in a position where it cannot be interpreted as indicating a range, typically as the first or last character in the class.
It is not possible to have the literal character "]" as the end character of a range. A pattern such as [W-]46] is interpreted as a class of two characters ("W" and "-") followed by a literal string "46]", so it would match "W46]" or "-46]". However, if the "]" is escaped with a backslash it is interpreted as the end of range, so [W-\]46] is interpreted as a single class containing a range followed by two separate characters. The octal or hexadecimal representation of "]" can also be used to end a range.
Ranges operate in ASCII collating sequence. They can also be used for characters specified numerically, for example [\000-\037]. If a range that includes letters is used when caseless matching is set, it matches the letters in either case. For example, [W-c] is equivalent to [][\^_`wxyzabc], matched caselessly, and if character tables for the "fr" locale are in use, [\xc8-\xcb] matches accented E characters in both cases.
The character types \d, \D, \s, \S, \w, and \W may also appear in a character class, and add the characters that they match to the class. For example, [\dABCDEF] matches any hexadecimal digit. A circumflex can conveniently be used with the upper case character types to specify a more restricted set of characters than the matching lower case type. For example, the class [^\W_] matches any letter or digit, but not underscore.
All non-alphameric characters other than \, -, ^ (at the start) and the terminating ] are non-special in character classes, but it does no harm if they are escaped.
Vertical bar characters are used to separate alternative patterns. For example, the pattern
gilbert|sullivan
matches either "gilbert" or "sullivan". Any number of alternatives may appear, and an empty alternative is permitted (matching the empty string). The matching process tries each alternative in turn, from left to right, and the first one that succeeds is used. If the alternatives are within a subpattern (defined below), "succeeds" means matching the rest of the main pattern as well as the alternative in the subpattern.
The settings of PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, and PCRE_EXTENDED can be changed from within the pattern by a sequence of Perl option letters enclosed between "(?" and ")". The option letters are
i | PCRE_CASELESS | Letters in the pattern match both upper and lower case letters. It is equivalent to Perl's /i option. |
m | PCRE_MULTILINE | By default, PCRE treats the subject string as consisting of a single "line" of characters (even if it actually contains several newlines). The "start of line" metacharacter (^) matches only at the start of the string, while the "end of line" metacharacter ($) matches only at the end of the string, or before a terminating newline (unless PCRE_DOLLAR_ENDONLY is set). This is the same as Perl.
When PCRE_MULTILINE it is set, the "start of line" and "end of line" constructs match immediately following or immediately before any newline in the subject string, respectively, as well as at the very start and end. This is equivalent to Perl's /m option. If there are no "\n" characters in a subject string, or no occurrences of ^ or $ in a pattern, setting PCRE_MULTILINE has no effect. |
s | PCRE_DOTALL | If this bit is set, a dot metacharater in the pattern matches all characters, including newlines. Without it, newlines are excluded. This option is equivalent to Perl's /s option. A negative class such as [^a] always matches a newline character, independent of the setting of this option. |
x | PCRE_EXTENDED | If this bit is set, whitespace data characters in the pattern are totally ignored except when escaped or inside a character class, and characters between an unescaped # outside a character class and the next newline character, inclusive, are also ignored. This is equivalent to Perl's /x option, and makes it possible to include comments inside complicated patterns. Note, however, that this applies only to data characters. Whitespace characters may never appear within special character sequences in a pattern, for example within the sequence (?( which introduces a conditional subpattern. |
The scope of these option changes depends on where in the pattern the setting occurs. For settings that are outside any subpattern (defined below), the effect is the same as if the options were set or unset at the start of matching. The following patterns all behave in exactly the same way:
(?i)abc
a(?i)bc
ab(?i)c
abc(?i)
which in turn is the same as compiling the pattern abc with PCRE_CASELESS set. In other words, such "top level" settings apply to the whole pattern (unless there are other changes inside subpatterns). If there is more than one setting of the same option at top level, the rightmost setting is used.
If an option change occurs inside a subpattern, the effect is different. This is a change of behaviour in Perl 5.005. An option change inside a subpattern affects only that part of the subpattern that follows it, so
(a(?i)b)c
matches abc and aBc and no other strings (assuming PCRE_CASELESS is not used). By this means, options can be made to have different settings in different parts of the pattern. Any changes made in one alternative do carry on into subsequent branches within the same subpattern. For example,
(a(?i)b|c)
matches "ab", "aB", "c", and "C", even though when matching "C" the first branch is abandoned before the option setting. This is because the effects of option settings happen at compile time. There would be some very weird behaviour otherwise.
The PCRE-specific options PCRE_UNGREEDY and PCRE_EXTRA can be changed in the same way as the Perl-compatible options by using the characters U and X respectively. The (?X) flag setting is special in that it must always occur earlier in the pattern than any of the additional features it turns on, even when it is at top level. It is best put at the start.
Subpatterns are delimited by parentheses (round brackets), which can be nested.
Marking part of a pattern as a subpattern does two things:
1. It localizes a set of alternatives. For example, the pattern
cat(aract|erpillar|)
matches one of the words "cat", "cataract", or "caterpillar". Without the parentheses, it would match "cataract", "erpillar" or the empty string.
2. It sets up the subpattern as a capturing subpattern (as defined above). Opening parentheses are counted from left to right (starting from 1) to obtain the numbers of the capturing subpatterns.
For example, if the string "the red king" is matched against the pattern
the ((red|white) (king|queen))
the captured substrings are "red king", "red", and "king", and are numbered 1, 2, and 3.
The fact that plain parentheses fulfil two functions is not always helpful. There are often times when a grouping subpattern is required without a capturing requirement. If an opening parenthesis is followed by "?:", the subpattern does not do any capturing, and is not counted when computing the number of any subsequent capturing subpatterns. For example, if the string "the white queen" is matched against the pattern
the ((?:red|white) (king|queen))
the captured substrings are "white queen" and "queen", and are numbered 1 and 2. The maximum number of captured substrings is 99, and the maximum number of all subpatterns, both capturing and non-capturing, is 200.
As a convenient shorthand, if any option settings are required at the start of a non-capturing subpattern, the option letters may appear between the "?" and the ":". Thus the two patterns
(?i:saturday|sunday)
(?:(?i)saturday|sunday)
match exactly the same set of strings. Because alternative branches are tried from left to right, and options are not reset until the end of the subpattern is reached, an option setting in one branch does affect subsequent branches, so the above patterns match "SUNDAY" as well as "Saturday".
Repetition is specified by quantifiers, which can follow any of the following items:
a single character, possibly escaped
the . metacharacter
a character class
a back reference (see next section)
a parenthesized subpattern (unless it is an assertion - see below)
The general repetition quantifier specifies a minimum and maximum number of permitted matches, by giving the two numbers in curly brackets (braces), separated by a comma. The numbers must be less than 65536, and the first must be less than or equal to the second. For example:
z{2,4}
matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special character. If the second number is omitted, but the comma is present, there is no upper limit; if the second number and the comma are both omitted, the quantifier specifies an exact number of required matches. Thus
[aeiou]{3,}
matches at least 3 successive vowels, but may match many more, while
\d{8}
matches exactly 8 digits. An opening curly bracket that appears in a position where a quantifier is not allowed, or one that does not match the syntax of a quantifier, is taken as a literal character. For example, {,6} is not a quantifier, but a literal string of four characters.
The quantifier {0} is permitted, causing the expression to behave as if the previous item and the quantifier were not present.
For convenience (and historical compatibility) the three most common quantifiers have single-character abbreviations:
* | is equivalent to {0,} |
+ | is equivalent to {1,} |
? | is equivalent to {0,1} |
(a?)*
Earlier versions of Perl and PCRE used to give an error at compile time for such patterns. However, because there are cases where this can be useful, such patterns are now accepted, but if any repetition of the subpattern does in fact match no characters, the loop is forcibly broken.
By default, the quantifiers are "greedy", that is, they match as much as possible (up to the maximum number of permitted times), without causing the rest of the pattern to fail. The classic example of where this gives problems is in trying to match comments in C programs. These appear between the sequences /* and */ and within the sequence, individual * and / characters may appear. An attempt to match C comments by applying the pattern
/\*.*\*/
to the string
/* first command */ not comment /* second comment */
fails, because it matches the entire string due to the greediness of the .* item.
However, if a quantifier is followed by a question mark, then it ceases to be greedy, and instead matches the minimum number of times possible, so the pattern
/\*.*?\*/
does the right thing with the C comments. The meaning of the various quantifiers is not otherwise changed, just the preferred number of matches. Do not confuse this use of question mark with its use as a quantifier in its own right. Because it has two uses, it can sometimes appear doubled, as in
\d??\d
which matches one digit by preference, but can match two if that is the only way the rest of the pattern matches.
If the PCRE_UNGREEDY option is set (an option which is not available in Perl) then the quantifiers are not greedy by default, but individual ones can be made greedy by following them with a question mark. In other words, it inverts the default behaviour.
When a parenthesized subpattern is quantified with a minimum repeat count that is greater than 1 or with a limited maximum, more store is required for the compiled pattern, in proportion to the size of the minimum or maximum.
If a pattern starts with .* or .{0,} and the PCRE_DOTALL option (equivalent to Perl's /s) is set, thus allowing the . to match newlines, then the pattern is implicitly anchored, because whatever follows will be tried against every character position in the subject string, so there is no point in retrying the overall match at any position after the first. PCRE treats such a pattern as though it were preceded by \A. In cases where it is known that the subject string contains no newlines, it is worth setting PCRE_DOTALL when the pattern begins with .* in order to obtain this optimization, or alternatively using ^ to indicate anchoring explicitly.
When a capturing subpattern is repeated, the value captured is the substring that matched the final iteration. For example, after
(tweedle[dume]{3}\s*)+
has matched "tweedledum tweedledee" the value of the captured substring is "tweedledee". However, if there are nested capturing subpatterns, the corresponding captured values may have been set in previous iterations. For example, after
/(a|(b))+/
matches "aba" the value of the second captured substring is "b".
Outside a character class, a backslash followed by a digit greater than 0 (and possibly further digits) is a back reference to a capturing subpattern earlier (i.e. to its left) in the pattern, provided there have been that many previous capturing left parentheses.
However, if the decimal number following the backslash is less than 10, it is always taken as a back reference, and causes an error only if there are not that many capturing left parentheses in the entire pattern. In other words, the parentheses that are referenced need not be to the left of the reference for numbers less than 10. See the section entitled "Backslash" above for further details of the handling of digits following a backslash.
A back reference matches whatever actually matched the capturing subpattern in the current subject string, rather than anything matching the subpattern itself. So the pattern
(sens|respons)e and \1ibility
matches "sense and sensibility" and "response and responsibility", but not "sense and responsibility". If caseful matching is in force at the time of the back reference, then the case of letters is relevant. For example,
((?i)rah)\s+\1
matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original capturing subpattern is matched caselessly.
There may be more than one back reference to the same subpattern. If a subpattern has not actually been used in a particular match, then any back references to it always fail. For example, the pattern
(a|(bc))\2
always fails if it starts to match "a" rather than "bc". Because there may be up to 99 back references, all digits following the backslash are taken as part of a potential back reference number. If the pattern continues with a digit character, then some delimiter must be used to terminate the back reference. If the PCRE_EXTENDED option is set, this can be whitespace. Otherwise an empty comment can be used.
A back reference that occurs inside the parentheses to which it refers fails when the subpattern is first used, so, for example, (a\1) never matches. However, such references can be useful inside repeated subpatterns. For example, the pattern
(a|b\1)+
matches any number of "a"s and also "aba", "ababaa" etc. At each iteration of the subpattern, the back reference matches the character string corresponding to the previous iteration. In order for this to work, the pattern must be such that the first iteration does not need to match the back reference. This can be done using alternation, as in the example above, or by a quantifier with a minimum of zero.
An assertion is a test on the characters following or preceding the current matching point that does not actually consume any characters. The simple assertions coded as \b, \B, \A, \Z, \z, ^ and $ are described above. More complicated assertions are coded as subpatterns. There are two kinds: those that look ahead of the current position in the subject string, and those that look behind it.
An assertion subpattern is matched in the normal way, except that it does not cause the current matching position to be changed. Lookahead assertions start with (?= for positive assertions and (?! for negative assertions. For example,
\w+(?=;)
matches a word followed by a semicolon, but does not include the semicolon in the match, and
foo(?!bar)
matches any occurrence of "foo" that is not followed by "bar". Note that the apparently similar pattern
(?!foo)bar
does not find an occurrence of "bar" that is preceded by something other than "foo"; it finds any occurrence of "bar" whatsoever, because the assertion (?!foo) is always true when the next three characters are "bar". A lookbehind assertion is needed to achieve this effect.
Lookbehind assertions start with (?<= for positive assertions and (?<! for negative assertions. For example,
(?<!foo)bar
does find an occurrence of "bar" that is not preceded by "foo". The contents of a lookbehind assertion are restricted such that all the strings it matches must have a fixed length. However, if there are several alternatives, they do not all have to have the same fixed length. Thus
(?<=bullock|donkey)
is permitted, but
(?<!dogs?|cats?)
causes an error at compile time. Branches that match different length strings are permitted only at the top level of a lookbehind assertion. This is an extension compared with Perl 5.005, which requires all branches to match the same length of string. An assertion such as
(?<=ab(c|de))
is not permitted, because its single top-level branch can match two different lengths, but it is acceptable if rewritten to use two top-level branches:
(?<=abc|abde)
The implementation of lookbehind assertions is, for each alternative, to temporarily move the current position back by the fixed width and then try to match. If there are insufficient characters before the current position, the match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns can be particularly useful for matching at the ends of strings; an example is given at the end of the section on once-only subpatterns.
Several assertions (of any sort) may occur in succession. For example,
(?<=\d{3})(?<!999)foo
matches "foo" preceded by three digits that are not "999". Furthermore, assertions can be nested in any combination. For example,
(?<=(?<!foo)bar)baz
matches an occurrence of "baz" that is preceded by "bar" which in turn is not preceded by "foo".
Assertion subpatterns are not capturing subpatterns, and may not be repeated, because it makes no sense to assert the same thing several times. If an assertion contains capturing subpatterns within it, these are always counted for the purposes of numbering the capturing subpatterns in the whole pattern. Substring capturing is carried out for positive assertions, but it does not make sense for negative assertions.
Assertions count towards the maximum of 200 parenthesized subpatterns.
With both maximizing and minimizing repetition, failure of what follows normally causes the repeated item to be re-evaluated to see if a different number of repeats allows the rest of the pattern to match. Sometimes it is useful to prevent this, either to change the nature of the match, or to cause it fail earlier than it otherwise might, when the author of the pattern knows there is no point in carrying on.
Consider, for example, the pattern \d+foo when applied to the subject line
123456bar
After matching all 6 digits and then failing to match "foo", the normal action of the matcher is to try again with only 5 digits matching the \d+ item, and then with 4, and so on, before ultimately failing. Once-only subpatterns provide the means for specifying that once a portion of the pattern has matched, it is not to be re-evaluated in this way, so the matcher would give up immediately on failing to match "foo" the first time. The notation is another kind of special parenthesis, starting with (?> as in this example:
(?>\d+)bar
This kind of parenthesis "locks up" the part of the pattern it contains once it has matched, and a failure further into the pattern is prevented from backtracking into it. Backtracking past it to previous items, however, works as normal.
An alternative description is that a subpattern of this type matches the string of characters that an identical standalone pattern would match, if anchored at the current point in the subject string.
Once-only subpatterns are not capturing subpatterns. Simple cases such as the above example can be thought of as a maximizing repeat that must swallow everything it can. So, while both \d+ and \d+? are prepared to adjust the number of digits they match in order to make the rest of the pattern match, (?>\d+) can only match an entire sequence of digits.
This construction can of course contain arbitrarily complicated subpatterns, and it can be nested.
Once-only subpatterns can be used in conjunction with lookbehind assertions to specify efficient matching at the end of the subject string. Consider a simple pattern such as
abcd$
when applied to a long string which does not match it. Because matching proceeds from left to right, PCRE will look for each "a" in the subject and then see if what follows matches the rest of the pattern. If the pattern is specified as
^.*abcd$
then the initial .* matches the entire string at first, but when this fails, it backtracks to match all but the last character, then all but the last two characters, and so on. Once again the search for "a" covers the entire string, from right to left, so we are no better off. However, if the pattern is written as
^(?>.*)(?<=abcd)
then there can be no backtracking for the .* item; it can match only the entire string. The subsequent lookbehind assertion does a single test on the last four characters. If it fails, the match fails immediately. For long strings, this approach makes a significant difference to the processing time.
It is possible to cause the matching process to obey a subpattern conditionally or to choose between two alternative subpatterns, depending on the result of an assertion, or whether a previous capturing subpattern matched or not. The two possible forms of conditional subpattern are
(?(condition)yes-pattern)
(?(condition)yes-pattern|no-pattern)
If the condition is satisfied, the yes-pattern is used; otherwise the no-pattern (if present) is used. If there are more than two alternatives in the subpattern, a compile-time error occurs.
There are two kinds of condition. If the text between the parentheses consists of a sequence of digits, then the condition is satisfied if the capturing subpattern of that number has previously matched. Consider the following pattern, which contains non-significant white space to make it more readable (assume the PCRE_EXTENDED option) and to divide it into three parts for ease of discussion:
( \( )? [^()]+ (?(1) \) )
The first part matches an optional opening parenthesis, and if that character is present, sets it as the first captured substring. The second part matches one or more characters that are not parentheses. The third part is a conditional subpattern that tests whether the first set of parentheses matched or not. If they did, that is, if subject started with an opening parenthesis, the condition is true, and so the yes-pattern is executed and a closing parenthesis is required. Otherwise, since no-pattern is not present, the subpattern matches nothing. In other words, this pattern matches a sequence of non-parentheses, optionally enclosed in parentheses.
If the condition is not a sequence of digits, it must be an assertion. This may be a positive or negative lookahead or lookbehind assertion. Consider this pattern, again containing non-significant white space, and with the two alternatives on the second line:
(?(?=[^a-z]*[a-z])
\d{2}[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )
The condition is a positive lookahead assertion that matches an optional sequence of non-letters followed by a letter. In other words, it tests for the presence of at least one letter in the subject. If a letter is found, the subject is matched against the first alternative; otherwise it is matched against the second. This pattern matches strings in one of the two forms dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.
The sequence (?# marks the start of a comment which continues up to the next closing parenthesis. Nested parentheses are not permitted. The characters that make up a comment play no part in the pattern matching at all.
If the PCRE_EXTENDED option is set, an unescaped # character outside a character class introduces a comment that continues up to the next newline character in the pattern.
Certain items that may appear in patterns are more efficient than others. It is more efficient to use a character class like [aeiou] than a set of alternatives such as (a|e|i|o|u). In general, the simplest construction that provides the required behaviour is usually the most efficient. Jeffrey Friedl's book contains a lot of discussion about optimizing regular expressions for efficient performance.
When a pattern begins with .* and the PCRE_DOTALL option is set, the pattern is implicitly anchored by PCRE, since it can match only at the start of a subject string. However, if PCRE_DOTALL is not set, PCRE cannot make this optimization, because the . metacharacter does not then match a newline, and if the subject string contains newlines, the pattern may match from the character immediately following one of them instead of from the very start. For example, the pattern
(.*) second
matches the subject "first\nand second" (where \n stands for a newline character) with the first captured substring being "and". In order to do this, PCRE has to retry the match starting after every newline in the subject.
If you are using such a pattern with subject strings that do not contain newlines, the best performance is obtained by setting PCRE_DOTALL, or starting the pattern with ^.* to indicate explicit anchoring. That saves PCRE from having to scan along the subject looking for a newline to restart at.
There are some size limitations in PCRE but it is hoped that they will never in practice be relevant. The maximum length of a compiled pattern is 65539 (sic) bytes. All values in repeating quantifiers must be less than 65536. The maximum number of capturing subpatterns is 99. The maximum number of all parenthesized subpatterns, including capturing subpatterns, assertions, and other types of subpattern, is 200.
The maximum length of a subject string is the largest positive number that an integer variable can hold. However, PCRE uses recursion to handle subpatterns and indefinite repetition. This means that the available stack space may limit the size of a subject string that can be processed by certain patterns.
The differences described here are with respect to Perl 5.005.
1. By default, a whitespace character is any character that the C library function isspace recognizes, though it is possible to compile PCRE with alternative character type tables. Normally isspace matches space, formfeed, newline, carriage return, horizontal tab, and vertical tab. Perl 5 no longer includes vertical tab in its set of whitespace characters. The \v escape that was in the Perl documentation for a long time was never in fact recognized. However, the character itself was treated as whitespace at least up to 5.002. In 5.004 and 5.005 it does not match \s.
2. PCRE does not allow repeat quantifiers on lookahead assertions. Perl permits them, but they do not mean what you might think. For example, (?!a){3} does not assert that the next three characters are not "a". It just asserts that the next character is not "a" three times.
3. Capturing subpatterns that occur inside negative lookahead assertions are counted, but their entries in the offsets vector are never set. Perl sets its numerical variables from any such patterns that are matched before the assertion fails to match something (thereby succeeding), but only if the negative lookahead assertion contains just one branch.
4. Though binary zero characters are supported in the subject string, they are not allowed in a pattern string because it is passed as a normal C string, terminated by zero. The escape sequence "\0" can be used in the pattern to represent a binary zero.
5. The following Perl escape sequences are not supported: \l, \u, \L, \U, \E, \Q. In fact these are implemented by Perl's general string-handling and are not part of its pattern matching engine.
6. The Perl \G assertion is not supported as it is not relevant to single pattern matches.
7. Fairly obviously, PCRE does not support the (?{code}) construction.
8. There are at the time of writing some oddities in Perl 5.005_02 concerned with the settings of captured strings when part of a pattern is repeated. For example, matching "aba" against the pattern /^(a(b)?)+$/ sets $2 to the value "b", but matching "aabbaa" against /^(aa(bb)?)+$/ leaves $2 unset. However, if the pattern is changed to /^(aa(b(b))?)+$/ then $2 (and $3) get set.
In Perl 5.004 $2 is set in both cases, and that is also true of PCRE. If in the future Perl changes to a consistent state that is different, PCRE may change to follow.
9. Another as yet unresolved discrepancy is that in Perl 5.005_02 the pattern /^(a)?(?(1)a|b)+$/ matches the string "a", whereas in PCRE it does not. However, in both Perl and PCRE /^(a)?a/ matched against "a" leaves $1 unset.
10. PCRE provides some extensions to the Perl regular expression facilities:
(a) Although lookbehind assertions must match fixed length strings, each alternative branch of a lookbehind assertion can match a different length of string. Perl 5.005 requires them all to have the same length.
(b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $ meta-character matches only at the very end of the string.
(c) If PCRE_EXTRA is set, a backslash followed by a letter with no special meaning is faulted.
(d) If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is inverted, that is, by default they are not greedy, but if followed by a question mark they are.
To turn ODBC Logging on, create in "ODBC Data Source Administrator" a data source named "ArgusLog". In the database, create a table named LogStrings with the following mandatory columns: three text columns called "Logger", "RecTag", and "RecMsg" and a timestamp column "RecTime". You may also add additional 'row number' fields, but make sure they are automatically updated, Argus would never write there. Argus doesn't currently log other information to ODBC. To add log records, Argus executes the following SQL statement:
INSERT INTO LogStrings (Logger, RecTag, RecTime, RecMsg) VALUES (?, ?, ?, ?)
You may issue the following SQL statement to create LogStrings table under Microsoft Access:
create table LogStrings (
RecId counter NOT NULL CONSTRAINT RecIdIndex PRIMARY KEY,
Logger char(20) NOT NULL,
RecTag char(1) NOT NULL,
RecTime date NOT NULL,
RecMsg char(250) NOT NULL);
Then go to Config/Start-up, turn ODBC logging on and restart Argus. ODBC errors are logged to "odbcerr.log" file in Argus logs directory.
Некоторая часть глав этого пособия еще не написана или не переведена, поэтому мы ищем вашей помощи. Если у Вас есть желание написать одну или несколько глав и помочь нам в составлении этого пособия (на что у нас почти не остается времени), свяжитесь с нами: argus@ritlabs.com или 2:469/84@fidonet