VentaFax->T38modem(SIP)->Asterisk->SIP-провайдер

Основной форум.
Для опытных

Модераторы: Admins, Модераторы

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

VentaFax->T38modem(SIP)->Asterisk->SIP-провайдер

Сообщение Дима77 » 31 авг 2008, 11:42

P.S. Копия. Оригинал http://www.voipinfo.ru/forum/viewtopic.php?t=11767 Добавлено 06.09.08 :)
------------------------------------
Добавлено 11.09.2008
:) Удалось собрать эту версию T38modem под WINDOWS (т.е. без Linux и без andLinux). Модем полностью фукционален и в совокупности с com0com работает также хорошо как и его линуксовский родственник. :)
Добавлено 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 ( 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

Код: Выделить всё

&#91;general&#93;
t38pt_udptl = yes
register => sipname&#58;sippassword@sipnet.ru/SIP-ID
nat=no
canreinvite=yes
...
&#91;sipnet&#93;
type=friend
secret=sippassword
username= SIP-ID
host=sipnet.ru
insecure=invite
fromuser=SIP-ID
fromdomain=sipnet.ru
dtmfmode=rfc2833
.....
&#91;T38modem&#93;
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

Код: Выделить всё

&#91;office&#93;
exten => _8.,1,Dial&#40;SIP/sipnet/$&#123;EXTEN&#125;,60,gA&#40;Sendfax&#41;&#41;
exten => 803,1,Dial&#40;SIP/T38modem,90,g&#41;
A(Sendfax)-Астериск пригрывает фразу "Примите факс" перед передачей факса
803-extension, при дозвоне на который T38modem включается на прием

6. Правим код Астериск. Важно!!!
Здесь основная заслуга и основные идеи принадлежат dimas с 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
Находим код

Код: Выделить всё

		&#125; else if &#40;p->udptl && &#40; &#40;sscanf&#40;m, "image %d udptl t38%n", &x, &len&#41; == 1&#41; || 
		 &#40;sscanf&#40;m, "image %d UDPTL t38%n", &x, &len&#41; == 1&#41; &#41;&#41; &#123;
			if &#40;debug&#41;
				ast_verbose&#40;"Got T.38 offer in SDP in dialog %s\n", p->callid&#41;;
			udptlportno = x;
			numberofmediastreams++;
		&#125; else 
и меняем его на

Код: Выделить всё

		&#125; else if &#40;p->udptl && &#40; &#40;sscanf&#40;m, "image %d udptl t38%n", &x, &len&#41; == 1&#41; || 
		 &#40;sscanf&#40;m, "image %d UDPTL t38%n", &x, &len&#41; == 1&#41; &#41;&#41; &#123;
		if &#40;t38action != SDP_T38_INITIATE || &#40;p->owner && p->lastinvite&#41;&#41; &#123;
			if &#40;debug&#41;
				ast_verbose&#40;"Got T.38 offer in SDP in dialog %s\n", p->callid&#41;;
			udptlportno = x;
			numberofmediastreams++;
		&#125;
		&#125; else 
--------------------------
P.S. Еще неплохо бы сразу сделать 2 вещи:касается не столько данного вопроса, сколько T38 в астериск в принципе:
1/в этом же файле chan_sip.c найти место (приблиз.строка 834):

Код: Выделить всё

/*!< This is default&#58; 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&#58;0 PCMU/8000
a=rtpmap&#58;8 PCMA/8000
a=rtpmap&#58;101 telephone-event/8000
a=fmtp&#58;101 0-15,32-49
a=rtpmap&#58;100 NSE/8000
a=fmtp&#58;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&#58;0
a=T38MaxBitRate&#58;9600
a=T38FaxFillBitRemoval&#58;0
a=T38FaxTranscodingMMR&#58;0
a=T38FaxTranscodingJBIG&#58;0
a=T38FaxRateManagement&#58;transferredTCF
a=T38FaxMaxBuffer&#58;400
a=T38FaxMaxDatagram&#58;400
a=T38FaxUdpEC&#58;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. ... 9&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-сервере.

P.S. То что выше этой черты было добавлено после (06.09.08) .
---------------------------------------------------------------------
Удалось добиться нек. результатов в этом вопросе:
http://www.voipinfo.ru/forum/viewtopic. ... 9&start=20
Удается делать исходящий звонок на SIPNET через AXON PBX по извращенно-кривой схеме (схема звонка приведена на картинке) и передавать факс.
Прямая схема (T38modem как extension AXONA) не работает, т.к. T38modem:
1)не умеет авторизовываться с паролем
2)не умеет регистрироваться

Зато он может выполнять роль внутреннего extension к asterisk.
Я пробовал с Asterisk 1.4.21 1.4.22 1.6 и с callweaver
Результат приблизительно одинаковый.
В случае когда T38modem работает через Asterisk наблюдается следующая дурацкая картина:
(в зависимости от значения t38pt_udptl в основной секции файла sip.conf)
1) ;t38pt_udptl =yes -выключен
звонок успешно проходит, снимаем трубку, слышим позывные факса
стартуем, и как только включается t38

Код: Выделить всё

*CLI> &#91;Aug 31 13&#58;58&#58;19&#93; WARNING&#91;17493&#93;&#58; chan_sip.c&#58;5226 process_sdp&#58; Unsupported SDP media type in offer&#58; image 5010 udptl t38
почему рвется звонок понятно-потому что я отключил t38
2) t38pt_udptl =yes включен
Звонок либо не проходит (not accseptable here) /Asterisk/
Либо проходит но не слышно позывных факса /Callweaver/, факс также не проходит.

Анализ sip-логов позволил выявить следующее:
1) при использовании AXON в исходящем запросе содержатся голосовые кодеки G711, соотв. звонок устанавливается на G711, писк исходящего факса на G711 ,а переход на T38 осуществляется тогда, когда стартует принимающий факс.
2) при использовании Asterisk и включенном t38pt_udptl астериск почему-то обрабатывает звонок так что при осуществлении звонка провайдеру в sip-приглашениях не содержится возможности установки связи на G711, т.е. пытается гнать чистый t38, за что и получает отбой.
3) при выключенном t38pt_udptl звонок проходит корректно, но, увы, без возможности переключения на t38.

Я пробовал менять другие параметры в sip.conf (т.е. играться c t38pt_udptl и callreinvite в пирах и осн.секции), но значение t38pt_udptl в general является определяющим, остальное на результат не влияет.

Есть некоторая идея, при каких условиях все будет нормально:
1) ;t38pt_udptl =yes -выключен
2) а когда соединение уже установлено включить поддержку t38pt_udptl =yes для данного соединения.

Но возможно ли это осуществить? Или как-то заставить идти звонок корректно по-другому?

P.S. Добавил еще маленько информации тут:
http://www.voipinfo.ru/forum/viewtopic.php?t=11767
Последний раз редактировалось Дима77 15 сен 2008, 13:39, всего редактировалось 8 раз.

dimas
Сообщения: 177
Зарегистрирован: 19 апр 2007, 22:21

Сообщение dimas » 02 сен 2008, 15:58

К сожалению я мало что понял :=)
Давайте разберемся с ситуацией когда udptl = yes.
Опишите плиз какую роль выполняет астериск - гейт, терминатор. отправляет он факс или принимает? всю схему передачи факса покажите - кто кому.

ну и конечно
core set debug 3
sip set debug

Added after 5 minutes:

just for records - я тут отвечал просто потому что топикстартер мне в личку писал. но что-то после перечитывания я так понимаю что не про меня это ксе :=)

ToxaP
Сообщения: 327
Зарегистрирован: 13 май 2006, 15:26

Сообщение ToxaP » 03 сен 2008, 09:22

Вопрос очень актуален.

2 Дима77: Так получилось у Вас запустить T38Modem на SIP провайдера?

Я сегодня как раз таким буду заниматься. Результаты отпишу.
"Фантазия важнее знания.", Альберт Эйнштейн

dimas
Сообщения: 177
Зарегистрирован: 19 апр 2007, 22:21

Сообщение dimas » 03 сен 2008, 10:59

У него переменная T38CALL выставлена была. Пока не знаю кто ее в 1 перевел, но по крайней мере установка ее в 0 перед Dial() устанавливает нормальное соединение с sipnet а вовсе не заканчивается 488 Not Acceptable here... Сейчас будем разбираться откуда она взялась.

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 03 сен 2008, 11:44

ToxaP писал(а):2 Дима77: Так получилось у Вас запустить T38Modem на SIP провайдера?
...буду заниматься.
Да, но пока по кривой схеме через AXON PBX.
Насчет Asterisk: результат думаю скоро будет (при поддержке dimas),основной затык побороть удалось, немного терпения.
Не теряйте времени, ставьте. Инструкция прилагается:
http://www.voipinfo.ru/forum/viewtopic.php?t=11767
Если при слове WINDOWS вам становится плохо, начинайте с п.3 и заканчивайте на п.4

dimas
Сообщения: 177
Зарегистрирован: 19 апр 2007, 22:21

Сообщение dimas » 03 сен 2008, 12:47

Ммм. Я был не прав.
t38modem СРАЗУ включает t38 в первый инвайт. Так что T38CALL действительно никто не выставлял - она выставилась сама какраз из-за T38 в первом инвайте. Так что правильно его не сбрасывать конечно.

В общем вовзращаемся к изначальной проблеме - если SIP call, первйи инвайт которого содержит T38 проходит через Астериск на сипнет, то он не работает.
Вариант, конечно что именно из-за того что Астериск убирает все аудио кодеки из инвайта так получается. Будем смотреть.

ToxaP
Сообщения: 327
Зарегистрирован: 13 май 2006, 15:26

Сообщение ToxaP » 04 сен 2008, 17:49

У меня получилось настроить схему следующую: SIP Provider -> Asterisk с FreePBX -> T38Modem -> Hylafax -> Avantfax.

Провайдер http://www.citysvyaz.ru/ поддерживает только Т38.

Работает стабильно 5 с 5.
"Фантазия важнее знания.", Альберт Эйнштейн

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 04 сен 2008, 19:54

Мои поздравления!
:D
SIP Provider -> (неважно чего)-> T38Modem
как бы проблемой не является,
по крайней мере если знать все тонкости установки pwlib-opal-t38modem
и все тонкости командной строки его запуска,
что тьфу-тьфу мне удалось осознать и отловить после долгих мучений

сейчас основным вопросом философии является тема

T38modem-> (неважно чего) -> sip provider
попробуйте воспользоваться инструкцией с voip-info.org и попытаться послать факс с модема.
Намекну на нек. ключевые моменты:
Во первых-взгляните на эти строки в readme:

Код: Выделить всё

4.3.1 T.38 mode modifiers
-------------------------
F - enable T.38 mode request after dialing.
V - disable T.38 mode request after dialing &#40;default&#41;.
Examples&#58;
<-- ATDF<user's number>
    enables T.38 mode request after dialing but user can override it by
    inserting V into <user's number>.
<-- ATD<user's number>V
    disables T.38 mode request after dialing and user can't override it
    by inserting F into <user's number>.
По умолчанию у вас идет ATD<user's number>==ATDV<user's number>==ATD<user's number>V
Попробуйте набрать ATD<user's number>F,
т.е.добавьте F в конец номера -у вас тогда пойдет "чистоT38"-звонок
Если ваш провайдер такие звонки не футболит (а может), то вам крупно повезло и скорее всего у вас все получится.
Если вы делаете V-звонок (по умолчанию), то у вас из модема исходит следующее:

Код: Выделить всё

<--- SIP read from UDP&#58;//192.168.11.5&#58;32786 --->
INVITE sip&#58;84951234567@192.168.11.5&#58;5060 SIP/2.0
Date&#58; Wed, 03 Sep 2008 07&#58;24&#58;18 GMT
CSeq&#58; 1 INVITE
Via&#58; SIP/2.0/UDP 192.168.11.5&#58;32786;branch=z9hG4bKd47966fd-f677-dd11-9769-00fff9b80000;rport
User-Agent&#58; OPAL/2.0
From&#58; "root" <sip&#58;T38modem@192.168.11.5>;tag=0a525dfd-f677-dd11-9769-00fff9b80000
Call-ID&#58; 0a525dfd-f677-dd11-9768-00fff9b80000@andLinux1
To&#58; <sip&#58;84951234567@192.168.11.5&#58;5060>
Contact&#58; <sip&#58;T38modem@192.168.11.5&#58;32786;transport=udp>
Allow&#58; INVITE,ACK,OPTIONS,BYE,CANCEL,NOTIFY,REFER,MESSAGE,INFO,PING,PUBLISH
Content-Type&#58; application/sdp
Content-Length&#58; 305
Max-Forwards&#58; 70

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&#58;0 PCMU/8000
a=rtpmap&#58;8 PCMA/8000
a=rtpmap&#58;101 telephone-event/8000
a=fmtp&#58;101 0-15,32-49
a=rtpmap&#58;100 NSE/8000
a=fmtp&#58;100 192-193
m=image 5006 udptl t38
Астериск радостно видит крайнюю строчку (умный! :evil: лучше бы был глупым!!!), присваивает звонку статус T38CALL=1
и далее гонит опять же чисто T38-звонок:

Код: Выделить всё

Reliably Transmitting &#40;no NAT&#41; to I.P.A.D&#58;5060&#58;
INVITE sip&#58;84951234567@provider.ru SIP/2.0
Via&#58; SIP/2.0/UDP 192.168.11.5&#58;5060;branch=z9hG4bK791303df;rport
Max-Forwards&#58; 70
From&#58; "root" <sip&#58;987654@provider.ru>;tag=as64f46e13
To&#58; <sip&#58;84951234567@provider.ru>
Contact&#58; <sip&#58;987654@192.168.11.5>
Call-ID&#58; 1ffd5fa84603b22e7eb92691185f2889@provider.ru
CSeq&#58; 102 INVITE
User-Agent&#58; Asterisk PBX SVN-trunk-r140692
Date&#58; Wed, 03 Sep 2008 07&#58;24&#58;18 GMT
Allow&#58; INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported&#58; replaces, timer
Content-Type&#58; application/sdp
Content-Length&#58; 375

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&#58;0
a=T38MaxBitRate&#58;9600
a=T38FaxFillBitRemoval&#58;0
a=T38FaxTranscodingMMR&#58;0
a=T38FaxTranscodingJBIG&#58;0
a=T38FaxRateManagement&#58;transferredTCF
a=T38FaxMaxBuffer&#58;400
a=T38FaxMaxDatagram&#58;400
a=T38FaxUdpEC&#58;t38UDPFEC
в итоге этот звонок скорее всего футболится.

Принудительная установка set t38CALL=0 (перед dial) конечно правит ситуацию, т.е. вместо чисто факса из астериска выходит чисто голос. Но факс при этом не проходит.
Dimas может прокомментировать этот момент, я с ним долго спорил в переписке, но теперь и сам думаю что он прав.

Т.е. задача состоит в том, что либо надо в астериске добавить голос, либо что было бы лучше, убрать в T38модеме t38 на начальной стадии, чтобы Астериск честно выдал голос провайдеру (без факса), а уж когда там стартуют и пришел бы T38-запрос от провайдера, то тогда и переключаться.
Я перелопатил пока T38modem и OPAL но с моим "знанием языка" сомневаюсь что смогу что-то сделать. Если есть желающие, призываю на помощь.
dimas очень сильно помог продвинуться в понимании чего происходит в Астериске.

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 06 сен 2008, 19:03

Опубликовал основные результаты в первом посте топика. Код для Asterisk добавлен с разрешения dimas .

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 15 сен 2008, 14:07

Добавил про то как компилировать это дело под чисто Windows !
:x http://www.asteriskforum.ru/viewtopic.php?t=2821

dimas
Сообщения: 177
Зарегистрирован: 19 апр 2007, 22:21

Сообщение dimas » 19 сен 2008, 13:09

собственно проблема, как мы согласились, в том что t38modem в начальном INVITE сразу просит и голос и T38 а для астериска как тольно он увидел T38 голоса уже не существует он делает чистый T38 на исходящем звонке (не передает m=audio наружу).

Баг у них на трекере есть, они его признают и когда-нибудь :=) исправят - http://bugs.digium.com/view.php?id=12437

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 20 сен 2008, 03:07

dimas, там мне думается багов хватает окроме этого.
1)В случае с сипнетом мы действительно с проблемой разобрались. Я так понял на сипнет, как бы это сказать, "факс не идет через астериск". Т.е. я не добавлял | T38FAX_RATE_12000 | T38FAX_RATE_14400 , а он (после вашей правки) идеально идет на 14400 со всеми OK в конце.
2)А в другом случае "факс идет через астериск" (понял из того, что добавление | T38FAX_RATE_12000 | T38FAX_RATE_14400 повлияло на скорость) он вроде как тоже неплохо идет после этой правки, но с большой вероятностью до конца первой страницы или без подтверждения (udptl-OK от провайдера не всегда доходит-и это только на астериске)-и я думаю это еще один баг.
3) А в 3-м случае я пробовал досылать факс на +1(800).. через pulver.com и там похоже сразу включается t38 на удаленной стороне, я правда не пробовал на чистом астериск, но похоже в этом случае именно в силу правки факс-то и не проходит, именно потому (м.б.) что удаленная сторона сразу предлагает t38, а мы этот t38 запороли в первом инвайт.

Мне удалось списаться с разработчиком чудо-модема (Vyacheslav Frolov), вот ответ:
я писал(а):> ...вопрос о присутствии udptl t38 в первом invite со стороны модема
(убрать бы его оттуда!)..
Vyacheslav Frolov писал(а):В ближайшие пару дней в http://sourceforge.net/projects/t38modem появится CVS репозитарий. Там код адаптирован новому OPALу (SVN на http://sourceforge.net/projects/opalvoip ). Вопрос... похоже там решен.
Пока ждем-с. :roll: P.S. Версия "от 10.09.2008" 1.0.0 -это пока не то. Это июль-2007, в readme лишь добавлена фраза про то с каким opal компилировать.

Однако пока я пошел по другому пути, т.е. в обход Астериска:
Vyacheslav Frolov писал(а):SIP авторизацию по паролю можно сделать если она есть в OPALе.
Оказалось, все есть в лучшем виде. Как говорится, глаза боятся, руки делают, криво-косо нужные места усмотрел и сделал сам,получилась идеальная T38 факс-машинка, не завязанная на Asterisk:
http://www.asteriskforum.ru/viewtopic.php?t=2840
Dimas, понимаю времени мало, м.б. посмотрите на код (T38modem:пара файлов со словами manager и sip, opal: то что в папке sip), насколько грамотно я напортачил c авторизацией. Вы все же профессионал, м.б. там и регистрацию добавить несложно.
P.S. О,придумал! надо модем с 3CX еще опробовать, неделю назад не получилось, а теперь ведь он поумнел и сумеет пароль назвать, да и линукс для этого теперь не требуется, модему ныне и в виндах неплохо ;)
-----------
PPS:не,фигня эта 3CX :evil: ,он через нее звонит, но на прохождение факса даже намека нету, с ходу не пошло,разбираться неохота, лучше и проще аксона ничего нет.

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 22 сен 2008, 01:24

Рано или поздно станет вопрос о добавлении модема в автозагрузку. Потратил несколько часов на поиск решения: казалось бы задача тривиальная, но для линукс оказалась тяжелой:
1)очень длинная строка запуска (а я ее еще удлиннил)
2)присутствуют кавычки
Короче рабочее решение такое:
Добавление T38modem в автозагрузку LINUX.
1. В рабочей папке модема, т.е. /usr/local/bin создаем текстовой файл скрипта t38start
В него пишем строчки:

Код: Выделить всё

#! /bin/sh
/usr/local/bin/t38modem --no-h323 -u username -s password -q "192.168.11.1&#58;5060" --sip-old-asn --sip-listen udp\$192.168.11.5&#58;6060 --sip-redundancy 2 -p ttyx0,ttyx1 --route "modem&#58;.*=sip&#58;<dn>@192.168.11.1&#58;5060" --route "sip&#58;.*=modem&#58;<dn>" 
В свойствах этого файла существенно указать, что он "Is executable"
2. В файле /etc/inittab добавляем строчку:

Код: Выделить всё

C2&#58;&#58;respawn&#58;sh -c 'exec /usr/local/bin/t38start'
3. Перезапускаем линукс, модем работает в фоне. (-tt я убрал, т.к. это вывод дебага на экран, а экрана как бы уже и нет)
P.S. Конечно, был бы конфиг для модема было бы проще, а то длина командной строки просто переваливает критический порог, да еще и кавычки непонятно где и как обозначать.

Аватара пользователя
anest
Модератор
Сообщения: 5706
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 22 сен 2008, 02:24

1.
Дима77 писал(а):Рано или поздно станет вопрос о добавлении модема в автозагрузку. Потратил несколько часов на поиск решения: казалось бы задача тривиальная, но для линукс оказалась тяжелой
просто для справки: у любого линукса есть уже готовый механизм:
/etc/conf.d/local.start
/etc/conf.d/local.stop

путь к этим файлам как и само название файлов может слегка отличаться в зависимости от дистрибутива, но суть думаю понятна.

/etc/conf.d/local.start:
# /etc/conf.d/local.start
# This is a good place to load any misc programs
# on startup (use &>/dev/null to hide output)

/usr/local/bin/my_script1.sh
/usr/local/bin/my_script2.pl
/usr/bin/php /usr/local/bin/my_script3.php
2.
Дима77 писал(а):В свойствах этого файла существенно указать, что он "Is executable"
ну раз уж вы в линуксе то забудьте про мышу ;) не все ставят иксы только чтобы потом пару раз кликнуть ей там где это можно сделать руками
chmod +x /usr/local/bin/t38start
сделает ваш скрипт "exeсutable".

3.
конфиг можно сделать самому и положить его в /etc/t38modem.conf например
после чего в своем скрипте считывать оттуда значения и подставлять в строку запуска вашей проги.
аналоги этого решения есть в сотнях других скриптов в любом линуксе - просто загляните в них..

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 22 сен 2008, 03:11

Я пытался размещать скрипт в init.d, а ссылку делать в rc2.d Закончилось плохо, модем запустился в основной консоли, вырубить его никак нельзя: ctrl+c не сработал-других способов не знаю, а до X-сервера дело не дошло, т.е. к линуксу доступа нет. Просекаете прелесть ситуации? Хорошо потратил до этого 3 минуты на копирование "системы" -опыт есть, потому как файл base пошел в корзину (но это лучше чем "Федорино горе"), вернее сразу на выброс, т.к.он большой. ;)
anest писал(а):ну раз уж вы в линуксе то забудьте про мышу
Ну так я и в линуксе под WIN, вы ж в курсе. ;)
А скрипты я писать еще не научился. :(
Последний раз редактировалось Дима77 22 сен 2008, 03:17, всего редактировалось 1 раз.

Аватара пользователя
anest
Модератор
Сообщения: 5706
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 22 сен 2008, 03:15

вы невнимательны ;)
я не говорил про /init.d/ - я говорил про /conf.d/
также я не говорил вам писать скрипты - я говорил про ваш скрипт

Код: Выделить всё

#! /bin/sh 
 /usr/local/bin/t38modem --no-h....
если из него все параметры вынести в файл конфига то в строке запуска можно просто переменные поставить. более элегантно, не надо лазить в скрипт чтоб поправить IP или еще чтото - все можно будет через конфиг делать. вобщем просто удобно. как - смотрите в башевые скрипты в линуксе которые свои параметры читают из конфигов в /etc. многому оттуда научитесь попутно ;)
в любом случае надеюсь что был хоть малость но чем то полезным..

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 22 сен 2008, 03:26

Я искал /conf.d/ но видимо в ubuntu его нету, причем ничего похожего я не нашел, есть еще profile , но рез-т мало отличается от вышеописанного, разве что систему еще можно спасти. А все что нарыл в google ведет именно в init.d и rcX.d Там основная подлянка в том, чтобы загрузка модема не остановила загрузку самой системы,
когда 98 win только появился, то в autoexec.bat засовывался norton commander, только там F10 нажал и win пошел загружаться, а здесь если модем не туда засунул, то f10 уже не нажмешь.

Аватара пользователя
Cache
Модератор
Сообщения: 688
Зарегистрирован: 12 янв 2007, 11:39
Откуда: Россия. Шатура
Контактная информация:

Сообщение Cache » 22 сен 2008, 06:25

поставь в конце вызова команды амперсанд он загонит твое команду в демон

тоесть типа так
/usr/local/sbin/t38modemscript.sh &

и усе

если хочешь давить вывод от программы гони его в /dev/null
/usr/local/sbin/t38modemscript.sh & >> /dev/null
нанотехнолигии в области Asterisk

dimas
Сообщения: 177
Зарегистрирован: 19 апр 2007, 22:21

Сообщение dimas » 22 сен 2008, 10:51

мнэээ.... если у бинарки есть ключик который ее демоном делает, то надо его в омандной строке передать. Тогда сразу после запуска модема управление вернется в стартап-скрипт и все пойдет дальше.

Если же такого ключика нет, то любую команду можно запустить в бэкграунде добавив амперсанд в конце командной строки.
но при этом неплохо stderr/stdout в /dev/null завернуть. то есть

Код: Выделить всё

HEREGOESYOURCOMMAND > /dev/null 2>&1 &

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 22 сен 2008, 13:11

OK, автозапуск t38modem, красивый вариант:
1) Скрипт t38start создаем по маршруту /etc/init.d/

Код: Выделить всё

#! /bin/sh 
/usr/local/bin/t38modem --no-h323 -u username -s password -q "192.168.11.1&#58;5060" --sip-old-asn --sip-listen udp\$192.168.11.5&#58;6060 --sip-redundancy 2 -p ttyx0,ttyx1 --route "modem&#58;.*=sip&#58;<dn>@192.168.11.1&#58;5060" --route "sip&#58;.*=modem&#58;<dn>" &
2) Делаем ярлык в /etc/rc2.d/ :

Код: Выделить всё

&#91;root@andLinux1 ~&#93;# cd /etc/rc2.d
..................#ln -s "/etc/init.d/t38start"
3) переименовываем ярлык в S60t38start

И все имеем в лучшем виде. & рулит...
Два замечания:
Замена & на & >> /dev/null (v.Cache) не отменяет вывод на экран
Замена & на > /dev/null 2>&1 & (v.dimas) отменяет вывод на экран

А по поводу "есть ключик который ее демоном делает"... Ну что сказать, м.б. и есть. Программа СУПЕР (в плане t38 и в плане modem), а по мелочам :кто ее знает, что там есть и еще может быть, я 3-й месяц уже воюю, дорабатываем-с по мере возможностей.
Последний раз редактировалось Дима77 22 сен 2008, 22:20, всего редактировалось 1 раз.

dimas
Сообщения: 177
Зарегистрирован: 19 апр 2007, 22:21

Сообщение dimas » 22 сен 2008, 14:01

В чем же суперность-то если три месяца трахаться надо? :=)

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 22 сен 2008, 21:32

dimas, а вы все-таки попробуйте, если еще не попробовали.
Вы внесли фундаментальный вклад (я бы не смог) но поймите, надо оторваться от земли и проникнуться идеей, чтобы понять всю красоту . Вы мастерски умеете конструировать самолеты, ну так сядьте за штурвал, оцените всю красоту сверху.
Вам же 3-х месяцев не надо, я по пунктам все выложил,часа должно хватить (и даже отвязал от Астериска-получилась некая независимость от того решения, над которым мы с вами, неделю,извините "трахались" ;) , и даже от Линукса, если надо).
Я этим вопросом очень давно интересовался, я бы сказал 3 года, а не 3 месяца.
http://www.voipinfo.ru/forum/viewtopic.php?t=4689
Дима77(Май 04, 2006) писал(а):Да нет такого софта. Или вы думаете, я не искал.
Меня самого бесит отсутствие нормальных программ на эту тему. По идее хотелось бы VentaFax на прямую прикрутить к сип-провайдеру. Вот если бы это осуществить, то было бы здорово. Venta работает либо через TAPI с устройством типа FAX-MODEM, либо через com-port.
Все что нужно для полного счастья - это прописать в системе виртуальный факс-модем, который одним концом смотрел бы на SIP-провайдера (хоть голосом, хоть по t38), а другим концом смотрел бы на VENTAfax или на любую факсовую программу, с кот.пользователь привык работать. Вот такую штуку сделать было бы очень перспективно.
Но написать это понятно может только человек, кот. одновременно понимает и в VOIP, и в факс-модемах. Я такого софта не нашел.
...А приличные программы, глядишь, специалисты со временем напишут. :wink:
http://www.voipinfo.ru/forum/viewtopic.php?t=4866&
Дима77(Май 30, 2006) писал(а):Зачем писать специальные факсовые программы для voip.
Господа, факс изобретен задолго до появления компьютера, а компьютер задолго до появления интернета, voip-а, sip-а и прочей хренотени такого рода, все приличные факсовые программы уже давно написаны. И поэтому, господа разработчики, усилия надо прилагать не в направлении как изобрести паравоз, а в направлении как этот паравоз поставить на новые рельсы. Нужен интерфейс между SIP и факс-программой (TAPI,CAPI, Virtual Com Port), а не сама факс-программа.
Нет, конечно, если прикручивать это дело к Hylafax, согласно классическим "руководствам для линуксоидов", преимуществ над Send-Receive-rx-tx вы можете и не увидеть вовсе. Я же описываю несколько более красивое решение, кот. использует Ventafax.
Дело в том что Ventafax (с моей т.зр.)-это лучшее что есть и будет из всего факс софта - по удобству работы, качеству отработки факс-ошибок и дружелюбности к извините USER-у.
Просто когда я на рабочем месте, и мне надо принять факс, я просто нажимаю alt+ctrl+f12, и у меня факс стартует, и я на экране вижу как он принимается и у меня опосля приема открывается папочка и там лежит картинка, кот. хочу открываю, хочу верчу, хочу редактирую.
А если мне надо отправить факс, я просто жму на файл правой кнопкой мышки(Да, мышкой, есть господа такой зверь в природе...) и из меню выбираю пункт "Отправить факс", и смотрю как он уходит.
И у меня в рабочее время нет возможности думать о логах, дебагах, сложных линукс-командах, и вспоминать где ж у меня лог лежит и какой параметр чего в нем значит.
И эта система практически неизменна вот уже почти лет 10.
В voip есть 2 способа передачи факса
1) g711 -и есть программа IAXmodem (эту я кстати осилил за один вечер! ;) )
http://www.voipinfo.ru/forum/viewtopic.php?t=11467
2) T38 -и есть программа T38modem: а суперность ее в том, что она T38 и она МОДЕМ и эти 2 вещи, как писал ded
ded писал(а):Фишка в том, что это (в связке с hylafax) собрано 4 года назад, и работает по сей день, лучше швейцарских часов. Потому что часы хоть мало, да изнашиваются, а это - нет.
ded очевидно собрал модем по H323, SIP версия появилась год назад, да она сырая в плане ньюансов сборки, думаю у Вячеслава Фролова кроме модема хватает забот, потому как недоработана именно SIP-часть, хотя в OPAL все я так понял есть, но в принципе моих корявых "инструкций" вполне достаточно, чтобы "опытный линуксоид" собрал эти "швейцарские часы" (SIP) за час. 3 месяца. Но ведь удалось же!
-------------------------------------------
P.S. Первый раз в своей жизни я увидел Линукс в мае-июне 2008г.(не помню точно) http://www.voipinfo.ru/forum/viewtopic.php?t=11180
Крайний раз я писал какую-то простенькую прогу обработки текста на C++ (скорее это был просто C) году эдак в 2001. Просто надо знать к чему стремишься, а 3 месяца это ерунда, тем более я не только над модемом сидел все это время.
Ну, если я неправ и слишком навязываю свои идеи, то готов в общем-то рассмотреть вопрос уничтожения ряда своих топиков на обоих форумах. А то уже какой-то LiveJournal получается, а не форум.
Только один вопрос -особенно это касается любителей посылать в google.
Сколько разумных ссылок вы найдете в google по запросу T38modem+SIP, я боюсь даже добавить (+sip provider).???!!! Ну, естественно, не считая воплей о помощи, кот. как правило везде без ответа... ;)

Oy90
Сообщения: 16
Зарегистрирован: 27 июн 2008, 09:10
Контактная информация:

Сообщение Oy90 » 23 сен 2008, 08:13

Поднял t38modem для приёма факсов, отлично работает в связке с * и Hylafax.
По поводу "длинной командной строки": если один раз вызвать t38modem с параметром --save, то он все параметры сохранит в /root/.pwlib_config/.ini и при следующих запусках будет брать параметры оттуда.

Код: Выделить всё

&#91;Options&#93;
no-h323=True
sip-old-asn=True
sip-redundancy=2
sip-listen=udp$aa.bb.cc.dd&#58;6060
ptty=+/dev/ttyT38-1,+/dev/ttyT38-2,+/dev/ttyT38-3
route=modem&#58;.*=sip&#58;<dn>@aa.bb.cc.dd
route=sip&#58;.*=modem&#58;<dn>
username=T38Modem
output=/var/log/t38modem.log

Дима77
Сообщения: 100
Зарегистрирован: 01 июл 2008, 11:26

Сообщение Дима77 » 23 сен 2008, 10:00

Oy90 писал(а):если один раз вызвать t38modem с параметром --save, то он все параметры сохранит в /root/.pwlib_config/.ini и при следующих запусках будет брать параметры оттуда.
Класс! А вот результат для WIN-версии.

Код: Выделить всё

Windows Registry Editor Version 5.00

&#91;HKEY_CURRENT_USER\Software\OpenH323 Project\T38Modem\CurrentVersion\Options&#93;
"no-h323"=dword&#58;00000001
"sip-old-asn"=dword&#58;00000001
"sip-redundancy"="2"
"sip-listen"="udp$192.168.11.2&#58;6060"
"ptty"="\\\\.\\CNCB1,\\\\.\\CNCB2"
"route"="modem&#58;.*=sip&#58;<dn>@192.168.11.1&#58;5060
sip&#58;.*=modem&#58;<dn>"
"username"="USER"
"secret"="PASSWORD"
"hostname"="192.168.11.1&#58;5060"
"trace"=dword&#58;00000001
Примечание: secret и hostname в оригинале нету, я описывал, как я их добавлял.

Если еще чего-нибудь усмотрите ценного, обязательно сообщайте. :)

Аватара пользователя
noize
Сообщения: 913
Зарегистрирован: 29 ноя 2006, 12:51
Откуда: Москва

Сообщение noize » 02 окт 2008, 10:35

такой вопрос. Можно ли прикрутить всё это волшебство к trixbox ? Т.е. не пересобирая астериск, а просто добавляю в систему новые модули. Интересует принципиальная возможность

Ответить