астериск + конференции + балансировка
реально ли сделать ббалансировку клиентов по комнатам при помощи связки опенсера с астериском?
конференция ведь чисто локальная в ПБХ получается, а если клиент попал на другой астериск сервер он сможет попасть в ту же конференцию?
_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
идея в том что-бы регить клиентов и отправлять из на астериски.
| Код: |
| debug=4 log_stderror=yes log_facility=LOG_LOCAL0 fork=no port=5060 listen=udp:12.10.71.236:5060 mpath="/lib/openser/modules/" loadmodule "db_mysql.so" loadmodule "signaling.so" loadmodule "sl.so" loadmodule "tm.so" loadmodule "rr.so" loadmodule "maxfwd.so" loadmodule "usrloc.so" loadmodule "registrar.so" loadmodule "textops.so" loadmodule "mi_fifo.so" loadmodule "uri.so" loadmodule "xlog.so" loadmodule "acc.so" loadmodule "auth.so" loadmodule "auth_db.so" loadmodule "domain.so" loadmodule "dialog.so" loadmodule "load_balancer.so" modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo") modparam("usrloc", "db_mode", 2) modparam("usrloc", "db_url", "mysql://openser:openserrw@localhost/openser") modparam("uri", "use_uri_table", 0) modparam("acc", "early_media", 1) modparam("acc", "report_ack", 1) modparam("acc", "report_cancels", 1) modparam("acc", "failed_transaction_flag", 3) modparam("acc", "log_flag", 1) modparam("acc", "log_missed_flag", 2) modparam("acc", "db_flag", 1) modparam("acc", "db_missed_flag", 2) modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password") modparam("auth_db", "db_url","mysql://openser:openserrw@localhost/openser") modparam("auth_db", "load_credentials", "") modparam("dialog", "dlg_flag", 13) modparam("dialog", "db_mode", 1) modparam("dialog", "db_url", "mysql://openser:openserrw@localhost/openser") modparam("rr","enable_double_rr",1) modparam("rr","append_fromtag",1) modparam("load_balancer", "db_url","mysql://openser:openserrw@localhost/openser") modparam("domain", "db_url","mysql://openser:openserrw@localhost/openser") modparam("domain", "db_mode", 1) modparam("alias_db|auth_db|usrloc|uri", "use_domain", 1) route { if(msg:len > max_len) { sl_send_reply("513", "Message Too Big"); return; } if (!mf_process_maxfwd_header("3")) { send_reply("483","Infinite loop"); exit; } if (!has_totag()) { record_route(); } else { if (loose_route()) { if (is_method("BYE")) { setflag(1); setflag(3); } else if (is_method("INVITE")) { record_route(); } route(1); } else { if ( is_method("ACK") ) { if ( t_check_trans() ) { t_relay(); exit; } else { exit; } } send_reply("404","Not here"); } exit; } if ( is_method("CANCEL") ) { if ( t_check_trans() ) t_relay(); exit; } t_check_trans(); if (!(method=="REGISTER") && is_from_local()) { if (!proxy_authorize("", "subscriber")) { proxy_challenge("", "0"); exit; } if (!db_check_from()) { send_reply("403","Forbidden auth ID"); exit; } consume_credentials(); } if (loose_route()) { xlog("L_ERR","Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); if (!is_method("ACK")) send_reply("403","Preload Route denied"); exit; } if (!is_method("REGISTER|MESSAGE")) record_route(); if (is_method("INVITE")) { setflag(1); } if (!is_uri_host_local()) { append_hf("P-hint: outbound\r\n"); route(1); } if (is_method("REGISTER")) { if (!www_authorize("", "subscriber")) { www_challenge("", "0"); exit; } if (!db_check_to()) { send_reply("403","Forbidden auth ID"); exit; } if (!save("location")) sl_reply_error(); exit; } if ($rU==NULL) { send_reply("484","Address Incomplete"); exit; } if ($rU=~"^\*[1-9]+") { if (!is_from_local()) { send_reply("403","Forbidden access to media service"); exit; } if ($rU=~"\*3[0-9]{3}") { strip(2); prefix("CR_"); load_balance("1","conf"); } else { if (!t_relay()) { sl_reply_error(); }; exit; } t_relay(); exit; } setflag(2); t_on_failure("1"); route(1); } route[1] { if (!t_relay()) { sl_reply_error(); }; exit; } failure_route[1] { if( t_check_status("408") ) { xlog( "L_NOTICE", "[$Tf] FR: $ci -- TIMEOUT for Gateway $rd\n" ); } else { xlog( "L_NOTICE", "[$Tf] FR: $ci -- $rs reason $rr\n" ); }; if( t_check_status("403") ) { xlog("L_NOTICE", "[$Tf] FR: $ci -- SIP-$rs Forbidden -> ISDN Cause Code 1\n" ); return; }; if( t_check_status("486") ) { xlog("L_NOTICE", "[$Tf] FR: $ci -- SIP-$rs Destination BUSY \n" ); return; }; if( t_check_status("487") ) { xlog("L_NOTICE", "[$Tf] FR: $ci -- SIP-$rs Request Cancelled\n" ); return; }; xlog("L_INFO", "failure_route[1]->: M=$rm RURI=$ru F=$fu T=$tu IP=$si\n"); } |