Я хотел бы создать публичный sip-шлюз для приема звонков без регистрации через uri, например, sip: random_login@sip.public.ip
frontend: kamailio 5.0 + mariadb 10.0 (192.168.30.150):два сервера звездочки 11 для балансировки нагрузки (192.168.30.1,192.168.30.2)
Добавить в базу данных kamailio мои серверы звездочки
insert into dispatcher (setid,destination,attrs) values (1,"sip:192.168.30.1:5060","weight=50");
insert into dispatcher (setid,destination,attrs) values (2,"sip:192.168.30.2:5060","weight=50");
Добавить в базу данных kamailio новую таблицу
create table my_trunk (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
alias varchar(32) DEFAULT NULL,
trunk_id int(11) UNSIGNED DEFAULT NULL,
dispatcher_id int(10) UNSIGNED DEFAULT NULL,
PRIMARY KEY (id)
);
И заполните его
insert into my_trunk (alias,trunk_id,dispatcher_id) values ('test1',1,1);
insert into my_trunk (alias,trunk_id,dispatcher_id) values ('test2',2,2);
Настройте kamailio для использования sqlops и диспетчерских модулей
# ----------------- setting dispatch module parameters ---------------
loadmodule "dispatcher.so"
modparam("dispatcher", "db_url", "mysql://kamailio:kamailiorw@localhost/kamailio")
modparam("dispatcher", "ds_ping_interval", 30)
loadmodule "sqlops.so"
modparam("sqlops","sqlcon","ca=>mysql://kamailio:kamailiorw@localhost/kamailio")
Я хочу получить запрос INVITE, замените заголовок и перенаправьте его на сервер звездочекс новым заголовком
В kamailio.cfg замените
# account only INVITEs
if ( is_method("INVITE") ) {
setflag(FLT_ACC); # do accounting
}
на
# account only INVITEs
if ( is_method("INVITE") ) {
setflag(FLT_ACC); # do accounting
sql_query("ca", "select dispatcher_id,trunk_id from my_trunk where alias='$tU'","ra");
$var(ds_force_dst) = $dbr(ra=>[0,0]);
$var(trunk_id) = $dbr(ra=>[0,1]);
ds_select_dst($var(ds_force_dst),"4");
sl_send_reply("100","Trying");
forward();
exit();
}
Вызов переадресован, но я не знаю, как заменить На заголовок на 000-$ var (trunk_id) перед пересылкой