Buenas a tod@s.
Resulta que ayer decidí migrar de kamailio 1.4.2 a kamailio 1.5
(espero probar la interfaz web en un momento). Después de hacer los
ajustes necesarios (basicamente solo tuve que cambiar algun
loadmodule) me encuentro que el kamailio no se inicia.
Da el siguiente error en el modulo radius:
Mar 27 09:00:52 admundsen /usr/local/kamailio/sbin/kamailio[10526]:
ERROR:auth_radius:mod_init: auth_radius: can't get code for the
Cisco-AVPair attribute
Mar 27 09:00:52 admundsen /usr/local/kamailio/sbin/kamailio[10526]:
ERROR:core:init_mod: failed to initialize module auth_radius
Mar 27 09:00:52 admundsen /usr/local/kamailio/sbin/kamailio[10526]:
ERROR:core:main: error while initializing modules
Básicamente me dice que no puede coger los codigos para el atributo
"Cisco-AVPair", así que googleo un poco y basicamente lo unico que
encuentro es que he de cambiar el source. No es que me moleste, pero
lo tendria que hacer para cada versión.
Para solucionarlo, lo que he hecho es coger el diccionario
dictionary.cisco que esta en el freeradius y copiarlo en equipo donde
esta el kamailio.
Posteriormente he hecho un include en /etc/radiusclient-ng/dictionary
para añadirselo al cliente radius:
$INCLUDE /etc/radiusclient-ng/dictionary.cisco
Así me ha funcionado, y ahora ya inicia el kamailio.
No sé si podria decirse que es un bug, no lo he reportado (mi ingles es pésimo)
Voy a probar la interfaz web.
Un saludo.
Hola,
tengo montado el siguiente escenario:
pjsua1 ----- openser1 ----- asterisk ---- openser2 ----- pjsua2
En pjsua1 tengo una cuenta registrada en opensip1: juan(a)192.168.1.54
En pjsua2 tengo una cuenta registrada en opensip2: pepe(a)192.168.2.56
Entre cada openser y asterisk tengo creada una troncal SIP: troncal1 para
openser1 y troncal2 para openser2.
Y los ficheros de configuración de asterisk los tengo así:
sip.conf
[general]
#Registro ante openser
register=>troncal1:troncal1@192.168.1.54/troncal1
register=>troncal2:troncal2@192.168.2.56/troncal2
#Extensión que funciona como troncal SIP
[troncal1]
type=friend
secret=troncal1
username=troncal1
password=troncal1
fromuser=troncal1
fromdomain=192.168.1.54
host=192.168.1.54
context=from-openser
insecure=invite
[troncal2]
type=friend
secret=troncal2
username=troncal2
password=troncal2
fromuser=troncal2
fromdomain=192.168.2.56
host=192.168.2.56
context=from-openser
insecure=invite
#Usuarios registrados en openser
[pepe]
username=pepe
host=192.168.2.56
qualify=no
context=from-openser
[juan]
username=juan
host=192.168.1.54
qualify=no
context=from-openser
extensions.conf
[from-openser]
exten=>troncal1,1,Dial(SIP/troncal1)
exten=>troncal2,1,Dial(SIP/troncal2)
exten=>pepe,1,Dial(SIP/pepe(a)192.168.2.56,30,Ttm)
exten=>pepe,2,Hangup
exten=>juan,1,Dial(SIP/juan(a)192.168.1.54,30,Ttm)
exten=>juan,2,Hangup
El problema que tengo es que las llamadas o funcionan de pjsua1 a pjsua2 o
de pjsua2 a pjsua1, y el sentido en el que funcionan depende de que openser
arranco primero. Si es el openser2 van de pjsua2 a pjsua1 y si es el
openser1 es de pjsua1 a pjsua2. Yo quiero que las llamadas funcionen en los
dos sentidos sin problemas.
Viendo el fichero de log de asterisk en ambos sentidos y comparándolo veo
las siguientes diferencias:
Llamada OK:
logger.c: No user 'pepe' in SIP users list
logger.c: Found peer for 'troncal2' from '192.168.2.56:5060'
logger.c: Looking for juan in from_openser (domain 192.168.1.54)
Llamada fallida:
logger.c: No user 'juan' in SIP users list
logger.c: No matching peer for 'juan' from '192.168.1.54:1053'
logger.c: Looking for pepe in default (domain 192.168.2.56)
De lo que deduzco que no detecta bien la troncal1, aunque al hacer sip show
registry en asterisk aparece correctamente registrada, y que como busca al
usuario 'pepe' en el contexto default y este no aparece, por eso devuelve el
mensaje '404 Not Found'.
He hecho el siguiente cambio para ver si funcionaba:
Añadir en extensions.conf
[default]
include => from_openser
Entonces la llamada ya funciona en los dos sentidos porque en default si que
aparece el usuario buscado. Sin embargo esta solución no me parece la
adecuada, y lo que interesa es que detecte correctamente las dos troncales
para que funcione sin problemas en los dos sentidos, y a los usuarios los
busque en el contexto adecuado y no en default. El problema es que no sé
como hacerlo, si alguien me puede ayudar se lo agradezco de antemano.
--
View this message in context: http://www.nabble.com/Llamadas-de-openser-a-asterisk-solo-funcionan-en-un-s…
Sent from the OpenSER Users - ES mailing list archive at Nabble.com.
Hola, soy novata usando openser, y me cuesta mucho configurarlo.
Lo que trato de hacer es: consultar un fichero de texto para saber cúal es
el estado de la red, y en función de lo que aparezca en ese fichero, enviar
un mensaje de error para que no se establezca la comunicación, pero tengo
problemas.
Para usar ficheros de texto necesito el módulo db_text y para consultarlo he
usado el módulo avpops, pero no se utilizarlo y me da problemas.
El fichero que quiero leer es muy simple:
estado(int)
1
Y mi fichero de configuración es:
#
# $Id: opensips.cfg 4423 2008-06-27 10:25:01Z henningw $
#
# OpenSIPS basic configuration script
# by Anca Vamanu <anca(a)voice-system.ro>
#
# Please refer to the Core CookBook at
http://www.opensips.org/dokuwiki/doku.php
# for a explanation of possible statements, functions and parameters.
#
####### Global Parameters #########
debug=3
log_stderror=no
log_facility=LOG_LOCAL0
fork=yes
children=4
/* uncomment the following lines to enable debugging */
#debug=6
#fork=no
#log_stderror=yes
/* uncomment the next line to disable TCP (default on) */
#disable_tcp=yes
/* uncomment the next line to enable the auto temporary blacklisting of
not available destinations (default disabled) */
#disable_dns_blacklist=no
/* uncomment the next line to enable IPv6 lookup after IPv4 dns
lookup failures (default disabled) */
#dns_try_ipv6=yes
/* uncomment the next line to disable the auto discovery of local aliases
based on revers DNS on IPs (default on) */
#auto_aliases=no
/* uncomment the following lines to enable TLS support (default off) */
#disable_tls = no
#listen = tls:your_IP:5061
#tls_verify_server = 1
#tls_verify_client = 1
#tls_require_client_certificate = 0
#tls_method = TLSv1
#tls_certificate = "/usr/local/etc/opensips/tls/user/user-cert.pem"
#tls_private_key = "/usr/local/etc/opensips/tls/user/user-privkey.pem"
#tls_ca_list = "/usr/local/etc/opensips/tls/user/user-calist.pem"
port=5060
/* uncomment and configure the following line if you want opensips to
bind on a specific interface/port/proto (default bind on all available)
*/
#listen=udp:192.168.1.2:5060
####### Modules Section ########
#set module path
mpath="/usr/local/lib/opensips/modules/"
/* uncomment next line for MySQL DB support */
#loadmodule "db_mysql.so"
loadmodule "avpops.so"
loadmodule "db_text.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_db.so"
loadmodule "uri.so"
loadmodule "xlog.so"
loadmodule "acc.so"
/* uncomment next lines for MySQL based authentication support
NOTE: a DB (like db_mysql) module must be also loaded */
#loadmodule "auth.so"
#loadmodule "auth_db.so"
/* uncomment next line for aliases support
NOTE: a DB (like db_mysql) module must be also loaded */
#loadmodule "alias_db.so"
/* uncomment next line for multi-domain support
NOTE: a DB (like db_mysql) module must be also loaded
NOTE: be sure and enable multi-domain support in all used modules
(see "multi-module params" section ) */
#loadmodule "domain.so"
/* uncomment the next two lines for presence server support
NOTE: a DB (like db_mysql) module must be also loaded */
#loadmodule "presence.so"
#loadmodule "presence_xml.so"
# ----------------- setting module-specific parameters ---------------
# ----- mi_fifo params -----
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
# ----- rr params -----
# add value to ;lr param to cope with most of the UAs
modparam("rr", "enable_full_lr", 1)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 0)
# ----- rr params -----
modparam("registrar", "method_filtering", 1)
/* uncomment the next line to disable parallel forking via location */
# modparam("registrar", "append_branches", 0)
/* uncomment the next line not to allow more than 10 contacts per AOR */
#modparam("registrar", "max_contacts", 10)
# ----- uri_db params -----
/* by default we disable the DB support in the module as we do not need it
in this configuration */
modparam("uri_db", "use_uri_table", 0)
modparam("uri_db", "db_url", "")
# ----- acc params -----
/* what sepcial events should be accounted ? */
modparam("acc", "early_media", 1)
modparam("acc", "report_ack", 1)
modparam("acc", "report_cancels", 1)
/* by default ww do not adjust the direct of the sequential requests.
if you enable this parameter, be sure the enable "append_fromtag"
in "rr" module */
modparam("acc", "detect_direction", 0)
/* account triggers (flags) */
modparam("acc", "failed_transaction_flag", 3)
modparam("acc", "log_flag", 1)
modparam("acc", "log_missed_flag", 2)
/* uncomment the following lines to enable DB accounting also */
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
# ----- usrloc params -----
modparam("usrloc", "db_mode", 0)
/* uncomment the following lines if you want to enable DB persistency
for location entries */
#modparam("usrloc", "db_mode", 2)
#modparam("usrloc", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
modparam("avpops", "db_url",
"db_text:///usr/local/share/opensips/dbtext/opensi$
modparam("avpops", "avp_table", "avptable")
modparam("db_text", "db_mode", 1)
# ----- auth_db params -----
/* uncomment the following lines if you want to enable the DB based
authentication */
#modparam("auth_db", "calculate_ha1", yes)
#modparam("auth_db", "password_column", "password")
#modparam("auth_db", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
#modparam("auth_db", "load_credentials", "")
# ----- alias_db params -----
/* uncomment the following lines if you want to enable the DB based
aliases */
#modparam("alias_db", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
# ----- domain params -----
/* uncomment the following lines to enable multi-domain detection
support */
#modparam("domain", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
#modparam("domain", "db_mode", 1) # Use caching
# ----- multi-module params -----
/* uncomment the following line if you want to enable multi-domain support
in the modules (dafault off) */
#modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1)
# ----- presence params -----
/* uncomment the following lines if you want to enable presence */
#modparam("presence|presence_xml", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
#modparam("presence_xml", "force_active", 1)
#modparam("presence", "server_address", "sip:192.168.1.2:5060")
####### Routing Logic ########
# main request routing logic
route{
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
if (is_method("BYE")) {
setflag(1); # do accounting ...
setflag(3); # ... even if the transaction fails
}
route(1);
} else {
/* uncomment the following lines if you want to enable presence */
##if (is_method("SUBSCRIBE") && $rd == "your.server.ip.address") {
## # in-dialog subscribe requests
## route(2);
## exit;
##}
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
# non loose-route, but stateful ACK; must be an ACK after a 487 or e.g.
404 from upstream server
t_relay();
exit;
} else {
# ACK without matching transaction ... ignore and discard.\n");
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
#initial requests
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
# authenticate if from local subscriber (uncomment to enable auth)
##if (!(method=="REGISTER") && from_uri==myself)
##{
## if (!proxy_authorize("", "subscriber")) {
## proxy_challenge("", "0");
## exit;
## }
## if (!check_from()) {
## sl_send_reply("403","Forbidden auth ID");
## exit;
## }
##
## consume_credentials();
## # caller authenticated
##}
# record routing
if (!is_method("REGISTER|MESSAGE"))
record_route();
# account only INVITEs
if (is_method("INVITE")) {
setflag(1); # do accounting
}
if (!uri==myself)
/* replace with following line if multi-domain support is used */
##if (!is_uri_host_local())
{
append_hf("P-hint: outbound\r\n");
# if you have some interdomain connections via TLS
##if($rd=="tls_domain1.net") {
## t_relay("tls:domain1.net");
## exit;
##} else if($rd=="tls_domain2.net") {
## t_relay("tls:domain2.net");
## exit;
##}
route(1);
}
# requests for my domain
/* uncomment this if you want to enable presence server
and comment the next 'if' block
NOTE: uncomment also the definition of route[2] from below */
##if( is_method("PUBLISH|SUBSCRIBE"))
## route(2);
if (is_method("PUBLISH"))
{
sl_send_reply("503", "Service Unavailable");
exit;
}
if (is_method("REGISTER"))
{
# authenticate the REGISTER requests (uncomment to enable auth)
##if (!www_authorize("", "subscriber"))
##{
## www_challenge("", "0");
## exit;
##}
##
##if (!check_to())
##{
## sl_send_reply("403","Forbidden auth ID");
## exit;
##}
if (!save("location"))
sl_reply_error();
exit;
}
if ($rU==NULL) {
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
# apply DB based aliases (uncomment to enable)
##alias_db_lookup("dbaliases");
if (!lookup("location")) {
switch ($retcode) {
case -1:
case -3:
t_newtran();
t_reply("404", "Not Found");
exit;
case -2:
sl_send_reply("405", "Method Not Allowed");
exit;
}
}
# when routing via usrloc, log the missed calls also
setflag(2);
route(1);
route(3);
}
route[1] {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
t_on_branch("2");
t_on_reply("2");
t_on_failure("1");
}
if (!t_relay()) {
sl_reply_error();
};
exit;
}
route[3]
{
avp_db_query("SELECT estado FROM ejemplo", "$avp(s:estado)");
if (!avp_check("$avp(s:estado)","re/(0|1)/g"))
{
sl_send_reply("404", "Not Found");
exit;
}
else if ($avp(s:estado)=="0")
{
sl_send_reply("404", "Not found");
exit;
}
}
branch_route[2] {
xlog("new branch at $ru\n");
}
onreply_route[2] {
xlog("incoming reply\n");
}
failure_route[1] {
if (t_was_cancelled()) {
exit;
}
}
Resalto en negrita lo que he modificado respecto al fichero original.
Y al arrancar openser obtengo en el fichero de log lo siguiente:
WARNING:core:fix_socket_list: could not rev. resolve 192.168.1.54
INFO:core:init_tcp: using epoll_lt as the TCP io watch method (auto
detected)
NOTICE:core:main: version: opensips 1.4.4-notls (i386/linux)
INFO:core:main: using 32 Mb shared memory
INFO:core:main: using 1 Mb private memory per process
INFO:avpops:avpops_init: initializing...
ERROR:core:db_check_api: module db_db_text does not export db_use_table
function
CRITICAL:avpops:avpops_db_bind: cannot bind to database module! Did you
load a database module ?
ERROR:core:init_mod: failed to initialize module avpops
ERROR:core:main: error while initializing modules
Si alguien me puede ayudar se lo agradecería.
--
View this message in context: http://www.nabble.com/Consulta-un-fichero-con-openser-tp22563438p22563438.h…
Sent from the OpenSER Users - ES mailing list archive at Nabble.com.
Pude retomar esto que deje hace mucho tiempo en Stand By... Y tengo una
pregunta conceptual:
El esquema es el siguiente:
PBX (Propietaria) ---- Asterisk ----- Kamailio ------ Phone (que esta detras
de un router Linksys mediante NAT)
La extension en cuestion es la 6001, la cual esta configurada en Asterisk
como:
Host: IP kamailio
Nat: yes
Qualify: no
En kamailio esta correctamente registrada, con los flags correctos
reconociendo el NAT. (Si llamo de una extension registrada en kamailio a
esta extension, la comunicacion es correcta)
Lo que sucede es lo siguiente:
Cuando desde una extension de la PBX propietaria disco el numero 6001, esto
llega al asterisk, el asterisk lo reenvia al kamailio, y kamailio toma el
INVITE y lo reenvia a la direccion IP Privada del telefono. Para que quede
mas claro:
IP PBX propietaria: 192.168.2.1
IP Asterisk: 200.xx.xx.87
IP Kamailio: 200.xx.xx.53
IP privada telefono: 192.168.2.10
U 200.xx.xx.87:5060 -> 200.xx.xx.53:5060
INVITE sip:6001@192.168.2.10:5060 SIP/2.0.
Via: SIP/2.0/UDP 200.xx.xx.87:5060;branch=z9hG4bK66c318cc;rport.
From: "Propietario" <sip:220@200.xx.xx.87>;tag=as1f07b3ea.
To: <sip:6001@192.168.2.10:5060>.
Contact: <sip:220@200.xx.xx.87>.
Call-ID: 7fb490c8634757322217b63e51bd0f12(a)200.xx.xx.87.
CSeq: 102 INVITE.
User-Agent: Asterisk PBX.
Max-Forwards: 70.
INVITE sip:6001@192.168.2.10:5060 SIP/2.0.
Record-Route: <sip:200.xx.xx.53;lr=on;ftag=as1f07b3ea>.
Via: SIP/2.0/UDP 200.xx.xx.53;branch=z9hG4bK890f.87c7d145.0.
Via: SIP/2.0/UDP 200.xx.xx.87:5060;branch=z9hG4bK66c318cc;rport=5060.
From: "Propietario" <sip:220@200.xx.xx.87>;tag=as1f07b3ea.
To: <sip:6001@192.168.2.10:5060>.
Contact: <sip:220@200.xx.xx.87>.
Call-ID: 7fb490c8634757322217b63e51bd0f12(a)200.xx.xx.87.
CSeq: 102 INVITE.
User-Agent: Asterisk PBX.
Max-Forwards: 69.
Por que hace este INVITE a la IP privada? y no toma la Publica haciendo
correctamente el NAT?
Gracias.
--
View this message in context: http://www.nabble.com/Pregunta-Conceptual%21-tp22567852p22567852.html
Sent from the OpenSER Users - ES mailing list archive at Nabble.com.
Buenas a todos.
En mi empresa hay montado un Callmanager con IP's privadas , pero yo
al margen monté un kamailio con IP publica para que los usuarios se
puedan registrar y hacer videoconferencias. El tema de la presencia
solo lo he conseguido hacer funcionar con el X-Lite.
Ahora la idea que tienen es unir ambas cosas, para lo cual en otro PC
monté un asterisk con un trunk SIP al callmanager (version 4.1 de
callmanager) y en el kamailio le digo que lo reenvie al asterisk (que
dispone de IP publica e IP privada).
También en la maquina que esta el asterisk, le he instalado el
rtpproxy, quedandose el siguiente montaje:
|----Ekiga Linux-----| | kamailio
| | asterisk |
| Callmanager |
|Cliente (IP Publica|----->| IP Publica
|------->|IP Publica IP--- Privada|------| IP Privada
|
|-------------------------| |
rewritehostport("IP_asterisk:5060");| |
rtpproxy | | |
No quiero hacer NAT.
Las pruebas de momento no me funcionan, lo que no sé es si el esquema
es correcto y deberia funcionar, y así centrarme en la configuración.
¿Estoy metiendo la pata en el esquema?
¿Me faltan elementos?
Gracias
Buenas a todos.
En mi empresa hay montado un Callmanager con IP's privadas , pero yo
al margen monté un kamailio con IP publica para que los usuarios se
puedan registrar y hacer videoconferencias.
Ahora la idea que tienen es unir ambas cosas, para lo cual en otro PC
monté un asterisk con un trunk SIP al callmanager (version 4.1 de
callmanager) y en el kamailio le digo que lo reenvie a lPC con asterisk (que
dispone de IP publica e IP privada).
También en la maquina que esta el asterisk, le he instalado el
rtpproxy, quedandose el siguiente montaje:
http://s1.subirimagenes.com/imagen/previo/thump_1982023asterisk.png
No quiero hacer NAT.
Las pruebas de momento no me funcionan, lo que no sé es si el esquema
es correcto y deberia funcionar, y así centrarme en la configuración.
¿Estoy metiendo la pata en el esquema?
¿Me faltan elementos?
Gracias a todos.
Hola, soy novata usando openser, y me cuesta mucho configurarlo.
Lo que trato de hacer es: consultar un fichero de texto para saber cúal es
el estado de la red, y en función de lo que aparezca en ese fichero, enviar
un mensaje de error para que no se establezca la comunicación, pero tengo
problemas.
Para usar ficheros de texto necesito el módulo db_text y para consultarlo he
usado el módulo avpops, pero no se utilizarlo y me da problemas.
El fichero que quiero leer es muy simple:
estado(int)
1
Y mi fichero de configuración es:
#
# $Id: opensips.cfg 4423 2008-06-27 10:25:01Z henningw $
#
# OpenSIPS basic configuration script
# by Anca Vamanu
#
# Please refer to the Core CookBook at
http://www.opensips.org/dokuwiki/doku.php
# for a explanation of possible statements, functions and parameters.
#
####### Global Parameters #########
debug=3
log_stderror=no
log_facility=LOG_LOCAL0
fork=yes
children=4
/* uncomment the following lines to enable debugging */
#debug=6
#fork=no
#log_stderror=yes
/* uncomment the next line to disable TCP (default on) */
#disable_tcp=yes
/* uncomment the next line to enable the auto temporary blacklisting of
not available destinations (default disabled) */
#disable_dns_blacklist=no
/* uncomment the next line to enable IPv6 lookup after IPv4 dns
lookup failures (default disabled) */
#dns_try_ipv6=yes
/* uncomment the next line to disable the auto discovery of local aliases
based on revers DNS on IPs (default on) */
#auto_aliases=no
/* uncomment the following lines to enable TLS support (default off) */
#disable_tls = no
#listen = tls:your_IP:5061
#tls_verify_server = 1
#tls_verify_client = 1
#tls_require_client_certificate = 0
#tls_method = TLSv1
#tls_certificate = "/usr/local/etc/opensips/tls/user/user-cert.pem"
#tls_private_key = "/usr/local/etc/opensips/tls/user/user-privkey.pem"
#tls_ca_list = "/usr/local/etc/opensips/tls/user/user-calist.pem"
port=5060
/* uncomment and configure the following line if you want opensips to
bind on a specific interface/port/proto (default bind on all available)
*/
#listen=udp:192.168.1.2:5060
####### Modules Section ########
#set module path
mpath="/usr/local/lib/opensips/modules/"
/* uncomment next line for MySQL DB support */
#loadmodule "db_mysql.so"
loadmodule "avpops.so"
loadmodule "db_text.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_db.so"
loadmodule "uri.so"
loadmodule "xlog.so"
loadmodule "acc.so"
/* uncomment next lines for MySQL based authentication support
NOTE: a DB (like db_mysql) module must be also loaded */
#loadmodule "auth.so"
#loadmodule "auth_db.so"
/* uncomment next line for aliases support
NOTE: a DB (like db_mysql) module must be also loaded */
#loadmodule "alias_db.so"
/* uncomment next line for multi-domain support
NOTE: a DB (like db_mysql) module must be also loaded
NOTE: be sure and enable multi-domain support in all used modules
(see "multi-module params" section ) */
#loadmodule "domain.so"
/* uncomment the next two lines for presence server support
NOTE: a DB (like db_mysql) module must be also loaded */
#loadmodule "presence.so"
#loadmodule "presence_xml.so"
# ----------------- setting module-specific parameters ---------------
# ----- mi_fifo params -----
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
# ----- rr params -----
# add value to ;lr param to cope with most of the UAs
modparam("rr", "enable_full_lr", 1)
# do not append from tag to the RR (no need for this script)
modparam("rr", "append_fromtag", 0)
# ----- rr params -----
modparam("registrar", "method_filtering", 1)
/* uncomment the next line to disable parallel forking via location */
# modparam("registrar", "append_branches", 0)
/* uncomment the next line not to allow more than 10 contacts per AOR */
#modparam("registrar", "max_contacts", 10)
# ----- uri_db params -----
/* by default we disable the DB support in the module as we do not need it
in this configuration */
modparam("uri_db", "use_uri_table", 0)
modparam("uri_db", "db_url", "")
# ----- acc params -----
/* what sepcial events should be accounted ? */
modparam("acc", "early_media", 1)
modparam("acc", "report_ack", 1)
modparam("acc", "report_cancels", 1)
/* by default ww do not adjust the direct of the sequential requests.
if you enable this parameter, be sure the enable "append_fromtag"
in "rr" module */
modparam("acc", "detect_direction", 0)
/* account triggers (flags) */
modparam("acc", "failed_transaction_flag", 3)
modparam("acc", "log_flag", 1)
modparam("acc", "log_missed_flag", 2)
/* uncomment the following lines to enable DB accounting also */
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
# ----- usrloc params -----
modparam("usrloc", "db_mode", 0)
/* uncomment the following lines if you want to enable DB persistency
for location entries */
#modparam("usrloc", "db_mode", 2)
#modparam("usrloc", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
modparam("avpops", "db_url",
"db_text:///usr/local/share/opensips/dbtext/opensi$
modparam("avpops", "avp_table", "avptable")
modparam("db_text", "db_mode", 1)
# ----- auth_db params -----
/* uncomment the following lines if you want to enable the DB based
authentication */
#modparam("auth_db", "calculate_ha1", yes)
#modparam("auth_db", "password_column", "password")
#modparam("auth_db", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
#modparam("auth_db", "load_credentials", "")
# ----- alias_db params -----
/* uncomment the following lines if you want to enable the DB based
aliases */
#modparam("alias_db", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
# ----- domain params -----
/* uncomment the following lines to enable multi-domain detection
support */
#modparam("domain", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
#modparam("domain", "db_mode", 1) # Use caching
# ----- multi-module params -----
/* uncomment the following line if you want to enable multi-domain support
in the modules (dafault off) */
#modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1)
# ----- presence params -----
/* uncomment the following lines if you want to enable presence */
#modparam("presence|presence_xml", "db_url",
# "mysql://opensips:opensipsrw@localhost/opensips")
#modparam("presence_xml", "force_active", 1)
#modparam("presence", "server_address", "sip:192.168.1.2:5060")
####### Routing Logic ########
# main request routing logic
route{
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if (has_totag()) {
# sequential request withing a dialog should
# take the path determined by record-routing
if (loose_route()) {
if (is_method("BYE")) {
setflag(1); # do accounting ...
setflag(3); # ... even if the transaction fails
}
route(1);
} else {
/* uncomment the following lines if you want to enable presence */
##if (is_method("SUBSCRIBE") && $rd == "your.server.ip.address") {
## # in-dialog subscribe requests
## route(2);
## exit;
##}
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
# non loose-route, but stateful ACK; must be an ACK after a 487 or e.g.
404 from upstream server
t_relay();
exit;
} else {
# ACK without matching transaction ... ignore and discard.\n");
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
#initial requests
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
# authenticate if from local subscriber (uncomment to enable auth)
##if (!(method=="REGISTER") && from_uri==myself)
##{
## if (!proxy_authorize("", "subscriber")) {
## proxy_challenge("", "0");
## exit;
## }
## if (!check_from()) {
## sl_send_reply("403","Forbidden auth ID");
## exit;
## }
##
## consume_credentials();
## # caller authenticated
##}
# record routing
if (!is_method("REGISTER|MESSAGE"))
record_route();
# account only INVITEs
if (is_method("INVITE")) {
setflag(1); # do accounting
}
if (!uri==myself)
/* replace with following line if multi-domain support is used */
##if (!is_uri_host_local())
{
append_hf("P-hint: outbound\r\n");
# if you have some interdomain connections via TLS
##if($rd=="tls_domain1.net") {
## t_relay("tls:domain1.net");
## exit;
##} else if($rd=="tls_domain2.net") {
## t_relay("tls:domain2.net");
## exit;
##}
route(1);
}
# requests for my domain
/* uncomment this if you want to enable presence server
and comment the next 'if' block
NOTE: uncomment also the definition of route[2] from below */
##if( is_method("PUBLISH|SUBSCRIBE"))
## route(2);
if (is_method("PUBLISH"))
{
sl_send_reply("503", "Service Unavailable");
exit;
}
if (is_method("REGISTER"))
{
# authenticate the REGISTER requests (uncomment to enable auth)
##if (!www_authorize("", "subscriber"))
##{
## www_challenge("", "0");
## exit;
##}
##
##if (!check_to())
##{
## sl_send_reply("403","Forbidden auth ID");
## exit;
##}
if (!save("location"))
sl_reply_error();
exit;
}
if ($rU==NULL) {
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
# apply DB based aliases (uncomment to enable)
##alias_db_lookup("dbaliases");
if (!lookup("location")) {
switch ($retcode) {
case -1:
case -3:
t_newtran();
t_reply("404", "Not Found");
exit;
case -2:
sl_send_reply("405", "Method Not Allowed");
exit;
}
}
# when routing via usrloc, log the missed calls also
setflag(2);
route(1);
route(3);
}
route[1] {
# for INVITEs enable some additional helper routes
if (is_method("INVITE")) {
t_on_branch("2");
t_on_reply("2");
t_on_failure("1");
}
if (!t_relay()) {
sl_reply_error();
};
exit;
}
route[3]
{
avp_db_query("SELECT estado FROM ejemplo", "$avp(s:estado)");
if (!avp_check("$avp(s:estado)","re/(0|1)/g"))
{
sl_send_reply("404", "Not Found");
exit;
}
else if ($avp(s:estado)=="0")
{
sl_send_reply("404", "Not found");
exit;
}
}
branch_route[2] {
xlog("new branch at $ru\n");
}
onreply_route[2] {
xlog("incoming reply\n");
}
failure_route[1] {
if (t_was_cancelled()) {
exit;
}
}
Resalto en negrita lo que he modificado respecto al fichero original.
Y al arrancar openser obtengo en el fichero de log lo siguiente:
WARNING:core:fix_socket_list: could not rev. resolve 192.168.1.54
INFO:core:init_tcp: using epoll_lt as the TCP io watch method (auto
detected)
NOTICE:core:main: version: opensips 1.4.4-notls (i386/linux)
INFO:core:main: using 32 Mb shared memory
INFO:core:main: using 1 Mb private memory per process
INFO:avpops:avpops_init: initializing...
ERROR:core:db_check_api: module db_db_text does not export db_use_table
function
CRITICAL:avpops:avpops_db_bind: cannot bind to database module! Did you
load a database module ?
ERROR:core:init_mod: failed to initialize module avpops
ERROR:core:main: error while initializing modules
Si alguien me puede ayudar se lo agradecería.
--
View this message in context: http://www.nabble.com/Consulta-un-fichero-con-openser-tp22563432p22563432.h…
Sent from the OpenSER Users - ES mailing list archive at Nabble.com.
Saludos
Me he encontrado con un tratamiento que hace record-route a los PUBLISH en un
fichero de configuración de Kamailio. Me he dado cuenta de que en el fichero
por defecto también aparece así:
if (!is_method("REGISTER|MESSAGE"))
record_route();
if( is_method("PUBLISH|SUBSCRIBE")){
sl_send_reply("503", "Service Unavailable");
exit;
}
¿Por qué se le pone el record-route al publish? No es una initial request que
establezca un diálogo y según el rfc 3903:
A PUBLISH request does not establish a dialog. A UAC MAY include a
Route header field in a PUBLISH request based on a pre-existing route
set as described in Section 8.1 of RFC 3261 [4]. The Record-Route
header field has no meaning in PUBLISH requests or responses, and
MUST be ignored if present.
Lo que me mosquea es que los de Kamailio, que saben de esto mucho más que yo,
hayan puesto el record-route y se me esté escapando algo.