
------------------------------------
Добавлено 11.09.2008


Добавлено 15.09.2008
Описание сборки под WIN:
http://www.voipinfo.ru/forum/viewtopic.php?t=11906
--------------------------------------
При изучении данного вопроса было использовано:
1.статья T38modem configuration with Asterisk Автор Atis Lezdins
Источник: http://www.voip-info.org/wiki/index.php?page_id=5096
2.основной вклад в "исправление" Asterisk сделал dimas ( http://www.asteriskforum.ru ). Ему удалось понять происходящее и написать правильный код.
3.несколько ценных советов дал ded, это позволило развиваться мыслям в нужном направлении.
4. ну а я все это собрал в одну кучу. Как я двигался можно понять из этого топика http://www.voipinfo.ru/forum/viewtopic.php?t=11489
5. я использую AndLinux, т.е. все работает под Windows. То, что касается сути вопроса содержится в п.п.3-6
6. ну и конечно спасибо автору этого чудо-модема: Original author: Vyacheslav Frolov С удовольствием бы с ним списался (остались нерешенные вопросы), но нет координат.
1. Устанавливаем AndLinux andLinux Beta 1 (04/21/2008) под WIN
Берем отсюда KDE-версию.
http://www.andlinux.org/downloads.php
На диске NTFS понадобится около 5ГБ, если у вашего PC ореративной памяти 2гб, то 512мб под AndLinux будет в самый раз.
Разумно сразу ставить "как сервер windows", если нет желания запускать каждый раз, то потом поставите в службе Andlinux "запускать вручную"
Команды остановки-запуска будут:
- Код: Выделить всё
net start andlinux
net stop andlinux
Программа установки установит саму систему, виртуальный сетевой адаптер Tap-Colinux и программу Xming для комфортного доступа к интерфейсу линукс из win.
Для того чтобы видеть процесс загрузки "линукса" используется andLinux Console (NT), для остального она не нужна и не удобна.
Для загрузки иногда нужно нек. время, когда программа что-то ворошит на виртуальном "диске", пугаться не следует, надо подождать до 5 минут. На XP у меня так происходит постоянно после загрузки PC, на WIN2003 крайне редко.
Рядом с часами(в WIN) появится KDE-меню.
Основные программы, которыми имеет смысл пользоваться для комфортного общения с системой:
1) Konsole
2) Konqueror(красненький)-для просмотра папок в Линукс
3) Konqueror(синенький)-для просмотра интернет-страниц, для доступа к WIN-файлам по технологии SAMBA, для доступа в корзину.
4)Synaptic-для анализа и поиска имен недостающих пакетов. (Устанавливать я лично предпочитаю через apt-get)
Желательно сразу заменить звуковую систему pulseaudio на esd (все инструкции в файле esd.zip)
Важно понимать, что вся система находится в файле andLinux\Drives\base Это открывает возможность резервирования системы перед выполнением сомнительных действий, переноса ее на другой PC по сети, копирования на DVD-болванку.
Т.е. файл base + файл andlinux-beta1-kde.exe это ваш дистрибутив.
2. Настраиваем "сеть". Основная задача -чтобы Linux сидел в той же подсети, что и все остальное Voip-хозяйство.
Есть 2 способа
1)WinPcap
2)Сетевой мост WIN
Все тонкости и подводные камни описаны здесь:
http://www.voipinfo.ru/forum/viewtopic.php?t=11562
3.Собственно установка T38modem(SIP)
За основу взята инструкция:
http://www.voip-info.org/wiki/index.php?page_id=5096
(автор Atis Lezdins).
1)Доустанавливаем недостающие необходимые пакеты:
apt-get install g++
apt-get install flex
apt-get install bison
apt-get install libexpat1-dev
Необходимость первых 3-х достаточно очевидно, а вот насчет libexpat1-dev пришлось ломать голову около месяца, ибо при компиляции OPAL пишет про какую-то PXML, и никакого намека на название отсутствующего пакета. Из внимательного рассмотрения того что пишет ./configure в OPAL тоже ничего не очевидно.
2)Скачиваем дистрибутивы в папку /root
cd /root
cvs -z9 -d :pserver:anonymous@openh323.cvs.sourceforge.net:/cvsroot/openh323 co ptlib_unix
cvs -z9 -d :pserver:anonymous@openh323.cvs.sourceforge.net:/cvsroot/openh323 co -D "5/21/2007 23:59:59" opal
cvs -z9 -d :pserver:anonymous@openh323.cvs.sourceforge.net:/cvsroot/openh323 co t38modem
Дата дистрибутива OPAL существенна, ибо с более поздними дистрибутивами OPAL модем не компилируется.
Сам модем получится версии 1.0.0, существует версия 1.0.1 на сайте h323plus, но эта версия имеет проблемы при выполнении команды atd при использовании sredird, поэтому лучше следовать буквально.
3) Устанавливаем pwlib:
cd /root/pwlib
./configure
make
make install
4) Устанавливаем OPAL:
cd /root/opal
./configure
make
make install
ldconfig
Команда ldconfig существенна, без нее модем при запуске не найдет нужных библиотек.
5) Устанавливаем T38modem:
cd /root/t38modem
make USE_OPAL=1 opt
make USE_OPAL=1 install
4.Запуск T38modem по SIP
[root@andLinux1 ~]# t38modem -tt --no-h323 -u T38modem --sip-old-asn --sip-listen udp\$192.168.11.5:6060 --sip-redundancy 2 -p ttyx0,ttyx1 --route "modem:.*=sip:<dn>@192.168.11.5:5060" --route "sip:.*=modem:<dn>"
-u T38modem -это username of T38modem как сип-клиента
--sip-old-asn -без этой строчки факсы будут ходить только между двумя модемами
sip-listen udp\$192.168.11.5:6060 -модем слушает на порту 6060, где 192.168.11.5-адрес andLinux в локальной сети
192.168.11.5:5060-на этот адрес и на этот порт модем делает исх.звонки
---------------------------------------------------------------------------------
5. Настраиваем Asterisk (на примере Sipnet)
sip.conf
- Код: Выделить всё
[general]
t38pt_udptl = yes
register => sipname:sippassword@sipnet.ru/SIP-ID
nat=no
canreinvite=yes
...
[sipnet]
type=friend
secret=sippassword
username= SIP-ID
host=sipnet.ru
insecure=invite
fromuser=SIP-ID
fromdomain=sipnet.ru
dtmfmode=rfc2833
.....
[T38modem]
type=friend
host=192.168.11.5
username=T38modem
dtmfmode=rfc2833
nat=no
canreinvite=no
context=office
callerid=2001
port=6060
t38udptlsupport=yes
здесь canreinvite=no для модема в моем во всяком случае оказалось существенно,при yes модем ругался на какие-то кодеки
extensions.conf
- Код: Выделить всё
[office]
exten => _8.,1,Dial(SIP/sipnet/${EXTEN},60,gA(Sendfax))
exten => 803,1,Dial(SIP/T38modem,90,g)
A(Sendfax)-Астериск пригрывает фразу "Примите факс" перед передачей факса
803-extension, при дозвоне на который T38modem включается на прием
6. Правим код Астериск. Важно!!!
Здесь основная заслуга и основные идеи принадлежат dimas с http://www.asteriskforum.ru, я только правил,тестировал и снимал логи.
Тестирование проходило на asterisk-1.6/trunk, но я уже готов подтвердить что все работает с asterisk-1.4.21.1 (у меня он с Addons 1.4.7 и патчами для T38 и Send-Receive-fax, но это все роли не играет, можно брать чистый астериск).
Dimas любезно разрешил мне опубликовать результаты.
1) в исходнике правим файл /usr/src/asterisk-1.4.21.1/channels/chan_sip.c
Для asterisk-1.4.21.1 это примерно строка 5219
Для asterisk-1.6/trunk это примерно строка 6819
Находим код
- Код: Выделить всё
} else if (p->udptl && ( (sscanf(m, "image %d udptl t38%n", &x, &len) == 1) ||
(sscanf(m, "image %d UDPTL t38%n", &x, &len) == 1) )) {
if (debug)
ast_verbose("Got T.38 offer in SDP in dialog %s\n", p->callid);
udptlportno = x;
numberofmediastreams++;
} else
и меняем его на
- Код: Выделить всё
} else if (p->udptl && ( (sscanf(m, "image %d udptl t38%n", &x, &len) == 1) ||
(sscanf(m, "image %d UDPTL t38%n", &x, &len) == 1) )) {
if (t38action != SDP_T38_INITIATE || (p->owner && p->lastinvite)) {
if (debug)
ast_verbose("Got T.38 offer in SDP in dialog %s\n", p->callid);
udptlportno = x;
numberofmediastreams++;
}
} else
--------------------------
P.S. Еще неплохо бы сразу сделать 2 вещи:касается не столько данного вопроса, сколько T38 в астериск в принципе:
1/в этом же файле chan_sip.c найти место (приблиз.строка 834):
- Код: Выделить всё
/*!< This is default: NO MMR and JBIG trancoding, NO fill bit removal, transferredTCF TCF, UDP FEC, Version 0 and 9600 max fax rate */
static int global_t38_capability = T38FAX_VERSION_0 | T38FAX_RATE_2400 | T38FAX_RATE_4800 | T38FAX_RATE_7200 | T38FAX_RATE_9600;
и поменять на
- Код: Выделить всё
static int global_t38_capability = T38FAX_VERSION_0 | T38FAX_RATE_2400 | T38FAX_RATE_4800 | T38FAX_RATE_7200 | T38FAX_RATE_9600 | T38FAX_RATE_12000 | T38FAX_RATE_14400;
Это даст вашему факсу возможность проходить на 14400: в тех случаях когда астериск вмешивается в факс-трафик(не всегда!) он будет резать скорость на 9600 из-за этой строчки.
2/Применить сей патч: http://bugs.digium.com/view.php?id=10943
Это даст возможность поиграться-воспользоваться переменной disablep2p=yes в rtp.conf и Packet2Packet bridge при установке соединения у вас точно уже не получится. Дело в том что этот bridge частенько приводит к проблемам при T38, как я обратил внимание, и это не всегда лечится командой canreinvite=yes, кот.кстати с T38modem не в ладах.
-----------------------------
2) Пересобираем астериск, чтобы изменения вступили в силу:
- Код: Выделить всё
cd /usr/src/asterisk-1.4.21.1
make
make install
Здесь требуются некоторые пояснения.
Звонок с T38modem происходит так:
dimas писал(а):1.t38modem говорит о том что у него есть T38 уже в первом INVITE. При этом T38 перечислен вместе с голосовыми кодеками.
- Код: Выделить всё
v=0
o=- 1220426658 1220426658 IN IP4 192.168.11.5
s=Opal SIP Session
c=IN IP4 192.168.11.5
t=0 0
m=audio 5002 RTP/AVP 0 8 101 100
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15,32-49
a=rtpmap:100 NSE/8000
a=fmtp:100 192-193
m=image 5006 udptl t38
2.Asterisk почему-то обращает внимание на нижнюю строчку, игнорируя голосовые кодеки и сразу шлет факс-приглашение провайдеру
- Код: Выделить всё
v=0
o=root 1100491942 1100491942 IN IP4 192.168.11.5
s=Asterisk PBX SVN-trunk-r140692
c=IN IP4 192.168.11.5
t=0 0
m=image 4773 udptl t38
a=T38FaxVersion:0
a=T38MaxBitRate:9600
a=T38FaxFillBitRemoval:0
a=T38FaxTranscodingMMR:0
a=T38FaxTranscodingJBIG:0
a=T38FaxRateManagement:transferredTCF
a=T38FaxMaxBuffer:400
a=T38FaxMaxDatagram:400
a=T38FaxUdpEC:t38UDPFEC
3. в силу нек. особенностей некоторых провайдеров и ряда других невыясненных причин такой "наглый" звонок права на жизнь в большинстве случаев не имеет и если и проходит, то некорректно с т.зр.его дальнейшего развития.
Поэтому и пришлось править код:
dimas писал(а):Фактически из-за этого исправления Астериск игнорирует T38 в изначальном INVITE (но поддерживает T38 в ре-INVITE). ...это значит что начальный T38 который сообщает T38modem игнорируется, но позже когда провайдер делает reinvite на T38, астериск его принимает и делает реинвайт на ноге t38modem.
С успешными логами прохождения факса можно ознакомиться здесь:
1)лог звонка с т.зр. Астериск
http://dump.ru/file_catalog/1042097
2)лог звонка с т.зр. T38modem
http://dump.ru/file_catalog/1042098
---------------------------------------------------------------------------------
п.п.7-9 по аналогии,как описано здесь
http://www.voipinfo.ru/forum/viewtopic.php?t=11467
7. установка sredird и проброс модемов в TCP/IP
Разумно использовать
apt-get install sredird
apt-get install xinetd
Для перезапуска xinetd понадобится команда service. Чтобы она работала:
apt-get install sysvconfig
Для тестирования модема at-командами:
apt-get install cu
cu -l ttyx0
8. создание виртуальных COM-портов в Windows (DialOUT/EZ)
9. подключение программы (программ) Ventafax к этим портам
----------------------------------------------------------------------------
при установке на не совсем чистую систему в случае ошибок могут понадобиться след.пакеты: libsasl2-dev; libldap2-dev, libssl-dev, libsdl1.2-dev, libspeex-dev,libsrtp1-dev,libgsm1-dev,...и т.п.
Лучше всего смотреть на что ругается компилятор и пользоваться поиском через Synaptic для анализа ситуации и определения точного имени недостающего пакета, при этом не забывать обновлять информацию в его БД, ибо точное имя пакета в репозитории может измениться и установка закончится неудачей.
----------------------------------------------------------------------------
некоторые дополнительные соображения и описания по поводу нижеизложенного здесь: http://www.voipinfo.ru/forum/viewtopic.php?t=11489&start=20
Что оно умеет:
1)практически без проблем принимать факсы по T38 при входящем звонке на тот порт на кот. он слушает
Тестировались входящие звонки (с Asterisk, с AXON PBX, напрямую), c AP200B, Kapanga, ComISDN,X-CAPI,Zoiper,с приложения SendFax(*).
Принимать факсы от внешнего SIP-провайдера -был протестирован Sipnet через номер доступа-результат положительный.
T38modem корректно работает с ASTERISK по SIP, когда он принимает факс.
2) -отправлять факсы по "кривому методу"(см.картинку в соседнем топике) через AXON PBX на внешнего SIP-провайдера (тестировано на SIPNET без проблем)
-отправлять факсы на AP200B по "кривому методу" через AXON или напрямую на адрес AP.
-в нек. случаях но как-то криво и с ошибками отправлять факсы через Asterisk на внутр. extension's типа капанги и ReceiveFax(*). Но мне не нравится как это работает, и это всегда заканчивается ошибкой, даже если факс прошел целиком.
3)Умеет работать в режиме ECM по T38.
4)корректно отправлять факсы НА ВНЕШНЕГО SIP-ПРОВАЙДЕРА через ASTERISK при исходящих звонках при условии применения правки Астериск, что описано в п.6
Что оно не умеет:
1) не умеет сообщать SIP-серверу пароль и регистрироваться на SIP-сервере.