- •Календарный план дипломного проектирования
- •Реферат
- •Содержание
- •Введение
- •1. Анализ рынка телекоммуникационных услуг и предпосылки создания системы предоставления услуг связи «виртуальный офис»
- •1.2. Обзор существующих систем. Технология виртуальной атс
- •Виртуальная атс включает следующие элементы:
- •Ключевые преимущества виртуальной атс
- •И стационарной атс
- •Междугородние звонки с использованием ip- телефонии и гибридных атс. В этом случае схема подключения выглядит следующим образом:
- •1.3 Предпосылки создания системы предоставления услуг связи
- •Преимущества
- •Дополнительно
- •2. Архитектура и функциональные возможности системы «виртуальный офис» (зао «теледисконт»)
- •2.1. Функциональные возможности системы
- •2.2. Архитектура и производительность системы
- •3. Выбор средств реализации системы виртуального офиса
- •3.1. Выбор программного обеспечения
- •3.2. Выбор аппаратной платформы
- •4 Разработка подсистемы аутентификации пользователя
- •4.1 Разработка алгоритма процедуры аутентификации и его реализация
- •5 Расчет цены системы предоставления услуг связи «Виртуальный офис»
- •5.1 Расчет себестоимости разработки и внедрения проекта
- •5.2 Расчет затрат на электроэнергию
- •5.3 Расчет затрат на заработную плату
- •5.4 Расчет затрат на накладные расходы
- •6 Безопасность и экологичность проекта
- •6.1 Молниезащита здания оператора телекоммуникационных услуг зао «Теледисконт»
- •6.2 Расчет молниезащиты здания оператора телекоммуникационных услуг зао «Теледисконт»
- •6.2.1 Расчет молниезащиты здания оператора телекоммуникационных услуг зао «Теледисконт» отдельно стоящим стержневым молниеотводом. Здание III категории
- •6.3 Безопасность жизнедеятельности
- •6.3.2 Оценка устойчивости аппаратуры к воздействию ионизирующих излучений
- •7 Патентный поиск
- •Список использованных источников
Список использованных источников
Приложение 1
Листинг программы «Альтернативная процедура ввода ПИН-кода»
#!/usr/bin/perl
# $ARGV[0] - путь к файлу приветствия
# $ARGV[1] - тайм-аут ввода очередной цифры в миллисекундах
# $ARGV[2] - длина ПИН-кода
# $ARGV[3] - собранный ПИН-код
# $ARGV[4] - код завершения
# $ARGV[4] = 0 - нормальное завершение
# $ARGV[4] = 1 - ничего не набрано к истечению тайм-аута
# $ARGV[4] = 2 - признак необходимости повторить ввод
# $ARGV[4] = 3 - ошибочный ПИН-код
# Подключаем модуль работы с AGI интерфейсом
use Asterisk::AGI;
$|=1;
$AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
# Удаляем пробелы в начале и конце передаваемых параметров (если они есть)
$ARGV[0] =~ s/^\s+|\s+$//g;
$ARGV[1] =~ s/^\s+|\s+$//g;
$ARGV[2] =~ s/^\s+|\s+$//g;
$ARGV[3] =~ s/^\s+|\s+$//g;
$ARGV[4] =~ s/^\s+|\s+$//g;
# Если звонок еще в предответном состоянии - отвечаем
$AGI->answer();
my %AGI;
# Инициализируем переменные
$status="";
$result="";
$to="";
# Заставляем Asterisk выполнить команду GET DATA
# Формат команды: GET DATA <file to be streamed> [timeout] [max digits]
# где <file to be streamed> - путь к медиафайлу, который надо воспроизвести абоненту
# [timeout] - тайм-аут ожидания ввода цифры
# [max digits] - максимальное количество цифр
# Ждем ввода одной цифры
print "GET DATA $ARGV[0] $ARGV[1] 1\n";
# Возвращаемый результат:
# неудачное завершение: 200 result=-1
# тайм-аут с введенными цифрами: 200 result=<digits> (timeout)
# тайм-аут без введенных цифр: 200 result= (timeout)
# удачное завершение: 200 result=<digits>
# Получаем и разбираем результат
$result = <STDIN>;
$tt=$result;
($status,$res_str,$to)=split / /, $result;
($fake,$result)=split /=/, $res_str;
$to =~ s/^\s+|\s+$//g;
$result =~ s/^\s+|\s+$//g;
# Если команда завершилась удачно, но цифр не введено - была просто нажата #
# возвращаем признак необходимости повторить набор ПИН-кода и выходим
if (($result eq '') && ($to eq '')) {
$AGI->set_variable($ARGV[4], 2);
exit(0);
}
# Ничего не набрали в течение тайм-аута - возвращаем соотвтетствующий признак и выходим
if ($result eq '') {
$AGI->set_variable($ARGV[4], 1);
exit(0);
}
# Была нажата * - возвращаем признак необходимости повторить набор ПИН-кода и выходим
if ($result eq "*") {
$AGI->set_variable($ARGV[4], 2);
exit(0);
}
# Получены символы отличные от цифр - (A, B, C, D) -
# возвращаем признак ошибочного ПИН-кода и выходим
if ($result =~ /^\D+$/) {
$AGI->set_variable($ARGV[4], 3);
exit(0);
}
# Файл приветствия воспроизведен, первая цифра получена. Подолжаем сбор далее
$count = 1;
while (1) {
# Ожидаем очередной символ с заданным тайм-аутом
$digit = $AGI->wait_for_digit($ARGV[1]);
# Произошел тайм-аут, возвращаем признак ошибочного ПИН-кода и выходим
if ($digit == 0) {
$AGI->set_variable($ARGV[4], 3);
exit(0);
}
$count++;
# Анализируем полученное
# Нам был возвращен код символа. Получаем сам символ функцией chr()
$digit = chr($digit);
# Нажата * или # - возвращаем признак необходимости повторить набор ПИН-кода и выходим
if (($digit eq "*") || ($digit eq "#")) {
$AGI->set_variable($ARGV[4], 2);
exit(0);
}
# Получены символы отличные от цифр - (A, B, C, D) -
# возвращаем признак ошибочного ПИН-кода и выходим
if ($result =~ /^\D+$/) {
$AGI->set_variable($ARGV[4], 3);
exit(0);
}
# Добавляем очередную цифру в ПИН-код
$result = "$result"."$digit";
# Если собрано 8 цифр - проверяем ПИН-код на принадлежность к техническим
# если верно - завершаем цикл сбора цифр
if (($count == 8) && (substr($result,0,1) eq "0")) { last; }
# Если собрано к-во цифр, заданное $ARGV[2], завершаем цикл сбора цифр
if ($count == $ARGV[2]) { last; }
}
# Устанавливаем в $ARGV[3] собранный ПИН-код
$AGI->set_variable($ARGV[3], $result);
# Устанавливаем в $ARGV[4] признак успешной операции
$AGI->set_variable($ARGV[4], 0);
# Завершаем работу
exit(0);
