Untitled Document I´m has a problem that my openser sometimes not accounting bye method and this cause a call without pay. See the openser.cfg: # # $Id: ser.cfg,v 1.25.2.1 2005/02/18 14:30:44 andrei Exp $ # # simple quick-start config script #
# ----------- global configuration parameters ------------------------
debug=4 # debug level (cmd line: -dddddddddd) ##-- # # Uncomment these lines to daemonize fork=yes log_stderror=no # (cmd line: -E) ##-- # # Uncomment these lines to enter debugging mode #fork=no #log_stderror=yes ##--
alias=sip.processavoip.net listen=201.32.70.20 #syn_branch=1 memlog=3 sip_warning=1 server_signature=yes reply_to_via=0 mhomed=0 disable_dns_blacklist=yes
unix_sock="/tmp/openser.sock"
check_via=0 # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) port=5060 children=4 mpath="/usr/local/lib/openser/modules/"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database loadmodule "mysql.so" loadmodule "sl.so" loadmodule "tm.so" loadmodule "rr.so" loadmodule "maxfwd.so" loadmodule "usrloc.so" loadmodule "registrar.so" loadmodule "textops.so" loadmodule "auth.so" loadmodule "auth_radius.so" loadmodule "uri.so" loadmodule "domain.so" loadmodule "permissions.so" loadmodule "mediaproxy.so" loadmodule "nathelper.so" loadmodule "acc.so" loadmodule "xlog.so" loadmodule "dbtext.so" loadmodule "uri_db.so" loadmodule "mi_fifo.so" loadmodule "group.so" # ----------------- setting module-specific parameters ---------------
# -- mi-fifo params -- modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
# -- usrloc params -- modparam("usrloc", "db_mode", 2) modparam("usrloc", "nat_bflag", 6) modparam("usrloc", "domain_column", "fk_domains") modparam("usrloc", "user_column", "fk_accounts")
# -- rr params -- # add value to ;lr param to make some broken UAs happy modparam("rr", "enable_full_lr", 1)
## -- database params -- modparam("acc|usrloc|group|domain|uri_db|permissions", "db_url", "mysql://root:master@localhost/openser")
# -- radius params -- modparam("acc|auth_radius", "radius_config", "/etc/radiusclient-ng/radiusclient.conf")
# -- radius permissions -- modparam("permissions", "db_mode", 1) modparam("permissions", "trusted_table", "trusted")
# -- group params -- modparam("group", "table", "accounts_groups") modparam("group", "user_column", "fk_accounts") modparam("group", "domain_column", "fk_domains") modparam("group", "group_column", "pk_accounts_groups") modparam("group", "use_domain", 0)
## -- acc params -- modparam("acc", "radius_missed_flag", 3) modparam("acc", "radius_flag", 2) #modparam("acc", "radius_extra", "via=$hdr(Via[*]); email=$avp(s:email)") modparam("acc", "log_level", 2) modparam("acc", "log_extra", "src_user=$fU;src_domain=$fd;dst_user=$rU;dst_domain=$rd") modparam("acc", "radius_extra", "User-Name=$fU;Suffix=$fd;Sip-Translated-Request-URI=$ru") modparam("acc", "service_type", 15) modparam("acc", "failed_transaction_flag", 1) modparam("acc", "report_ack", 1) modparam("acc", "report_cancels", 1) modparam("acc", "log_missed_flag", 2) modparam("acc", "log_flag", 1) ## -- acc params without radius -- #modparam("acc", "db_missed_flag", 3) #modparam("acc", "db_flag", 2) #modparam("acc", "db_table_acc", "call_history") #modparam("acc", "db_table_missed_calls", "call_history_missed")
# -- uri_db params -- modparam("uri_db", "subscriber_table", "accounts") modparam("uri_db", "subscriber_domain_column", "fk_domains") modparam("uri_db", "subscriber_user_column", "pk_accounts")
# -- domain params -- modparam("domain", "domain_table", "domains") modparam("domain", "domain_col", "pk_domains")
# -- nathelper, mediaproxy nd registrar params -- modparam("nathelper", "sipping_bflag", 7) modparam("nathelper", "sipping_from", "sip:pinger@openser.org") modparam("nathelper", "rtpproxy_disable", 1) modparam("nathelper", "natping_interval", 30) modparam("nathelper", "ping_nated_only", 1) # Ping only clients behind NAT modparam("registrar|nathelper", "received_avp", "$avp(i:42)") # to configure nat at openser 1.2, 1.3 or 1.4 modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy.sock") modparam("mediaproxy", "natping_interval", 30) #modparam("mediaproxy", "sip_asymmetrics", "/etc/openser/sip-clients") #modparam("mediaproxy", "rtp_asymmetrics", "/etc/openser/rtp-clients") #modparam("registrar", "received_avp", "$avp(s:rcv)") # to configure nat at openser 1.2, 1.3 or 1.4
# -- tm params -- # set time for which ser will be waiting for a final response; # fr_inv_timer sets value for INVITE transactions, fr_timer # for all others #modparam("tm", "fr_inv_timer", 15 ) #Tempo maximo do ring antes de atender #modparam("tm", "fr_timer", 1) #modparam("tm", "wt_timer", 1)
# ------------------------- request routing logic -------------------
# main routing logic
route { # initial sanity checks -- messages with # max_forwards==0, or excessively long requests if (!mf_process_maxfwd_header("10")) { sl_send_reply("483","Muitos Hops"); log(1, "486: Muitos Hops\n"); exit; }; if (msg:len >= 2048 ) { sl_send_reply("513", "Message to big"); log(1, "513: Message too bi \n"); exit; }; ##-- # Eh feita a gravacao de todas as mensagens para se certificar que todas as mensagens # passem pelo proxy o que eh importante particularmente se as entidades estao usando # um protocolo de transporte diferente ##-- if (method!="REGISTER") { record_route(); }; route(6); ##-- # Secao de finalizacao da chamada ##-- if (method=="BYE" || method=="CANCEL") { end_media_session(); }; ##-- # mensagens subsequentes dentro de um dialogo deveriam tomar um caminho pre-determinado # pela gravacao das rotas (record route) ##-- if (loose_route()) { # marca a logica de roteamento no pedido append_hf("P-hint: rr_enforced\r\n"); if (has_totag() && (method=="INVITE" || method=="ACK")) { xlog("L_ERR", "Main Route: Fixing SDP to $fu $rm (loose route)\n"); if (client_nat_test("3") || isflagset(5)) { setbflag(6); use_media_proxy(); }; }; xlog("L_ERR", "Main Route: Loose Route relaying\n"); route(1); exit; }; if (!uri==myself) { # marca a logica de roteamento no pedido append_hf("P-hint: rr_enforced\r\n"); xlog("L_ERR", "Main Route: Relaing mesage to proxy destination \n"); route(4); route(1); }; ##-- # Verifica baseado na tabela de dominios se a parte host da R-URI comtem um dos dominios # quais o proxy eh responsavel ##-- if (!is_uri_host_local()) { if (is_from_local() || allow_trusted()) { route(4); route(1); } else { sl_send_reply("403", "Forbinden..."); } exit; }; ##-- # A rotina abixo eh chamada para marcar o registro com NAT ##-- if (method=="CANCEL") { route(1); exit; } else if (method=="REGISTER") { route(2); exit; } else if (method=="INVITE") { route(3); exit; }; ##-- # Verifica se existem aliases para este endereco e se eles nao pertencem # a teste dominio encaminhamos para frente ##-- lookup("aliases"); if (uri!=myself) { xlog("L_ERR", "Main Route: aliases relayin to other domain proxy\n"); route(4); route(1); exit; }; ##-- # Verifica se encontra o usuario na base de localizacao ##-- if (!lookup("location")) { sl_send_reply("404", "Usuario nao encontrado"); exit; }; route(1); exit; }
route[1] { ##-- # Envie isto agora; use "statefull fowarding" pois funciona de forma confiavel de UDP para TCP # Ativa a contabilizacao das chamadas ##-- xlog("L_ERR", "Route[1]: Relaying message\r\n"); setflag(2); ##-- # Ativa a contabilizacao das chamadas perdidas ##-- setflag(3); t_on_reply("1"); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); }; }
route[2] { ##-- # Tratamento padrao para as mensagens de Register ##-- sl_send_reply("100", "Registrando...."); xlog("L_ERR", "Route[2]: Trying Auth: $fu $si\n"); if (isflagset(5) && client_nat_test("7")) { xlog("L_ERR", "Route[2]: Client behind NAT - flag(6)\n"); setbflag(6); fix_nated_register(); force_rport(); # se quiser usar natping options descomente a linha abaixo # setbflag(7); }; if (!radius_www_authorize("")) { www_challenge("", "0"); xlog("L_ERR", "Route[2]: Client Unauthorized: $fu $si\r\n"); sl_send_reply("401", "Unauthorized"); exit; }; if (!check_to()) { xlog("L_ERR", "Route[2]: Client Unauthorized: $fu $si\r\n"); sl_send_reply("401", "Unauthorized"); exit; } else { xlog("L_ERR", "Route[2]: Authenticate: $fu $si\r\n"); }; consume_credentials(); if (!save("location")) { xlog("L_ERR", "Route[2]: Can't save register location\r\n"); sl_reply_error(); }; } route[3] { ##-- # Tratamento padrao para as mensagens de INVITE ##-- xlog("L_ERR", "Route[3]: INVITE: $fu -> $tu $ci\r\n"); # setflag(1); if (!allow_trusted()) { if (!radius_proxy_authorize("")) { proxy_challenge("", "0"); # Realm will be autogenerated exit; } else if (!check_from()) { sl_send_reply("403", "Usue from=ID"); xlog("L_ERR", "Route[3]: Error 403 $fu -> $tu\r\n"); exit; }; } consume_credentials(); ##-- # Verifica se existem aliases para este endereco e se eles nao pertencem # a teste dominio encaminhamos para frente ##-- lookup("aliases"); if (uri!=myself) { xlog("L_ERR", "Main Route: aliases relayin to other domain proxy\n"); route(4); route(1); }; ##-- # VoIP Local ##-- if (uri=~"sip:[1-9][0-9]+@.*") { xlog("L_NOTICE", "OpenSER: Ligacao VoIP local: $fU -> $tu\n"); } else { ##-- # Nacional ##-- if (uri=~"sip:0[1-9][0-9]+@.*") { xlog("L_NOTICE", "OpenSER: Ligacao Nacional: $fU -> $tu\n"); } else { ##-- # Internacional ##-- if (uri=~"sip:00[1-9][0-9]+@.*") { xlog("L_NOTICE", "OpenSER: Ligacao Interacional: $fU -> $tu\n"); }; }; route(5); exit; }; if (!lookup("location")) { append_hf("P-hint: usuario nao encontrado\r\n"); sl_send_reply("404", "Usuario nao encontrado"); exit; }; append_hf("P_hint: usrloc applied\r\n"); t_on_failure("1"); route(4); route(1); }
route[4] { ##-- # Secao de travessia do nat ##-- if (isflagset(5)) { setbflag(6); }; if (isflagset(5) || isbflagset(6) || isbflagset(7)) { use_media_proxy(); xlog("L_ERR", "Rota[4]: Travessia de NAT mediaproxy\n"); }; }
route[5] { ##-- # Encaminhamento para a rede publica (PSTN) ##-- xlog("L_ERR", "Route[5]: Relaying to PSTN\n"); rewritehostport("201.32.70.21"); route(4); route(1); }
route[6] { force_rport(); if (nat_uac_test("19")) { if (method=="REGISTER") { fix_nated_register(); } else { fix_nated_contact(); }; setflag(5); }; }
failure_route[1] { if (t_check_status("487")) { exit; }; if (isbflagset(6) || isflagset(5)) { end_media_session(); }; onreply_route[1] { ##-- # Bloco de tratamento de respostas ##-- if ((isflagset(5) || isbflagset(6)) && status=~"(180)|(183)|(2[0-9][0-9])") { use_media_proxy(); # search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes'); } if (isbflagset(6)) { fix_nated_contact(); } }
--------------------------------------------------------------------------
Alcindo Schleder Sistema Processa Acessoria e Comunicações Ltda.
a.. MSN: a_schleder@hotmail.com b.. Skipe: alcindo_schleder Demétrio P. dos Santos, 705 - 95670-000 - Gramado-RS-Brasil Celular + 55 54 9966 7591 alcindo@processa.org Fone +55 54 3286-1738 comercial@processa.org
El Sábado, 5 de Abril de 2008, MagoDaViola escribió:
Untitled Document I´m has a problem that my openser sometimes not accounting bye method and this cause a call without pay.
Are you sure that the BYE exists? Imagine during a call a phone crashes, then there is NOT BYE. If you use MediaProxy, it can be configured to update "radact" table (via radius or MySQL) in case of RTP timeout. Read MediaProxy doc about it.