Архив рубрики: Документация

SIP ответы и их значения

Источник.

1xx = информационные ответы

SIP/2.0 100 Trying — запрос обрабатывается

SIP/2.0 180 Ringing — местоположение вызываемого пользователя определено. Выдан сигнал о входящем вызове

SIP/2.0 181 Call is Being Forwarded — прокси,сервер переадресует вызов к другому пользователю

SIP/2.0 182 Call is Queued — вызываемый абонент временно не доступен, вызов поставлен в очередь

SIP/2.0 183 Session Progress — используется для того, чтобы заранее получить описание сеанса информационного обмена от шлюзов на пути к вызываемому пользователю

2xx = ответы о завершении запроса

SIP/2.0 200 OK — успешное завершение

SIP/2.0 202 Accepted — запрос принят для обработки Используется для справки о состоянии обработки

3xx = сообщения о переадресации

SIP/2.0 300 Multiple Choices — указывает несколько SIP-адресов, по которым можно найти вызываемого пользователя

SIP/2.0 301 Moved Permanently — вызываемый пользователь больше не находится по адресу, указанному в запросе

SIP/2.0 302 Moved Temporarily — пользователь временно сменил местоположение

SIP/2.0 305 Use Proxy — вызываемый пользователь не доступен непосредственно, входящий вызов должен пройти через прокси-сервер

SIP/2.0 380 Alternative Service — запрошенная услуга недоступна, но доступны альтернативные услуги

4xx = невозможность обработать запрос

SIP/2.0 400 Bad Request — запрос не понят из-за синтаксических ошибок в нем, ошибка в сигнализации, скорее всего что-то с настройками оборудования

SIP/2.0 401 Unauthorized — нормальный ответ сервера о том, что пользователь еще не авторизировался; обычно после этого абонентское оборудование отправляет на сервер новый запрос, содержащий логин и пароль

SIP/2.0 401 Expired Authorization — время регистрации истекло

SIP/2.0 402 Payment Required — требуется оплата (зарезервирован для использования в будущем)

SIP/2.0 403 No Such User — нет такого пользователя, ошибка в номере, логине или пароле

SIP/2.0 403 User Disabled — пользователь отключен

SIP/2.0 403 Wrong Guess — ошибка в пароле

SIP/2.0 403 Conflict — такой SIP-номер уже используется

SIP/2.0 403 Forbidden — абонент не зарегистрирован

SIP/2.0 403 Empty Route Set — нет ни одного шлюза в роутинге

SIP/2.0 403 Caller Not Registered — нет такого пользователя

SIP/2.0 403 Out of Look-Ahead Retries — перебор узлов закончен

SIP/2.0 403 Invalid Phone Number — нет такого направления

SIP/2.0 403 No Money Left on RFC Account — на счету нет денег для совершения звонка

SIP/2.0 404 Not found — вызываемый абонент не найден, нет такого SIP-номера

SIP/2.0 404 Undefined Reason — неопределенное направление

SIP/2.0 404 Unknown user account — логин и пароль не найдены

SIP/2.0 404 Out of Order — в заявке на маршрутизацию по этому направлению нет ни одного шлюза, проверьте настройку маршрутизации по этому направлению.

SIP/2.0 405 Method Not Allowed — метод не поддерживается, может возникать если пользователь пытается отправлять голосовую почту и т.п.

SIP/2.0 406 No codecs match — неправильная конфигурация кодеков

SIP/2.0 406 Not Acceptable — пользователь не доступен

SIP/2.0 407 Proxy Authentication Required — необходима аутентификация на прокси-сервере

SIP/2.0 408 Request Timeout — время обработки запроса истекло: Абонента не удалось найти за отведенное время

SIP/2.0 408 Login timed out — за отведенное время не получен ответ от сервера на запрос авторизации

SIP/2.0 410 No Route — вариант SIP/2.0 403 Empty Route Set; нет доступа к ресурсу: Ресурс по указанному адресу больше не существует

SIP/2.0 413 Request Entity Too Large — размер запроса слишком велик для обработки на сервере

SIP/2.0 415 No Media — звонок совершается неподдерживаемым кодеком

SIP/2.0 416 Unsupported Scheme — сервер не может обработать запрос из-за того, что схема адреса получателя ему непонятна

SIP/2.0 420 Bad extension — неизвестное расширение: Сервер не понял расширение протокола SIP

SIP/2.0 421 Extension Required — в заголовке запроса не указано, какое расширение сервер должен применить для его обработки

SIP/2.0 423 Interval Too Brief — сервер отклоняет запрос, так как время действия ресурса короткое

SIP/2.0 480 Invalid Phone Number — неправильный номер телефона, не соответствует к-во цифр или неправильный код страны или города

SIP/2.0 480 Destination Not Found In Client Plan — направления нет в тарифном плане абонента

SIP/2.0 480 Wrong DB Response — проблемы с центральной базой сети

SIP/2.0 480 DB Timeout — проблемы с центральной базой сети

SIP/2.0 480 Database Error — проблемы с центральной базой сети

SIP/2.0 480 Codec Mismatch — несоответствие кодеков

SIP/2.0 480 No Money Left on RFC Account — нет денег на счету, обратитесь к администратору сети!!!

SIP/2.0 480 Empty Route Set — пустое направление, нет принемающих шлюзов

SIP/2.0 480 No money left — недостаточно денег на счете

SIP/2.0 480 Temporarily Unavailable — временно недоступное направление попробуйте позвонить позже

SIP/2.0 481 Call Leg/Transaction Does Not Exist — действие не выполнено, нормальный ответ при поступлении дублирующего пакета

SIP/2.0 482 Loop Detected — обнаружен замкнутый маршрут передачи запроса

SIP/2.0 483 Too Many Hops — запрос на своем пути прошел через большее число прокси-серверов, чем разрешено

SIP/2.0 484 Address Incomplete — принят запрос с неполным адресом

SIP/2.0 485 Ambiguous — адрес вызываемого пользователя не однозначен

SIP/2.0 486 Busy Here — абонент занят

SIP/2.0 487 Request Terminated — запрос отменен, обычно приходит при отмене вызова

SIP/2.0 488 Codec Mismatch — нет шлюзов с поддержкой заказанного кодека

SIP/2.0 488 Private IP Address — адрес RTP media из сетей RFC1918

SIP/2.0 491 Request Pending — запрос поступил в то время, когда сервер еще не закончил обработку другого запроса, относящегося к тому же диалогу

SIP/2.0 493 Undeciperable — сервер не в состоянии подобрать ключ дешифрования: невозможно декодировать тело S/MIME сообщения

SIP/2.0 499 Codec Mismatch — отсутствует кодек

5xx = ошибки сервера

SIP/2.0 500 Internal Server Error — внутренняя ошибка сервера

SIP/2.0 500 DB Timeout — нет ответа от базы данных

SIP/2.0 500 Database Error — то же самое, но в другой момент

SIP/2.0 500 Wrong DB Response — неправильный ответ базы данных, редкая ошибка

SIP/2.0 500 Undefined Reason — неопределенная причина

SIP/2.0 500 account has been moved to a remote system — аккаунт перенесен в удаленную систему (дословно)

SIP/2.0 501 Method Not Supported Here — в сервере не реализованы какие-либо функции, необходимые для обслуживания запроса: Метод запроса SIP не поддерживается

SIP/2.0 502 Bad Gateway — сервер, функционирующий в качестве шлюза или прокси-сервера, принимает некорректный ответ от сервера, к которому он направил запрос

SIP/2.0 503 Service Unavailable — сервер не может в данный момент обслужить вызов вследствие перегрузки или проведения технического обслуживания

SIP/2.0 504 Server time-out — сервер не получил ответа в течение установленного промежутка времени от сервера, к которому он обратился для завершения вызова

SIP/2.0 505 SIP Version not supported — версия не поддерживается: Сервер не поддерживает эту версию протокола SIP

SIP/2.0 513 Message too big — сервер не в состоянии обработать запрос из-за большой длины сообщения

6xx = глобальная ошибка

SIP/2.0 600 Busy everywhere — вызываемый пользователь занят и не желает принимать вызов в данный момент

SIP/2.0 603 Decline — вызываемый пользователь не желает принимать входящие вызовы, не указывая причину отказа

SIP/2.0 604 Does Not Exist Anywhere — вызываемого пользователя не существует

SIP/2.0 606 Not Acceptable — соединение с сервером было установлено, но отдельные параметры, такие как тип запрашиваемой информации, полоса пропускания, вид адресации не доступны

Добавление жетского диска на VDS с ОС CentOS (Linux)

  • Узнаем какая ОС на виртуальной машине:
    # cat /etc/*-release
    CentOS release 6.6 (Final)
    CentOS release 6.6 (Final)
    CentOS release 6.6 (Final)
  • Даем команду пересканировать диски:
    # echo "- - -" > /sys/class/scsi_host/host0/scan
    # echo "- - -" > /sys/class/scsi_host/host1/scan
    # echo "- - -" > /sys/class/scsi_host/host2/scan
    
  • Командой fdisk -l получаем список подключенных дисков:
    # fdisk -l | grep Диск
    Диск /dev/sda: 16.1 ГБ, 16106127360 байт
    Диск /dev/sdb: 59.1 ГБ, 59055800320 байт
    Диск /dev/mapper/vg_gnkk-lv_root: 14.0 ГБ, 13967032320 байт
    Диск /dev/mapper/vg_gnkk-lv_swap: 1610 МБ, 1610612736 байт
    Диск /dev/sdc: 107.4 ГБ, 107374182400 байт
  • Создаем новый раздел на диске:
    #fdisk /dev/sdc
    Устройство не содержит ни верной таблицы разделов DOS, ни метки диска Sun, SGI или OSF
    Building a new DOS disklabel with disk identifier 0x2e1335e9.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.
    
    Предупреждение: неверный флаг 0x0000 таблицы разделов 4 будет исправлен записью
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    Команда (m для справки): n
    Действие команды
     e расширенный
     p основной раздел (1-4)
    e
    Номер раздела (1-4): 1
    Первый цилиндр (1-13054, по умолчанию 1):
    Используется значение по умолчанию 1
    Last цилиндр, +цилиндры or +size{K,M,G} (1-13054, по умолчанию 13054):
    Используется значение по умолчанию 13054
    
    Команда (m для справки): w
    Таблица разделов была изменена!
    
    Вызывается ioctl() для перечитывания таблицы разделов.
    Синхронизируются диски.
    

    И работа команды fdisk прекращается.

  • Создаем новую файловую систему на разделе:
    mkfs.ext4 /dev/sdc1
    mke2fs 1.41.12 (17-May-2010)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    6553600 inodes, 26214055 blocks
    1310702 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=4294967296
    800 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
            4096000, 7962624, 11239424, 20480000, 23887872
    
    Writing inode tables: 305/800
    

    Ждем завершения форматирования:

    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 37 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    
  • Проверяем новый диск:
    # mount -t ext4 /dev/sdc1 /mnt
    # mount
    /dev/mapper/vg_gnkk-lv_root on / type ext4 (rw)
    proc on /proc type proc (rw)
    sysfs on /sys type sysfs (rw)
    devpts on /dev/pts type devpts (rw,gid=5,mode=620)
    tmpfs on /dev/shm type tmpfs (rw)
    /dev/sda1 on /boot type ext4 (rw)
    /dev/sdb1 on /home type ext4 (rw)
    none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
    /dev/sdc1 on /mnt type ext4 (rw)
    
    #df -h /mnt
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdc1        99G   60M   94G   1% /mnt
    

    Все, диском можно пользоваться.

Плагин для DNSManager, обрабатывающий создание зоны

 

#!/usr/bin/perl
#Скрипт обрабатывает события
#Функция: domain.edit
#Функция: domain.delete
#
#
#
#Да, при создании зоны в DNSmanager запускается функция domain.edit с параметрами:.
#
#clicked_button=ok&dtype=master&email=<E-mail>&func=domain.edit&ip=<IP адрес>&masterip=&na
#
#
use CGI;


#Функции
#

sub l
{
        my $filename = $0.'.log';
        open(my $fh, '>>', $filename) or die "Не могу открыть '$filename' $!";
                print $fh "$_[0]\n";
        close $fh;
}

# Тело скрипта
my $Q = new CGI;
$func = $Q->param("func");
$elid = $Q->param("elid");
l('Вызов скрипта. СТАРТ.');
l(`date`);
l('func:'.$func);
l('elid:'.$elid);
l('clicked_button='.$Q->param('clicked_button'));
l('dtype='.$Q->param('dtype'));
l('email='.$Q->param('email'));
l('func='.$Q->param('func'));
l('ip='.$Q->param('ip'));
l('masterip='.$Q->param('masterip'));
l('name='.$Q->param('name'));
l('progressid='.$Q->param('progressid'));
l('sfrom='.$Q->param('sfrom'));
l('sok='.$Q->param('sok'));

#
#Отличить в плагине создание домена от редактирования можно по параметру elid, он пустой п
#

if ( $func eq "domain.edit" )
{
#редактирвоание домена

    unless ( $elid )
    {
        #   /*
        #    Параметр elid пустой. Домен создается.
        # Нужно разобрать входные параметры функции
        # clicked_button=ok
        # dtype=master
        # email=<E-mail>
        # func=domain.edit
        # ip=<IP адрес>
        # masterip=
        # name=<Домен>
        # progressid=false
        # sfrom=ajax
        # sok=ok.
        # Это доступно из.
        # $Q->param("ПАРАМЕТР")
        #У скрипта на ISPManager входные параметры:
        #zone - текстовый параметр, имя зоны
        #ipmaster - IP адрес мастера зоны
        #del - любое значение, признак удаления зоны.
        #*/
        l('elid пустой');
        $zone = $Q->param('name');
        #ipmaster - передается в скрипт на ISPManager IP адрес мастера зоны
        $ipmaster = $Q->param('ip');
        l("$zone master $ipmaster");

    }
    else
    {
        #/*
        # Параметр elid не пустой. Зона уже существует. Ни чего делать не надо.
        # Или надо проверить существование зоны на вторичном и "передернуть" его?
        #TO-DO - удаление зоны!!!!
        #*/
        l("$elid существует");
        unless ( $Q->param('name') )
        {
            $zone=$elid;
        }...
        else
        {
            $zone = $Q->param('name');
        }
        l("создание домена $zone на $ipmaster");
    }
}
if ( $func eq "domain.delete")
{
    # Удаление домена
    l("Удаление домена $zone");
}
l("end");
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc/>\n";


 

 

Команды CLI Asterisk

Источник:  https://voipnotes.ru/komandy-cli-asterisk/

logger show channels — выводит список лог файлов

logger set level {DEBUG|NOTICE|WARNING|ERROR|VERBOSE|DTMF} {on|off} — включение/отключение определенного уровня логирования

Читать далее Команды CLI Asterisk

Узнать какой процесс «слушает» порт

netstat -tpln | grep ПОРТ

ПОРТ — номер порта.

например:

 

root@scm:~# netstat -tpln | grep 1132
tcp        0      0 0.0.0.0:1132              0.0.0.0:*               LISTEN      1057/sshd
tcp6       0      0 :::1132                   :::*                    LISTEN      1057/sshd

Видно, что соединение на порт 1132 будет обслужено программой sshd.

FreeBSD: избавиться от запросов настройки портов

Очень часто при установке порта во Фришке приходится сидеть и конфигурировать очередной порт, от которого зависит устанавливаемый.

Команда

make config-recursive

Позволит один раз настроить все нужные порты и потом командой

make install clean

просто установится нужный софт.

Совет всем родителям

По следам новости:
В Красноярске 12-летняя девочка пропала по дороге из школы

Всем родителям:
1. Покупайте детям телефон с геопозиционированием (лучше имеющие два стандарта: GSM и ГЛОНАСС, второе работает лучше, но меньше распространено).
Например Samsung SM-G318H Galaxy Ace 4 Neo DS 4 Гб стоит чуть меньше 4000 руб в ДНС.

2. Не жалейте денег на интернет на телефоне, выбирайте тарифный план или доп.услугу, которые позволят аппарату быть онлайн.
Теле2 — пакет «Черный» или «Очень черный».  На планшете у меня «Оранжевый» и доп.услуга «Интернет на мобильное устройство». Думаю и у других операторов можно выбрать.

3. Поставьте программу типа «Семейный локатор» или что-то подобное.

Например вот
https://play.google.com/store/apps/details?id=com.life360.android.safetymapd


Вы всегда будете на экране своего устройства видеть где ваш ребенок. При пропадании устройства из сети, при его выключении, вы увидите где аппарат был выключен.

Это простые шаги.

Команда apt-get требует вставить диск.

Корни проблемы в том, что при установке ОС не возможно отказаться от сканирования установочного диска и записи ссылки на локальный CD-ROM  в списке репозитарий.

И при выполнении команды

$sudo apt-get install -y mc samba

Получаем такое сообщение:

Смена носителя: вставьте диск с меткой
«Debian GNU/Linux 8.3.0 _Jessie_ — Official amd64 DVD Binary-1 20160123-19:03»
в устройство «/media/cdrom/» и нажмите ввод

Для того, что бы отучить систему искать пакеты в репозитарии на диске, открываем на редактирование файл  /etc/apt/sources.list

$ sudo nano /etc/apt/sources.list

Видим содержимое файла:

#

# deb cdrom:[Debian GNU/Linux 8.3.0 _Jessie_ — Official amd64 DVD Binary-1 2016$

deb cdrom:[Debian GNU/Linux 8.3.0 _Jessie_ — Official amd64 DVD Binary-1 201601$

deb http://mirror.mephi.ru/debian/ jessie main
deb-src http://mirror.mephi.ru/debian/ jessie main

deb http://security.debian.org/ jessie/updates main contrib
deb-src http://security.debian.org/ jessie/updates main contrib

# jessie-updates, previously known as ‘volatile’
deb http://mirror.mephi.ru/debian/ jessie-updates main contrib
deb-src http://mirror.mephi.ru/debian/ jessie-updates main contrib

Удаляем строку, указывающую на локальный CD-ROM, оставляем только  указатели на сетевые репозитарии.

PHP Хранение временных данных в методах

Проблема: реализация алгоритмов обработки данных требует генерации и дальнейшего использования неких промежуточных данных. Хранение которых требует выделение места в оперативной памяти.  Что, при неаккуратном использовании, может создавать «мусор», засорять память и, в итоге, замедлять работу приложения.

Предлагаемый способ:

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

И так в этом базовом классе создаем новое свойство

private $ini = array();

 

Приватное, что бы даже если случайно где-то ошибся и обратился к нему, то в лучшем случае получил бы ошибку.  Название свойства не важно, и почему оно у меня получилось именно ini я не знаю. так получилось.

В деструкторе, конечно, есть строчка

function __destruct() {
unset($this->ini);
}

Теперь как использовать.

class НОВЫЙ_КЛАCС extends БАЗОВЫЙ_КЛАСС

function __destruct() {
    parent::_destruct();
}

Ну и метод, в котором используем:

function methodTwoTwo() {
$this->ini[__FUNCTION__] = 2*2;
return ( $this->ini[__FUNCTION__] );
}

 

function methodTwoSix() {
$this->ini[__FUNCTION__] = 2*6;
return$this->ini[__FUNCTION__);
}

Если бы мы использовали $this->ini в обоих случаях, то в случае вызова метода в методе мы бы получили путаницу, поскольку свойство $this->ini в зоне видимости всех методов класса. Добавляя ключ массива __FUNCTION__ мы используем массив $this->ini раздельно в разных методах, не допуская путаницы данных.

Освобождается память при уничтожении экземпляра объекта автоматическим вызовом __destruct().