четверг, 28 ноября 2024 г.

Strict и loose маршрутизация SIP, модуль rr в Opensips

Строгая (strict) и свободная (loose) маршрутизация SIP отличаются наличием или отсутствием модификации заголовка Request-URI (R-URI). Строгая маршрутизация устарела, сейчас обычно используется свободная.

При строгой маршрутизации SIP прокси обязан использовать для маршрутизации адреса из заголовка Route повторных запросов (ACK, BYE, Re-INVITE). При этом адрес в R-URI заменяется на "верхний" адрес из Route и сообщение передаётся на этот новый R-URI. Таким образом R-URI всегда содержит адрес следующего хоста (например, следующего прокси или уже самого получателя). Строгая маршрутизация подразумевает, что сообщение пройдет только по хостам, перечисленным в заголовке Route.



вторник, 26 ноября 2024 г.

Заголовки Via, Record-Route и Route

Заголовки Via содержат записи обо всех устройствах (прокси, АТС и т.п.), которые прошел начальный запрос на своём пути к получателю.  Ответы на запрос получатель должен отправлять на адрес из последнего заголовка Via. На обратном пути к отправителю каждое устройство удаляет заголовок Via со своим адресом, таким образом к отправителю приходит ответ с одним исходным Via. Для statefull маршрутизации используются заголовки Record-Route и Route. Каждый прокси добавляет к начальному запросу заголовок Record-Route со своим адресом. Важна последовательность заголовков, т.к. их порядок определяет путь запроса через сеть.

понедельник, 25 ноября 2024 г.

Добавить привилегии пользователю на все таблицы базы

 #!/bin/bash

for table in `echo "SELECT schemaname || '.' || relname FROM pg_stat_user_tables;" | psql -A -U postgres -t BASENAME`;

do

    echo "GRANT ALL PRIVILEGES ON TABLE $table to \"USERNAME\";"

    echo "GRANT ALL PRIVILEGES ON TABLE $table to \"USERNAME";" | psql -A -U postgres -t BASENAME

done


пятница, 8 ноября 2024 г.

Ошибки E1

 LOS = Loss of Signal. You aren't getting signal.

LOF = Loss of Framing. Your packets aren't getting through framed correctly.

AIS = receiving Alarm Indicator Signal. The far end isn't getting things through framed correctly, and is indicating that back to you.

RAI = Remote Alarm Indicator. The far end is getting an error and is signalling that back to you.

вторник, 22 октября 2024 г.

Opensips. Пример обработки INVITE

if (is_method("INVITE")) {

    # Если не получилось авторизовать данными из БД

    if (!www_authorize("", "subscriber")) {

        # Всегда пишем код возврата в переменную

        $var(reg) = $retcode;

        # Обработка неправильного пароля, начальный запрос без Authorization вернёт код -4

        if ($var(reg)==-2) {

            sl_send_reply(403,"Wrong side, dude");

            exit;

        }

        #  Запрос авторизации

        www_challenge("");

       exit;

    }

пятница, 11 октября 2024 г.

Настройка регистрации на Opensips 3.4

 Потребуются следующие модули.

#### USeR LOCation

loadmodule "usrloc.so"

    modparam("usrloc", "db_url", "postgres://username:password@localhost/dbname")

    # Тут надо выбрать подходящий режим работы

    modparam("usrloc", "working_mode_preset", "single-instance-sql-write-through")

#### REGISTRAR module

loadmodule "registrar.so"

#### Postgresql

loadmodule "db_postgres.so"

#### Auth module

loadmodule "auth.so"

# Database authentications

loadmodule "auth_db.so"

    modparam("auth_db", "db_url", "postgres://username:password@localhost/dbname")

    # Используем пароли в clear text

    modparam("auth_db", "calculate_ha1", 1)

   # Прямо указываем таблицу с паролями, по-умолчанию ищет хэш в h1

    modparam("auth_db", "password_column", "password")

    modparam("auth_db", "use_domain", 1)


В БД должны быть таблицы subscriber и location.


Код:

if (is_method("REGISTER")) {

    if (!www_authorize("", "subscriber")) {

    www_challenge("");

    exit;

};

save("location");

exit;

};

среда, 19 июня 2024 г.

Установка Opensips на Gentoo без ebuild

 Скачиваем исходники Opensips, ставим зависимости.

# emerge -avg gcc bison lynx subversion flex

Выполняем make или make menuconfig.

При выполнении может вывалиться ошибка ncurses:

usr/libexec/gcc/x86_64-pc-linux-gnu/ld: curses.o: undefined reference to symbol 'stdscr'

/usr/libexec/gcc/x86_64-pc-linux-gnu/ld: /usr/lib64/libtinfo.so.6: error adding symbols: DSO missing from command line

collect2: error: ld returned 1 exit status

В таком случае пересобираем ncurses без tinfo. Нюанс в том, что флаг tinfo замаскирован, так что надо поправить конфиг профиля:

# echo "sys-libs/ncurses -tinfo" >> /etc/portage/profile/package.use.force/ncurses

# emerge -av sys-libs/ncurses

# emerge @preserved-rebuild




четверг, 25 апреля 2024 г.

Синхронизация файлов rsync с ограничением скорости

 Пример:

# rsync -avh --bwlimit=4000 --ignore-existing /src/ /dst/

Синхронизовать файлы из папки src с папкой dst, игнорировать уже перенесенные файлы.

Параметр bwlimit задает ограничение по скорости передачи данных в килобайтах/сек.

4000 КБ/с = 4 МБ/с ~~ 32 Мбит/с