Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / Проблема в использовании ChanIsAvail на SIP канале

Проблема в использовании ChanIsAvail на SIP канале

1 2>
Откуда: Vladivostok
Сообщений: 8

Проблема в использовании ChanIsAvail на SIP канале

Коллеги, доброго времени суток!

Использую следующую схему : Asterisk 1.4.12.1 <--sip--> CCM 4.2.3
Стыковка прошла удачно как по H323 (openh323), так и по SIP, но возникла необходимость реализовать отказустойчивое соединение. CCM у меня два (ccm_pub и ccm_sub), дефолотово нагрузка со стороны Asterisk уходит на ccm_sub. Необходимо, чтобы в случае проблем с ccm_sub вызов ушел на ccm_pub.
Насколько я понял праввильно, то подобную задачу можно решить через ChanIsAvail в extensions.conf, но использование этого приложения невозможно для каналов H323.
Ок, перевел стык на SIP (который как сообщается в доке поддерживается приложением), но и тут возникла проблема.. а теперь подробнее:

sip.conf :
[general]
bindaddr=host=1.2.3.2
bindport=5060
tos_audio=ef
context=default
realm=TestLab
disallow=all
allow=alaw
allow=ulaw
[ccmsip_pub]
context=ccm-sip
type=friend
host=1.2.3.3
port=5065
canreinvite=yes
disallow=all
allow=alaw
allow=ulaw
nat=no
canreinvite=yes
[ccmsip_sub]
context=ccm-sip
type=friend
host=host=1.2.3.4
port=5065
canreinvite=yes
disallow=all
allow=alaw
allow=ulaw
nat=no
canreinvite=yes


extensions.conf
[macro-dialout-ccmsip]
exten => s,1,ChanIsAvail(SIP/ccmsip_sub&SIP/ccmsip_pub)
exten => s,2,Dial(${CUT(AVAILCHAN||1)}/${ARG1})
exten => s,3,Hangup
exten => s,102,Congestion
[ccm-sip]
exten => _XXXXX,1, Macro(dialout-ccmsip,${EXTEN})


В случае если все хорошо и ccmsip_sub отвечает, то проблем нет - вызов установливается корректно,
но в случае, если я эмулирую недоступность ccmsip_sub (путем блокирования соответсвующих пакетов через iptables ны том же серврере: iptables -R OUTPUT 1 -s 1.2.3.2 -d 1.2.3.3 -p udp -m udp --dport 5065 -j DROP),
в консоли asterisk наблюдаю следуюющее:
[Aug 11 11:34:44] WARNING[24361]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bbea78 (len 800) to 1.2.3.2:5065 returned -1: Operation not permitted
-- Called ccmsip_sub/22222
[Aug 11 11:34:45] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bbea78 (len 800) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:34:46] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bbea78 (len 800) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:34:48] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bbea78 (len 800) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:34:52] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bbea78 (len 800) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:35:00] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bbea78 (len 800) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:35:16] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bbea78 (len 800) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:35:16] NOTICE[24282]: chan_sip.c:3004 auto_congest: Auto-congesting SIP/ccmsip_sub-09bb8020
-- SIP/ccmsip_sub-09bb8020 is circuit-busy
[Aug 11 11:35:16] WARNING[24361]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bae958 (len 343) to 1.2.3.2:5065 returned -1: Operation not permitted
== Everyone is busy/congested at this time (1:0/1/0)
-- Executing [s@macro-dialout-ccmsip:3] Hangup("IAX2/3000-10064", "") in new stack
== Spawn extension (macro-dialout-ccmsip, s, 3) exited non-zero on 'IAX2/3000-10064' in macro 'dialout-ccmsip'
== Spawn extension (office, 22222, 1) exited non-zero on 'IAX2/3000-10064'
-- Hungup 'IAX2/3000-10064'
[Aug 11 11:35:17] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bae958 (len 343) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:35:18] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bae958 (len 343) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:35:20] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bae958 (len 343) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:35:24] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bae958 (len 343) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:35:28] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bae958 (len 343) to 1.2.3.2:5065 returned -1: Operation not permitted
[Aug 11 11:35:32] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bae958 (len 343) to 1.2.3.2:5065 returned -1: Operation not permitted


собственно вопрос: что было сделано не правильно? как сделать правильно? что читать?
заранее благодарен за ответ
2009-08-11 04:40

Откуда: Санкт-Петербург
Сообщений: 541

Re: Проблема в использовании ChanIsAvail на SIP канале

Не поддерживает ChanIsAvail на SIP'е то что вы от него хотите в данном случае.
См. Details на http://www.voip-info.org/wiki/view/Asterisk+cmd+ChanIsAvail
В macro осуществлять вызов через приоритетного пира, анализировать DIALSTATUS/HANGUPCAUSE, далее по обстоятельствам.
2009-08-11 10:10

Откуда: Vladivostok
Сообщений: 8

Re: Проблема в использовании ChanIsAvail на SIP канале

ok, thanx .. в принципе то что интересовало (channel failover) заработало после добавления qualify=yes на sip-каналах в sip.conf

но в случе работы по обходному пути в консоль астериска сыпятся ошибки типа:
[Aug 11 20:19:21] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bbda48 (len 496) to 10.147.19.4:5065 returned -1: Operation not permitted
2009-08-11 13:21

Откуда: Санкт-Петербург
Сообщений: 541

Re: Проблема в использовании ChanIsAvail на SIP канале

проверяйте iptables. Operation not permitted - это из-за него.
2009-08-11 13:27

Сообщений: 866

Re: Проблема в использовании ChanIsAvail на SIP канале

dyer вам правильно пишет все - не делают то что вам нужно через chanisavail. и qualify=yes не поможет. то есть будет казаться что он помогает но это не так :=)
правильно - два dial - один через sub второй через pub. второй выполняется только если первый обломался. и да, DIALSTATUS/HANGUPCAUSE после первого диала надо смотреть.
2009-08-11 17:00

Откуда: Vladivostok
Сообщений: 8

Re: Проблема в использовании ChanIsAvail на SIP канале

ok, thanx... все завелось как желалось после добавления строки qualify=yes в описания пиров (sip.conf). Единственное, что напрягает, так это постоянно сыапящиеся фолты типа :
[Aug 11 11:35:32] WARNING[24282]: chan_sip.c:1813 __sip_xmit: sip_xmit of 0x9bae958 (len 343) to 1.2.3.2:5065 returned -1: Operation not permitted
при недоступности одного из пиров
2009-08-12 01:52

Откуда: Vladivostok
Сообщений: 8

Re: Проблема в использовании ChanIsAvail на SIP канале

Какая-то странная ботва... мое сообщение продублировалось через 18 часов.. причем без моего участия..

Реализовал все-таки через H323 (потому как у CCM 4.x SIP реализован через @#$). В диалплане прописал конструкция типа:
1,Dial(sub,$EXTEN)
2,Dial(pub,$EXTEN)
3,Hangup
102, Congestion
Все работает лучше (красивше), чем через ChanIsAvail и SIP
всем спасибо
2009-08-14 16:58

Сообщений: 1573

Re: Проблема в использовании ChanIsAvail на SIP канале

Учли, что с таким планом будет перезванивать при любом "неответе" (BUSY,NOANSWER ...)?
2009-08-25 00:33

Откуда: Vladivostok
Сообщений: 8

Re: Проблема в использовании ChanIsAvail на SIP канале

Когда писАл - учел.. но уже обнаружил.. спасибо...
сейчас тестируется конструкция типа:
exten => _[12]X, 1,Dial(H323/${EXTEN}@10.1.1.1)
exten => _[12]X, n, NoOp(Dial Status: ${DIALSTATUS})
exten => _[12]X, n, Goto(s1-${DIALSTATUS},1)
exten => s1-NOANSWER, 1, GoTo(error,1)
exten => s1-CONGESTION, 1, GoTo(error,1)
exten => s1-CANCEL, 1, GoTo(error,1)
exten => s1-BUSY, 1, GoTo(error,1)
exten => s1-CHANUNAVAIL, 1, Dial(H323/${EXTEN}@10.1.1.2)
exten => s1-CHANUNAVAIL, n, NoOp(Dial Status: ${DIALSTATUS})
exten => s1-CHANUNAVAIL, n, Goto(s2-${DIALSTATUS},1)
exten => s2-NOANSWER, 1, GoTo(error,1)
exten => s2-CONGESTION, 1, GoTo(error,1)
exten => s2-CANCEL, 1, GoTo(error,1)
exten => s2-BUSY, 1, GoTo(error,1)
exten => s2-CHANUNAVAIL, 1, GoTo(error,1)
exten => error, 1, Playback(error)
exten => error, n, Hangup


Пока для меня неясным остался вопрос: результат выполнения Dial равный NOANSWER будет вырабатывабся, только когда встречная сторона завершила вызов с причиной NoAnswer или все же можно выставить таймер на Asterisk для завершения вызова с этой причиной ?
2009-08-26 01:40

Сообщений: 1573

Re: Проблема в использовании ChanIsAvail на SIP канале

NOANSWER - это и есть результат окончания работы команды по таймауту ...
2009-08-26 14:38

1 2>
Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru