Ключевые слова:asterisk, voip, h323, (найти похожие документы)
From: litnimax <asterisk-support.ru>
Date: Mon, 9 Dec 2007 14:31:37 +0000 (UTC)
Subject: Терминация звонков с AS5300 по H323 протоколу в Asterisk
Оригинал: http://www.asterisk-support.ru/documentation/bulk/As5300Asterisk
Задача
терминация звонков с AS5300 по H323 протоколу на *
Существует две реализации H323 стека для asterisk:
* Первым появился CHAN_OH323, который реализован в виде драйвера
псевдо звуковой карты.
* h323_chan модуль (By Jeremy McNamara из NuFone Network), который
реализован с использованием Asterisk's RTP stack, в отличие от
chan_oh323.
Две версии продолжают развиваться, так как их девелоперы не хотят
объеденить проект и вообще поругались :-) Один знакомый программист на
С сказал что chan_h323 сырой совсем и кода там мало, что лучше
использовать oh_323..
Тестирование chan_h323
Сначала была сделана попытка работы наchan_h323, так как:
* Он идет в поставке с *
* Идеологически правильный - API канала, а не звуковой карты.
После долгих мучений так и не получилось его запустить. Звонки с
ohphone проходили только при:
* --fast-disable
* --disable-h245-in-setup
* --h425tunneldisable
На циске прописывали и voice class h323 fast disable, и:
voice service voip
h323
h245 tunnel disable
!
Но проблема не была решена. А проблема была в том, что не
отрабатывалась до конца сигнализация. Звонок шел с циски, астериск
давал progress indicator, но как только я поднимал трубку на
SIP/IAX/ZAP канале астериска, в циску приходил answer и тишина, а
канал продолжал звонить. После пару дней мучений решили попробовать
oh323.
Тестирование Chan_oh323
С данным модулем запустились довольно быстро со следующими
настройками::
fastStart=yes h245Tunnelling=no h245inSetup=no
... остальное по умолчанию
Единственное что расстроило - это отсутствие передачи progress
indicator. Вот пример лога - chan_oh323.c:1159 oh323_indicate:
Ignoring PROGRESS indication.
Быстрый поиск по исходнякам выдал функцию oh323_indicate:
break;
case AST_CONTROL_PROGRESS:
/* FIXME ... */
ast_log(LOG_NOTICE, "Ignoring PROGRESS indication.\n");
res = 0;
break;
Т.е. данная функция просто не была реализована. Выходном стало
обеспечение ложного КПВ при помощи диалплана:
exten => s,1,Ringing
exten => s,2,Dial(IAX2/provider/${OH323_DSTE164},60)
exten => s,103,Busy
Конфигурация
Файлы конигурации
Файл oh323.conf:
[ast@new ast]$ cat etc/asterisk/oh323.conf | grep -v '^;'
[general]
listenAddress=x.x.x.x
listenPort=1720
connectPort=1720
tcpStart=10000
tcpEnd=20000
udpStart=10000
udpEnd=20000
fastStart=yes
h245Tunnelling=no
h245inSetup=no
inBandDTMF=no
silenceSuppression=no
jitterMin=20
jitterMax=100
outboundMax=10
inboundMax=10
simultaneousMax=10
wrapLibTraceLevel=0
libTraceLevel=0
libTraceFile=/home/ast/h323.log
gatekeeper=DISABLE
gatekeeperTTL=600
userInputMode=TONE
amaFlags=billing
accountCode=H323
context=nocalls
[register]
context=oper1-in
gwprefix=0170
[codecs]
codec=GSM0610
frames=2
Файл extensions.conf:
[ast@new ast]$ cat etc/asterisk/extensions.conf | grep -v '^;'
[default]
include => nocalls
[nocalls]
exten => s,1,Hangup
exten => i,1,Hangup
exten => t,1,Hangup
exten => h,1,Hangup
[oper1-in]
include => nocalls
exten => _X.,1,GotoIf($[${OH323_RADDR} = z.z.z.z]?:6) ; Недокументированная переменная OH323_RADDR, видна по oh323 show vars
exten => _X.,2,SetAccount(oper1)
exten => _X.,3,SetCIDNum(1633)
exten => _X.,4,Ringing
exten => _X.,5,Dial(IAX2/me@partner/011${OH323_DSTE164:4})
exten => _X.,6,HangUP
exten => _X.,106,Busy
Настройки CISCO:
dial-peer voice 430011 voip
description asterisk
destination-pattern 500T
session target ipv4:x.x.x.x
tech-prefix 0170
codec gsmfr
ip qos dscp cs5 media
Возможные проблемы
* Если не изменить amaFlags, то не пришутся CDR записи
* Звонки приходили в s конекст, потом это пропало. Обошли проблему
так:
exten => s,1,SetCIDNum(0001)
exten => s,2,goto(${OH323_DSTE164},1)
Рекомендации
1. Не испольхуйте библиотеки pwlib и h323 из вашего дистрибутива.
Лучше их вообще удалить, так как при смешении libs/includes
возникают мистические __unknown_symbols__ и так далее.