вторник, 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;

    }


    # Убираем реквизиты DIGEST из проксируемых запросов

   consume_credentials();

    # Если username поля FROM не соответствует данным таблицы URI

    if (!db_is_from_authorized("uri")) {

        # Возвращаем 403 в stateless режиме, без предварительно 100 Trying

        sl_send_reply(403,"You shall not pass");

        exit;

    };

    

    #   Если клиент не найден в таблице location, куда сохраняются зарегистрированные

    if (!lookup("location")) {

        # Тут нужен stateful режим, с возвратом 100 Trying

        t_reply(404,"Not Found here");

        exit;

    }

   append_hf("P-hint: usrloc applied\r\n");.

   route(relay);

}


Комментариев нет:

Отправить комментарий