Анализ очереди и формирование выходных звонков
Если система "попала" в очередь, это еще не значит, что T-Mail будет
звонить и пытаться отправить туда почту. Ниже описывается алгоритм, который
используется при анализе текущей позиции в очереди.
Итак, когда же T-Mail позвонит на систему Х, находящуюся в очереди?
# имеет ли хоть один узел в очереди статус priority ? Если да, то
анализируется имеет ли Х этот статус. Если да, то звонок возможен, если
нет - то в первую очередь будут обслужены те узлы, для которых этот
статус задан.
# проверяется, разрешает ли значение переменной Call_Time
выходные звонки.
# анализируется, можно ли в настоящее время звонить на узел Х:
- известен ли нам телефон узла Х? Если нет, то звонок не производится.
- нет ли директивы Freeze для узла X? Если есть, то звонок не
производится.
- если для узла X установлен статус Immediate, то звонок производится
без проверок наличия статуса Hold и времени, когда узел X принимает
звонки.
- принимает ли узел Х звонки в настоящее время? Анализируется по:
- значению переменной Default_OH ( t-mail.ctl );
- нодлисту - флаги СМ, OH (FSC-0020), Txy (FSC-0062),
#nn и !nn (FTS-0005) (см.приложение II);
- subst.lst - заданные параметрами time.
Если не принимает, то звонок не производится. Следует иметь ввиду,
что при использовании флага Txy подразумевается время UTC, поэтому
для правильной интерпретации необходимо, чтобы переменная UTC
( t-mail.ctl ) была установлена правильно.
- если для узла X установлен статус Crash, то звонок производится
без проверок наличия статуса Hold .
- нет ли директивы Hold для X? Если нет, то звонок производится, если
есть, то проверяется, не превысило ли суммарное количество информации
для узла X параметр (NN) в директиве Hold (если такой параметр
задан). Если превысило, то звонок также производится.
- не имеет ли узел статус Hold (заданный оператором вручную с
клавиатуры)? Если не имеет, то звонок производится.
# Затем анализируется, какого рода есть почта для узла Х:
- есть ли просто почта?
- есть ли файлы в активном файлбоксе по умолчанию?
- есть ли файлы в Bink-Style Outbound?
- есть ли файловые запросы?
и если выясняется, что есть только файловые запросы, то анализируется
имеющаяся информация о том, когда узел Х обслуживает файловые запросы:
- по нодлисту - флаги FR;
- по subst.lst - параметр ftime;
- по events.ctl - параметр NoReq .
Если текущее время не совпадает с заданным в этих источниках, звонок не
производится.
# Анализируется, не превысило ли число попыток дозвониться на этот узел
значение переменной Call_Tries. Если это значение превышено, звонок не
производится.
# В многолинейной системе анализируется, не звонит ли уже другой канал на
этот узел (busy-флаги, флаги занятости). Если да, то звонок не
производится.
При этом учитываются еще такие дополнительные условия:
- если хотя бы одно письмо в пакете для узла X имеет атрибут
Crash или Imm, то директивы Hold будут проигнорированы;
- если все письма в пакете для узла X имеют атрибут Hold , то
звонок не производится.
На самом деле этот алгоритм иногда выглядит несколько иначе из-за
необходимости оптимизации, но все перечисленные ступени так или иначе в нем
присутствуют.
Если звонок разрешен, то T-Mail приступает к формированию строки для
пересылки в модем. Эта строка формируется из трех составных частей:
1. Префикс. Эта часть берется из переменной Dial_Prefix ( t-mail.ctl ),
соответствующей флагам той системы, куда производится звонок.
2. Номер телефона. Эта часть берется из соответствующего этой системе
нодлиста/пойнтлиста или из файла subst.lst (поле Phone). При
использовании номера из нодлиста/пойнтлиста производится трансляция
номера в соответствии с переменными Dial ( t-mail.ctl ). При
использовании номера из файла subst.lst такая трансляция не
производится. В любом случае все символы '_' в номере заменяются на
пробелы.
3. Суффикс. Эта часть берется из переменной Dial_Suffix ( t-mail.ctl ).
Все три части представляют собой текстовые строки, после объединения
их в указанной выше последовательности, полученная строка посылается в
модем для осуществления вызова удаленной системы.