http://www.joomla3x.ru/joomla3-templates.html - joomla 3 шаблоны

Asterisk

FreeBSD10+Asterisk11+chan_dongle

Автор: GAMER вкл. .

FreeBSD10 все собирает через clang. В том числе и asterisk. Но chan_dongle шлангом собираться не хочет. Для этого приходиться извращаться.

Собрать астериск и chan_dongle с помощью gcc.

Так как люблю все новое, собирал через gcc49 (хотя, это не лучший вариант. Часто выходят обновления, которые нужно пересобирать, а пересобираются они долго).

За основу брал https://www.mail-archive.com/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра./msg08108.html, там gcc46.

И так:

#pkg install gcc46

Редактируем /etc/libmap.conf

libgcc_s.so.1   gcc46/libgcc_s.so.1
libgomp.so.1    gcc46/libgomp.so.1
libobjc.so.3    gcc46/libobjc.so.2
libssp.so.0     gcc46/libssp.so.0
libstdc++.so.6  gcc46/libstdc++.so.6


Редактируем /etc/make.conf
.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc46)
CC=gcc46
CXX=g++46
CPP=cpp46
.endif

#cd /usr/ports/net/asterisk11 && make install clean

После чего собираем сам модуль с одной лишь опцией конфигурации: #cd /tmp/asterisk-chan-dongle-asterisk11 && ./configure CC=gcc46 && gmake && cp chan_dongle.so /usr/local/lib/asterisk/modules

Проверяем:

 gin*CLI> dongle show version

 chan_dongle: Huawei 3G Dongle Channel Driver, Version 1.1, Revision 34
 Project Home: http://code.google.com/p/asterisk-chan-dongle
 Bug Reporting: http://code.google.com/p/asterisk-chan-dongle/issues/list



Теперь комментарии:
1. Все собралось, но не работает. В логах ругань на libiconv.
Не смотря на то, что в FreeBSD10 libiconv свой (в мире), все равно есть ряд портов, которые ставят порт /usr/ports/converters/libiconv.
Этот порт хочет для себя и mc. А может и я что-то криво посадил. Но тем не менее, на период сборки астериска и chan_dongle,
нужно грохнуть портовый libiconv. Потом вернуть обратно.
2. /etc/libmap.conf и /etc/make.conf вернуть к предыдущему состоянию, иначе все будет собираться через gcc.
3. Лучше все собрать через clang, в том числе и астериск. Астериск потом пересобрать по-новому. В таком случае, софт будет собран
через шланг и только астериск через gcc.
4. После апгрейда на FreeBSD 10.1-STABLE, использую версию gcc48. Соответственно меняю версию в конфигах.
Кроме того, /usr/ports/converters/libiconv можно уже не использовать.

Blacklist для входящих

Автор: GAMER вкл. .

Начальство сказало: "Нужно заблокировать входящие звонки с номеров".

Блокируем :)

Для организации черного списка номеров в asterisk есть специальная функция BLACKLIST, функция появилась в версии 1.4. Смотрим с чем ее едят.

CLI>core show function BLACKLIST

 

В диалплане, например пишем так:

exten => 56XXXXXXX,1,Set(CALLERID(all)=$[CALLERID(num)])
exten => 56XXXXXXX,2,Set(CHANNEL(language)=ru)
exten => 56XXXXXXX,n,Answer()
exten => 56XXXXXXX,n,GotoIf($[${BLACKLIST()}=1]?blacklist)
exten => 56XXXXXXX,n,Goto(ivr-main,s,1)
exten => 56XXXXXXX,n(blacklist),Hangup()

 

 BLACKLIST() проверяет в базе данных AstDB в семействе blacklist ключ, равный Caller*ID, со значением 1. Если ключ есть и значение равно единице, то BLACKLIST() возвращает 1. Что проверяется вот этой строчкой:

exten=>7495XXXXXXX,n,GotoIf($[${BLACKLIST()}=1]?blacklist)

Если условие выполняется, то вызывается extension с пометкой blacklist.

Для управления черным списком можно использовать CLI:
CLI> database put blacklist 561231232 1
CLI> database del blacklist 561231232

По материалам из сайта: http://mysyslog.ru/posts/175

Asterisk. Запись информации о звонках в MySQL

Автор: GAMER вкл. .

Задача: записать историю о звонках в БД (MySQL). Пример будет на FreeBSD. Ветка Asterisk - 10.

Что должно быть:

1. Asterisk
2. MySQL (MariaDB )
3. unixodbc
4. databases/mysql-connector-odbc

Конфиги:

В файле /usr/local/etc/asterisk/res_odbc.conf  должны быть такие строки:

[asterisk]
enabled => yes
dsn => MySQL-asterisk
username => asterisk
password => ******

 /usr/local/etc/asterisk/cdr_adaptive_odbc.conf

[cdr_adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate

Дальше, настройкка ODBC.

/usr/local/etc/odbc.ini

[MySQL-asterisk]
Description = MySQL Asterisk database
;Trace = Off
;TraceFile = stderr
Driver = MySQL
Server = localhost
User = asterisk
Password = ******
;Port = 3306
;Socket = /var/run/mysqld/mysqld.sock
Socket = /tmp/mysql.sock
Database = asterisk
OPTION=4194304

/usr/local/etc/odbcinst.ini

[MySQL]
Description=ODBC for MySQL
Driver=/usr/local/lib/libmyodbc5.so
UsageCount=20002
CPTimeout =
CPReuse =

Если odbc не заработал, то пользуемся инструментами (оригинал тут):

Use odbcinst to find where odbcinst.ini is located.

# odbcinst -j

unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2

Install the driver.

# odbcinst -i -d -f /usr/local/etc/odbcinst.ini

List the available DSNs to check the config.

# odbcinst -s -q

[dsn_name]

Создаем БД asterisk и таблицу cdr.

mysql> create database asterisk;

mysql> CREATE TABLE `cdr` (
  `id` int(9) unsigned NOT NULL AUTO_INCREMENT,
  `calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `clid` varchar(80) NOT NULL DEFAULT '',
  `src` varchar(80) NOT NULL DEFAULT '',
  `dst` varchar(80) NOT NULL DEFAULT '',
  `dcontext` varchar(80) NOT NULL DEFAULT '',
  `channel` varchar(80) NOT NULL DEFAULT '',
  `dstchannel` varchar(80) NOT NULL DEFAULT '',
  `lastapp` varchar(80) NOT NULL DEFAULT '',
  `lastdata` varchar(80) NOT NULL DEFAULT '',
  `duration` int(11) NOT NULL DEFAULT '0',
  `billsec` int(11) NOT NULL DEFAULT '0',
  `disposition` varchar(45) NOT NULL DEFAULT '',
  `amaflags` int(11) NOT NULL DEFAULT '0',
  `accountcode` varchar(20) NOT NULL DEFAULT '',
  `uniqueid` varchar(32) NOT NULL DEFAULT '',
  `userfield` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `calldate` (`calldate`),
  KEY `accountcode` (`accountcode`),
  KEY `uniqueid` (`uniqueid`),
  KEY `dst` (`dst`),
  KEY `src` (`src`)
) ENGINE=Aria AUTO_INCREMENT=61 DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1;

Проверяем подключение с Астериска:

*CLI> odbc show asterisk

ODBC DSN Settings
-----------------   Name:   asterisk
  DSN:    MySQL-asterisk
    Last connection attempt: 1970-01-01 03:00:00
  Pooled: No
  Connected: Yes

Читаем логи. Если что-то не работает, должно ругаться.

FreeBSD и g729

Автор: GAMER вкл. .

Цитата, чтоб потом не искать :)

I'm posting this here for my future self as much as anything. Here are a few simple steps to build the codecs for FreeBSD. Although the downloadable binaries are nice, they aren't kept up to date with changes to libc.so or other things as quickly as I'd always want. So, let's just build it by hand.

# fetch http://asterisk.hosting.lv/src/asterisk-g72x-1.1.tar.bz2
# gunzip asterisk-g72x-1.1.tar.bz2
# tar -xvf asterisk-g72x-1.1.tar
# cd asterisk-g72x-1.1

OK, now we need to edit the build script slightly.

# vi build-itu.sh

At the top, insert:

    inc=/usr/local/include
    def=-DG72X_ASTERISK=110

and comment out any other 'inc' and 'def' lines. The include path should be the same for all users who install asterisk from ports. The 'def' line reflects the version of asterisk (in this case version 11), so adjust this as your system requires.

I then had to edit the "o=" line for my CPU type. For me, this was just:

    o="-march=core2 -msse -msse2 -msse3 -O3 -fomit-frame-pointer -fPIC"

Now let's build the thing and install.

# ./build-itu.sh
# cp codec_g729.so /usr/local/lib/asterisk/modules/
# cp codec_g723.so /usr/local/lib/asterisk/modules/


Restart asterisk and use
"core show translation recalc 10" to see if the codec was loaded.

These instructions don't use the Intel IPP compiler. But on modern hardware, perhaps that is less important than it used to be. I'll report back if it causes any problems in production.

If anyone is willing, turning these instructions into a FreeBSD port would be incredibly helpful!

 

Увидел здесь: https://groups.google.com/forum/#!topic/asterisk-g729/lGuJ_kb-UAA

 

 

Linux(HunterTik)+Asterisk+Huawei 1550=GSM-gate

Автор: GAMER вкл. .

Попала мне в руки сборка HunterTik - MikroTik+Linux(debian).  Ядро там конечно урезано, но поднять на нем asterisk и SIP-GSM-шлюз все же захотелось.

Как прошивать и готовить модемы, читайте в других темах, я это описывал. Сейчас же опишу, как это делать на урезаном ядре и что с этого поучилось.

Плюс, хочу поставить asterisk-11, конечно же, с сорсов.

Основное руководство к действию взято здесь: https://wiki.asterisk.org/wiki/display/AST/Installing+Asterisk+From+Source

1. Ставим Астериск с исходников. 

# cd /usr/src
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11.1.0-rc1.tar.gz # tar zxvf asterisk-11.1.0-rc1.tar.gz # cd asterisk-11.1.0-rc1 # aptitude install g++ libncurses-dev libxml2-dev subversion make libsqlite3-dev sqlite3-devel m2crypto openssl
# ./configure
# make menuconfig
В настройках конфигурирования я отключил только res_timing_timerfd (не поддерживается ядром).

# make install
# make config
# make samples

2. Установка модуля канала chan_dongle для Huawei.

chan_dongle: github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip для 11-го астериска о котором идет речь, (code.google.com/p/asterisk-chan-dongle/downloads/list для старых версий, он не собирается под 10-ку и выше). Это одна и та же версия драйвера, просто в тот который для 11-й версии интегрирован патч который подгоняет его под 11-й астериск с его измененными зависимостями.

# aptitude install unzip
# cd /usr/src
# wget  https://github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip --no-check-certificate # unzip asterisk11.zip
Переименовал полученую директорию попроще (chan_dongle).

# cd chan_dongle
# aptitude install autoconf automake
# aclocal
# autoconf
# automake -a
# ./configure # make
# make install # cp /usr/src/chan_dongle/etc/dongle.conf /etc/asterisk

3. Смотрим, видел ли наш модем в системе.

# ls /dev | grep USB
ttyUSB0
ttyUSB1
ttyUSB2

4. Настройка. Канальный модуль Huawei настраивается в datacard.conf.

[datacard0]
audio=/dev/ttyUSB1   ; tty for audio connection
data=/dev/ttyUSB2   ; tty for AT commands
context=datacard-incoming ; context for incoming calls
group=1 ; calling group
rxgain=3 ; increase the incoming volume
txgain=3 ; increase the outgoint volume
[datacard1]
context=datacard-incoming; context for incoming calls
audio=/dev/ttyUSB4 ; tty port for audio connection
data=/dev/ttyUSB5 ;tty port for AT commands
group=2 ; calling group
rxgain=3 ; increase the incoming
volume txgain=3 ; increase the outgoint volume
autodeletesms=yes ; auto delete incoming sms
resetdatacard=yes ; reset datacard during initialization
u2diag=0 ; set U2DIAG parameter (0 = disable everything except modem function)
usecallingpres=yes ; use the caller ID presentation or not
callingpres=allowed_passed_screen ; set caller ID presentation

5. Проверка.
Проверим состояние модема из командной строки Asterisk (CLI).
Перегрузить asterisk можно командой core restart now,
а если система рабочая и идут вызовы, то core restart gracefully.
Запущенные модули каналов просмотрим командой module show like chan_

asterisk*CLI> dongle show devices
ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI       Number        
datacard1    2     Free       13   3    3       MTS RUS        E1550      11.608.12.00.143  352......        25....... Unknown       
datacard0    1     Free       15   3    3       TELE2          E1550      11.608.14.15.311  359......        25....... Unknown 

6. Диалплан.

Для входящих вызовов, sms и ussd запросов настроим extensions.conf:

[datacard-incoming]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD}: ${USSD}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()
exten => s,1,Dial(SIP/100,,) exten => s,n,Hangup()

Для исходящих звонков:

exten => _X.,1,Dial(Datacard/g1/${EXTEN})
или
exten => _X.,1,Dial(Datacard/datacard0/${EXTEN})

Через некоторое время пользования одним шлюзом захотелось прикрутить еще один модем.

Все делается аналогично.

7. Настройка автозагрузки.

Так как HunterTik не совсем стандартный Линукс, то возникли проблемы с автозагрузкой.

Делаем так. В каталоге /tik/etc/rc.d/run.d создаем файл S80hunter с таким текстом:

#!/bin/sh
chroot /linux /etc/init.d/iaxmodem start
chroot /linux /etc/init.d/hylafax start
chroot /linux /etc/init.d/asterisk start

и даем права.

Все.

chan_dongle удобен тем, что можно привязывать девайс не только по номеру порта, а и по самой СИМ-ке либо ИМЕИ устройства. Для этого служат параметры: imsi, imei.

Отключал определение СД-рома другими средствами (Free_Huawei_Modem_Tool).

Внимание!

1. Отключить ввод пин-кода.

2. Отключить определение СД-рома.

3. Подключать в USB-порт без всяких шнурков либо через USB-switch.

4. Можно ребутнуть linux для профилактики :).