tag:blogger.com,1999:blog-69884888225769340462024-03-18T19:52:57.500-07:00it-sketchАртем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-6988488822576934046.post-26860613562176303872015-10-29T00:30:00.004-07:002016-01-15T02:16:48.544-08:00[jira,conf] Прикручиваем mail server с SSL через JNDI к Confluence 5.5 и ниже (Jira)<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;">1) Останавливаем Конфлу/jira</span><br />
<span style="background-color: white; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;">2) Перемещаем (НЕ КОПИРУЕМ) файл mail-x.x.x.jar из <confluence-install>/confluence/WEB-INF/lib в <confluence-install>/lib.</span><br />
3) В /opt/atlassian/confluence/conf/server.xml<br />
<br />
Добавляем раздел Resource перед </Context><br />
<br />
<Resource name="mail/YandexSMTPSession"<br />
auth="Container"<br />
type="javax.mail.Session"<br />
mail.smtp.host="smtp.yandex.ru"<br />
mail.smtp.port="465"<br />
mail.smtp.auth="true"<br />
mail.smtp.user="xxxx@yandex.ru"<br />
password="lhk6kDH7s"<br />
mail.smtp.starttls.enable="true"<br />
mail.smtp.socketFactory.class="javax.net.ssl.SSLSocketFactory"<br />
/><br />
<div>
<br /></div>
<div>
4) Рестартуем Конфлу</div>
<div>
5) Дальше в web интерфейсе Conflu настраиваем в разделе mail server SMTP mail server.</div>
<div>
<br /></div>
<div>
В поле JNDI LOCATION указываем <span style="color: inherit; font-family: inherit; font-size: inherit; line-height: inherit; white-space: pre-wrap;">java:comp/env/</span>mail/YandexSMTPSession<br />
<br />
Для jira может понадобиться импортировать SSl сертификат. Проще всего поставить плагин <span style="color: #222222; font-family: Arial, sans-serif; font-size: 14px; line-height: 23px;">JIRA SSL Add-on. Тогда в настройках-система появится SSL Configure</span><br />
<span style="color: #222222; font-family: Arial, sans-serif; font-size: 14px; line-height: 23px;"><br /></span>
<span style="color: #222222; font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 23px;">Если без SSL Add-on:</span></span><br />
<span style="color: #222222; font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 23px;">сохраняем сертификат сайта (DER).</span></span><br />
<span style="color: #222222; font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 23px;">импортируем его в трастед кейстор (это файл </span></span><span style="color: #222222; font-family: Arial, sans-serif; font-size: 14px; line-height: 23px;">cacerts</span><span style="color: #222222; font-family: Arial, sans-serif; font-size: 14px; line-height: 23px;">) ./keytool -import -alias jira -file /home/shinta/tmp/jira.cer -keystore /opt/atlassian/bitbucket/4.2.1/jre/lib/security/cacerts</span><br />
<div>
добавляем в /jira/bin/setenv.sh к аргументам java -Djavax.net.ssl.trustStore=/opt/atlassian/bitb ucket/4.2.1/jre/lib/security/cacerts</div>
<span style="color: #222222; font-family: Arial, sans-serif; font-size: 14px; line-height: 23px;"><br /></span></div>
</div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com1tag:blogger.com,1999:blog-6988488822576934046.post-48340733918131270812015-05-08T00:43:00.000-07:002015-05-08T00:43:11.504-07:00Asterisk+Dundi<div dir="ltr" style="text-align: left;" trbidi="on">
Насчет ключей - можно обойтись без них. т.е просто не использовать поля "inkey =" и<br />
<div>
"outkey =" в dundi.conf</div>
<br />
cd /var/lib/asterisk/keys/ /usr/src/astgenkey -n aster4<br />
<br />
создает ключи public/private, их следует сложить в /var/lib/asterisk/keys/ и /usr/share/asterisk/keys/<br />
<br />
Обмениваемся ключами между астерами (ложим в /var/lib/asterisk/keys/ и /usr/share/asterisk/keys/) которые будут работать через Dundi<br />
<br />
По идее дальним астерам нужны только pub ключи, но у меня не заработало только с ними. Разбираться сильно не стал, т.к система внутренняя.<br />
<br />
<br />
scp aster4.pub root@192.168.3.52:/var/lib/asterisk/keys/<br />
scp aster4.key root@192.168.3.52:/usr/share/asterisk/keys/<br />
<div>
<div>
scp aster1.pub root@192.168.3.56:/var/lib/asterisk/keys/</div>
</div>
<div>
scp aster1.key root@192.168.3.56:/usr/share/asterisk/keys/</div>
<div>
<br /></div>
<div>
файлы ключей должны принадлежать asterisk:asterisk</div>
<div>
<br /></div>
<div>
Перезагружаем в консоли астера module reload res_crypto.so (заодно он покажет, если есть какие то проблемы)</div>
<div>
<br /></div>
<div>
Затем module reload pbx_dundi.so</div>
<div>
<br /></div>
<div>
проверяем, что ключи загрузились </div>
<div>
<br /></div>
<div>
<div>
aster1*CLI> keys show</div>
<div>
Key Name Type Status Sum</div>
<div>
------------------ -------- ---------------- --------------------------------</div>
<div>
aster2 PUBLIC [Loaded] 7379e2a11d5a8f8f4209b3fdc7febb20</div>
<div>
freeworlddialup PUBLIC [Loaded] 5efd552d73309f29212331a75f3c701e</div>
<div>
aster1 PUBLIC [Loaded] 0ed4a73ac18fb141bbdd7f797542146d</div>
<div>
aster1 PRIVATE [Loaded] 9c5777e70e49a4e8e6a42ea67b5a6883</div>
<div>
iaxtel PUBLIC [Loaded] d919b3ef03eb4dc54c8fee86bfeeada1</div>
<div>
aster2 PRIVATE [Loaded] da214b9a7dccf9c6ff28cbf2e38e9fed</div>
<div>
aster4 PUBLIC [Loaded] 7e1a1b95eea77dacbfc42b813dd26ba1</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Проверяем, что обмен данными идет</div>
<div>
<br /></div>
<div>
dundi query 00:0c:29:8a:a9:f1@extensions</div>
<div>
<br /></div>
<div>
<br />
В sip.conf в секции [general] прописываем<br />
regcontext=RegisteredDevices<br />
<br /></div>
<div>
<br /></div>
<div>
Поднимаем sip trunk между астерисками </div>
<div>
<br /></div>
<div>
в sip.conf </div>
<div>
<br /></div>
<div>
aster4:</div>
<div>
<div>
[dundi_to_asterisk1]</div>
<div>
host=192.168.3.52</div>
<div>
type=peer</div>
<div>
secret=secret</div>
<div>
context=local</div>
<div>
disallow=all</div>
<div>
allow=ulaw</div>
<div>
allow=alaw</div>
<div>
qualify=yes</div>
<div>
defaultuser=dundi_to_asterisk4</div>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
aster1:</div>
<div>
<div>
[dundi_to_asterisk4]</div>
<div>
host=192.168.3.56</div>
<div>
type=peer</div>
<div>
secret=secret</div>
<div>
context=local</div>
<div>
disallow=all</div>
<div>
allow=ulaw</div>
<div>
allow=alaw</div>
<div>
qualify=yes</div>
<div>
canreinvite=no</div>
<div>
nat=yes</div>
<div>
defaultuser=dundi_to_asterisk1</div>
<div>
<br /></div>
</div>
<div>
Правим dundi.conf<br />
Здесь мы настраиваем dundi пиры и создаем mapping'и. Один mapping можно использовать для любоко кол-ва данди пиров. Лукап происходит корректно, если номер зарегистрирован только на одном из астерисков.</div>
<div>
<br /></div>
<div>
<b>aster4:</b></div>
<div>
<div>
[general]</div>
<div>
department=Your Department</div>
<div>
organization=Your Company, Inc.</div>
<div>
locality=Your City</div>
<div>
stateprov=ST</div>
<div>
country=US</div>
<div>
email=your@email.com</div>
<div>
phone=+12565551212</div>
<div>
bindaddr=192.168.3.56</div>
<div>
port=4520</div>
<div>
entityid=00:0c:29:8a:a9:f1 ; MAC belong to this system</div>
<div>
cachetime=5</div>
<div>
ttl=2</div>
<div>
autokill=yes</div>
<div>
<br /></div>
<div>
[mappings]</div>
<div>
extensions => RegisteredDevices,0,SIP,dundi_to_asterisk2/${NUMBER},nopartial</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[00:0c:29:c5:d6:e4] ; MAC Address of Asterisk1</div>
<div>
model = symmetric</div>
<div>
host = 192.168.3.52;(this is the IP address of the DUNDi Asterisk1)</div>
<div>
inkey = aster4</div>
<div>
outkey = aster1</div>
<div>
include = extensions</div>
<div>
permit = extensions</div>
<div>
qualify = yes</div>
<div>
order = primary</div>
</div>
<div>
<br /></div>
<div>
<b>aster1:</b></div>
<div>
<div>
[general]</div>
<div>
department=Your Department</div>
<div>
organization=Your Company, Inc.</div>
<div>
locality=Your City</div>
<div>
stateprov=ST</div>
<div>
country=US</div>
<div>
email=your@email.com</div>
<div>
phone=+12565551212</div>
<div>
bindaddr=192.168.3.52</div>
<div>
port=4520</div>
<div>
entityid=00:0c:29:c5:d6:e4</div>
<div>
cachetime=5</div>
<div>
ttl=2</div>
<div>
autokill=yes</div>
<div>
<br /></div>
<div>
[mappings]</div>
<div>
extensions => RegisteredDevices,0,SIP,dundi_to_asterisk1/${NUMBER},nopartial</div>
<div>
<br /></div>
<div>
[00:0c:29:8a:a9:f1] ; MAC Address of Asterisk4</div>
<div>
model = symmetric</div>
<div>
host = 192.168.3.56;(this is the IP address of the DUNDi Asterisk4)</div>
<div>
inkey = aster1</div>
<div>
outkey = aster4</div>
<div>
include = extensions</div>
<div>
permit = extensions</div>
<div>
qualify = yes</div>
<div>
order = primary</div>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
В настройках dundi.conf следует иметь ввиду, что строки в mappings, это то что будет передаваться на удаленный dundi peer и именно на этом удаленном пире должны быть нужные настройки (например, context RegisteredDevices и SIP trunk dundi_to_asterisk1)<br />
<br />
<br />
<div>
[mappings]</div>
<div>
extensions => RegisteredDevices,0,SIP,dundi_to_asterisk1/${NUMBER},nopartial<br />
<br />
Теперь перейдем к context'ам. Я использую конструкцию вида.<br />
<br />
Если есть данные в dundi, то берем их. Если нет, то звоним на локальный астериск.<br />
<br />
exten => 958898,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1001,extensions,b)})}>0]?${DUNDILOOKUP(1001,extensions,b)}:"SIP/1001")},30)<br />
<br />
exten => 1001,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1001,extensions,b)})}>0]?${DUNDILOOKUP(1001,extensions,b)}:"SIP/1001")},30)<br />
<div>
<br /></div>
<div>
для получения направления звонка используется функция DUNDILOOKUP(1001,extensions,b)</div>
<div>
она ищет экстеншен 1001 в маппинге extensions dundi.conf. Возвращает SIP/dundi_to_asterisk2</div>
<div>
<br /></div>
<div>
Это прямой аналог команды </div>
<div>
aster1*CLI> dundi lookup 1000@extensions</div>
<div>
1. 0 SIP/dundi_to_asterisk2/1000 (EXISTS)</div>
<div>
from 00:0c:29:de:70:6d, expires in 5 s</div>
<div>
DUNDi lookup completed in 64 ms</div>
<div>
<br /></div>
<div>
Если экстеншен зарегистрирован на нескольких астерисках, то dundi lookup вернет несколько значений. Передаст при этом он только первое. Вполне так можно использовать для резервирования :)</div>
<div>
<br /></div>
<div>
<div>
aster2*CLI> dundi lookup 1001@extensions</div>
<div>
1. 0 SIP/dundi_to_asterisk1/1001 (EXISTS)</div>
<div>
from 00:0c:29:c5:d6:e4, expires in 5 s</div>
<div>
2. 0 SIP/dundi_to_asterisk4/1001 (EXISTS)</div>
<div>
from 00:0c:29:8a:a9:f1, expires in 5 s</div>
<div>
DUNDi lookup completed in 89 ms</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Вообщем то с этого момента можно плодить астериски с данди. Остальные настройки уже распространяются на диалплан и специфичны для конкретных конфигураций.</div>
<div>
<br /></div>
<div>
Пример моей тестовой конфигурации состоящей из трех астерисков:</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
aster1:</div>
<div>
<br /></div>
<div>
sip.conf</div>
<div>
<br /></div>
<div>
<div>
[general]</div>
<div>
context=poumolchaniu</div>
<div>
srvlookup=no</div>
<div>
disallow=all</div>
<div>
allow=ulaw</div>
<div>
allow=g729</div>
<div>
allow=ilbc</div>
<div>
language=ru</div>
<div>
trustrpid=yes</div>
<div>
sendrpid=yes</div>
<div>
registertimeout=20</div>
<div>
registerattempts=10</div>
<div>
t38pt_udptl=no</div>
<div>
allow=h263</div>
<div>
videosupport=yes</div>
<div>
autocreatepeer=no</div>
<div>
minexpiry=60</div>
<div>
maxexpirey=3600</div>
<div>
rtsavesysname=yes</div>
<div>
rtptimeout=60</div>
<div>
rtpholdtimeout=300</div>
<div>
dtmfmode=auto</div>
<div>
directrtpsetup=no</div>
<div>
canreinvite=no</div>
<div>
sdpsession=Aster1 Server</div>
<div>
#include sipuserss.conf</div>
<div>
#include sipgw.conf</div>
<div>
#include siptrunk.conf</div>
<div>
alwaysauthreject=yes</div>
<div>
videosupport=yes</div>
<div>
defaultexpiry=3600</div>
<div>
regcontext=RegisteredDevices</div>
<div>
<br /></div>
<div>
;workaround for asteriks crash</div>
<div>
session-timers = refuse</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
sipgw.conf</div>
<div>
<div>
<br /></div>
<div>
[dundi_to_asterisk2]</div>
<div>
host=192.168.3.53</div>
<div>
type=peer</div>
<div>
secret=secret</div>
<div>
context=local</div>
<div>
disallow=all</div>
<div>
allow=ulaw</div>
<div>
allow=alaw</div>
<div>
qualify=yes</div>
<div>
canreinvite=no</div>
<div>
nat=yes</div>
<div>
defaultuser=dundi_to_asterisk1</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[dundi_to_asterisk4]</div>
<div>
host=192.168.3.56</div>
<div>
type=peer</div>
<div>
secret=secret</div>
<div>
context=local</div>
<div>
disallow=all</div>
<div>
allow=ulaw</div>
<div>
allow=alaw</div>
<div>
qualify=yes</div>
<div>
canreinvite=no</div>
<div>
nat=yes</div>
<div>
defaultuser=dundi_to_asterisk1</div>
</div>
<div>
<br /></div>
<div>
sipusers.conf</div>
<div>
<div>
<br /></div>
<div>
[1000]</div>
<div>
type=friend</div>
<div>
accountcode=outgoing</div>
<div>
host=dynamic</div>
<div>
qualify=yes</div>
<div>
callerid=""<958877></div>
<div>
language=ru</div>
<div>
username=1000</div>
<div>
disallow=all</div>
<div>
allow=gsm</div>
<div>
allow=g729</div>
<div>
allow=ulaw</div>
<div>
allow=h263</div>
<div>
context=tolkogorod+zona+mezhgorod+mezhdunarodka</div>
<div>
nat=yes</div>
<div>
busylevel=2</div>
<div>
call-limit=1</div>
<div>
dtmfmode = rfc2833</div>
<div>
<br /></div>
<div>
[1001]</div>
<div>
type=friend</div>
<div>
accountcode=outgoing</div>
<div>
host=dynamic</div>
<div>
qualify=yes</div>
<div>
callerid=""<958898></div>
<div>
language=ru</div>
<div>
username=1001</div>
<div>
disallow=all</div>
<div>
allow=gsm</div>
<div>
allow=g729</div>
<div>
allow=ulaw</div>
<div>
allow=h263</div>
<div>
context=tolkogorod+zona+mezhgorod+mezhdunarodka</div>
<div>
nat=yes</div>
<div>
busylevel=2</div>
<div>
call-limit=1</div>
<div>
dtmfmode = rfc2833</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
dundi.conf</div>
<div>
<div>
[general]</div>
<div>
department=Your Department</div>
<div>
organization=Your Company, Inc.</div>
<div>
locality=Your City</div>
<div>
stateprov=ST</div>
<div>
country=US</div>
<div>
email=your@email.com</div>
<div>
phone=+12565551212</div>
<div>
bindaddr=192.168.3.52</div>
<div>
port=4520</div>
<div>
entityid=00:0c:29:c5:d6:e4</div>
<div>
cachetime=5</div>
<div>
ttl=2</div>
<div>
autokill=yes</div>
<div>
<br /></div>
<div>
[mappings]</div>
<div>
extensions => RegisteredDevices,0,SIP,dundi_to_asterisk1/${NUMBER},nopartial</div>
<div>
<br /></div>
<div>
[00:0c:29:de:70:6d] ; MAC Address of Asterisk2</div>
<div>
model = symmetric</div>
<div>
host = 192.168.3.53;(this is the IP address of the DUNDi Asterisk2)</div>
<div>
inkey = aster1</div>
<div>
outkey = aster2</div>
<div>
include = extensions</div>
<div>
permit = extensions</div>
<div>
qualify = yes</div>
<div>
order = primary</div>
<div>
<br /></div>
<div>
[00:0c:29:8a:a9:f1] ; MAC Address of Asterisk4</div>
<div>
model = symmetric</div>
<div>
host = 192.168.3.56;(this is the IP address of the DUNDi Asterisk4)</div>
<div>
inkey = aster1</div>
<div>
outkey = aster4</div>
<div>
include = extensions</div>
<div>
permit = extensions</div>
<div>
qualify = yes</div>
<div>
order = primary</div>
</div>
<div>
<br /></div>
<div>
extensions.conf</div>
<div>
<br /></div>
<div>
[RegisteredDevices]</div>
<div>
<br /></div>
<div>
<div>
[tolkogorod+zona+mezhgorod+mezhdunarodka]</div>
<div>
Include => local</div>
<div>
Include => CallerIDoutCiscofon</div>
<div>
Include => specslugbi</div>
<div>
Include => gorod</div>
<div>
Include => zona</div>
<div>
Include => mezhgorod</div>
<div>
Include => mezhdunarodka</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[local]</div>
<div>
<div>
#include extensionslookup.conf</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
extensionslookup.conf</div>
<div>
<div>
exten => 958877,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1000,extensions,b)})}>0]?${DUNDILOOKUP(1000,extensions,b)}:"SIP/1000")},30)</div>
<div>
exten => 958898,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1001,extensions,b)})}>0]?${DUNDILOOKUP(1001,extensions,b)}:"SIP/1001")},30)</div>
<div>
exten => 1000,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1000,extensions,b)})}>0]?${DUNDILOOKUP(1000,extensions,b)}:"SIP/1000")},30)</div>
<div>
exten => 1001,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1001,extensions,b)})}>0]?${DUNDILOOKUP(1001,extensions,b)}:"SIP/1001")},30)</div>
</div>
<div>
<br /></div>
<br />
aster2<br />
<br />
sip.conf<br />
<br />
[general]<br />
srvlookup=no<br />
NAT=yes<br />
bindport=5060<br />
allowguest=no<br />
canreinvite=no<br />
regcontext=RegisteredDevices<br />
<br />
[1000]<br />
type=friend<br />
context=LocalSets<br />
host=dynamic<br />
disallow=all<br />
allow=gsm<br />
canreinvite=no<br />
qualify=yes<br />
defaultuser=1000<br />
fromuser=1000<br />
callerid=""<958877><br />
<br />
[dundi_to_asterisk1]<br />
host=192.168.3.52<br />
type=peer<br />
secret=secret<br />
context=LocalSets<br />
disallow=all<br />
allow=ulaw<br />
allow=alaw<br />
qualify=yes<br />
defaultuser=dundi_to_asterisk2<br />
<div>
<br /></div>
<div>
dundi.conf</div>
<div>
<div>
[general]</div>
<div>
department=Your Department</div>
<div>
organization=Your Company, Inc.</div>
<div>
locality=Your City</div>
<div>
stateprov=ST</div>
<div>
country=US</div>
<div>
email=your@email.com</div>
<div>
phone=+12565551212</div>
<div>
bindaddr=192.168.3.53</div>
<div>
port=4520</div>
<div>
entityid=00:0c:29:de:70:6d</div>
<div>
cachetime=5</div>
<div>
ttl=2</div>
<div>
autokill=yes</div>
<div>
<br /></div>
<div>
[mappings]</div>
<div>
extensions => RegisteredDevices,0,SIP,dundi_to_asterisk2/${NUMBER},nopartial</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[00:0c:29:c5:d6:e4] ; MAC Address of Asterisk1</div>
<div>
model = symmetric</div>
<div>
host = 192.168.3.52;(this is the IP address of the DUNDi Asterisk1)</div>
<div>
inkey = aster2</div>
<div>
outkey = aster1</div>
<div>
include = extensions</div>
<div>
permit = extensions</div>
<div>
qualify = yes</div>
<div>
order = primary</div>
</div>
<div>
<br /></div>
<div>
extensions.conf</div>
<div>
<div>
[general]</div>
<div>
static=yes</div>
<div>
writeprotect=no</div>
<div>
autofallthrough=no</div>
<div>
clearglobalvars=no</div>
<div>
priorityjumping=no</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[RegisteredDevices]</div>
<div>
;exten => 1000,1,NoOp()</div>
<div>
<br /></div>
<div>
[lookup]</div>
<div>
exten => 958877,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1000,extensions,b)})}>0]?${DUNDILOOKUP(1000,extensions,b)}:"SIP/1000")},30)</div>
<div>
exten => 958898,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1001,extensions,b)})}>0]?${DUNDILOOKUP(1001,extensions,b)}:"SIP/1001")},30)</div>
<div>
exten => 1000,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1000,extensions,b)})}>0]?${DUNDILOOKUP(1000,extensions,b)}:"SIP/1000")},30)</div>
<div>
exten => 1001,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1001,extensions,b)})}>0]?${DUNDILOOKUP(1001,extensions,b)}:"SIP/1001")},30)</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[LocalSets]</div>
<div>
include => lookup</div>
</div>
<div>
<br /></div>
<div>
aster4</div>
<div>
sip.conf</div>
<div>
<div>
[general]</div>
<div>
srvlookup=no</div>
<div>
NAT=yes</div>
<div>
bindport=5060</div>
<div>
allowguest=no</div>
<div>
canreinvite=no</div>
<div>
regcontext=RegisteredDevices</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[1002]</div>
<div>
type=friend</div>
<div>
context=LocalSets</div>
<div>
host=dynamic</div>
<div>
disallow=all</div>
<div>
allow=gsm</div>
<div>
canreinvite=no</div>
<div>
qualify=yes</div>
<div>
defaultuser=1002</div>
<div>
fromuser=1002</div>
<div>
callerid=""<958877></div>
<div>
<br /></div>
<div>
[dundi_to_asterisk1]</div>
<div>
host=192.168.3.52</div>
<div>
type=peer</div>
<div>
secret=secret</div>
<div>
context=DUNDi_Incoming</div>
<div>
disallow=all</div>
<div>
allow=ulaw</div>
<div>
allow=alaw</div>
<div>
qualify=yes</div>
<div>
defaultuser=dundi_to_asterisk4</div>
</div>
<div>
<br /></div>
<div>
dundi.conf</div>
<div>
<div>
[general]</div>
<div>
department=Your Department</div>
<div>
organization=Your Company, Inc.</div>
<div>
locality=Your City</div>
<div>
stateprov=ST</div>
<div>
country=US</div>
<div>
email=your@email.com</div>
<div>
phone=+12565551212</div>
<div>
bindaddr=192.168.3.56</div>
<div>
port=4520</div>
<div>
entityid=00:0c:29:8a:a9:f1</div>
<div>
cachetime=5</div>
<div>
ttl=2</div>
<div>
autokill=yes</div>
<div>
<br /></div>
<div>
[mappings]</div>
<div>
extensions => RegisteredDevices,0,SIP,dundi_to_asterisk4/${NUMBER},nopartial</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[00:0c:29:c5:d6:e4] ; MAC Address of Asterisk1</div>
<div>
model = symmetric</div>
<div>
host = 192.168.3.52;(this is the IP address of the DUNDi Asterisk1)</div>
<div>
inkey = aster4</div>
<div>
outkey = aster1</div>
<div>
include = extensions</div>
<div>
permit = extensions</div>
<div>
qualify = yes</div>
<div>
order = primary</div>
</div>
<div>
<br /></div>
<div>
extensions.conf</div>
<div>
<div>
[general]</div>
<div>
static=yes</div>
<div>
writeprotect=no</div>
<div>
autofallthrough=no</div>
<div>
clearglobalvars=no</div>
<div>
priorityjumping=no</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[RegisteredDevices]</div>
<div>
<br /></div>
<div>
<div>
[DUNDi_Incoming]</div>
<div>
exten => 1002,1,Dial(${IF($[${LEN(${DUNDILOOKUP(1002,extensions,b)})}>0]?${DUNDILOOKUP(1002,extensions,b)}:"SIP/1002")},30)</div>
</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
</div>
<div>
</div>
</div>
<br />
<br /></div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com0tag:blogger.com,1999:blog-6988488822576934046.post-10760948344301129312015-05-08T00:29:00.000-07:002015-05-08T00:29:04.855-07:00[jira] Продвинутая обработка входящих писем (incomming mail handlers)<div dir="ltr" style="text-align: left;" trbidi="on">
Натолкнулся на прикольную церновскую разработку.<br />
<br />
https://wikis.web.cern.ch/wikis/display/JMH/JIRA+Advanced+Mail+Handler<br />
<br />
Плагин для Jira. Скачиваем и устанавливаем через Upload Plug-in из Manage add-ons<br />
<br />
Настраиваем Incomming mail в System, добавляем Mail Handler там же. В качестве Handler указываем <span style="background-color: #f0f0f0; color: #333333; font-family: Arial, sans-serif; font-size: 12px; line-height: 17.142858505249px;">advancedCreateOrCommentHandler</span><br />
<br />
Плагин позволяет добавлять в тему писем таги в виде <span style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;"> </span><strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;"><em>#TAG-NAME=tag-value</em></strong><span style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;"> или </span><span style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;"><em style="font-weight: bold;">#TAG-NAME=tag-value1,tag-value2,tag-value3. </em>По ним задачам будут навешиваться или изменяться поля и компоненты.</span><br />
<span style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;"><br /></span>
<span style="color: #333333; font-family: Arial, sans-serif;"><span style="background-color: white; font-size: 14px; line-height: 20px;">Например включаем в тему письма таг,</span></span><br />
<strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#PROJECT=</strong><strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;"><em>GNOM</em></strong><br />
<strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#ASSIGNEE=<i>vasya</i></strong><br />
<strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#BUG</strong><span style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">, </span><strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#NEWFEATURE - </strong><span style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">issue type</span><br />
<strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#BLOCKER</strong><span style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">, </span><strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#CRITICAL - </strong><span style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">priority</span><br />
<strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#COMPONENT=<i>sloniki</i></strong><br />
<strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#EST=1h</strong><br />
<strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;">#DUE=2015</strong><strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;"><em>-11-01</em></strong><br />
<strong style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px;"><em><br /></em></strong>
<span style="color: #333333; font-family: Arial, sans-serif;"><span style="background-color: white; font-size: 14px; line-height: 20px;">Ну а дальше полет фантазии: можно правилами в почтовике (MTA ) настроить добавление тегов по фильтрам, можно писать руками при отправке.</span></span><br />
<span style="color: #333333; font-family: Arial, sans-serif;"><span style="background-color: white; font-size: 14px; line-height: 20px;"><br /></span></span>
<span style="color: #333333; font-family: Arial, sans-serif;"><span style="background-color: white; font-size: 14px; line-height: 20px;"><br /></span></span></div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com1tag:blogger.com,1999:blog-6988488822576934046.post-37279072749606215402015-05-07T06:24:00.001-07:002015-05-07T06:52:32.573-07:00Vim<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
<b>Доступные синтаксы</b></h2>
<br />
/usr/share/vim/vim73/syntax<br />
<br />
<br />
установить синтакс в vim<br />
<span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">:set filetype=название</span><br />
<span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;"><br /></span>
<span style="background-color: white; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">Запустить команды оболочки из </span><i style="background-color: white; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">Vim,</i><span style="background-color: white; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;"> используя команду '</span><span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">:!</span><span style="background-color: white; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">'</span><br />
<span style="background-color: white; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">например,</span><span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;"> :!ls</span><br />
<span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;"><br /></span>
<span style="background-color: white; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">Доступ ко всем возможностям оболочки, запустите </span><span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">:sh или :bash</span><br />
<span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;"><br /></span>
<span style="background-color: white; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;">Открытие файлового менеджера в vim</span><br />
<div style="text-align: justify;">
<span style="color: blue; font-family: Droid Serif, serif;"><span style="font-size: 15.454545021057129px;">:Vex или :E</span></span></div>
<div style="text-align: justify;">
<span style="color: blue; font-family: Droid Serif, serif;"><span style="font-size: 15.454545021057129px;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.454545021057129px;">кодировка</span></span></div>
<div style="text-align: justify;">
<span style="color: blue; font-family: Droid Serif, serif;"><span style="font-size: 15.454545021057129px;">:set encoding=</span></span><br />
<span style="color: blue; font-family: Droid Serif, serif;"><span style="font-size: 15.454545021057129px;"><br /></span></span>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;">vim -c :E - запустить вим с выполнением команды :E</span></span><br />
<span style="color: blue; font-family: Droid Serif, serif;"><span style="font-size: 15.454545021057129px;"><br /></span></span>
<br />
<h3>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"><b>Команды в vim</b></span></span></h3>
<br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"><b><br /></b></span></span>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;">:E - file explorer</span></span><br />
<pre class="lang-sh prettyprint prettyprinted" style="background-color: #eeeeee; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; text-align: left; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">
</span></code></pre>
<pre class="lang-sh prettyprint prettyprinted" style="background-color: #eeeeee; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; text-align: left; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pun" style="border: 0px; color: black; margin: 0px; padding: 0px;">!ls -la</span><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;"> - выполнение команды в шеле</span></code></pre>
<pre class="lang-sh prettyprint prettyprinted" style="background-color: #eeeeee; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; text-align: left; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"><span class="pln" style="border: 0px; color: black; margin: 0px; padding: 0px;">:split filename - разделить экран и открыть второй файл (ctrl-w - переход между окнами)</span></code></pre>
<pre class="lang-sh prettyprint prettyprinted" style="background-color: #eeeeee; border: 0px; color: #393318; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; text-align: left; width: auto; word-wrap: normal;"><span style="color: black; white-space: inherit;">:vsplit filename</span></pre>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"><b>colorschemes ложить в .vim/colors</b></span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.454545021057129px;"><b><br /></b></span></span>
<br />
<h2>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;">настройки в /home/.vim.rc</span></span></h2>
<br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> colorscheme sexy-railscasts</span></span><br />
<span style="font-family: 'Droid Serif', serif; font-size: 15.4545450210571px;"> set fileencodings=utf-8,koi8-r,cp1251</span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> set fileformats=unix,dos,mac</span></span><br />
<span style="background-color: white; box-sizing: border-box; font-family: 'PT Sans', sans-serif; font-size: 16px; line-height: 22.8571434020996px; outline: none !important; text-align: start;">set number #номера строк</span><br />
<span style="font-family: 'Droid Serif', serif; font-size: 15.4545450210571px;">set pastetoggle=<F2> #биндим на f2 включение и отключение paste, чтобы vim не коверкал строки при вставке из буфера.</span><br />
<span style="font-family: 'Droid Serif', serif; font-size: 15.4545450210571px;"><br /></span>
<span style="background-color: #f1f1f1; font-family: monospace; font-size: 13px; line-height: 18.2000007629395px; text-align: left;">set foldenable</span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;">set foldmethod=manual</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"><br /></span></span>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;">#меняем foldmethod по нажатию f4</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;">map <F4> <esc>:call SWITCHFOLD()<cr> "{{{ </span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> function SWITCHFOLD()</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> if &foldmethod=="marker"</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> set foldmethod=syntax</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> return</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> endif</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> if &foldmethod=="syntax"</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> set foldmethod=indent</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> return</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> endif</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> if &foldmethod=="indent"</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> set foldmethod=manual</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> return</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> endif</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> if &foldmethod=="manual"</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> set foldmethod=marker</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> return</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> endif</span></span><br />
<br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"> endfunction</span></span><br />
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"><b><br /></b></span></span>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 15.4545450210571px;"><b><br /></b></span></span>
<br />
<div style="background: rgb(230, 230, 230); font-family: Verdana; font-size: 11px; margin-bottom: 0.2cm; margin-left: 1.25cm; margin-top: 0.2cm;">
<span style="color: blue;"><span style="font-family: DejaVu Serif, serif;"><span style="font-family: Courier, monospace;"><span style="font-size: 11pt;">earlier</span></span><span style="font-family: Courier, monospace;"><span style="font-size: 11pt;"> 4m</span></span></span></span></div>
<div align="JUSTIFY" style="background-color: white; font-family: Verdana; font-size: 11px; margin-bottom: 0cm; margin-top: 0.1cm;">
<a href="https://www.blogger.com/null" name="__DdeLink__6902_1754754165" style="color: blue;"></a><span style="font-family: Droid Serif, serif;"><span style="font-size: 11pt;">вернетеся на 4 минуты, т.е. состояние текста которое было 4 минут назад "earlier".</span></span></div>
<div align="JUSTIFY" style="background-color: white; font-family: Verdana; font-size: 11px; margin-bottom: 0cm; margin-top: 0.1cm;">
<br /></div>
<div align="JUSTIFY" style="background-color: white; font-family: Verdana; font-size: 11px; margin-bottom: 0cm; margin-top: 0.1cm;">
<a href="https://www.blogger.com/null" name="__DdeLink__6906_1754754165" style="color: blue;"></a><span style="font-family: Droid Serif, serif;"><span style="font-size: 11pt;">е двинуться вперед во времени:</span></span></div>
<div style="background: rgb(230, 230, 230); font-family: Verdana; font-size: 11px; margin-bottom: 0.2cm; margin-left: 1.25cm; margin-top: 0.2cm;">
<span style="color: blue;"><span style="font-family: DejaVu Serif, serif;"><span style="font-family: Courier, monospace;"><span style="font-size: 11pt;">:later</span></span><span style="font-family: Courier, monospace;"><span style="font-size: 11pt;"> 45s</span></span></span></span></div>
<div align="JUSTIFY" style="background-color: white; font-family: Verdana; font-size: 11px; margin-bottom: 0cm; margin-top: 0.1cm;">
<span style="font-family: Droid Serif, serif;"><span style="font-size: 11pt;">интервал составит 45 секунд.</span></span></div>
<div align="JUSTIFY" style="background-color: white; font-family: Verdana; font-size: 11px; margin-bottom: 0cm; margin-top: 0.1cm;">
<span style="font-family: Droid Serif, serif;"><span style="font-size: 11pt;"><br /></span></span>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 11pt;">отмена 5ти внесенных изменений:</span></span></div>
<div style="background: rgb(230, 230, 230); font-family: Verdana; font-size: 11px; margin-bottom: 0.2cm; margin-left: 1.25cm; margin-top: 0.2cm;">
<a href="https://www.blogger.com/null" name="__DdeLink__6910_1754754165" style="color: blue;"></a><span style="color: blue;"><span style="font-family: DejaVu Serif, serif;"><span style="font-family: Courier, monospace;"><span style="font-size: 11pt;">:undo</span></span><span style="font-family: Courier, monospace;"><span style="font-size: 11pt;"> 5</span></span></span></span></div>
<div align="JUSTIFY" style="background-color: white; font-family: Verdana; font-size: 11px; margin-bottom: 0cm; margin-top: 0.1cm;">
<span style="font-family: Droid Serif, serif;"><span style="font-size: 11pt;"><br /></span></span>
<span style="font-family: Droid Serif, serif;"><span style="font-size: 11pt;">просмотреть дерево undo:</span></span></div>
<div style="background: rgb(230, 230, 230); font-family: Verdana; font-size: 11px; margin-bottom: 0.2cm; margin-left: 1.25cm; margin-top: 0.2cm;">
<span style="color: blue;"><span style="font-family: DejaVu Serif, serif;"><span style="font-family: Courier, monospace;"><span style="font-size: 11pt;">:</span></span><span style="font-family: Courier, monospace;"><span style="font-size: 11pt;">undolist</span></span></span></span></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
<span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;"><br /></span>
<span style="background-color: white; color: blue; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;"><br /></span>
<span style="background-color: white; font-family: 'Droid Serif', serif; font-size: 15px; text-align: justify;"><br /></span></div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com0tag:blogger.com,1999:blog-6988488822576934046.post-75388509380748128292015-04-20T11:19:00.004-07:002015-06-10T00:18:16.843-07:00Установка passenger для apache + настройка proxy_pass (Ruby on Rails)<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
Установка</h2>
<br />
https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html<br />
<br />
Способов установки дофига (см. ссылку выше). Я ставил из rubygems<br />
<br />
<pre style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px; overflow: auto; padding: 0px;"><b>gem install passenger</b></pre>
<pre style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px; overflow: auto; padding: 0px;">потом запускаем</pre>
<pre style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px; overflow: auto; padding: 0px;"><b>passenger-install-apache2-module</b></pre>
<pre style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px; overflow: auto; padding: 0px;">Следуем его указаниям и ставим недостающие зависимости.</pre>
<pre style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px; overflow: auto; padding: 0px;"></pre>
<pre style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px; overflow: auto; padding: 0px;">Далее в конфиг apache прописываем (меняем пути на свои)</pre>
<br />
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.2.1/gems/passenger-5.0.6/buildout/apache2/mod_passenger.so<br />
<IfModule mod_passenger.c><br />
PassengerRoot /usr/local/rvm/gems/ruby-2.2.1/gems/passenger-5.0.6<br />
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.2.1/wrappers/ruby<br />
</IfModule><br />
<div>
<br /></div>
<div>
Затем рестартуем apache</div>
<div>
<br /></div>
<div>
Проверить, что passenger работает можно командой <span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><b>passenger-memory-stats</b></span><br />
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><b><br /></b></span>
<br />
<h2 style="text-align: left;">
<span style="font-weight: normal;"><span style="font-size: large;">Настройки в rails</span></span></h2>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;">/config/environments/production.rb</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;">config.action_controller.relative_url_root = '/srv/www/rails/staff_locator/'</span></span><br />
<h2 style="text-align: left;">
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace; font-size: large;"><span style="font-weight: normal; line-height: 22.1000003814697px;">Настройки в apache</span></span></h2>
<div>
Принимаем запрос на 80м порту с определенным URI (/staff и /locator) и перенаправляем его на другой URI (у меня там слушает Ruby on Rails).<br />
<br />
На 80м порту живет другое веб-приложение на PERL'e<br />
<br />
<b style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;">Добавил в vhost для основного сервиса проброс до rails</b></div>
<div>
</div>
<div>
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><VirtualHost *:80></span></div>
<div>
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;">.</span></div>
<div>
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;">.</span></div>
<div>
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;">.</span></div>
<div>
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> #FOR RAILS PROXY PASS - START</span></div>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> #point to different document root for rails application</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Alias "/srv/www/rails/staff_locator/" "/srv/www/rails/staff_locator/public/"</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> #making permissions for rails assets folder and location</span></span><br />
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> <Directory "/srv/www/rails/staff_locator/public/assets"></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> AllowOverride all</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Order allow,deny</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Allow from all</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> </Directory></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;">#Это чтобы находил папку assets с стилями и картинками. Думаю, что это костыль и правильно надо реализовывать как то по другому.</span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><Location /assets></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Order allow,deny</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Allow from 192.168.0.0/16</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"></Location></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> <Location /staff></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Order allow,deny</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Allow from 192.168.0.0/16</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> </Location></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> <Location /locator></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Order allow,deny</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Allow from 192.168.0.0/16</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> </Location></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> #disable Forward-proxy</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> ProxyRequests off</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> #proxy access security</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> <Proxy "*"></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Order deny,allow</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Allow from 192.168.0.0/16</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> </Proxy></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> ProxyPassMatch "^/staff(.*)" "http://localhost:8080/staff$1"</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> ProxyPassMatch "^/locator(.*)" "http://localhost:8080/locator$1"</span></span><br />
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;">ProxyPassMatch "^/assets(.*)" "http://localhost:8080/assets$1"</span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> #FOR RAILS PROXY PASS -END</span></span><br />
<br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><b>Создал ror.conf</b></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><b><br /></b></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> <VirtualHost *:8080></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> ServerName xxx.ru</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> # !!! Be sure to point DocumentRoot to 'public'!</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> #DocumentRoot /ror/test/public</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> DocumentRoot /srv/www/rails/staff_locator/public</span></span><br />
<span style="font-family: Consolas, Menlo, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> <Directory /srv/www/rails/staff_locator/public></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> # This relaxes Apache security settings.</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> AllowOverride all</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Order allow,deny</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Allow from all</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> # Multiews must be turned off.</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> Options -MultiViews</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> # Uncomment this if you're on Apache >= 2.4:</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> #Require all granted</span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> </Directory></span></span><br />
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"> </VirtualHost></span></span><br />
<div>
<br /></div>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span>
<span style="font-family: Consolas, Menlo, Deja Vu Sans Mono, Bitstream Vera Sans Mono, monospace;"><span style="font-size: 15.3000001907349px; line-height: 22.1000003814697px;"><br /></span></span></div>
</div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com0tag:blogger.com,1999:blog-6988488822576934046.post-42934172159029823122013-01-07T08:07:00.000-08:002013-01-07T08:07:44.245-08:00SCE Subscriber manager и Quota manager<div dir="ltr" style="text-align: left;" trbidi="on">
<i>Статья не преследует цели дать полное описание SM и QM. Этого добра навалом в интернетах и в официальном руководстве. Здесь только то, что не так явно и полезно как минимум мне.</i><br />
<br />
Живут SM и QM всегда вместе на одном сервере, в отличии от CM который с SM на одном серваке жить не должен.<br />
<br />
До версии SM 3.5.5 QM безумно убог.<br />
<br />
Версия SM (хотя бы первые два индекса) должна совпадать с версией SCOS на SCE (не обязательное, но крайне желательное условие).<br />
<br />
Очень важно чтобы внутреннее время SM было выставлено корректно. Иначе могут быть реальные проблеме в работе квот (будут криво учитываться обновления и нотификации для hourly и minutes).<br />
<br />
При установке SM не забываем разлочить и сменить пароль у пользователя pcube.<br />
<br />
<div style="text-align: center;">
<b>Настройка Quota на СЦЕ</b></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyvUXAHZq3dGrCWI8dfLelOUsY-Nrdqk7gzcytIAxXycBdVgUAzJSa8EkcK3Q2RM031K2iyke1jn0A9DFNh_s8byERqGIYOlNk3hVeCIXYNlMAZeJpCQazTtj8TA-eEYNjy6GxftSAfLki/s1600/1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyvUXAHZq3dGrCWI8dfLelOUsY-Nrdqk7gzcytIAxXycBdVgUAzJSa8EkcK3Q2RM031K2iyke1jn0A9DFNh_s8byERqGIYOlNk3hVeCIXYNlMAZeJpCQazTtj8TA-eEYNjy6GxftSAfLki/s400/1.png" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEjE6R_25kIQQZMzRN7mAvxBmb6RrZDhIYKZtJ3Ut7wK35p2ABfCOCju7VmKjiobegAhJMoh10tYzH2XSiVmveu-IPGzEbkJyDqtrQ0DVmJ9noVrr21dFRMoMwmkrfeJStuFQ4ix1ZxMet/s1600/2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEjE6R_25kIQQZMzRN7mAvxBmb6RrZDhIYKZtJ3Ut7wK35p2ABfCOCju7VmKjiobegAhJMoh10tYzH2XSiVmveu-IPGzEbkJyDqtrQ0DVmJ9noVrr21dFRMoMwmkrfeJStuFQ4ix1ZxMet/s400/2.png" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE8cvOgAgNF6J2TK-SqdnPkNx-UCkfBkSMLWaHaCEHLby3BnkHW8xHNtSrrLciVeiWH6n142XOU2_ORwHpIGK0xEpeFzPAlGICnkJOGYvqFHZCTjMOG6iuwcUMWUD3syULLgbgt-qjBxQs/s1600/3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE8cvOgAgNF6J2TK-SqdnPkNx-UCkfBkSMLWaHaCEHLby3BnkHW8xHNtSrrLciVeiWH6n142XOU2_ORwHpIGK0xEpeFzPAlGICnkJOGYvqFHZCTjMOG6iuwcUMWUD3syULLgbgt-qjBxQs/s400/3.png" width="400" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheQTuAkrisHeeqjT93oJY1mMTboqzpxQJvvGS3NjSwogIz4OTaTpugj5mjKR47T5GaBG4B7yhi3LYotziF5MQV7Uqj9vvG7uv3JQiBiczfWj-4UYOALITPKCya-PeOn0mtm3Lj7ZZH11WN/s1600/4.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheQTuAkrisHeeqjT93oJY1mMTboqzpxQJvvGS3NjSwogIz4OTaTpugj5mjKR47T5GaBG4B7yhi3LYotziF5MQV7Uqj9vvG7uv3JQiBiczfWj-4UYOALITPKCya-PeOn0mtm3Lj7ZZH11WN/s400/4.png" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1-WI5_ayEtQIaU9NFeDOQdVCBW4V_GiUWqy0KgDDi1kdoMMkWc6kNKE1L_eUU70erbHQT5-xgW8g-_LRyogm3ZSP2E1BG8CdxTwI7KbEgY41yWaxrkz_55G50cBD0ggIFnTbY8lMOJTzV/s1600/5.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1-WI5_ayEtQIaU9NFeDOQdVCBW4V_GiUWqy0KgDDi1kdoMMkWc6kNKE1L_eUU70erbHQT5-xgW8g-_LRyogm3ZSP2E1BG8CdxTwI7KbEgY41yWaxrkz_55G50cBD0ggIFnTbY8lMOJTzV/s400/5.png" width="400" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpCn0vpkdIWih78IZpUweptOQZo-_4j6CvesRz9XhFQFoQWDMGRaYvJWBpKruwXhhxUUUVP-cIu7q6PmweTfMov0CgPXwfgiwHo2eRCg7q10QPQFPCDaNvFjkG63cYb2WtL7p0LJqKgwjr/s1600/6.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpCn0vpkdIWih78IZpUweptOQZo-_4j6CvesRz9XhFQFoQWDMGRaYvJWBpKruwXhhxUUUVP-cIu7q6PmweTfMov0CgPXwfgiwHo2eRCg7q10QPQFPCDaNvFjkG63cYb2WtL7p0LJqKgwjr/s400/6.png" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjefY5FJIg8NwK6IIg27x2JAapPe770r0wZmVehtACgJWSUBKhfUzv1D84KRl28vGxp3GdJ5OzE312OT3SaSRRyYUuI95pxXtdqN6HGPQzJwO71f9xCUe6sVm9BMQLB8sYxZe7lRzKOrJSq/s1600/7.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjefY5FJIg8NwK6IIg27x2JAapPe770r0wZmVehtACgJWSUBKhfUzv1D84KRl28vGxp3GdJ5OzE312OT3SaSRRyYUuI95pxXtdqN6HGPQzJwO71f9xCUe6sVm9BMQLB8sYxZe7lRzKOrJSq/s400/7.png" width="400" /></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG7igNmZzC4J-p1oB4ADqV4z0fGMUXksM8DUNgppEqkUaPB9PfBSrVwU88r6T6HYMTrBftWn9-95d3hOGds7TlIfnXBy_lcwJWnlO6DwDbe2PfutRvvjLiUyCtGi-g9XkAP3o679wSVqwK/s1600/8.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG7igNmZzC4J-p1oB4ADqV4z0fGMUXksM8DUNgppEqkUaPB9PfBSrVwU88r6T6HYMTrBftWn9-95d3hOGds7TlIfnXBy_lcwJWnlO6DwDbe2PfutRvvjLiUyCtGi-g9XkAP3o679wSVqwK/s400/8.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
RDR-formatter destination 127.0.0.1 port 33001 category number 4 priority 100</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
SCE8000(config)#> service RDR-formatter</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
inte line0</div>
<div class="separator" style="clear: both; text-align: left;">
tunable GT_REP_QP_RemainQuota_Enable value true</div>
<div class="separator" style="clear: both; text-align: left;">
tunable GT_REP_QP_QuotaBreach_Enable value true</div>
<div class="separator" style="clear: both; text-align: left;">
tunable GT_REP_QP_ThresholdBreach_Enable value true</div>
<div class="separator" style="clear: both; text-align: left;">
tunable GT_REP_QP_RemainQuota_MaxFrequency value 1000</div>
<div class="separator" style="clear: both; text-align: left;">
tunable GT_REP_QP_RemainQuota_Rate value 60</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Устанавливаем через install-sm.sh</div>
<div class="separator" style="clear: both; text-align: left;">
Разлочиваем пользователя pcube</div>
<div class="separator" style="clear: both; text-align: left;">
passwd -u -f pcube</div>
<div class="separator" style="clear: both; text-align: left;">
перезагружаем машину</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
[Domain.domain1]</div>
<div class="separator" style="clear: both; text-align: left;">
elements = SCE1,SCE2</div>
<div class="separator" style="clear: both; text-align: left;">
aliases = *</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
[SCE.SCE1]</div>
<div class="separator" style="clear: both; text-align: left;">
ip=xxx.xxx.xxx.xxx</div>
<div class="separator" style="clear: both; text-align: left;">
port=14374</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
[SCE.SCE2]</div>
<div class="separator" style="clear: both; text-align: left;">
ip=xxx.xxx.xxx.xxx</div>
<div class="separator" style="clear: both; text-align: left;">
port=14374</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
[RDR Server]</div>
<div class="separator" style="clear: both; text-align: left;">
start=yes</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Step 1<span class="Apple-tab-span" style="white-space: pre;"> </span>In the Service Configuration Editor, click the Classification tab.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Step 2<span class="Apple-tab-span" style="white-space: pre;"> </span>Choose Configuration > Classification > RDR Settings.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Step 3<span class="Apple-tab-span" style="white-space: pre;"> </span>Click the Quota RDRs tab.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
--------------------</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Configuring the Quota Manager Section</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The [Quota Manager] section in the subscriber manager configuration file contains the following parameters:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•start—Defines whether to start the Quota Manager or not.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Possible values are yes and no. The default value is no.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•reset_quota_on_profile_switch—Defines whether the Quota Manager should reset quota history cross global profiles.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Possible values are true and false. The default value is true.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•reset_quota_on_penalty_profile_switch—Defines whether the quota manager should reset quota history across penalty profiles.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Possible values are true and false. The default value is false.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•log_all—Defines whether the Quota Manager should add all messages to the user log.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Possible values are true and false. The default value is false.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•log_failures—Defines whether the Quota Manager should add messages about failures to the user log.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Possible values are true and false. The default value is true.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•log_breach_events—Setting the log_breach_events parameter to true logs only events of subscriber bucket breach and new aggregation period starts.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Possible values are true or false. The default value is false.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•handle_out_of_penalty_on_aggregation_period_end—Determines whether to allow a subscriber to come out of penalty at the end of an aggregation period. The default value is false.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•multiple_sce_support—Determines whether to enable multiple Cisco SCE support.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Possible values are true or false. The default value is false.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
•quota_allocation_based_on—Determines which flavor to choose for multiple Cisco SCE support. The possible values are consumption and provisioned. The default value is consumption.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
прописать ип адрес системы в /etc/hosts</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Посмотреть статус см sudo -u pcube ./p3sm --sm-status</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
запустить см sudo -u pcube ./p3sm --start</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
перезапустить см sudo -u pcube ./p3sm --restart</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
перезагрузить конфиг sm sudo -u pcube ./p3sm --load-config</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
синхронизировать базы пользователей со всеми сце sudo -u pcube ./p3sm--resync-all</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
смотрим статусы подключения sm к сце sudo -u pcube ./p3net --show-all --detail</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
ручное подключение к sm к сце sudo -u pcube ./p3net --connect 10.10.10.10</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Пользователей добавлять утилитой sudo -u pcube --add --ip=10.10.10.10 --subscriber=shinta --property=packageId=10</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Пользователей удалять утилитой sudo -u pcube --remove --subscriber=shinta</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
апдейтить утилитой sudo -u pcube ./p3subs --set --subscriber=shinta --property=packageId=5</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
вычищаем всех пользователей из базы sudo -u pcube ./p3subsdb --clear-all</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
экспортируем пользователей в csv файл sudo -u pcube ./p3subsdb --export --output=</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
импортируем пользователей из csv файла sudo -u pcube ./p3subsdb --import --file=</div>
<div style="text-align: left;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com1tag:blogger.com,1999:blog-6988488822576934046.post-83175673953260088762012-09-05T13:37:00.001-07:002012-09-09T09:53:33.840-07:00kamalio+asterisk+realtime mysql<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Дружим kamailio и астериск с удаленным mysql server<br />
<br />
kamilio в качестве SIP register, sip users хранятся в mysql на удаленном сервере.<br />
<br />
<br />
<br />
на mysql ставим<br />
<br />
apt-get install mysql-server<br />
apt-get install libmysqlclient-dev<br />
<br />
на aster и kamailio накатываем<br />
apt-get install unixodbc-dev libmyodbc<br />
<br />
<br />
kamailio собирал из сырцов так<br />
apt-get install bison flex libmysqlclient-dev make gcc<br />
cd /usr/local/src<br />
wget http://www.kamailio.org/pub/kamailio/3.0.1/src/kamailio-3.0.1_src.tar.gz<br />
tar xvfz kamailio-3.0.1_src.tar.gz<br />
cd kamailio-3.0.1<br />
make include_modules="db_mysql" cfg<br />
make all<br />
make install<br />
<br />
<br />
<br />
1) на удаленном mysql настраиваем /etc/mysql/my.cnf<br />
2) рестартуем mysql<br />
service mysql restart<br />
<br />
<br />
3) настраиваем привилегии<br />
mysql -u root -p<br />
grant all privileges on *.* to root@'%' identified by 'password' with grant option;<br />
grant all privileges on *.* to openser@'%' identified by 'openserrw';<br />
<br />
4) На kamailio<br />
<br />
vim /usr/local/etc/kamailio/kamctlrc<br />
<br />
пишем<br />
<br />
DBENGINE=MYSQL<br />
DBHOST=xxx.xxx.xxx.xxx<br />
DBNAME=openser<br />
DBRWUSER=openser<br />
DBRWPW="openserrw"<br />
<br />
5) Создаем базу на удаленном mysql<br />
<br />
<br />
на kamailio сервере запускаем<br />
/usr/local/sbin/kamdbctl create<br />
<br />
6) дополняем базу данных данными для астера.<br />
<br />
на mysql сервере создаем файл asterisk.sql следующего содержания:<br />
<br />
CREATE DATABASE asterisk;<br />
<br />
USE asterisk;<br />
<br />
GRANT ALL ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'asterisk';<br />
GRANT ALL ON asterisk.* to asterisk@"%" IDENTIFIED BY 'asterisk';<br />
<br />
CREATE TABLE `sipusers` (<br />
`id` int(11) NOT NULL AUTO_INCREMENT,<br />
`name` varchar(80) NOT NULL DEFAULT '',<br />
`host` varchar(31) NOT NULL DEFAULT '',<br />
`nat` varchar(5) NOT NULL DEFAULT 'no',<br />
`type` enum('user','peer','friend') NOT NULL DEFAULT 'friend',<br />
`accountcode` varchar(20) DEFAULT NULL,<br />
`amaflags` varchar(13) DEFAULT NULL,<br />
`call-limit` smallint(5) UNSIGNED DEFAULT NULL,<br />
`callgroup` varchar(10) DEFAULT NULL,<br />
`callerid` varchar(80) DEFAULT NULL,<br />
`cancallforward` char(3) DEFAULT 'yes',<br />
`canreinvite` char(3) DEFAULT 'yes',<br />
`context` varchar(80) DEFAULT NULL,<br />
`defaultip` varchar(15) DEFAULT NULL,<br />
`dtmfmode` varchar(7) DEFAULT NULL,<br />
`fromuser` varchar(80) DEFAULT NULL,<br />
`fromdomain` varchar(80) DEFAULT NULL,<br />
`insecure` varchar(4) DEFAULT NULL,<br />
`language` char(2) DEFAULT NULL,<br />
`mailbox` varchar(50) DEFAULT NULL,<br />
`md5secret` varchar(80) DEFAULT NULL,<br />
`deny` varchar(95) DEFAULT NULL,<br />
`permit` varchar(95) DEFAULT NULL,<br />
`mask` varchar(95) DEFAULT NULL,<br />
`musiconhold` varchar(100) DEFAULT NULL,<br />
`pickupgroup` varchar(10) DEFAULT NULL,<br />
`qualify` char(3) DEFAULT NULL,<br />
`regexten` varchar(80) DEFAULT NULL,<br />
`restrictcid` char(3) DEFAULT NULL,<br />
`rtptimeout` char(3) DEFAULT NULL,<br />
`rtpholdtimeout` char(3) DEFAULT NULL,<br />
`secret` varchar(80) DEFAULT NULL,<br />
`setvar` varchar(100) DEFAULT NULL,<br />
`disallow` varchar(100) DEFAULT NULL,<br />
`allow` varchar(100) DEFAULT NULL,<br />
`fullcontact` varchar(80) NOT NULL DEFAULT '',<br />
`ipaddr` varchar(15) NOT NULL DEFAULT '',<br />
`port` mediumint(5) UNSIGNED NOT NULL DEFAULT '0',<br />
`regserver` varchar(100) DEFAULT NULL,<br />
`regseconds` int(11) NOT NULL DEFAULT '0',<br />
`lastms` int(11) NOT NULL DEFAULT '0',<br />
`username` varchar(80) NOT NULL DEFAULT '',<br />
`defaultuser` varchar(80) NOT NULL DEFAULT '',<br />
`subscribecontext` varchar(80) DEFAULT NULL,<br />
`useragent` varchar(20) DEFAULT NULL,<br />
`sippasswd` varchar(80) DEFAULT NULL,<br />
PRIMARY KEY (`id`),<br />
UNIQUE KEY `name_uk` (`name`)<br />
);<br />
<br />
CREATE TABLE `sipregs` (<br />
`id` int(11) NOT NULL AUTO_INCREMENT,<br />
`name` varchar(80) NOT NULL DEFAULT '',<br />
`fullcontact` varchar(80) NOT NULL DEFAULT '',<br />
`ipaddr` varchar(15) NOT NULL DEFAULT '',<br />
`port` mediumint(5) UNSIGNED NOT NULL DEFAULT '0',<br />
`username` varchar(80) NOT NULL DEFAULT '',<br />
`regserver` varchar(100) DEFAULT NULL,<br />
`regseconds` int(11) NOT NULL DEFAULT '0',<br />
PRIMARY KEY (`id`),<br />
UNIQUE KEY `name` (`name`)<br />
);<br />
<br />
CREATE TABLE IF NOT EXISTS `voiceboxes` (<br />
`uniqueid` int(4) NOT NULL AUTO_INCREMENT,<br />
`customer_id` varchar(10) DEFAULT NULL,<br />
`context` varchar(10) NOT NULL,<br />
`mailbox` varchar(10) NOT NULL,<br />
`password` varchar(12) NOT NULL,<br />
`fullname` varchar(150) DEFAULT NULL,<br />
`email` varchar(50) DEFAULT NULL,<br />
`pager` varchar(50) DEFAULT NULL,<br />
`tz` varchar(10) DEFAULT 'central',<br />
`attach` enum('yes','no') NOT NULL DEFAULT 'yes',<br />
`saycid` enum('yes','no') NOT NULL DEFAULT 'yes',<br />
`dialout` varchar(10) DEFAULT NULL,<br />
`callback` varchar(10) DEFAULT NULL,<br />
`review` enum('yes','no') NOT NULL DEFAULT 'no',<br />
`operator` enum('yes','no') NOT NULL DEFAULT 'no',<br />
`envelope` enum('yes','no') NOT NULL DEFAULT 'no',<br />
`sayduration` enum('yes','no') NOT NULL DEFAULT 'no',<br />
`saydurationm` tinyint(4) NOT NULL DEFAULT '1',<br />
`sendvoicemail` enum('yes','no') NOT NULL DEFAULT 'no',<br />
`delete` enum('yes','no') NULL DEFAULT 'no',<br />
`nextaftercmd` enum('yes','no') NOT NULL DEFAULT 'yes',<br />
`forcename` enum('yes','no') NOT NULL DEFAULT 'no',<br />
`forcegreetings` enum('yes','no') NOT NULL DEFAULT 'no',<br />
`hidefromdir` enum('yes','no') NOT NULL DEFAULT 'yes',<br />
`stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,<br />
PRIMARY KEY (`uniqueid`),<br />
KEY `mailbox_context` (`mailbox`,`context`)<br />
);<br />
<br />
CREATE TABLE `voicemessages` (<br />
`id` int(11) NOT NULL AUTO_INCREMENT,<br />
`msgnum` int(11) NOT NULL DEFAULT '0',<br />
`dir` varchar(80) DEFAULT '',<br />
`context` varchar(80) DEFAULT '',<br />
`macrocontext` varchar(80) DEFAULT '',<br />
`callerid` varchar(40) DEFAULT '',<br />
`origtime` varchar(40) DEFAULT '',<br />
`duration` varchar(20) DEFAULT '',<br />
`mailboxuser` varchar(80) DEFAULT '',<br />
`mailboxcontext` varchar(80) DEFAULT '',<br />
`recording` longblob,<br />
`flag` varchar(128) DEFAULT '',<br />
PRIMARY KEY (`id`),<br />
KEY `dir` (`dir`)<br />
);<br />
<br />
<br />
CREATE TABLE version (<br />
table_name VARCHAR(32) NOT NULL,<br />
table_version INT UNSIGNED DEFAULT 0 NOT NULL<br />
);<br />
INSERT INTO version (table_name, table_version) VALUES ('sipusers','6');<br />
<br />
<br />
7) заливаем скрипт командой<br />
<br />
mysql -u root -p <asterisk.sql<br />
<br />
<br />
проверяем, что создалась база<br />
<br />
mysql -u root -p<br />
show databases;<br />
<br />
<br />
mysql> show databases;<br />
+--------------------+<br />
| Database |<br />
+--------------------+<br />
| information_schema |<br />
| asterisk |<br />
| mysql |<br />
| openser |<br />
| phpmyadmin |<br />
+--------------------+<br />
5 rows in set (0.01 sec)<br />
<br />
8) на kamailio и asterisk настраиваем odbc<br />
<br />
UnixODBC Configuration<br />
<br />
Edit /etc/odbcinst.ini and add:<br />
<br />
[MySQL]<br />
Description = MySQL driver<br />
Driver = /usr/lib/odbc/libmyodbc.so<br />
Setup = /usr/lib/odbc/libodbcmyS.so<br />
CPTimeout =<br />
CPReuse =<br />
UsageCount = 1<br />
<br />
<br />
Edit /etc/odbc.ini and add:<br />
<br />
[MySQL-asterisk]<br />
Description = MySQL Asterisk database<br />
Trace = Off<br />
TraceFile = stderr<br />
Driver = MySQL<br />
SERVER = xxx.xxx.xxx.xxx<br />
USER = asterisk<br />
PASSWORD = asterisk<br />
PORT = 3306<br />
DATABASE = asterisk<br />
<br />
<br />
На астериске настраиваем:<br />
<br />
Asterisk UnixODBC Configuration<br />
<br />
Edit /etc/asterisk/res_odbc.conf and set:<br />
<br />
[asterisk]<br />
enabled => yes<br />
dsn => MySQL-asterisk<br />
username => asterisk<br />
password => asterisk<br />
pre-connect => yes<br />
<br />
Edit /etc/asterisk/extconfig.conf and set:<br />
<br />
sipusers => odbc,asterisk,sipusers<br />
sippeers => odbc,asterisk,sipusers<br />
sipregs => odbc,asterisk,sipregs<br />
voicemail => odbc,asterisk,voiceboxes<br />
<br />
<br />
в /etc/asterisk/modules.conf раскомментариваем:<br />
preload => res_odbc.so<br />
preload => res_config_odbc.so<br />
<br />
там же заккоментариваем<br />
;noload => res_config_odbc.so<br />
;noload => res_config_pgsql.so<br />
<br />
перезагружаем с cli aster'a модуль<br />
<br />
module reload res_odbc.so<br />
<br />
также в sip.conf расскомментариваем<br />
<br />
rtcachefriends=yes<br />
<br />
это заставляет астериск кэшировать данные . Нужно для того, чтобы работали команды sip show peers и избавляет от части других проблем вызванных динамическим представлением данных<br />
<br />
<br />
9) Заносим в mysql данные о sip users<br />
<br />
use asterisk;<br />
<br />
INSERT INTO sipusers (name, username, host, sippasswd, fromuser, fromdomain, mailbox)<br />
VALUES ('101', '101', 'dynamic', '101', '101', 'yoursip.com', '101');<br />
INSERT INTO sipusers (name, username, host, sippasswd, fromuser, fromdomain, mailbox)<br />
VALUES ('102', '102', 'dynamic', '102', '102', 'yoursip.com', '102');<br />
INSERT INTO sipusers (name, username, host, sippasswd, fromuser, fromdomain, mailbox)<br />
VALUES ('103', '103', 'dynamic', '103', '103', 'yoursip.com', '103');<br />
<br />
INSERT INTO sipregs(name) VALUES('101');<br />
INSERT INTO sipregs(name) VALUES('102');<br />
INSERT INTO sipregs(name) VALUES('103');<br />
<br />
INSERT INTO voiceboxes(customer_id, context, mailbox, password) VALUES ('101', 'default', '101', '1234');<br />
INSERT INTO voiceboxes(customer_id, context, mailbox, password) VALUES ('101', 'default', '102', '1234');<br />
INSERT INTO voiceboxes(customer_id, context, mailbox, password) VALUES ('101', 'default', '103', '1234');<br />
<br />
10) заливаем конфиг kamailio. меняем localhost на ip удаленного mysql и правим логин/пароли<br />
<br />
<br />
<pre class="code c" style="background-color: #eef3f8; border: 1px dashed rgb(140, 172, 187); font-size: 12px; margin-bottom: 1em; overflow: auto; padding: 0.5em; text-align: justify;"><span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!KAMAILIO</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!define WITH_MYSQL</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!define WITH_AUTH</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!define WITH_USRLOCDB</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!define WITH_ASTERISK</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># $Id$</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Kamailio (OpenSER) SIP Server v3.0 - basic configuration script</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - web: http://www.kamailio.org</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - git: http://sip-router.org</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Direct your questions about this file to: <users@lists.kamailio.org></span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Refer to the Core CookBook at http://www.kamailio.org/dokuwiki/doku.php</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># for an explanation of possible statements, functions and parameters.</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Several features can be enabled using '#!define WITH_FEATURE' directives:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># *** To run in debug mode: </span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - define WITH_DEBUG</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># *** To enable mysql: </span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - define WITH_MYSQL</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># *** To enable authentication execute:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - enable mysql</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - define WITH_AUTH</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - add users using 'kamctl'</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># *** To enable persistent user location execute:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - enable mysql</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - define WITH_USRLOCDB</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># *** To enable presence server execute:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - enable mysql</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - define WITH_PRESENCE</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># *** To enable nat traversal execute:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - define WITH_NAT</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - install RTPProxy: http://www.rtpproxy.org</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - start RTPProxy:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># rtpproxy -l _your_public_ip_ -s udp:localhost:7722</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># *** To enable PSTN gateway routing execute:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - define WITH_PSTN</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - set the value of pstn.gw_ip</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - check route[PSTN] for regexp routing condition</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># *** To enhance accounting execute:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - enable mysql</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - define WITH_ACCDB</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - add following columns to database</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef ACCDB_COMMENT</span>
ALTER TABLE acc ADD COLUMN src_user VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">64</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE acc ADD COLUMN src_domain VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">128</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">64</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE acc ADD COLUMN dst_user VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">64</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE acc ADD COLUMN dst_domain VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">128</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">64</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">128</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">64</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">64</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">128</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> NOT NULL DEFAULT <span class="st0" style="color: red; margin: 0px; padding: 0px;">''</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">####### Global Parameters #########</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_DEBUG</span>
debug<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">4</span>
log_stderror<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span>yes
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!else</span>
debug<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">2</span>
log_stderror<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span>no
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
memdbg<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">5</span>
memlog<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">5</span>
log_facility<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span>LOG_LOCAL0
fork<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span>yes
children<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">4</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment the next line to disable TCP (default on) */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#disable_tcp=yes</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment the next line to disable the auto discovery of local aliases
based on revers DNS on IPs (default on) */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#auto_aliases=no</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment and configure the following line if you want Kamailio to
bind on a specific interface/port/proto (default bind on all available) */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#listen=udp:10.0.0.10:5060</span>
listen<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span>udp<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">:</span>192.168.178.23
port<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">5060</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">####### Custom Parameters #########</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># These parameters can be modified runtime via RPC interface</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - see the documentation of 'cfg_rpc' module.</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Format: group.id = value 'desc' description</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Access: $sel(cfg_get.group.id) or @cfg_get.group.id</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_PSTN</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># PSTN GW Routing</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - pstn.gw_ip: valid IP or hostname as string value, example:</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># pstn.gw_ip = "10.0.0.101" desc "My PSTN GW Address"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - by default is empty to avoid misrouting</span>
pstn.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">gw_ip</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span> desc <span class="st0" style="color: red; margin: 0px; padding: 0px;">"PSTN GW Address"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
asterisk.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindip</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"192.168.178.23"</span> desc <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Asterisk IP Address"</span>
asterisk.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindport</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"5080"</span> desc <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Asterisk Port"</span>
kamailio.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindip</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"192.168.178.23"</span> desc <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Kamailio IP Address"</span>
kamailio.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindport</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"5060"</span> desc <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Kamailio Port"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">####### Modules Section ########</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#set module path</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># mpath="/usr/local/lib/kamailio/modules_k/:/usr/local/lib/kamailio/modules/"</span>
mpath<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"modules_k/:modules/"</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment next line for MySQL DB support */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_MYSQL</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_mysql.so"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"mi_fifo.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"kex.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"tm.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"tmx.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sl.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"rr.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"pv.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"maxfwd.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"usrloc.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"registrar.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"textops.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"uri_db.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"siputils.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"xlog.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sanity.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"ctl.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"mi_rpc.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc.so"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_AUTH</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth_db.so"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment next line for aliases support
NOTE: a DB (like db_mysql) module must be also loaded */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#loadmodule "alias_db.so"</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment next line for multi-domain support
NOTE: a DB (like db_mysql) module must be also loaded
NOTE: be sure and enable multi-domain support in all used modules
(see "multi-module params" section ) */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#loadmodule "domain.so"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_PRESENCE</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"presence.so"</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"presence_xml.so"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_NAT</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"nathelper.so"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
loadmodule <span class="st0" style="color: red; margin: 0px; padding: 0px;">"uac.so"</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----------------- setting module-specific parameters ---------------</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- mi_fifo params -----</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"mi_fifo"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"fifo_name"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"/tmp/kamailio_fifo"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- rr params -----</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># add value to ;lr param to cope with most of the UAs</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"rr"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"enable_full_lr"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># do not append from tag to the RR (no need for this script)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"rr"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"append_fromtag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!else</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"rr"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"append_fromtag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">0</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- rr params -----</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"registrar"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"method_filtering"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment the next line to disable parallel forking via location */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># modparam("registrar", "append_branches", 0)</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment the next line not to allow more than 10 contacts per AOR */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#modparam("registrar", "max_contacts", 10)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- uri_db params -----</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* by default we disable the DB support in the module as we do not need it
in this configuration */</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"uri_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"use_uri_table"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">0</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"uri_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_url"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- acc params -----</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* what sepcial events should be accounted ? */</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"early_media"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"report_ack"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"report_cancels"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* by default ww do not adjust the direct of the sequential requests.
if you enable this parameter, be sure the enable "append_fromtag"
in "rr" module */</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"detect_direction"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">0</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* account triggers (flags) */</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"failed_transaction_flag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">3</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"log_flag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"log_missed_flag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"log_extra"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span>
<span class="st0" style="color: red; margin: 0px; padding: 0px;">"src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* enhanced DB accounting */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ACCDB</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_flag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_missed_flag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_url"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span>
<span class="st0" style="color: red; margin: 0px; padding: 0px;">"mysql://openser:openserrw@localhost/openser"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"acc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_extra"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span>
<span class="st0" style="color: red; margin: 0px; padding: 0px;">"src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- usrloc params -----</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* enable DB persistency for location entries */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_USRLOCDB</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"usrloc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_mode"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"usrloc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_url"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span>
<span class="st0" style="color: red; margin: 0px; padding: 0px;">"mysql://openser:openserrw@localhost/openser"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- auth_db params -----</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* enable the DB based authentication */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_AUTH</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"calculate_ha1"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> yes<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"user_column"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"username"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"password_column"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sippasswd"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_url"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span>
<span class="st0" style="color: red; margin: 0px; padding: 0px;">"mysql://asterisk:asterisk_password@localhost/asterisk"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!else</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"password_column"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"password"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_url"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span>
<span class="st0" style="color: red; margin: 0px; padding: 0px;">"mysql://openser:openserrw@localhost/openser"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"auth_db"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"load_credentials"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- alias_db params -----</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment the following lines if you want to enable the DB based
aliases */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#modparam("alias_db", "db_url",</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># "mysql://openser:openserrw@localhost/openser")</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- domain params -----</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment the following lines to enable multi-domain detection
support */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#modparam("domain", "db_url",</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># "mysql://openser:openserrw@localhost/openser")</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#modparam("domain", "db_mode", 1) # Use caching</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- multi-module params -----</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* uncomment the following line if you want to enable multi-domain support
in the modules (dafault off) */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- presence params -----</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* enable presence server support */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_PRESENCE</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"presence|presence_xml"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"db_url"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span>
<span class="st0" style="color: red; margin: 0px; padding: 0px;">"mysql://openser:openserrw@localhost/openser"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"presence_xml"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"force_active"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"presence"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"server_address"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sip:10.0.0.10:5060"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ----- nathelper -----</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_NAT</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"nathelper"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"rtpproxy_sock"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"udp:127.0.0.1:7722"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"nathelper"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"natping_interval"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">30</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"nathelper"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"ping_nated_only"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"nathelper"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sipping_bflag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">7</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"nathelper"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sipping_from"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sip:pinger@kamailio.org"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"registrar|nathelper"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"received_avp"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"$avp(i:80)"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
modparam<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"usrloc"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"nat_bflag"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">6</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">####### Routing Logic ########</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># main request routing logic</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>mf_process_maxfwd_header<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"10"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"483"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Too Many Hops"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>sanity_check<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"1511"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"7"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
xlog<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Malformed SIP message from $si:$sp<span class="es1" style="margin: 0px; padding: 0px;">\n</span>"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># NAT detection</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>NAT<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>has_totag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># sequential request withing a dialog should</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># take the path determined by record-routing</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>loose_route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"BYE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
setflag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span> <span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># do accounting ...</span>
setflag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">3</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span> <span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ... even if the transaction fails</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>RELAY<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span> <span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"SUBSCRIBE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">&&</span> uri <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">==</span> myself<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># in-dialog subscribe requests</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>PRESENCE<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span> is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"ACK"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span> t_check_trans<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># non loose-route, but stateful ACK; must be an ACK after a 487</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># or e.g. 404 from upstream server</span>
t_relay<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span> <span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># ACK without matching transaction ... ignore and discard.\n");</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"404"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Not here"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#initial requests</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># CANCEL processing</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"CANCEL"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>t_check_trans<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
t_relay<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
t_check_trans<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># authentication</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>AUTH<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># record routing for dialog forming requests (in case they are routed)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - remove preloaded route headers</span>
remove_hf<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Route"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"INVITE|SUBSCRIBE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
record_route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># account only INVITEs</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"INVITE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
setflag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span> <span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># do accounting</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>uri<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">==</span>myself<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* replace with following line if multi-domain support is used */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">##if (!is_uri_host_local())</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
append_hf<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"P-hint: outbound<span class="es1" style="margin: 0px; padding: 0px;">\r</span><span class="es1" style="margin: 0px; padding: 0px;">\n</span>"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>RELAY<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># requests for my domain</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span> is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"PUBLISH|SUBSCRIBE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>PRESENCE<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"REGISTER"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>isflagset<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">5</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
setbflag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"6"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># uncomment next line to do SIP NAT pinging </span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">## setbflag("7");</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>save<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"location"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
sl_reply_error<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>REGFWD<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$rU<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">==</span>$null<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># request with no Username in RURI</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"484"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Address Incomplete"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>PSTN<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># apply DB based aliases (uncomment to enable)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">##alias_db_lookup("dbaliases");</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"INVITE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># non-INVITE request are routed directly by Kamailio</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>lookup<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"location"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">switch</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$rc<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">case</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">-</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">:</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">case</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">-</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">3</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">:</span>
t_newtran<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
t_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"404"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Not Found"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">case</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">-</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">:</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"405"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Method Not Allowed"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span> <span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* end non-INVITE test */</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># only INVITE from now on</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>FROMASTERISK<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># coming from Asterisk - do location lookup</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>lookup<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"location"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">switch</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$rc<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">case</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">-</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">:</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">case</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">-</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">3</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">:</span>
t_newtran<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
t_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"404"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Not Found"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">case</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">-</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">:</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"405"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Method Not Allowed"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span> <span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># new call - send to Asterisk</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>TOASTERISK<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># when routing via usrloc, log the missed calls also</span>
setflag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">2</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>RELAY<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>RELAY<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_NAT</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>check_route_param<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"nat=yes"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
setbflag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"6"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>isflagset<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">5</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">||</span> isbflagset<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"6"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>RTPPROXY<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="coMULTI" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">/* example how to enable some additional event routes */</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"INVITE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#t_on_branch("BRANCH_ONE");</span>
t_on_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"REPLY_ONE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
t_on_failure<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"FAIL_ONE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>t_relay<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
sl_reply_error<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Presence server route</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>PRESENCE<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_PRESENCE</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>t_newtran<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
sl_reply_error<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"PUBLISH"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
handle_publish<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
t_release<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span> is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"SUBSCRIBE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
handle_subscribe<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
t_release<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># if presence enabled, this part will not be executed</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"PUBLISH"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">||</span> $rU<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">==</span>$null<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"404"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Not here"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Authentication route</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>AUTH<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_AUTH</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># do not auth traffic from Asterisk - trusted!</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>FROMASTERISK<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"REGISTER"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># authenticate the REGISTER requests (uncomment to enable auth)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>www_authorize<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sipusers"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!else</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>www_authorize<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"subscriber"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
www_challenge<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"0"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$au<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!=</span>$tU<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"403"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Forbidden auth ID"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span> <span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># authenticate if from local subscriber (uncomment to enable auth)</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>from_uri<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">==</span>myself<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>proxy_authorize<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sipusers"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!else</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>proxy_authorize<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"subscriber"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
proxy_challenge<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">""</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"0"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"PUBLISH"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$au<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!=</span>$tU<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"403"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Forbidden auth ID"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span> <span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$au<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!=</span>$fU<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"403"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Forbidden auth ID"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
consume_credentials<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># caller authenticated</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Caller NAT detection route</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>NAT<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_NAT</span>
force_rport<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>nat_uac_test<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"19"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>method<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">==</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"REGISTER"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
fix_nated_register<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span> <span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
fix_nated_contact<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
setflag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">5</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># RTPProxy control</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>RTPPROXY<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_NAT</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"BYE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
unforce_rtp_proxy<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span> <span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span> <span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"INVITE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
force_rtp_proxy<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>has_totag<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> add_rr_param<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">";nat=yes"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># PSTN GW routing</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>PSTN<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_PSTN</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># check if PSTN GW IP is defined</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>strempty<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">pstn</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">gw_ip</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
xlog<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"SCRIPT: PSTN rotuing enabled but pstn.gw_ip not defined<span class="es1" style="margin: 0px; padding: 0px;">\n</span>"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># route to PSTN dialed numbers starting with '+' or '00'</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># (international format)</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># - update the condition to match your dialing rules for PSTN routing</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$rU<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span>~<span class="st0" style="color: red; margin: 0px; padding: 0px;">"^(\+|00)[1-9][0-9]{3,20}$"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># only local users allowed to call</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>from_uri<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!=</span>myself<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
sl_send_reply<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"403"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">,</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Not Allowed"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
$ru <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sip:"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $rU <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"@"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">pstn</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">gw_ip</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>RELAY<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Test if coming from Asterisk</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>FROMASTERISK<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$si<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">==</span>$sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">asterisk</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindip</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">&&</span> $sp<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">==</span>$sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">asterisk</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindport</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span> <span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">-</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">1</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Send to Asterisk</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>TOASTERISK<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
$du <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"sip:"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">asterisk</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindip</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">":"</span>
<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">asterisk</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindport</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>RELAY<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Forward REGISTER to Asterisk</span>
route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>REGFWD<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"REGISTER"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">return</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
$var<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>rip<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> $sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">asterisk</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindip</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
$uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"REGISTER"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
$uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>ruri<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"sip:"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $var<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>rip<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">":"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">asterisk</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindport</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
$uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>furi<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"sip:"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $au <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"@"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $var<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>rip<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
$uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>turi<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"sip:"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $au <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"@"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $var<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>rip<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
$uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>hdrs<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"Contact: <sip:"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $au <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"@"</span>
<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">kamailio</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindip</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">":"</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>cfg_get.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">kamailio</span>.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindport</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"><span class="es1" style="margin: 0px; padding: 0px;">\r</span><span class="es1" style="margin: 0px; padding: 0px;">\n</span>"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>$sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>contact.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">expires</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">!=</span> $null<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
$uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>hdrs<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> $uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>hdrs<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Expires: "</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $sel<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>contact.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">expires</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"<span class="es1" style="margin: 0px; padding: 0px;">\r</span><span class="es1" style="margin: 0px; padding: 0px;">\n</span>"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">else</span>
$uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>hdrs<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> $uac_req<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>hdrs<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Expires: "</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> $hdr<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>Expires<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">+</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"<span class="es1" style="margin: 0px; padding: 0px;">\r</span><span class="es1" style="margin: 0px; padding: 0px;">\n</span>"</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
uac_req_send<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Sample branch router</span>
branch_route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>BRANCH_ONE<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
xdbg<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"new branch at $ru<span class="es1" style="margin: 0px; padding: 0px;">\n</span>"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Sample onreply route</span>
onreply_route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>REPLY_ONE<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
xdbg<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"incoming reply<span class="es1" style="margin: 0px; padding: 0px;">\n</span>"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_NAT</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>isflagset<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">5</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">||</span> isbflagset<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"6"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">&&</span> status<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span>~<span class="st0" style="color: red; margin: 0px; padding: 0px;">"(183)|(2[0-9][0-9])"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
force_rtp_proxy<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>isbflagset<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"6"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
fix_nated_contact<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># Sample failure route</span>
failure_route<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">[</span>FAIL_ONE<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">]</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_NAT</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>is_method<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"INVITE"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span>
<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">&&</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>isbflagset<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="st0" style="color: red; margin: 0px; padding: 0px;">"6"</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">||</span> isflagset<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="nu0" style="color: #cc66cc; margin: 0px; padding: 0px;">5</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
unforce_rtp_proxy<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!endif</span>
<span class="kw1" style="color: #b1b100; margin: 0px; padding: 0px;">if</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span>t_is_canceled<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">(</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span><span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">)</span> <span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">{</span>
exit<span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">;</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># uncomment the following lines if you want to block client </span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># redirect based on 3xx replies.</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">##if (t_check_status("3[0-9][0-9]")) {</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">##t_reply("404","Not found");</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">## exit;</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">##}</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># uncomment the following lines if you want to redirect the failed </span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;"># calls to a different new destination</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">##if (t_check_status("486|408")) {</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">## sethostport("192.168.2.100:5060");</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">## append_branch();</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">## # do not set the missed call flag again</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">## t_relay();</span>
<span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">##}</span>
<span class="br0" style="color: #66cc66; margin: 0px; padding: 0px;">}</span></pre>
<br />
11) Стоит проверить, что данные в конфиге kamailio раздела<br />
<br />
<pre class="code c" style="background-color: #eef3f8; border: 1px dashed rgb(140, 172, 187); font-size: 12px; margin-bottom: 1em; overflow: auto; padding: 0.5em; text-align: justify;"><span class="co2" style="color: grey; font-style: italic; margin: 0px; padding: 0px;">#!ifdef WITH_ASTERISK</span>
asterisk.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindip</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"192.168.178.23"</span> desc <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Asterisk IP Address"</span>
asterisk.<span class="me1" style="color: #006600; margin: 0px; padding: 0px;">bindport</span> <span class="sy0" style="color: #66cc66; margin: 0px; padding: 0px;">=</span> <span class="st0" style="color: red; margin: 0px; padding: 0px;">"5080"</span> desc <span class="st0" style="color: red; margin: 0px; padding: 0px;">"Asterisk Port"</span>
</pre>
<br />
совпадают с настройками sip.conf астериска.<br />
<br />
12) Теперь можно логинится sip клиентом хоть на kamailio, хоть на asterisk.<br />
<br />
13) Правим диалпланы и конфиги kamailio и asterisk под свои задачи<br />
<br /></div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com0tag:blogger.com,1999:blog-6988488822576934046.post-8095598932984119632011-11-26T21:59:00.001-08:002015-05-08T00:46:02.837-07:00Локальный кэш ripe<div dir="ltr" style="text-align: left;" trbidi="on">
Не мое. Источник ниже.<br />
<h2 style="background-color: white; color: #999999; font-family: Georgia, serif; font-size: 18px; line-height: 25px; margin-bottom: 20px; margin-left: 0px; margin-right: 0px; margin-top: 20px;">
Локальный кэш ripe</h2>
<h4 style="background-color: white; color: #999999; font-family: Verdana, Helvetica, sans-serif; font-size: 10px; line-height: 15px;">
<a href="http://skipero.livejournal.com/17406.html">http://skipero.livejournal.com/17406.html</a></h4>
<div class="entry-item" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 12px; line-height: 15px; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 15px;">
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Потребовалсь мне найти список всех сетей, подключенных к интернету, что оказалось сложной задачкой, на которую я потратил целую неделю и чтобы сберечь чужое время решил потратить час на эту статью.</div>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Итак, есть различные базы данных IP-Geolocation (вроде <a href="http://www.maxmind.com/app/geolitecountry" lang="en" rel="nofollow" style="color: #00b4ff;">Maxmind</a>, <a href="http://www.ip2location.com/" rel="nofollow" style="color: #00b4ff;">ip2location</a> и подобных), которые позволяют выяснить сеть (название сети) по ip-адресу, но иногда мне нужно еще определить номер автономной системы (см. <a href="http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BD%D0%BE%D0%BC%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%28%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%29" rel="nofollow" style="color: #00b4ff;">Автомная система</a> : <abbr title="Autonomous system">AS</abbr>). Объясню почему...</div>
<h3>
Выделение и назначение блоков ip-адресов</h3>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Обычно блоки ip-адресов <a href="http://ru.wikipedia.org/wiki/IANA" rel="nofollow" style="color: #00b4ff;">IANA</a>, вернее c 1998 года <a href="http://ru.wikipedia.org/wiki/Regional_Internet_Registry" rel="nofollow" style="color: #00b4ff;">региональный регистратор</a> (RIR) этой организации (в случае с Европой и Россией — <a href="http://ripe.net/" rel="nofollow" style="color: #00b4ff;">RIPE</a>), <dfn title="en: allocate">выделяет</dfn> членской организации —<a href="http://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80" rel="nofollow" style="color: #00b4ff;">локальному регистатору</a> (сокр.: <abbr title="Local Internet regisgry">LIR</abbr>). Такие блоки имеют тип <abbr title="Provider Aggregatable address space">PA</abbr> — Proivder Aggregatabled : выделенные провайдеру. Сами блоки IP-адресов бесплатны, но быть LIR-ом — значит платить членский взнос (около 2000 USD в год).</div>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Можно получить независимые от провайдера (LIR-a) адреса — <abbr title="Provider Independent Address Space">PI</abbr>. Их выделяют организации, не желающей быть LIR-ом за единоразовую оплату. Выгода от таких адресов — можно сменить интеренет-провайдера, но ip-адреса останутся прежними или же подключиться к нескольким провайдером (для экономии или надежности).</div>
<br />
<br />
<aside>В таких странах как Бразилия и Мексика есть национальные регистраторы (NIR), к которым следует обращаться LIR-ам из этих стран, LACNIC не работает напрямую с ними. Может есть и другие национальные регистраторы.</aside><br />
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Каждый, кому RIR выделяет блоки ip-адресов PA или PI, должен иметь свою автономную систему (AS), но провайдеры потом распределяют свои ip-адреса клиентам. По-правилам, перед тем как назначить клиенту некий блок ip-адресов (prefix - т.н. префикс в терминалогии <a href="http://ru.wikipedia.org/wiki/Border_Gateway_Protocol" rel="nofollow" style="color: #00b4ff;">BGP</a>), провайдер пишет RIR-у заявку, в которой кратко описывает предназначение этой сети. Когда заявка принята, RIR переводит этот блок ip-адресов в статус <em>assigned</em> (назначено). Когда все адреса LIR-a имеют статус assigned он может попросить RIR выделить дополнительные адреса.</div>
Пример: <a href="http://bgp.he.net/AS29124#_prefixes" rel="nofollow" style="color: #00b4ff;">список префиксов провайдера</a><br />
<h3>
Список всех сетей Интернета</h3>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Теперь уже понятно зачем нужен список всех сетей и автономных систем, если мы хотим хотим узнать что такой-то ip-адрес принадлежит сети банка A-BANK, а другой корпорации B-CORP, хотя они обслуживаются одним провайдером в пределах одной автономной системы.</div>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Вообще-то, теоретически можно сделать свою базу данных IP-to-Location. Список сетей (префиков) и автономных систем можно скачать у RIR-ов, но в открытом доступе они есть только у RIPE: <a href="ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inetnum.gz" style="color: #00b4ff;">сети IPv4</a>, <a href="ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inet6num.gz" style="color: #00b4ff;">сети IPv6</a>. Это большие (inetnum распакованный весит более 2Гб) текстовые файлы (данные в формате <a href="http://en.wikipedia.org/wiki/RPSL" rel="nofollow" style="color: #00b4ff;">RPSL</a>), которые ну никак невозможно вставить в базу данных — нужно <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7" rel="nofollow" style="color: #00b4ff;">парсить</a>. Писать парсер — лень, готовых — нет. Но у RIPE есть такая софтина — <a href="ftp://ftp.ripe.net/ripe/dbase/software/whoisserver-latest.tar.gz" style="color: #00b4ff;">WhoisServer</a>, которая умеет это делать. Кстати, именно на этой программе работают все сервисы whois у RIR-ов. Чтобы этот сервер установить, мне потребовалась неделя.</div>
<br />
<br />
<aside>P.S. Раньше можно было скачать целиком (en: <dfn>in bulk</dfn>) базу whois (в формате RPSL) с ftp APNIC и ARIN, но в настоящий момент они требуют письменного заявления: <a href="http://www.apnic.net/apnic-info/whois_search/using-whois/network-resources" rel="nofollow" style="color: #00b4ff;">APNIC</a>, <a href="https://www.arin.net/resources/request/bulkwhois.html" rel="nofollow" style="color: #00b4ff;">AIRN</a>, <a href="http://www.afrinic.net/rs/bulk-whois.htm" rel="nofollow" style="color: #00b4ff;">AfriNIC</a>. LACNIC, насколько я знаю, её не отдаёт вообще, так что проще, все-таки, купить готовую базу, ну ... или где-нибудь через торрент скачать.</aside><br />
<h3>
Установка WhoisServer (v.3) от RIPE</h3>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
WhoisServer идет в исходных кодах (на языках C и Perl), т.е. его придется компилировать и только после этого устанавливать. Ах, да! Он под Linux, надеюсь тебя это не пугает.</div>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Основная проблема возникла именно с компиляцией, но в результате многодневных мучений установил на Ubuntu (пробовал также и на CentOS, но категорически не компилировался - выдавал неустранимую ошибку при компиляции модуля c-client imap).</div>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Требования для компиляции:</div>
<ul>
<li>CNU C Compiler gcc (2.95.2)</li>
<li>GNU Make (3.79.1)</li>
<li>glib (2.0)</li>
<li>libxml2 (2.4.26)</li>
<li>libxslt (1.0.22)</li>
<li>MySQL Server + Client libraries (3.23.54)</li>
<li>the c-client library, from the IMAP distribution</li>
<li>GNU Privacy Guard (1.0.4 to 1.2.2).</li>
<li>Perl (5.6.0) (+ Net::Telnet module)</li>
<li>Java compiler and runtime (устанавливать надо JDK, а не Runtime - в нем нет компилятора javac)</li>
</ul>
<div style="margin-bottom: 5px; margin-left: 5px; margin-right: 5px; margin-top: 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;">
Версии должны быть не позднее указанных. Процесс установки на Ubuntu и, наверное, на Debian:</div>
<ol>
<li>Распокавать в папку, в моем случае на рабочий стол в папку whoissrv-src (~/Desktop/whoissrv-src) и запустить команду в терминале: <kbd>perl Desktop/whoissrv-src/Install.PL --help</kbd> (предполагается что вы в домшней директории, если нет то прейди в нее: <kbd>cd ~</kbd>). Получишь окно справки.</li>
<li>Создай пользователя в MySQL cо всеми правами (grant all on *.* to whois@'localhost' identified by 'whoispass' with grant option)</li>
<li>В терминале: <kbd>perl Desktop/whoissrv-src/Install.PL --sqluse<wbr></wbr>r=whois --sqlpass=whoispass --dbname=whois --prefix=/usr/local/whoisd --verbose --debug</kbd>, скорее всего выдаест, что нет модуля NetDelCheck, скачиваем его<a href="ftp://ftp.ripe.net/ripe/tools/Net-DelCheck-latest.tar.gz" style="color: #00b4ff;">ftp.ripe.net/ripe/tools/Net-DelCheck-lat<wbr></wbr>est.tar.gz</a>, распаковывем (например в Desktop/NetDelCheck) и запускаем <kbd>perl ~/Desktop/NetDelCheck/Makefile.PL</kbd>, если не хватает каких-то модулей, то запускаем команду cpan и уже в CPAN команду типа<kbd>install Net::DNS::SEC</kbd> или чего там будет нехватать. Еще может выдать ошибку с dirname - это значит скрипт не смог найти Java-компилятор javac. Если JDK уже установлен - открываем Install.PL и ищем по "$java", в этой строке находим "locate javac" и меняем на "which javac".</li>
<li>Теперь, когда все перловые модули есть,повторяем команду, но добавим еще параметр --for-development, без него-то компилироваться не будет, т.к. компилятор сыпет предупреждениями из-за которых и не компилируется, т.к. у компилятора CFLAG высокий. Этот параметр его уменьшает, хотя можно в скрипте его найти и поменять. Итак, запускаем <kbd>perl Desktop/whoissrv-src/Install.PL --sqluser=whois --sqlpass=whoispass --dbname=whois --prefix=/usr/local/whoisd --verbose --debug --for-development</kbd></li>
<li>Если все установилось - поздравляю, нет - ройте сами.</li>
<li>В терминале: <kbd>gksu nautilus</kbd> — это откроет файл-манаджер с правами root, т.к. нужно будет править файлы в /usr/local/whoisd</li>
<li>Открываем файл /usr/local/whoisd/conf/sources.config ищем строку типа SOURCE TEST или SOURCE SAMPLE или что-то похожее, переименовываем в SOURCE PREFIXES.</li>
<li>В диркеторию /usrl/local/whoisd/var/tmp/load создаем папку PREFIXES</li>
<li>В папку PREFIXES копируем файл <a href="ftp://ftp.ripe.net/ripe/dbase/RIPE.CURRENTSERIAL" style="color: #00b4ff;">RIPE.CURRENTSERIAL</a> и переименовываем в PREFIXES.CURRENTSERIAL</li>
<li>В PREFIXES копируем <a href="ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inetnum.gz" style="color: #00b4ff;">ripe.db.inetnum.gz</a> и <a href="ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inet6num.gz" style="color: #00b4ff;">ripe.db.inet6num.gz</a></li>
<li>В файле /usr/local/whoisd/bin/make_db находим строку LIST=${LIST:-$OBJDIR/sabmle.db.gz} и меняем на LIST=${LIST:-$OBJDIR/*.gz}, т.е. мы хотим загузить в базу данных все файлы gz в папке PREFIXES</li>
<li>В терминале: <kbd>/usr/local/whoisd/bin/make_db -c /usr/local/whoisd/conf/ripe.config -s PREFIXES -2</kbd>, если выдает что-то <code>command not found</code>, то устанавливаем необходимые пакеты через команду <kbd>apt-get</kbd></li>
<li>Ждем несколько часов и вуаля!!</li>
</ol>
<br />
<br />
<aside><h3>
Немного о статусах префиксов (inetnum) и автономных систем (as)</h3>
<dl>
<dt>Allocated PA</dt>
<dd>Выделен LIR-у (но еще не используется)</dd>
<dt>Allocated PI</dt>
<dd>Выделен конечному пользователю, независимо от провайдера</dd>
<dt>Assigned PA</dt>
<dd>Префикс назначен конечному пользователю провайдером и используется.</dd>
<dt>Assigned PI</dt>
<dd>Конечный пользователь использует выделенный ему префикс</dd>
<dt>Legacy</dt>
<dd>устаревший ресурс, созданный еще <time datetime="1997-12-28">до образования RIR-ов (28 декабря 1997 г.)</time>, когда IANA бала главным регистратором.</dd></dl>
</aside></div>
</div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com0tag:blogger.com,1999:blog-6988488822576934046.post-60675779097519113552011-11-23T23:48:00.001-08:002012-09-25T06:11:03.862-07:00Немного про коды завершений PPP сессий<div dir="ltr" style="text-align: left;" trbidi="on">
<a class="moz-txt-link-freetext" href="http://www.cisco.com/en/US/docs/ios/sec_user_services/configuration/guide/sec_vsa_rad_discnct.html">http://www.cisco.com/en/US/docs/ios/sec_user_services/configuration/guide/sec_vsa_rad_discnct.html</a><br />
<br />
RADIUS Disconnect-Cause Attribute Values<br />
<br />
<br />
<b>PPP-Remote-Terminate</b> =- PPP received a Terminate Request from
remote end.<br />
<br />
AC получает PPP Termination пакет от хоста (нормальное завершение
сессии)<br />
<br />
PPP can terminate the link at any time. This might happen because
of<br />
the loss of carrier, authentication failure, link quality
failure,<br />
the expiration of an idle-period timer, or the administrative
closing<br />
of the link.<br />
<br />
<big><b>User-Ends-Session</b></big> - User terminates a session.<br />
<br />
AC получает PADT от клиента. Тоже нормальное завершение сессии.<br />
<br />
The PPPoE Active Discovery Terminate (PADT) packet This packet may
be sent anytime after a session is established to indicate that a
PPPoE session has been terminated. It may be sent by either the Host
or the Access Concentrator. When a PADT is received, no further PPP
traffic is allowed to be sent using that session. Even normal PPP
termination packets MUST NOT be sent after sending or receiving a
PADT. A PPP peer SHOULD use the PPP protocol itself to bring down a
PPPoE session, but the PADT MAY be used when PPP can not be used.<br />
<br />
Если честно, я этот код получить так и не смог, но завершений сессий с таким кодом примерно 1/3.<br />
<br />
<b><big><big>Idle-Timeout</big></big></b> - Timeout waiting for user
input.<br />
отсутствие активности сессии<br />
<br />
<big><b>Local-Admin-Disconnect </b></big>- Administrative
disconnect.<br />
Сессия принудительно прервана со стороны AC (послан PADT)<br />
<br />
<big><b>Session-Timeout </b></big>- Session timed out<br />
вышла максимальная продолжительность сессии.<br />
<br />
<big><b>Foreign-Host-Close-TCP</b></big> - TCP connection has been
closed<br />
Вот это сессия аварийно оборвалась (линк упал, хост аварийно
перезагрузился, еще что то случилось)<br />
<br />
<b><big>Failed-PPP-LCP-Negotiation</big></b> - PPP LCP negotiation
failed<br />
Еще до стадии PPP-authentication не дошло и прервалась установка ppp
сессии (LCP не смог перейти в open state и сказал Close). Стороны не
договорились о конфигурации канала, кривые настройки хоста скорее
всего.<br />
<br />
<b>LCP negotiation timedout - </b>the LNS did not receive any LCP packets from the LAC.<br />
Инициатор не отправил LCP пакетов серверу.<br />
<br />
<big><b>Failed-PPP-CHAP-Auth</b></big> - PPP CHAP authentication
failed.<br />
отлуп по authentication (имя/пароль)</div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com0tag:blogger.com,1999:blog-6988488822576934046.post-6823796688800878082011-11-22T09:21:00.001-08:002014-01-17T14:26:26.162-08:00CentOS (hints)<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Проблемы с доступом до серверов на CentOS снаружи из за Slinux и iptable</b>s<br />
<br />
# sestatus<br />
SELinux status: enabled<br />
SELinuxfs mount: /selinux<br />
Current mode: enforcing<br />
Mode from config file: enforcing<br />
Policy version: 24<br />
Policy from config file: targeted<br />
<br />
#getsebool -a - варианты политик SeLinux<br />
<br />
<pre>/etc/selinux/targeted/booleans - оно же в файле</pre>
<br />
<span class="Apple-style-span" style="font-family: monospace; white-space: pre;">setsebool -P httpd_can_network_connect on - установить значение для политики SeLinux</span><br />
<br />
отключение:<br />
<span class="Apple-style-span" style="font-family: monospace; white-space: pre;">cat /etc/selinux/config</span><br />
<pre>SELINUX=disabled
SELINUXTYPE=targeted
SETLOCALDEFS=0</pre>
<br />
<span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px;">getenforce</span><br />
<br />
<br />
<br />
<b>iptables </b><br />
выключить/включить:<br />
/etc/init.d/iptables stop/start<br />
<br />
<br />
<b>Легко вычисляем dependencies для пакетов</b><br />
<br />
ldd - print shared library dependencies<br />
<br />
# ldd skype <br />
linux-gate.so.1 => (0xf77ae000)<br />
libasound.so.2 => /lib/libasound.so.2 (0xf76b2000)<br />
libXv.so.1 => /usr/lib/libXv.so.1 (0xf76ad000)<br />
libXss.so.1 => /usr/lib/libXss.so.1 (0xf76aa000)<br />
librt.so.1 => /lib/librt.so.1 (0xf76a1000)<br />
libQtDBus.so.4 => not found<br />
libQtGui.so.4 => not found<br />
libQtNetwork.so.4 => not found<br />
libQtCore.so.4 => not found<br />
libpthread.so.0 => /lib/libpthread.so.0 (0xf7685000)<br />
libstdc++.so.6 => not found<br />
libm.so.6 => /lib/libm.so.6 (0xf765a000)<br />
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf763c000)<br />
libc.so.6 => /lib/libc.so.6 (0x007eb000)<br />
libdl.so.2 => /lib/libdl.so.2 (0xf7637000)<br />
libX11.so.6 => /usr/lib/libX11.so.6 (0xf74fe000)<br />
libXext.so.6 => /usr/lib/libXext.so.6 (0xf74ed000)<br />
/lib/ld-linux.so.2 (0x007c9000)<br />
libxcb.so.1 => /usr/lib/libxcb.so.1 (0xf74cf000)<br />
libXau.so.6 => /usr/lib/libXau.so.6 (0xf74cc000)<br />
<br />
и ставим недостающие<br />
yum install libQtDBus.so.4 libQtGui.so.4 <br />
Да, yum найдет нужные пакеты прямо так.<br />
<br />
<br />
<b>Полезные репозитории</b>:<br />
<br />
EPOL<br />
rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm<br />
<br />
RPMFORGE<br />
<a href="http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm">rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm</a><br />
<br />
ELREPO<br />
rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm<br />
<br />
CentALT<br />
rpm -Uvh http://centos.alt.ru/pub/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm<br />
<br />
<br />
<b>VPN в Gnome (мало ли пригодится) </b>:<br />
Поставить пакеты из EPOL репозитория:<br />
NetworkManager-openvpn.x86_64 : NetworkManager VPN plugin for OpenVPN<br />
NetworkManager-pptp.x86_64 : NetworkManager VPN plugin for pptp<br />
<br />
<br />
<b>Iptables (подробный мануал):</b><br />
http://www.opennet.ru/docs/RUS/iptables/<br />
<br />
<br />
<b>Предотвращение автоматического обновления пакета:</b><br />
например, пакет pppoe<br />
<code>echo pppoe hold | dpkg —set-selections</code><br />
<br />
<b>Посмотреть timezone</b><br />
zdump -c 2014 /etc/localtime<br />
<br />
<b>Правка timezone без правки zone файла</b><br />
например, делаем ссылку файла локальной зоны на нужную нам.<br />
# ln -sf /usr/share/zoneinfo/Etc/GMT-4 /etc/localtime<br />
<br />
<b>Анализатор логов (logwatch)</b><br />
yum install logwatch.noarch<br />
<br />
настройки etc/logwatch/<br />
<br />
Ежедневный запуск в кроне <br />
<span class="command">ln -s /etc/logwatch/scripts/logwatch.pl /etc/cron.daily/00-logwatch</span> <br />
<span class="command"><br /></span>
Logwatch может анализировать логи на предмет различных событий, отслеживать конкретные сервисы, составлять репорты и отсылать уведомления о странной активности в логах на нужные емайлы.<br />
<br />
<br />
<b>du - estimate file space usage</b><br />
<div>
<br /></div>
<div>
du -h --max-depth=1 /home
<br />
<br />
744K /home/rex<br />
140K /home/vasya<br />
144K /home/slonik<br />
<br />
<b>SCP</b> является частью пакета openssh-clients.<br />
yum install openssh-clients<br />
<br />
<b>ntp</b><br />
yum install ntp ntpdate<br />
<span style="background-color: white; font-family: Verdana, sans-serif; font-size: 12.727272033691406px; line-height: 20px;">ntpdate 0.ru.pool.ntp.org 1.ru.pool.ntp.org 2.ru.pool.ntp.org 3.ru.pool.ntp.org</span><br />
<br />
<br /></div>
</div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com0tag:blogger.com,1999:blog-6988488822576934046.post-8232141158243589912011-11-20T23:12:00.001-08:002015-05-08T00:47:05.470-07:00Asterisk - проблемы и решения<div dir="ltr" style="text-align: left;" trbidi="on">
<b></b><br />
<b>Периодический рестарт астериска.</b><br />
<b><br /></b>
Приходиться делать, т.к выжирает память и начинаются проблемы со звонками<br />
<br />
03 5 * * 1-6 /usr/sbin/asterisk -rx 'restart when convenient' > /dev/null - каждый день в 5:30 отдается команда мягкого рестарта (когда нет активных звонков)<br />
50 6 * * sun /usr/sbin/asterisk -rx 'restart now' > /dev/null - а по воскресениям астер дергается жестко.<br />
<div>
<b><br /></b></div>
<br />
<b>Односторонняя слышимость:</b><br />
<br />
1) Кодеки<br />
2) Не стоит canreinvite=no и канал пытается завязаться напрямую на телефон.<br />
3) firewall или NAT.<br />
4) rtp.conf описывает малый диапазон портов<br />
<br />
Нормальные значения:<br />
/asterisk/rtp.conf<br />
rtpstart=10000<br />
rtpend=50000
<br />
<br />
<br />
<b>Частая перерегистрация большого кол-ва клиентов вызывает рост CPU и возможные проблемы качества связи:</b><br />
<br />
Нормальное значение:<br />
<br />
sip.conf<br />
defaultexpiry=3600<br />
<br />
<br />
<b>Астериск может регулярно крашиться из-за SIP session timers (1.6.x полноценно их не обрабатывает), стоит их отрубить.</b><br />
<br />
sip.conf<br />
;workaround for asteriks crash<br />
session-timers = refuse<br />
<div>
<br /></div>
<div>
<b>Диагностика потоков E1:</b></div>
<div>
<br /></div>
<div>
<div>
e1gw1*CLI> pri show spans</div>
<div>
PRI span 1/0: Provisioned, Up, Active</div>
<div>
PRI span 2/0: Provisioned, Up, Active</div>
<div>
PRI span 3/0: Provisioned, Up, Active</div>
<div>
PRI span 4/0: Provisioned, Up, Active</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div>
e1gw1*CLI> dahdi show status</div>
<div>
Description Alarms IRQ bpviol CRC4 Fra Codi Options LBO</div>
<div>
T4XXP (PCI) Card 0 Span 1 OK 0 0 0 CCS HDB3 CRC4 0 db (CSU)/0-133 feet (DSX-1)</div>
<div>
T4XXP (PCI) Card 0 Span 2 OK 0 0 0 CCS HDB3 CRC4 0 db (CSU)/0-133 feet (DSX-1)</div>
<div>
T4XXP (PCI) Card 0 Span 3 OK 0 0 0 CCS HDB3 CRC4 0 db (CSU)/0-133 feet (DSX-1)</div>
<div>
T4XXP (PCI) Card 0 Span 4 OK 0 0 0 CCS HDB3 CRC4 0 db (CSU)/0-133 feet (DSX-1</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<pre style="background-color: white; color: #333333; font-family: arial; font-size: 14px; line-height: 19px; text-align: justify;"><span style="font-weight: bold;">Red alarm</span>
---</pre>
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px;">Your T1/E1 port will go into red alarm when it maintain</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">synchronization with the remote switch. A red alarm</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">typically indicates either aphysical wiring problem,</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">loss of connectivity, or a framing and/or line-coding</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">mismatch with the remote switch. When your T1/E1 port</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">loses sync, it will transmit a yellow alarm to the remote</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">switch to indicatethat it's having a problem receiving</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">signal from the remore switch.(The easy way to remember</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">this is that the R in red stands for "right here" and "receive".</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">.. indicating that we're having a problem right here</span><br />
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; text-align: justify;">receiving the signal from the remote switch.)</span><br />
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light',HelveticaNeue-Light,'Helvetica Neue',Helvetica,Arial,sans-serif; font-size: 14px; line-height: 19px; margin: 0px; outline-style: none; padding: 0px; text-align: justify;">
<br />
<span style="font-weight: bold;">Yellow alarm or RAI (Remote Alarm Indication)</span><br />
---<br />
Your T1/E1 port will go into yellow alarm when it receives a<br />
signal from the remote switch that the port on that remote<br />
switch is in red alarm.This essentially means that the remote<br />
switch is not able to maintain sync with you, or is not receiving<br />
your transmission. (The easy way to remember this is that t<br />
he Y in yellow stands for "yonder"... indicating that the<br />
remote switch (over yonder) isn't able to see what you're<br />
sending.)<br />
<br />
<span style="font-weight: bold;">Blue alarm or AIS (Alarm Indication Signal)</span><br />
---<br />
Your T1/E1 port will go into blue alarm when it receives all<br />
unframed 1s on all timeslots from the remote switch. This is<br />
a special signal to indicate that the remote switch is<br />
having problems with it's upstream connection.</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div>
pri set debug</div>
</div>
<div>
<br /></div>
<div>
/var/log/asterisk/messages</div>
<div>
<br /></div>
<div>
<b>Шумы, скрип, хрипы:</b></div>
<div>
<br /></div>
<div>
Возможна проблема с потоком E1 (ошибки). Так же качество может страдать из-за высокой загрузки астериска.</div>
<div>
<b><br /></b></div>
<div>
<b>Перевод звонка по условию утилизации определенного кол-ва каналов:</b><br />
<br /></div>
<div>
exten => _31555[15],1,Set(GROUP()=12)<br />
exten => _31555[15],2,GotoIf($[${GROUP_COUNT(12)} > 12]?20) - при более 12 одновременных звонков идем на приоритет 20.<br />
exten => _31555[15],3,Dial(SIP/33000/${EXTEN}) - иначе звоним на 33000<br />
exten => _31555[15],20,Set(GROUP()=16)<br />
exten => _31555[15],21,GotoIf($[${GROUP_COUNT(16)} > 20]?30) - при более 20 одновременных звонков идем на приоритет 30<br />
exten => _31555[15],22,Dial(H323/33333@test/${EXTEN}) - иначе звоним 33333<br />
exten => _31555[15],30,Goto(hangup,0,1)<br />
<div>
<br />
<br />
<b>Ограничение регистрации определенными IP </b></div>
</div>
<div>
<h5>
<span class="Apple-style-span" style="font-size: small; font-weight: normal;">Данная настройка ограничивает возможность регистрации абонентов только с доверенных IP адресов. Задается для каждого extension</span></h5>
<br />
<i>[vasya]<br />
Deny=0.0.0.0/0.0.0.0<br />
Permit=192.168.1.1<br />
Permit=192.168.1.0/24</i><br />
Где 192.168.1.0<i>/24</i> – диапазон адресов, с которых будет проходить регистрация. С других адресов регистрации будут отбиваться астером.<br />
<br />
<b>Не посылать ответ о неверном пароле</b><br />
<br />
По умолчанию Asterisk выдает одну ошибку о неверном пароле для
существующего аккаунта и другую для несуществующего аккаунта. Это удобно для фродеров при подборе пароля:<br />
<br />
Избавляемся от такой дыры:<br />
<i>sip.conf:</i></div>
<div>
<i>
alwaysauthreject = no</i><br />
<br />
<i>Теперь для неверных авторизаций астер говорит </i><i>«401 Unauthorized».</i></div>
<div>
<h5>
<b style="font-size: medium;">Использование Iptables b Fail2ban</b></h5>
<h5>
<b style="font-size: medium;">Fail2ban</b><span class="Apple-style-span" style="font-size: small; font-weight: normal;"> можно настроиь на вылавливание любых событий в логах и создание правил в iptables. Например, блокировать IP с которых приходят запросы с неверными реквизитами</span></h5>
Дальше не мое (взято с хабра):<br />
<br />
Однако, есть несколько неприятных ситуаций, в которых анализ лога
Asterisk не поможет. Например, в случае когда злоумышленник посылает
запрос REGISTER без идентификационных данных – в логе никогда не
появится сообщение «Wrong password».<br />
<br />
Дело в том, что в Asterisk вся SIP UDP сигнализация обрабатывается одним
единственным тредом. Обработка SIP трафика – ресурсоёмкий процесс, 7-8
мегабит мусорных запросов заставляют Asterisk полностью скушать ядро
процессора (например Intel E5335, E5405). Когда ядро полностью съедено,
происходит вытеснение полезного SIP трафика – мусорным. <br />
<br />
Перестают работать DTMF у клиентов использующих SIP INFO. Начинаются
проблемы с установкой новых и завершением существующих соединений. И вот
это – основная угроза которую несут роботы-брутфорсеры.<br />
<br />
Так как же бороться с проблемами о которых нет сообщений в логах? Очень
просто – необходимо сгенерировать сообщение о проблеме самому, тогда всю
остальную часть нашей системы противодействия (например программу
fail2ban) можно будет оставить без изменений. Характерным признаком
брутфорса является большое количество SIPпакетов в единицу времени. <br />
<br />
Посчитать количество пакетов в единицу времени можно с помощью модуля <b>iptables</b>
под названием recent. В интернете есть много примеров как с помощью
модуля recent отбрасывают пакеты приходящие с частотой выше
определённой. Мы, вместо отбрасывания, будем генерировать сообщения для
нашей системы обнаружения атак (например fail2ban). Такой подход имеет
свои недостатки и преимущества. Основным недостатком является, то что на
обработку сообщений будут тратиться ресурсы системы, тогда как
отбрасывание пакета условно бесплатное. <br />
<br />
Преимуществ чуть больше: мы сможем воспользоваться всеми возможностями
нашей системы обнаружения атак, такими как белые списки IP адресов,
единообразный учёт всех обнаруженных атак и так далее.<br />
<br />
<h6>
От теории – к практике! Подготовим скелет из правил iptables:</h6>
<br />
<i>-A INPUT -p udp --dport 5060 -j SCAMBLOCK<br />
-A INPUT -p udp --dport 5060 -m recent --set --name SIP<br />
-A INPUT -p udp --dport 5060 -m recent --update --seconds 2 --hitcount 60 --name SIP \<br />
-j LOG --log-prefix «SIP flood detected: „</i><br />
<br />
Первое правило проверяет наш пакет по цепочке SCAMBLOCK. В данной
цепочке хранятся заблокированные IP адреса, если пакет совпадает с одним
из адресов этой цепочки – он отбрасывается. Если пакет не отброшен, то
во втором правиле он помечается для учёта под именем SIP. Третье правило
считает не превысил ли данный пакет указанное количество (60) за
указанное время (2 секунды). <br />
<br />
Если количество не превышено – правило игнорируется, если превышено –
выполняется действие. В нашем случае в системный лог пишется детальная
информация о пакете начинающаяся со строки «SIP flood detected: «.
Количество пакетов и время считаются отдельно для каждого источника.
Таким образом получается, что мы ограничили скорость приёма SIP пакетов
от каждого незаблокированного IP адреса на уровне 30 пакетов в секунду. <br />
<br />
Для меня данное ограничение является комфортным, с одной стороны все
клиенты, даже самые крупнные, шлют пакеты с одного IP адреса со
скоростями ниже 30 пакетов/с, с другой стороны, 30 пакетов в секунду
практически не отражаютя на работе системы. Возможно, что эту величину
следует подправлять в ту или иную сторону в зависимости от
производительности сервера, количества и типа абонентов.<br />
<br />
В некоторых системах встроенное ограничение модуля <i>recent</i> на параметр <i>hitcount</i>
весьма небольшое, например в CentOS это ограничение составляет 20
пакетов. Если вы попробуете выполнить приведенную выше команду, то
получите следующую ошибку:<br />
<br />
<i>iptables -A INPUT -p udp --dport 5060 -m recent --update --seconds 2 --hitcount 60 --name SIP \<br />
-j LOG --log-prefix “SIP flood detected: „<br />
iptables: Unknown error 4294967295<br />
Или вот так, для 64 битных систем:<br />
iptables -A INPUT -p udp --dport 5060 -m recent --update --seconds 2 --hitcount 60 --name SIP \<br />
-j LOG --log-prefix “SIP flood detected: „<br />
iptables: Unknown error 18446744073709551615</i><br />
<br />
Изменить максимальное ограничение можно передав модулю recent специальный параметр при загрузке. Для этого создадим файл <i>/etc/modprobe.d/ipt.conf</i> и пропишем в нём интересующий нас параметр:<br />
<br />
<i>options ipt_recent ip_pkt_list_tot=60</i><br />
<br />
Будьте осторожны увеличивая данное ограничение, помните что вместе с ним
увеличивается память, требуемая для хранения последних пакетов, а также
количество циклов процессора требуемые на их обработку.<br />
<br />
Ну вот и всё, теперь любой флуд на порт 5060 будет обнаружен с помощью
модуля recent пакета iptables. Сообщение об обнаруженном флуде будет
направлено в системный лог где его сможет увидеть наша любимая система
обнаружения атак (например fail2ban). iptables не ограничивает нас одним
лишь системным логом, действию LOG можно указать уровень (level) и
facility сообщения, а в настройках Syslog перенаправить данные сообщения
в отдельный файл. Сами же сообщения о SIP флуде будут выглядеть вот
так:<br />
<br />
<i>Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT=
MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:7f:08:00 SRC=184.172.62.3
DST=192.168.224.217 LEN=370 TOS=0x00 PREC=0x00 TTL=47 ID=0 DF PROTO=UDP
SPT=5495 DPT=5060 LEN=350<br />
Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT=
MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:7f:08:00 SRC=184.172.62.3
DST=192.168.224.217 LEN=369 TOS=0x00 PREC=0x00 TTL=47 ID=0 DF PROTO=UDP
SPT=5495 DPT=5060 LEN=349<br />
Jun 17 23:54:44 sip2 kernel: SIP flood detected: IN=eth0 OUT= MAC=00:21:5e:db:15:b8:00:0f:34:f8:28:</i></div>
</div>
Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com0tag:blogger.com,1999:blog-6988488822576934046.post-28615012588147925772011-11-18T09:20:00.000-08:002011-11-19T07:03:06.192-08:00SCE - DPI от Cisco и с чем его едят<b>Предисловие</b><br /><br />Т.к никакого другого DPI кроме устройства от Cisco трогать не доводилось, то все описанное справедливо только для моделей 2020 и 8000 этой уважаемой многими (иногда кстати совершенно не заслуженно) конторы.<br />Моя писанина никак не является кратким пересказом существующего мануала от Cisco, а просто старается рассказать о основных принципах работы SCE и некотором опыте работы с ней. Желающие ознакомиться со всем функционалом подробно welcome to sweet journey in manual.<br /><br /><br />Начну с того, что cобственно скрывается за непонятной многим аббревиатурой DPI.<br />DPI - <b>deep packet inspection</b>, устройство предназначенное для "глубокого"(вплоть до L7 модели OSI) анализа проходящих через него пакетов и с возможностью придания этим пакетам определенной QoS-окраски. Т.е на основе анализа протоколов,портов,сигнатур DPI определяет к какому типу трафика принадлежит данный пакет и в зависимости от этого может произвести над пакетом какие то действия: дропнуть, сложить его в канал с определенной полосой, выставить пакету нужный ToS, совершить еще какие то глумления. Причем все это может производиться на уровне отдельного пользователя (<b>subscriber)</b> путем назначения каждому пользователю определенного паккеджа (<b>package</b>).<br /><br />SCE умеет создавать как глобальные для всего устройства контролеры полосы (<b>global bandwidth controllers</b>), так и локальные контроллеры накладываемые на отдельного пользователя (<b>subscriber bandwidth controllers</b>).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeCJBQSJSUZOka1mVS_zBJRTsADNMjgWcyMxfyHoKLY6bUljeBIPFuy-P1Nn1UthqoVE25QHkqdNmQqEXOvr9GRAz3ElgPUakMV1787vcaIMODKRg5FQACrMR567zR7egFnaKpRjaIQ671/s1600/1.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeCJBQSJSUZOka1mVS_zBJRTsADNMjgWcyMxfyHoKLY6bUljeBIPFuy-P1Nn1UthqoVE25QHkqdNmQqEXOvr9GRAz3ElgPUakMV1787vcaIMODKRg5FQACrMR567zR7egFnaKpRjaIQ671/s320/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5676711528251957106" /></a><br />GBC - это логические полосы которые щедрой рукой можно нарезать. Сами по себе они ничего не делают, т.к просто являются трубой для некого гипотетического трафика. Для того чтобы ограничения стали реальными и начали работать требуется указать соответствие SBС определенному GBC. Т.е GBC можно представить в виде автострады по которой летит трафик из сматченных с ней SBС и в случае, когда автострада загружена, то какому то трафику из SBС приходится ждать своей очереди, а часто быть попросту дропнутым. Ширина отдельных GBC может варьироваться в зависимости от расписания (<b>weekly calendar</b>).<br /><br />SBC - работают на уровне отдельных сабскрайберов (пользователей). Каждый сабскрайбер привязан к определенному паккеджу.<br /><br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggADrcQSShCvBx6qR0Jv60mz-aTDOsO3nd55bawj16E5dFcuHhauVv4i9mrNuhaNONImgELxTNdTiipHJDQdHyvgfzcbITQ-zbtIW2nqWQ5SlLOIA4oxGnL3h-5Gqj8Qfa0MHlOGJ8Swli/s1600/4.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="313" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggADrcQSShCvBx6qR0Jv60mz-aTDOsO3nd55bawj16E5dFcuHhauVv4i9mrNuhaNONImgELxTNdTiipHJDQdHyvgfzcbITQ-zbtIW2nqWQ5SlLOIA4oxGnL3h-5Gqj8Qfa0MHlOGJ8Swli/s320/4.jpg" /></a></div>
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN8lcakMi8NyYwo14KUB3MNEB_dPneKLXY_6TgPXSM52-OiuPvY9rML5JWVnlT_o3MjwCNKDtoQknb_MFPZMq-AhEm0gVDVWdWRDNxEfjDp8vPvPJZQQdhP1Grw-qbMfmcVifM4meyyALy/s1600/3.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 262px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN8lcakMi8NyYwo14KUB3MNEB_dPneKLXY_6TgPXSM52-OiuPvY9rML5JWVnlT_o3MjwCNKDtoQknb_MFPZMq-AhEm0gVDVWdWRDNxEfjDp8vPvPJZQQdhP1Grw-qbMfmcVifM4meyyALy/s320/3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5676711954756695874" /></a> <br />Паккедж представляет собой набор из одного/нескольких PBC (primary bandwidth controller) с развернутыми внутри них SBC и сервисов (service), в котором каждый сервис принадлежит определенному SBC или просто заблокирован (в этом случае и соответствия никакого не нужно).
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
SBC в свою очередь принадлежит одному из GBC. Каждому SBC можно выдать определенную полосу которую он будет забирать из слинкованного с ним GBC. Так же любому SBC можно выставить приоритет (AL) относительно других SBC в данном паккедже. Приоритет влияет на то какой из SBC будет иметь более высокий приоритет в получении полосы при высокой утилизации PBC. PBC же определяет суммарную максимальную доступную полосу для всех вложенных в него SBC, в простейшем случае максимальную полосу для каждого сабскрайбера в паккедже. Т.е если PBC один то максимальная полоса для сабскрайбера не может превысить значения PBC.<br /><br /><br />
Сервис представляет собой набор протоколов (обычно близких по типу, например, http и https можно объединить в общий сервис Browsing). Сервисы можно создавать и собирать самостоятельно, а можно использовать стандартные. <br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqEEFu4be8Rny8q_k7VCoKq6ZfSrOhiuwlnJjJXzd6l5VkkVlAPSz19d5z8rWN1RV0ZMB1m1Ybxdljiqg4VVO2M9c8gaIAwusUVKUT-q8Ti8Dt_oH0Gh4uJqlCK4ghxi15r6dARgJG7OQv/s1600/2.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="257" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqEEFu4be8Rny8q_k7VCoKq6ZfSrOhiuwlnJjJXzd6l5VkkVlAPSz19d5z8rWN1RV0ZMB1m1Ybxdljiqg4VVO2M9c8gaIAwusUVKUT-q8Ti8Dt_oH0Gh4uJqlCK4ghxi15r6dARgJG7OQv/s320/2.jpg" /></a></div>
Более того, можно самостоятельно создавать описания протоколов(например, tcp на порту 1119 на адресах 81.22.xx.xx считать протоколом игры WoW), писать свои сигнатуры (ну это уже для продвинутых) и назначать их сервисам.<br /><br /><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8BR_7dJ2VVm1O2d_uiMlqYpkOAZ8r_hX3KFAq2ReXZ_958vmSrWO572jBz2VY6UbmK0gyUNjP6MpPJtazlGsNnyrvHUP2l74xvMOUOnFJVZjJNr5LXAnZVOdRxxLoFtcc1Po80ovibY7L/s1600/5.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"><img border="0" height="158" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8BR_7dJ2VVm1O2d_uiMlqYpkOAZ8r_hX3KFAq2ReXZ_958vmSrWO572jBz2VY6UbmK0gyUNjP6MpPJtazlGsNnyrvHUP2l74xvMOUOnFJVZjJNr5LXAnZVOdRxxLoFtcc1Po80ovibY7L/s320/5.jpg" /></a></div>Статистику всего этого великолепия можно наблюдать в Reporter, который является частью пакета SCABB. SCABB это пакет в основном предназначенный для управления application уровнем SCE и основная настройка и управление осуществляется именно через него. Reporter позволяет просматривать статистику по протоколам, сервисам, паккеджам, и многому другому и является просто незаменимым элементом контроля и управления устройством, ведь управлять в слепую согласитесь неудобно. Однако стоит учитывать, что Reporter выдает статистику с уровней L4-L7 по модели OSI и это следует учитывать при выставлении полосы на GBC, т.к на них она выставляется на L2-уровне и таким образом overhead к значениям из Reporter будет составлять около 10%. (Хочешь получить 1гбит на http - выставь 1100мбит на GBC для http). Данные статистики Reporter берет с сервера CM (<b>Collection Manager</b>), куда их заботливо складывает SCE (см. RDR в настройках SCE). <br /><br />SM (<b>subscriber manage</b>r) управляет сабскрайберами. Для управления может использоваться Cisco API, которое позволяет выделывать с пользователями очень многое. Из самых востребованных полезностей: перекладывание сабскрайбера в другой паккедж, назначение квот, управление календарем.<br /><br />Управление через CLI или API имеет одно очень серьезное преимущество по сравнению с управлением через SCABB - дело в том, что при загрузке конфига через SCABB конфиг полностью перезаливается на SCE и применяется. В момент его применения возникает ситуация, когда никакие ограничения на трафик еще не действуют (т.е секунд 20-30 трафик никак SCE не обрабатывается и просто пролетает через нее), а после применения конфига при большом кол-ве трафика, проходящего через устройство, изменения сразу не применяются. Проблема похоже возникает из-за высокой загрузки траффик-процессоров. Реально иногда пережевывание трафика в такие моменты может достигать 30-60 минут. Впрочем такая проблема наблюдалась только с SCE2020 и при практически полной ее загрузке, за 8000 такого не замечалось, хотя и там трафика бывает более чем прилично. <br />Внесение изменения через CLI или API влияет только на тот параметр который реально изменяется и проблема описанная выше просто не возникает. К тому же такие изменения быстры, т.к загрузка конфига через SCABB занимает до 5 минут, а изменение параметра GBC через ту же CLI всего несколько секунд.<br /><br />Еще одна прелесть это <b>Bypass</b> - оптический байпас, на SCE8000 представлен в виде отдельного модуля, через который подключаются оптические линки. Замечателен тем, что в случае отказа системы (т.е если пакеты перестают ходить в течении определенного времени) SCE автоматически его активирует и весь трафик начинает идти через него. DPI конечно же работать перестает, но никакого перерыва сервиса и деградации. Bypass пассивный, т.е следит за наличием света в оптоволокне и при его отсутствии (например, SCE просто померла или пропало питание) трафик автоматически устремляется через bypass. Так же в любой момент трафик на bypass можно перевести простой командой из CLI. При переключении никаких потерь пакетов просто нет(я ни разу не зафиксировал). С включенным байпасом с SCE можно делать что угодно, bypass можно просто вынуть и проводить необходимые регламентные работы, например, обновление ПО.<br /><br />Cisco регулярно выкладывает обновления известных SCE протоколов. Называются эти файлы <b>protocol pack</b>. Обновление никаких проблем не вызывает, оно просто и удобно. К сожалению на горячее не обновляет, SCE придется выводить из эксплуатации.<br />SCOS - ios для SCE тоже регулярно обновляется, приносит новые фичи.<br /> <br /><b>Теперь немного о запчастях</b>:<br /><br />SCE8000 имеет модульную структуру: <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr_m3RpHsUWJW6I52giK_hnQAm0MR_1w-9MMsXa4w5PYmdQXA90bRoC6zmi0f5mIDNBWxfFP2Y0L9hmRz77-ANai4e8PC5dCsGD8YG8QY7BxMs6O_uuoPRRHcYarREqlzhFm0mOEkn-wJ9/s1600/SCE8000.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 154px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr_m3RpHsUWJW6I52giK_hnQAm0MR_1w-9MMsXa4w5PYmdQXA90bRoC6zmi0f5mIDNBWxfFP2Y0L9hmRz77-ANai4e8PC5dCsGD8YG8QY7BxMs6O_uuoPRRHcYarREqlzhFm0mOEkn-wJ9/s320/SCE8000.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5676702202454088450" /></a><br /><br /><br />2 PSU, 2 слота под байпас, 4 слота под интерфейсные платы (1x10G per slot), 2 слота под SCM-E(мозг).<br /><br /><br /><br /><br />Каждый SCM-E может обрабытывать до 7.5Gbps трафика в каждую из сторон. Соответственно максимальная производительность SCE8000 составляет до 15Gbps в каждую из сторон.<br /><br />SCE2020 это fixed версия:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmnTFDbRTeFCkKyUh1EeuHaT3Pq9WXnxXo9-itm4bsWGxEr5ANiBi_CZ08KTfK75Cfazr_MVUYYLb2Se5kZ8bE57eo5LrR5akUFJQBs3_BP4LdUUGGQPuqCVwmKjnnDYYsinU05vb_WXNq/s1600/SCE2020.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 118px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmnTFDbRTeFCkKyUh1EeuHaT3Pq9WXnxXo9-itm4bsWGxEr5ANiBi_CZ08KTfK75Cfazr_MVUYYLb2Se5kZ8bE57eo5LrR5akUFJQBs3_BP4LdUUGGQPuqCVwmKjnnDYYsinU05vb_WXNq/s320/SCE2020.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5676703440492720130" /></a><br /><br />2PSU, 4 гигабитных порта(два на вход, два на выход). <br /><br /><br /><br /><br />Основное ограничение возникает даже не по трафику, а по кол-ву пропускаемых flow. Нормально выжимает примерно 1.5Gbps в каждую из сторон. <br /><br />Обе модели могут собираться в каскады, но самый простой способ задействовать несколько SCE в схеме - это прокинуть через SCE etherchannel. SCE абсолютно прозрачна для других устройств сети, таким образом поставив ее в разрыв между двумя устройствами, можно спокойно поднять между этими устройствами etherchannel. Управление трафиком в SCE2020 осуществлялось инкрементированием/декриментированием виланов на выходе, в SCE8000 такая возможность пропала. Это может вызвать некоторые сложности при миграции c 2020 на 8000. Нам, например, пришлось менять топологию ядра.<br /><br /><br /><b>Ну и немного из опыта напоследок</b>:<br /><br />Блокирование p2p протоколов не является хорошей идеей. Дело в том, что помимо торрентов и других файлообменных сетей p2p используется и действительно нужными многим программами, в частности банк-клиентами, онлайн играми. Причем очень часто быват так, что p2p трафик составляет лишь малую часть от необходимого обмена трафика для таких узлов. Решение - p2p не блокировать, а сильно ограничивать. 16кбит будет достаточно. Качать на этой скорости, что либо не реально, а вот служебному трафику этой полосы вполне хватает.<br /><br />Полосу GBC нельзя выставлять слишком низкой. SCE некорректно обрабатывает низкие значения GBC и попросту перестает шейпить трафик в этом GBC.Артем Устиновhttp://www.blogger.com/profile/01588427543108428609noreply@blogger.com13