До того как гейткипер начнёт сравнение псевдонимов происходит исключение недоступных по какой либо причине абонентов. Причинами недоступности являются:
Все остальные абоненты считаются доступными и все остальные операции будут производиться только над ними.
Обработка строки набора ведётся в следующем порядке:
1. Сначала строка набора попадает на исходящую трансляцию (выражение 'translate outgoing callee alias') объявленную для пользователя набирающего данную строку. Произведена будет только первая совпавшая трансляция. Функция планировалась для преобразования набранной пользователем простой строки в определенную системой, полную, более сложную форму. Результат данной трансляции может быть нулевой строкой для предотвращения дальнейшего совпадения с псевдонимами абонентов. К примеру, Вы можете запретить пользователю набирать определенные строки. Как только строка странслировалась данным выражением, гейткипер начнет просматривать других абонентов для того чтобы сравнить полученную в результате трансляций строку набора с псевдонимами абонента.
2. На этом этапе гейткипер производит сравнение строки набора с псевдонимами определёнными для абонента.
3. После того как псевдонимы успешно совпали и абонент был выбран терминирующим для данного вызова, гейткипер странслирует совпавший псевдоним используя данное правило. Функция планировалась для представления абоненту совпавшего псевдонима в другой, нужной ему форме. К примеру, в случае если абонент является шлюзом в другую телефонную сеть с другим планом набора. Результат данной трансляции не может быть нулевой строкой !
В случае если более одной строки набора присутствует в вызове, каждая из них проходит данный процесс в параллель. Т.е. гейткипер переходит к следующей процедуре только тогда когда все строки набора были обработаны текущей. И каждая строка набора должна совпасть с псевдонимом на стадии 3 чтобы перейти на следующий уровень.
Возможна ситуация когда более одного абонента имеют совпадения по псевдонимам. В данном случае все эти абоненты поступают в процедуру балансировки загрузки для того чтобы определить единственного фактически терминирующего абонента. Абоненты балансируются по следующей схеме:
Формула вычисления загрузки абонента
Load = CurrentConnectionCount+1/MaxConnectionCount
Все пакеты сформатированы в соответствии со спецификациями RFC-2865 и RFC-2866. Обратитесь к этим стандартам за информацией о базовом строении пакетов и о значении полей. Любое обнаруженное отклонение от стандартов должно быть интерпретировано как ошибка реализации. Поля общие для всех пакетов:
NAS-IP-Address
IP адрес гейткипера определённый выражением конфигурации 'system address'.
NAS-Identifier
Идентификатор гейткипера определённый выражением конфигурации 'system identifier'. Атрибут будет пропущен если значение для него не определено.
User-Name
Имя пользователя определённое выражением конфигурации 'user'.
User-Password
Пароль пользователя определённый выражением конфигурации 'user aaa password'. Атрибут будет пропущен если значение для него не определено.
Код пакета - Access-Request. Атрибуты включенные в пакет:
Service-Type
Для данного типа пакета всегда установлено в "login". Используйте это поле для определения типа пакета.
Код пакета - Access-Request. Атрибуты включенные в пакет:
Service-Type
Для данного типа пакета всегда установлено в "call check". Используйте это поле для определения типа пакета.
Calling-Station-Id
Псевдонимы вызывающей стороны представленные абонентом. Атрибут будет пропущен если ни одного псевдонима не определено. Может быть более одного атрибута данного типа в случае если абонент представил более одного псевдонима.
Called-Station-Id
Псевдонимы вызываемой стороны представленные абонентом. Атрибут будет пропущен если ни одного псевдонима не определено. Может быть более одного атрибута данного типа в случае если абонент представил более одного псевдонима.
Код пакета - Accounting-Request. Атрибуты включенные в пакет:
Service-Type
Для данного типа пакета всегда установлено в "login". Используйте это поле для определения типа пакета.
Acct-Authentic
Установлено в значение "RADIUS" или "Local" в зависимости от того кем был идентифицирован пользователь, RADIUS сервером или только гейткипером.
Acct-Session-Id
Уникальный идентификатор сессии для объединения старт-стоп пакетов.
Acct-Status-Type
Для данного типа пакета всегда установлено в "start".
Код пакета - Accounting-Request. Все атрибуты значения которых не описаны имеют то же значение что и в стартовом пакете. Атрибуты включенные в пакет:
Acct-Status-Type
Для данного типа пакета всегда установлено в "stop".
Acct-Session-Time
Время сессии в секундах.
Код пакета - Accounting-Request. Атрибуты включенные в пакет:
Calling-Station-Id
Псевдонимы вызывающей стороны представленные абонентом. Атрибут будет пропущен если ни одного псевдонима не определено. Может быть более одного атрибута данного типа в случае если абонент представил более одного псевдонима.
Called-Station-Id
Псевдонимы вызываемой стороны представленные абонентом. Атрибут будет пропущен если ни одного псевдонима не определено. Может быть более одного атрибута данного типа в случае если абонент представил более одного псевдонима.
Acct-Authentic
Установлено в значение "RADIUS" или "Local" в зависимости от того кем был идентифицирован пользователь, RADIUS сервером или только гейткипером.
Acct-Session-Id
Уникальный идентификатор сессии для объединения старт-стоп пакетов.
Acct-Status-Type
Для данного типа пакета всегда установлено в "start".
Код пакета - Accounting-Request. Все атрибуты значения которых не описаны имеют то же значение что и в стартовом пакете. Атрибуты включенные в пакет:
Acct-Status-Type
Для данного типа пакета всегда установлено в "stop".
Acct-Session-Time
Время сессии в секундах.
Acct-Input-Octets
Количество октет посланных во время сессии вызывающей стороной. Атрибут присутствует только если "proxy level" установлено в значение "full" для данного звонка.
Acct-Output-Octets
Количество октет посланных во время сессии вызываемой стороной. Атрибут присутствует только если "proxy level" установлено в значение "full" для данного звонка.
Язык регулярных выражений это условная запись служащая для описания текстовых шаблонов. Обычно регулярные выражения участвуют в процедуре сравнения их со строками для того чтобы выяснить совпадает ли строка с шаблоном, или для поиска подстроки в строке.
Эта глава описывает Posix запись регулярных выражений. Это не официальное,
не точное определение регулярных выражений Posix -- это интуитивное и возможно
более доступное описание.
В простейшем случае регулярное выражение это простая строка из символов которая должна совпасть однозначным образом. К примеру, шаблон:
regexp
совпадает со строкой "regexp" и никакими другими.
Некоторые символы в регулярных выражениях имеют специальное значение. Они не сравниваются посимвольно как это было в предыдущем примере, а напротив описывают более общий шаблон. Для примера, символ * используется для указания что предыдущий элемент регулярного выражения может повторяться 0, 1 или больше раз. В шаблоне:
smooo*th
* указывает что предыдущий символ o может повториться 0 или больше раз. Поэтому шаблон совпадает с:
smooth
smoooth
smooooth
smoooooth
...
Конечно же вы можете иметь потребность написать шаблон в котором специальный символ * должен совпасть символьно -- т.е. вы не хотите чтобы * указывала на допустимое повторение, но совпадала символьно. Для того чтобы реализовать это требуется выделить специальный символ обратным слешем. Шаблон:
smoo\*th
совпадает со строкой:
smoo*th
и ни с какими другими.
Другие параграфы так же описывают различные специальные символы которые могут встречаться в регулярных выражениях.
Символьное регулярное выражение это строка не содержащая специальных символов. Символьное регулярное выражение совпадает только с точно такой же строкой, и никакой другой. К примеру:
literally
совпадает с
literally
и больше ни с чем.
Как правило, символ пробела, цифры и буквы не являются специальными символами. Некоторые символы препинания являются специальными, некоторые нет (краткая справка в конце этой главы позволяет удобно определять какие символы являются специальными а какие нет).
Этот параграф описывает специальные символы . и [.
. совпадает с любым символом исключая символ NULL. К примеру:
p.ck
совпадает с
pick
pack
puck
pbck
pcck
p.ck
...
[ открывает набор символов. Набор символов схож с . в том что он совпадает не с каким либо конкретным символом а с любым из приведённого набора. [ отличается от . тем что при помощи [ вы можете объявить совершенно определённый набор символов.
Набор символов может принимать три формы.
В первой форме набор символов выглядит следующим образом:
[<набор-символов>] -- каждый символ из набора.
Во второй форме набор символов обозначен специальным символом отрицания и выглядит:
[^<набор-символов>] -- каждый символ *не* из набора.
<набор-символов> перечисление набора символов. Оно может быть выражено строкой из индивидуальных символов:
[aeiou]
или как ряд символов:
[0-9]
Два этих формата могут быть смешаны:
[A-za-z0-9_$]
Специальные символы (такие как *) не являются специальными внутри набора символов. -, как показано выше, является специальным, за исключением, когда он находится первым в наборе.
Набор из четырех символов:
[-+*/]
Третья форма набора символов использует предопределённые классы символов:
\<класс-символов> -- каждый символ описанный данным классом.
Поддерживаемые классы символов:
\w - набор букв и цифр
\d - десятичные цифры
\l - строчные буквы
\s - whitespace characters
\u - прописные буквы
Набор класса может быть инвертирован изменением символа класса из строчного
в прописной.
Наборы символов могут быть использованы в любом месте регулярного выражения, там же где используются простые символы.
Подвыражение это регулярное выражение заключённое в ( ). Подвыражение может быть использовано в любом месте регулярного выражения.
Подвыражения полезны для группировки конструкций регулярного выражения. Для примера, символ повтора, *, обычно применяется только для предыдущего символа. Вспомним:
smooo*th
совпадает с
smooth
smoooth
...
Используя подвыражение мы можем применить * к более длинной строке:
banan(an)*a
совпадает с
banana
bananana
banananana
...
Также подвыражения имеют специальное значение в ссылках и подстановках.
Оператор повтора *, применяется к предыдущему символу, набору символов, подвыражению или к ссылке. * указывает что предыдущий элемент может совпасть 0 или более раз:
bana(na)*
совпадает с
bana
banana
bananana
banananana
...
+ похож на * за исключением что предыдущий элемент должен совпасть как минимум один раз. И так:
bana(na)*
совпадает с
bana
но не совпадает с
bana(na)+
Оба регулярных выражения совпадают с
banana
bananana
banananana
...
Таким образом, bana(na)+ является короткой записью для banana(na)*.
? указывает на то что предыдущий символ, набор символов или подвыражение факультативно. Оно может совпасть или быть пропущено:
CSNY?
совпадает с обоими строками
CSN
CSNY
Выражение интервала, {m,n} где m и n неотрицательные целые с n >= m, применяется к предыдущему символу, набору символов, подвыражению или ссылке. И указывает на то что предыдущий элемент должен совпасть как минимум m раз но не более n раз.
К примеру:
c([ad]){1,4}r
совпадает с
car
cdr
caar
cdar
...
caaar
cdaar
...
cadddr
cddddr
Альтернативные подвыражения имеют форму:
regexp-1|regexp-2|regexp-3|...
Выражение совпадает по любому regexp-n. Для примера:
Crosby, Stills, (and Nash|Nash, and Young)
совпадает с
Crosby, Stills, and Nash
Crosby, Stills, Nash, and Young
Ссылка записывается в форме \n. Где n десятичное число отличное от нуля. Для того чтобы ссылка была действительной, в регулярном выражении должно быть как минимум n подвыражений заключённых в скобки.
Ссылка посимвольно совпадает с тем что совпало с соответсвующим подвыражением. Например,
(.*)-\1
совпадает
go-go
ha-ha
wakka-wakka
...
В некоторых случаях подвыражения используются для подстановки используя схему нумерации ссылок. Для примера, команда:
translate alias '90244(\d{,5})' to '90248\1'
сначала совпадает со строкой:
9024412345
подвыражение 1 совпадает с "12345". Команда заменяет совпавшую строку на "90248\1". И после подстановки получается следующее:
9024812345
abcd -- совпадает со строкой посимвольно.
. -- совпадает с любым символом кроме символа NULL.
[a-z_?], ^[a-z_?], \d and \D -- наборы символов.
(подвыражение) -- группировка выражения в подвыражение.
Следующие специальные символы и последовательности могут быть применены к символу, набору символов, подвыражению или к ссылке:
* -- предыдущий элемент повторяется 0 или более раз.
+ -- предыдущий элемент повторяется 1 или более раз.
? -- предыдущий элемент повторяется 0 или 1 раз.
{m,n} -- предыдущий элемент повторяется как минимум m но не более n раз.
regexp-1|regexp-2|.. -- совпадает с любым из regexp-n.
Специальные символы, такие как . или * или ? или + могут быть преобразованы в простые символы добавлением перед ними \.