Анализ очереди и формирование выходных звонков


     Если система "попала"  в очередь, это еще не  значит, что 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 ).

     Все три  части представляют собой текстовые  строки, после объединения
их  в указанной  выше  последовательности,  полученная строка  посылается в
модем для осуществления вызова удаленной системы.