Показаны сообщения с ярлыком realtime. Показать все сообщения
Показаны сообщения с ярлыком realtime. Показать все сообщения

05.01.2016

ACL+Realtime

Создаем таблицу:
CREATE TABLE `acltable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(80) NOT NULL,
  `rule_order` int(11) NOT NULL,
  `sense` enum('permit','deny') NOT NULL DEFAULT 'deny',
  `rule` varchar(95) NOT NULL,
  PRIMARY KEY (`id`,`name`,`rule_order`,`sense`,`rule`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
В extconfig.conf говорим acls => mysql,asterisk,acltable

В данную таблицу вписываем данные:
name - имя ACL
rule_order - порядковый номер правила
sense - действие, возможно одно из 2-х: permit/deny
rule - IP/netmask 

Пример:
INSERT INTO `asterisk`.`acltable` (`name`, `rule_order`, `sense`, `rule`) VALUES ('lan', '1', 'permit', '10.0.10.0/24');
 
В таблице sippeers добавляем поле acl и добавляем имя ACL в это поле для нужного пира/транка.
  
При выполнении команды в CLI:  acl show  будет пустота.
При выполнении sip reload  применит нужный ACL.

Для обновления ACL кроме добавления записи в таблицу надо сделать module reload acl
При этом будет ошибка:
Named ACL 'lan' is already included in the ast_acl container.
chan_sip.c:31061 build_peer: Bad ACL entry in configuration line 11 : lan

Несмотря на ошибку ALC применяется, как пофиксить ошибку пока не разобрался.

Update 3.01.2016: Описание и патчи:
https://issues.asterisk.org/jira/browse/ASTERISK-24874
https://issues.asterisk.org/jira/browse/ASTERISK-24969

Realtime + register(row:callbackextension)+sip reload = Unregistered

Имеем проблему: если используем поле callbackextension в таблице Mysql и кол-во регистрации более 3-х, на меньшем не проявлялась, то при sip reload можем поиметь все регистрации со статусом Unregistered, помогает только рестарт * либо выгрузка/загрузка chan_sip.

Порывшись на просторах нашел вот это: https://issues.asterisk.org/jira/browse/ASTERISK-23789
на момент публикации еще открытый. Патч помогает, насколько он правильный судить не могу.

--- asterisk-12.2.0/channels/chan_sip.c 2014-04-21 17:02:00.000000000 -0400
+++ asterisk-12.2.0-modified/channels/chan_sip.c        2014-05-24 20:44:28.559519094 -0400
@@ -6566,8 +6566,12 @@
        AST_SCHED_DEL(sched, reg->expire);
        AST_SCHED_DEL(sched, reg->timeout);

+       if ((reg->;registryadded))
+       {
+               ast_atomic_fetchadd_int(&regobjs, -1);
+       }
+
        ast_string_field_free_memory(reg);
-       ast_atomic_fetchadd_int(&regobjs, -1);
        ast_free(reg);
 }

@@ -9556,6 +9560,7 @@
                registry_unref(tmp, "throw away found registry");
        } else {
                ast_atomic_fetchadd_int(&regobjs, 1);
+               reg->;registryadded = 1;
                ASTOBJ_CONTAINER_LINK(&regl, reg);
        }

--- asterisk-12.2.0/channels/sip/include/sip.h  2014-04-21 17:02:00.000000000 -0400
+++ asterisk-12.2.0-modified/channels/sip/include/sip.h 2014-05-24 20:37:42.557555124 -0400
@@ -1414,6 +1414,7 @@
        struct ast_sockaddr us;  /*!< Who the server thinks we are */
        int noncecount;         /*!< Nonce-count */
        char lastmsg[256];      /*!< Last Message sent/received */
+       unsigned short registryadded:1; /*!< If this registry object is already added to registry list */

 };

 struct tcptls_packet {
Update 10.01.2016
Порывшись еще найдено еще вот это: https://issues.asterisk.org/jira/browse/ASTERISK-23542
на момент публикации еще открытый.

--- channels/chan_sip.c    (revision 420532)
+++ channels/chan_sip.c    (working copy)
@@ -9218,11 +9218,12 @@
         reg->refresh = reg->expiry = reg->configured_expiry = default_expiry;
     }

+    ast_atomic_fetchadd_int(&regobjs, 1);
+
     /* Add the new registry entry to the list, but only if it isn't already there */
     if ((tmp = ASTOBJ_CONTAINER_FIND(&regl, reg->name))) {
         registry_unref(tmp, "throw away found registry");
     } else {
-        ast_atomic_fetchadd_int(&regobjs, 1);
         ASTOBJ_CONTAINER_LINK(&regl, reg);
     }


23.11.2015

insecure

Если у одного провайдера берем несколько транков то: 
Если в настройках транка стоит insecure=invite,port то все сыпется в первый в списке транк с этим ip. Если настроен Realtime то сначала ищем в базе а потом в файле.

Так как:
port: игнорировать номер порта, с которого пришла аутентификация
invite: не требовать начальное сообщение INVITE для аутентификации
port,invite: не требовать начальное сообщение INVITE для аутентификации и игнорировать порт, с которого пришел запрос

При установке  insecure=invite,port  - DID разгребаем в диалплане.

15.02.2015

Realtime + NAT

Наткнулся на  баг  в версии 11.6.0. описанный в ASTERISK-20572, сказано что пофиксили еще в версии 11.1.
 Патч не подходит.
Заменить в chan_sip.c строку:
  • if ((!found && !ast_test_flag(&global_flags[1], SIP_PAGE2_RTCACHEFRIENDS)) || !peer->host_dynamic) { 
 на:
  •  if (((!found && !ast_test_flag(&global_flags[1], SIP_PAGE2_RTCACHEFRIENDS)) || !peer->host_dynamic) && !realtime ) {
Но при выполнении входящего звонка на этот пир сразу после sip reload вызов проходить не будет так как пир появляется в кеше со статусом UNREACHABLE.
Как лечить пока не разобрался. В виде костыля можно уменьшить время регистрации до 120 секунд. Но для определенных клиентов это очень критично.

08.02.2015

Realtime Asterisk русский язык.

Заметил особенность: если в поле description будут русские символы при выполнении в консоле  sip show peers не всегда будет выводится полный список пиров.