<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>
Al final el openser.cfg me ha quedado así, vosotros pensais que está bien??<BR>
&nbsp;<BR>
<BR>####### Global Parameters #########<BR>
debug=3<BR>log_stderror=yes<BR>#log_facility=LOG_LOCAL0<BR>
fork=no<BR>children=4<BR>dns=no<BR>rev_dns=no<BR>
/* uncomment the following lines to enable debugging */<BR>#debug=6<BR>#fork=no<BR>#log_stderror=yes<BR>
/* uncomment the next line to disable TCP (default on) */<BR>#disable_tcp=yes<BR>
/* uncomment the next line to enable the auto temporary blacklisting of<BR>&nbsp;&nbsp; not available destinations (default disabled) */<BR>#disable_dns_blacklist=no<BR>
/* uncomment the next line to enable IPv6 lookup after IPv4 dns<BR>&nbsp;&nbsp; lookup failures (default disabled) */<BR>#dns_try_ipv6=yes<BR>
/* uncomment the next line to disable the auto discovery of local aliases<BR>&nbsp;&nbsp; based on revers DNS on IPs (default on) */<BR>#auto_aliases=no<BR>
/* uncomment the following lines to enable TLS support&nbsp; (default off) */<BR>#disable_tls = no<BR>#listen = tls:your_IP:5061<BR>#tls_verify_server = 1<BR>#tls_verify_client = 1<BR>#tls_require_client_certificate = 0<BR>#tls_method = TLSv1<BR>#tls_certificate = "/usr/local/etc/openser/tls/user/user-cert.pem"<BR>#tls_private_key = "/usr/local/etc/openser/tls/user/user-privkey.pem"<BR>#tls_ca_list = "/usr/local/etc/openser/tls/user/user-calist.pem"<BR>
<BR>port=5060<BR>
/* uncomment and configure the following line if you want openser to<BR>&nbsp;&nbsp; bind on a specific interface/port/proto (default bind on all available) */<BR>listen=udp:192.168.1.2:5060<BR>
<BR>####### Modules Section ########<BR>
#set module path<BR>mpath="/usr/local/lib/openser/modules/"<BR>
/* uncomment next line for MySQL DB support */<BR>loadmodule "mysql.so"<BR>loadmodule "sl.so"<BR>loadmodule "tm.so"<BR>loadmodule "rr.so"<BR>loadmodule "maxfwd.so"<BR>loadmodule "usrloc.so"<BR>loadmodule "registrar.so"<BR>loadmodule "textops.so"<BR>loadmodule "mi_fifo.so"<BR>loadmodule "uri_db.so"<BR>loadmodule "uri.so"<BR>loadmodule "xlog.so"<BR>#loadmodule "acc.so"<BR>/* uncomment next lines for MySQL based authentication support<BR>&nbsp;&nbsp; NOTE: a DB (like mysql) module must be also loaded */<BR>loadmodule "auth.so"<BR>loadmodule "auth_db.so"<BR>/* uncomment next line for aliases support<BR>&nbsp;&nbsp; NOTE: a DB (like mysql) module must be also loaded */<BR>#loadmodule "alias_db.so"<BR>/* uncomment next line for multi-domain support<BR>&nbsp;&nbsp; NOTE: a DB (like mysql) module must be also loaded<BR>&nbsp;&nbsp; NOTE: be sure and enable multi-domain support in all used modules<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (see "multi-module params" section ) */<BR>loadmodule "domain.so"<BR>/* uncomment the next two lines for presence server support<BR>&nbsp;&nbsp; NOTE: a DB (like mysql) module must be also loaded */<BR>#loadmodule "presence.so"<BR>#loadmodule "presence_xml.so"<BR>
<BR># ----------------- setting module-specific parameters ---------------<BR>
<BR># ----- mi_fifo params -----<BR>modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")<BR>
<BR># ----- rr params -----<BR># add value to ;lr param to cope with most of the UAs<BR>modparam("rr", "enable_full_lr", 1)<BR># do not append from tag to the RR (no need for this script)<BR>#modparam("rr", "append_fromtag", 0)<BR>
<BR># ----- rr params -----<BR>#modparam("registrar", "method_filtering", 1)<BR>/* uncomment the next line to disable parallel forking via location */<BR># modparam("registrar", "append_branches", 0)<BR>/* uncomment the next line not to allow more than 10 contacts per AOR */<BR>#modparam("registrar", "max_contacts", 10)<BR>
<BR># ----- uri_db params -----<BR>/* by default we disable the DB support in the module as we do not need it<BR>&nbsp;&nbsp; in this configuration */<BR>modparam("uri_db", "use_uri_table", 0)<BR>modparam("uri_db", "db_url", "mysql://openser:openserrw@localhost/openser")<BR>
<BR># ----- acc params -----<BR>/* what sepcial events should be accounted ? */<BR>#modparam("acc", "early_media", 1)<BR>#modparam("acc", "report_ack", 1)<BR>#modparam("acc", "report_cancels", 1)<BR>/* by default ww do not adjust the direct of the sequential requests.<BR>&nbsp;&nbsp; if you enable this parameter, be sure the enable "append_fromtag"<BR>&nbsp;&nbsp; in "rr" module */<BR>#modparam("acc", "detect_direction", 0)<BR>/* account triggers (flags) */<BR>#modparam("acc", "failed_transaction_flag", 3)<BR>#modparam("acc", "log_flag", 1)<BR>#modparam("acc", "log_missed_flag", 2)<BR>/* uncomment the following lines to enable DB accounting also */<BR>#modparam("acc", "db_flag", 1)<BR>#modparam("acc", "db_missed_flag", 2)<BR>
<BR># ----- usrloc params -----<BR>#modparam("usrloc", "db_mode",&nbsp;&nbsp; 0)<BR>/* uncomment the following lines if you want to enable DB persistency<BR>&nbsp;&nbsp; for location entries */<BR>modparam("usrloc", "db_mode",&nbsp;&nbsp; 2)<BR>modparam("usrloc", "db_url",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mysql://openser:openserrw@localhost/openser")<BR>
<BR># ----- auth_db params -----<BR>/* uncomment the following lines if you want to enable the DB based<BR>&nbsp;&nbsp; authentication */<BR>modparam("auth_db", "calculate_ha1", yes)<BR>modparam("auth_db", "password_column", "ha1")<BR>modparam("auth_db", "db_url",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mysql://openser:openserrw@localhost/openser")<BR>#modparam("auth_db", "load_credentials", "")<BR>modparam("auth_db", "password_column", "ha1b")<BR>
# ----- alias_db params -----<BR>/* uncomment the following lines if you want to enable the DB based<BR>&nbsp;&nbsp; aliases */<BR>#modparam("alias_db", "db_url",<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mysql://openser:openserrw@localhost/openser")<BR>
<BR># ----- domain params -----<BR>/* uncomment the following lines to enable multi-domain detection<BR>&nbsp;&nbsp; support */<BR>modparam("domain", "db_url",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mysql://openser:openserrw@localhost/openser")<BR>modparam("domain", "db_mode", 1)&nbsp;&nbsp; # Use caching<BR>
## Tiempo para la llamada<BR>modparam("tm","fr_inv_timer", 45)<BR>
# ----- multi-module params -----<BR>/* uncomment the following line if you want to enable multi-domain support<BR>&nbsp;&nbsp; in the modules (dafault off) */<BR>#modparam("alias_db|auth_db|usrloc|uri_db", "use_domain", 1)<BR>
<BR># ----- presence params -----<BR>/* uncomment the following lines if you want to enable presence */<BR>#modparam("presence|presence_xml", "db_url",<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mysql://openser:openserrw@localhost/openser")<BR>#modparam("presence_xml", "force_active", 1)<BR>#modparam("presence", "server_address", "sip:192.168.1.2:5060")<BR>
<BR>####### Routing Logic ########<BR>
<BR># main request routing logic<BR>
route{<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## LOG del mensaje recibido<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "\n\n$Cbg[ $mi -- $rm -- $ua ($si:$sp) -- FROM: $fu -- TO: $tU -- ]$Cxx\n);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Comprobamos que el mensaje no sea demasiado largo ni halla superado max_forwards<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!mf_process_maxfwd_header("10")) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("483","Too Many Hops");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_ERROR", "\n\n$CwrToo Many Hops$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(msg:len&gt;max_len){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("513", "Message Overflow");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_ERROR", "\n\n$CwrMessage Overflow$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RECORD ROUTE SECTION<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Nos ponemos en medio, poniendo una cabecera Record-Route, para que los mensajes pasen por<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## nosotros. Pero si es REGISTER no se debe hacer.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(method!="REGISTER"){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record_route();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOOSE ROUTE SECTION<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Los mensajes pertenecientes a un mismo dialogo deben tomar el camino indicado por Record-Route<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (loose_route()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "\n\n *** Estamos en loose-route ***\n\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL TYPE PROCESSING SECTION<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Mensajes con destino distinto de nuestro servidor, hacemos relay, pero .<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Ruta de salientes<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!is_uri_host_local()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (is_from_local()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("403", "Forbidden");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Mensajes con destino nuestro servidor (por ejemplo llamadas a usuarios registrado aqui.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Tenemos que tratar explicitamente el ACK<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (method=="ACK") {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "$Cbx--- Procesando un ACK *not whitin a dialog*$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## CANCEL messages can be safely processed with a simple call to t_relay()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## because SER will automatically match the CANCEL message to the original<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## INVITE message (stateful)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Para el CANCEL, con la ruta por defecto vale.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (method=="CANCEL") {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Los REGISTER los tratamos a parte (en la ruta 2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (method=="REGISTER"){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Los INVITEs a la ruta 3 (autenticacion, ...)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (method=="INVITE"){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(3);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Resto de casos (OPTIONS, REFER, BYE...)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Puede que venga a nosotros pero tengamos definido un alias a fuera. lookup("aliases") nos<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ##da la nueva URI que puede sea != myself.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lookup("aliases");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!is_uri_host_local()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "$CrxNot my URI after the alias lookup$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## A las salientes<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Miramos si existe el destino en nuestra tabla "location".<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!lookup("location")){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","$Crx404 User Not Found$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("404", "Not Found");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Si hemos llegado hasta aqui enrutamos el mensaje al destino por<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## la ruta por defecto.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>};<BR>
#-------------------------------------------------------------------------<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT MESSAGE HANDLER<BR>#-------------------------------------------------------------------------<BR>
route[1]<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Indicamos que las respuestas que se originen aqui vayan a la ruta<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## onreply_route[1], asi sabemos lo que pasa<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t_on_reply("1");<BR>
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!t_relay()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_reply_error();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","$CbxMessage is reloayed; now exiting$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>}<BR>
#------------------------------------------------------------------------<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REGISTER MESSAGE HANDLER<BR>#------------------------------------------------------------------------<BR>
route[2]<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("100", "Trying");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!www_autorize("", "subscriber")) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "$CbxSe necesita autenticacion para el REGISTER$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www_challange("","0");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (!check_to()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Validate the supplied to: header against the previously<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## validated digest credentials. If they do not match then we must<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## reject the REGISTER<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","$Crx*** check_to()=NO!! ***$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("401","Unauthorized");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","$Cbx*** REGISTER correcto ***$Cxx\n");<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Eliminamos las cabeceras relativas a la autenticacion, porque ya no son<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## necesarias y no vamos a ir mandandolas por ahi...<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; consume_credentials();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Informo si es un UNREGISTER (rfc3261 -- 10.2.2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($hdr(contact)=~";expires=0") || ($hdr(expires)=="0"){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","$Cbx*** UNREGISTER ***$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Guardamos la localizacion en la tabla "location".<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!save("location")) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_reply_error();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>}<BR>
<BR>#--------------------------------------------------------------------------<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INVITE MESSAGE HANDLER<BR>#--------------------------------------------------------------------------<BR>
route[3]<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Es necesario autenticarse para poder llamar<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!proxy_authorize("","subscriber")){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","$cBXSe necesita autenticacion para el INVITE$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Tienen que coincidir el nombre de usuario con el de la cabecera FROM<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (!check_from()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "$Crx*** check_form()=NO!! ***\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("403", "Use From=Id");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","$Cbx*** INVITE correcto ***$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; consume_credentials();<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Puede que venga a nosotros pero tengamos definido un alias a fuera.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## lookup("aliases") nos da la nueva uri que puede sea !=myself<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lookup("aliases");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!is_uri_host_local()){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## A las salientes<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!lookup("location")){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","$Crx404 User Not Found$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("404","User Not Found");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rewritehost(10.95.44.29);</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## El usuario se ha autenticado y a quien llama existe en "location" asÃ&shy;ue lo rutamos.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(1);<BR>}<BR>
#--------------------------------------------------------------------------------------<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUTGOING<BR>#--------------------------------------------------------------------------------------<BR>
route[4]<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","Cbx*** Llamada saliente ***$Cxx\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; route(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<BR>}<BR>
#---------------------------------------------------------------------------------------<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ONREPLY_ROUTE[1] -- Para ver las respuestas a los INVITE.<BR>#---------------------------------------------------------------------------------------<BR>
## Si un usuario hace un INVITE las respuestas del llamado (Trying, Ringing, OK ...) pasan por aqui<BR>
onreply_route[1]<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO","\n\n$Cbc[Respuesta][ $rs ($rr) desde $si:$sp -- Peticion:($rm) ] $Cxx\n");<BR>}<BR><BR>Por otro lado, suponiendo que esté bien. Como hago para comunicar openser con el EyeBeam, alguien sabe como hacerlo??<BR>
&nbsp;<BR>
Muchisimas gracias por todo. <BR>
Y siento ser tan preguntona! pero es que todo esto me parece complicadisimo! <BR>
&nbsp;<BR>
<BR>&gt; Date: Thu, 17 Jul 2008 14:56:32 +0200<BR>&gt; From: saghul@gmail.com<BR>&gt; To: users-es@lists.openser.org<BR>&gt; Subject: Re: [OpenSER-Users-ES] {Spam?} dudas con open ser<BR>&gt; <BR>&gt; &gt; Lo siento pero es que ando perdidísima!! no entiendo nada!<BR>&gt; &gt; He estado mirando los enlaces que me pones pero la verdad es que tampoco me<BR>&gt; &gt; aclaran mucho las cosas, admás no estoy muy bien de inglés, no hay<BR>&gt; &gt; informacion útil en castellano?<BR>&gt; &gt;<BR>&gt; <BR>&gt; No esta en castellano, pero el libro "Building Telephony Systems with<BR>&gt; OpenSER" esta muy bien, tiene muchos ejemplos, y es un buen comienzo.<BR>&gt; <BR>&gt; <BR>&gt; -- <BR>&gt; Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."<BR>&gt; ----------------------------------------------------------------<BR>&gt; http://www.saghul.net/<BR>&gt; <BR>&gt; _______________________________________________<BR>&gt; Users-es mailing list<BR>&gt; Users-es@lists.openser.org<BR>&gt; http://lists.openser.org/cgi-bin/mailman/listinfo/users-es<BR><BR><br /><hr />¡Atrévete con Abecedario, el juego del momento! Invita a tus contactos de Messenger y demuéstrales lo que sabes <a href='http://www.vivelive.com/abecedario' target='_new'>demuéstrales lo que sabes</a></body>
</html>