FYI, I *finally* got around to doing this. A debug shows that load_gw is
in fact loading both gateways..
8(30980) DEBUG:load_gws(): Added AVP <lcr_gw_addr,374650ce>
8(30980) qm_malloc(0xf4edf000, 31) called from usr_avp.c: add_avp(112)
8(30980) qm_malloc(0xf4edf000, 32) returns address 0xf509a3ec frag.
0xf509a3d4 (size=32) on 1 -th hit
8(30980) DEBUG:load_gws(): Added AVP <lcr_gw_port,0>
8(30980) qm_malloc(0xf4edf000, 31) called from usr_avp.c: add_avp(112)
8(30980) qm_malloc(0xf4edf000, 32) returns address 0xf509a43c frag.
0xf509a424 (size=32) on 1 -th hit
8(30980) DEBUG:load_gws(): Added AVP <lcr_gw_addr,511f7d1>
8(30980) qm_malloc(0xf4edf000, 31) called from usr_avp.c: add_avp(112)
8(30980) qm_malloc(0xf4edf000, 32) returns address 0xf509a48c frag.
0xf509a474 (size=32) on 1 -th hit
8(30980) DEBUG:load_gws(): Added AVP <lcr_gw_port,0>
Thoughts? Thanks.
-----Original Message-----
From: Juha Heinanen [mailto:jh@tutpro.com]
Sent: Tuesday, April 12, 2005 11:59 PM
matt,
you could first check which gws get loaded by turning debugging on:
DBG("load_gws(): DEBUG: Added gw_addr_port_avp <%x, %d>\n",
*((unsigned int *)(val.s->s)),
*((unsigned short *)(val.s->s + 4)));
-- juha
Thanks for clearing that up...
-----Original Message-----
From: Jan Janak [mailto:jan@iptel.org]
Sent: Wednesday, April 20, 2005 9:17 AM
To: Matt Schulte
Cc: serusers(a)lists.iptel.org
Subject: Re: [Serusers] failure_route vs. onreply
They are quite different. onreply_route is executed for each branch. If
your
proxy server forks an INVITE to 3 destinations in parallel then
onreply_route
will be executed 3 times -- for each branch. onreply_route sections
process replies (all operations within them will modify replies).
After receiving final replies from all the branches, the proxy server
decides which of them it should forward upstream. If the selected
message is a negative final reply (3xx, 4xx, 5xx, 6xx) then it executes
the failure_route section before forwarding it upstream.
But -- the failure_route section does not work with the reply being
forwarded upstream, but with the original request ! (in this case the
original INVITE). That's quite important.
There are two reasons why it is this way:
1) The most common operation performed in failure_route sections is
serial
forking (you take the original message and forward it somewhere
else) -- and for that you need the original request. You may also
want to change the reply being forwarded upstream and for this the
original request will be needed as well.
2) (implementation related) -- it is likely that the reply was
received by process A, but will be forwarded upstream by process B
(where B is the process which received the reply from the last
unfinished branch). To make it possible, the message is stored in
shared memory and most functions that can be called from the script
cannot handle it.
+-----+ (2) 301
301 (1) | |<--------
<---------| SER | (2) 486
| |<--------
+-----+
(1) -- failure_route gets called here
(2) -- onreply_route gets called here
Jan.
On 20-04 07:31, Matt Schulte wrote:
> Ok, are these the same thing? I remember reading that onreply was
> renamed to failure due to confusion? Now I'm confused again ;-)
>
> Matt
>
> _______________________________________________
> Serusers mailing list
> serusers(a)lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Hello list.
I'm experiencing problems with my SER. As i mentioned in a past
post (http://lists.iptel.org/pipermail/serusers/2005-April/018324.html),
from time to time (it is getting pretty often) my SER not answering any
request, when a REGISTER reach the server it is not challenged, this happens
too with the INVITE's messages. About two hours ago this happened again.
I asked in my last post how to LOG the internal errors or messages from SER
to see if i can get some idea about what's going on, but i have no answer
about it.
This is the infornmation i was able to capture when this was happening :
the serctl moni command shows a lot of "failures".
[cycle #: 11; if constant make sure server lives and fifo is on]
Server: Sip EXpress router (0.8.14-3 (i386/linux))
Now: Wed Apr 20 12:56:29 2005
Up Since: Thu Apr 14 21:32:18 2005
Up time: 487451 [sec]
Transaction Statistics
Current: 6 (2612 waiting) Total: 38194 (0 local)
Replied localy: 80752
Completion status 6xx: 4643, 5xx: 768, 4xx: 10664, 3xx: 0,2xx: 22552
Stateless Server Statistics
200: 5975004 202: 0 2xx: 0
300: 0 301: 0 302: 0 3xx: 0
400: 0 401: 205980 403: 0 404: 0 407: 22918 408: 0 483: 0 4xx: 19
500: 0 5xx: 0
6xx: 0
xxx: 0
failures: 24180
UsrLoc Stats
Domain Registered Expired
'location' 219 4552
--------------------------------------------------------------
[cycle #: 5; if constant make sure server lives and fifo is on]
Server: Sip EXpress router (0.8.14-3 (i386/linux))
Now: Wed Apr 20 12:56:47 2005
Up Since: Thu Apr 14 21:32:18 2005
Up time: 487469 [sec]
Transaction Statistics
Current: 4 (2619 waiting) Total: 38219 (0 local)
Replied localy: 80762
Completion status 6xx: 4643, 5xx: 770, 4xx: 10667, 3xx: 0,2xx: 22552
Stateless Server Statistics
200: 5975030 202: 0 2xx: 0
300: 0 301: 0 302: 0 3xx: 0
400: 0 401: 205995 403: 0 404: 0 407: 22922 408: 0 483: 0 4xx: 19
500: 0 5xx: 0
6xx: 0
xxx: 0
failures: 24380
UsrLoc Stats
Domain Registered Expired
'location' 220 4552
-----------------------------------------------------------------
[cycle #: 2; if constant make sure server lives and fifo is on]
Server: Sip EXpress router (0.8.14-3 (i386/linux))
Now: Wed Apr 20 12:56:52 2005
Up Since: Thu Apr 14 21:32:18 2005
Up time: 487474 [sec]
Transaction Statistics
Current: 4 (2620 waiting) Total: 38224 (0 local)
Replied localy: 80762
Completion status 6xx: 4643, 5xx: 770, 4xx: 10667, 3xx: 0,2xx: 22552
Stateless Server Statistics
200: 5975034 202: 0 2xx: 0
300: 0 301: 0 302: 0 3xx: 0
400: 0 401: 206000 403: 0 404: 0 407: 22923 408: 0 483: 0 4xx: 19
500: 0 5xx: 0
6xx: 0
xxx: 0
failures: 24445
UsrLoc Stats
Domain Registered Expired
'location' 215 4557
What is happening to cause the "failures" counter grows that much?.
The free command shows this :
[root@root]# free
total used free shared buffers cached
Mem: 1030888 626464 404424 0 86692 369848
-/+ buffers/cache: 169924 860964
Swap: 2040244 4864 2035380
The top command shows not much use of CPU. The proccess were running (the
SER and mediaproxy)
Despite of all this, the SER was not answering anything.
Could this be a bug? or maybe a problem with my ser.cfg file?. I'm
attaching my ser.cfg file too to see if someone can tell me if there is
something wrong about it.
I really hope that someone could help me, this is getting really complicated
every time it happens.
Thanks
Ricardo Martinez.-
**************************************************
SER.CFG
**************************************************
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++
# ----------- global configuration parameters ------------------------
debug=0 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=yes # (cmd line: -E)
#Uncomment these lines to enter debugging mode
#fork=no
#log_stderror=yes
listen=ip.of.my.ser
alias=sip.mydomain.comalias=sip2.mydomain.net
alias=ip.of.my.ser
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
port=5060
#children=4
fifo="/tmp/ser_fifo"
fifo_mode=0666
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
#loadmodule "/usr/local//lib/ser/modules/mysql.so"
loadmodule "/usr/local//lib/ser/modules/sl.so"
loadmodule "/usr/local//lib/ser/modules/tm.so"
loadmodule "/usr/local//lib/ser/modules/rr.so"
loadmodule "/usr/local//lib/ser/modules/maxfwd.so"
loadmodule "/usr/local//lib/ser/modules/usrloc.so"
loadmodule "/usr/local//lib/ser/modules/registrar.so"
loadmodule "/usr/local//lib/ser/modules/textops.so"
loadmodule "/usr/local//lib/ser/modules/exec.so"
# ++++++++++ Para trabajar con NAT
loadmodule "/usr/local//lib/ser/modules/mediaproxy.so"
loadmodule "/usr/local//lib/ser/modules/domain.so"
loadmodule "/usr/local//lib/ser/modules/dbtext.so"
loadmodule "/usr/local//lib/ser/modules/nathelper.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/local/lib/ser/modules/auth.so"
# ++++++++++ Modulos de Accounting y Autorizacion via Radius
loadmodule "/usr/local/lib/ser/modules/auth_radius.so"
loadmodule "/usr/local/lib/ser/modules/group_radius.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
# ----------------- setting module-specific parameters ---------------
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# +++++ module authorization
modparam("auth_radius","radius_config","/usr/local/etc/radiusclient/radiuscl
ient.conf")
modparam("auth_radius","service_type",15)
# +++++ module accounting
modparam("acc","radius_config","/usr/local/etc/radiusclient/radiusclient.con
f")
modparam("acc","log_level",1)
modparam("acc", "service_type", 15)
modparam("acc", "radius_flag", 1)
modparam("acc", "radius_missed_flag", 3)
modparam("acc", "failed_transactions", 1)
modparam("acc", "report_ack", 0)
# +++++ group radius
modparam("group_radius","radius_config","/usr/local/etc/radiusclient/radiusc
lient.conf")
modparam("group_radius", "use_domain", 1)
# +++++ module mediaproxy
modparam("mediaproxy", "natping_interval", 60)
modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy.sock")
#modparam("mediaproxy", "sip_asymmetrics",
"/usr/local/etc/ser/sip-asymmetrics-clients")
#modparam("mediaproxy", "rtp_asymmetrics",
"/usr/local/etc/ser/rtp-asymmetrics-clients")
modparam("registrar", "nat_flag", 5)
# +++++ module domain
modparam("domain", "db_url", "/usr/local/etc/ser/domaintables")
modparam("domain", "domain_table", "domain")
modparam("domain", "domain_col", "domain")
# +++++ module tm
modparam("tm", "fr_timer", 15)
modparam("tm", "fr_inv_timer", 22)
modparam("tm", "wt_timer", 5)
# +++++ module registrar (Con estos parametro haces que el location lookup
priorize solo los mas recientes contacts)
modparam("registrar", "append_branches", 0)
modparam("registrar", "desc_time_order", 1)
# ------------------------- request routing logic -------------------
# main routing logic
route {
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Llamada a Rutina Externa "translate" para cambio de numero
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (method=="INVITE" || method=="CANCEL") {
exec_dset("/usr/local/etc/ser/translate");
};
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
break;
};
if ( msg:len > max_len ) {
sl_send_reply("513", "Message too big");
break;
};
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Marcamos todos los mensajes para que pasen por nuestro servidor
# a traves del record route.
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
record_route();
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Permitimos el uso del campo Route en el ruteo de la llamada
#
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (method=="BYE" || method=="CANCEL") {
log(1, "NAT: BYE o CANCEL recibido --> terminando la sesion
de media\n");
end_media_session();
setflag(1);
};
if (loose_route()) {
t_relay();
break;
};
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
# Manejo de los mensajes NOTIFY para Keep Alive de NAT
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
if ((method=="NOTIFY") && search("^Event: keep-alive")) {
sl_send_reply("200", "OK");
break;
};
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
# Marcamos las llamadas para accounting
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
setflag(1);
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
# Test para clientes NATeados
#
# 1 : Chequea si el cliente tiene IP privada en el campo Contact.
# 2 : Chequea si el cliente se contacto con una IP distinta a la del
campo VIA.
# 3 : Chequea si el cliente tiene IP privada en el ultimo campo VIA.
#
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
if (client_nat_test("3")) {
log(1, "NAT: Requerimiento de IP privada --> fixed contact
(en rutina principal)\n");
setflag(5);
force_rport();
if (method=="REGISTER") {
fix_nated_contact();
} else {
fix_contact();
};
append_hf("P-hint: fixed NAT contact for request\r\n");
};
if (uri==myself) {
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Chequeo de REGISTRO para equipos del dominio 1
# Dominio Voiss : sip.mydomain.com
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (method=="REGISTER" && uri=~"^sip:.*sip.mydomain.com") {
# Challenge/Response
if ( !radius_www_authorize("sip.mydomain.com")) {
www_challenge("sip.mydomain.com", "1");
break;
};
# Mandamos un mensaje de Log si es que un cliente
NATEADO se registro.
if (isflagset(5)) {
log(1, "NAT: Cliente NAT'eado registrado
(dentro del chequeo de REGISTER)\n");
};
save("location");
break;
}; # Fin chequeo de Registro para Dominio : sip.mydomain.com
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Chequeo de REGISTRO para equipos del dominio 2
# Dominio Mayoristas : sip2.mydomain.net
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (method=="REGISTER" && uri=~"^sip:.*sip2.mydomain.net") {
# Challenge/Response
if ( !radius_www_authorize("sip2.mydomain.net")) {
www_challenge("sip2.mydomain.net", "1");
break;
};
# Mandamos un mensaje de Log si es que un cliente
NATEADO se registro.
if (isflagset(5)) {
log(1, "NAT: Cliente NAT'eado registrado
(dentro del chequeo de REGISTER)\n");
};
save("location");
break;
}; # Fin chequeo de Registro para Dominio :
sip2.mydomain.net
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++
# CHEQUEO DEL INVITE PARA TODAS LAS LLAMADAS
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++
if (method=="INVITE" && src_ip!=xx.xx.xx.xx) {
if ( !radius_proxy_authorize("")) {
proxy_challenge("", "1");
log (1, "LOG: Llamada no AUTORIZADA\n");
break;
};
};
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++
# Llamadas hacia dominio H.323
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++
if ( (uri=~"^sip:717.*@.*") | (uri=~"^sip:707.*@.*") |
(uri=~"^sip:777.*@.*") | (uri=~"^sip:333.*@.*") | (uri=~"^sip
:0.*@.*") ){
log(1,"FORWARDING : Llamada hacia plataforma
H.323\n");
route(1);
break;
};
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++
# Llamadas SIP locales
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++
if (!lookup("location")) { #Usuarios que no estan en
"location" database.
route(4);
break;
};
setflag(3);
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++
# Manejo para llamadas NAT'das
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++
if (method=="INVITE") {
log(1, "ROUTING: Reply processing (online user)
enabled to handle NAT'd resonses\n");
t_on_reply("1");
if ( (isflagset(5)) && (method=="INVITE" ||
method=="ACK") ) {
log(1, "NAT: Invite received -->
enabling media proxy (else del lookup 2do if)\n");
use_media_proxy();
append_hf("P-hint: request forced to
media proxy\r\n");
};
};
# Do it ? (Ricardo Martinez)
};
append_hf("P-hint: USRLOC\r\n");
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++
# Efectuamos la llamada
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++
if (!t_relay()) {
sl_reply_error();
break;
};
} /* end of initial routing logic */
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++
# COMIENZO DE LA SECCION DE RUTAS
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++
# Route 1 : Llamadas con destino plataforma
H.323#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++
route[1]
{
# send it out now; use stateful forwarding as it works reliably
# even for UDP2TCP
# Esta NATEADO?
if (isflagset(5)) {
log(1, "NAT: At least one participant NAT'd --> enable reply
processing (hacia GW)\n");
t_on_reply("1");
if (method=="INVITE") {
log(1, "NAT: Invite received --> enabling proxied
media session (hacia GW)\n");
setflag(1);
use_media_proxy();
};
};
rewritehostport("mygw.mydomain.com:5060");
append_hf("P-hint: GATEWAY\r\n");
if (!t_relay()) {
sl_reply_error();
break;
};
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++
# Route 4 : Llamadas a usuarios Off-line
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++
route[4] {
if (!t_newtran()) {
sl_reply_error();
};
if (!t_reply("404", "Not Found IT!")) {
sl_reply_error();
};
break;
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++
# On Reply Route 1 : Equipos NATeados!!
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++
onreply_route[1] {
if ((isflagset(5) || client_nat_test("3")) &&
(status=~"(180)|(183)|2[0-9][0-9]")) {
if (!search("^Content-Length:\ 0")) {
use_media_proxy();
};
};
if (client_nat_test("1")) {
fix_nated_contact();
};
}
Ricardo Martinez.-
At 02:31 PM 4/20/2005, Matt Schulte wrote:
>Ok, are these the same thing?
no
failure_route reprocesses requests which failed. onreply processes
replies coming back.
-jiri
>I remember reading that onreply was
>renamed to failure due to confusion? Now I'm confused again ;-)
>
> Matt
>
>_______________________________________________
>Serusers mailing list
>serusers(a)lists.iptel.org
>http://lists.iptel.org/mailman/listinfo/serusers
--
Jiri Kuthan http://iptel.org/~jiri/
I've read the install file and commented and uncommented the corresponding lines in order to have authorization and be able to use the database of serweb; however, after I changed the domain in ser.cfg and export the SIP_DOMAIN variable and instead of starting the server by typing just "ser", I typed serctl start but I got the next error message:
cat: /var/run/ser.pid: No suche file or directory
I have ser-0.8.14_linux_i386.tar.gz and serweb_2004-07-27.tar.gz
Could anybody help me?
Thanks in advance
Edgar Vidal
SAS Institute México, S.A. de C.V.
Edgar.Vidal(a)sas.com
Tel. (52) 55 5000 3813
SAS ... The Power to Know
Hi!
I'am new in to this VoIP technolgie.
I have a SER 0.9.0 wit Cisco IOS Gatewy.
I only want to configure a registrar Server with a
Cisco gateway, which is connected to the PSTN.
Can someone give me an ser.cfg example ?
How can I tell the ser server that every call,
which starts with 0, route directly to the
IOS Gateway ?
I added two user to the ser db.
The users got a login, password and an email.
Additional to this I added to both user a userloc
with serctl ul add <user> sip:1223@domain.de.
Both users can not phone each other. I got an busy tone
and my Cisco 7960 Phone shows "reorder".
Did I forgot something ?
Here an output of serctl ul show:
eagle[admin] # ./serctl ul show
Dumping all contacts may take long: are you sure you want to proceed? [Y|N] y
===Domain list===
---Domain---
name : 'aliases'
size : 512
table: fcda0dd8
d_ll {
n : 0
first: 0
last : 0
}
---/Domain---
---Domain---
name : 'location'
size : 512
table: fcd9e8b8
d_ll {
n : 2
first: fcda08e8
last : fcda0af8
}
...Record(fcda08e8)...
domain: 'location'
aor : 'ahmad02'
~~~Contact(fcda0978)~~~
domain : 'location'
aor : 'ahmad02'
Contact : 'sip:460@netuse.de'
Expires : -60589
q : 1
Call-ID : 'The-Answer-To-The-Ultimate-Question-Of-Life-Universe-And-Everything'
CSeq : 42
replic : 0
User-Agent: 'SIP Express Router FIFO'
received : ''
State : CS_SYNC
Flags : 128
next : 0
prev : 0
~~~/Contact~~~~
.../Record...
...Record(fcda0af8)...
domain: 'location'
aor : 'ahmad'
~~~Contact(fcda0b88)~~~
domain : 'location'
aor : 'ahmad'
Contact : 'sip:459@netuse.de'
Expires : -60655
q : 1
Call-ID : 'The-Answer-To-The-Ultimate-Question-Of-Life-Universe-And-Everything'
CSeq : 42
replic : 0
User-Agent: 'SIP Express Router FIFO'
received : ''
State : CS_SYNC
Flags : 128
next : 0
prev : 0
~~~/Contact~~~~
.../Record...
---/Domain---
===/Domain list===
Thanks in advance,
Ahmad
--
Ahmad Cheikh-Moussa
NetUSE AG
Dr.-Hell-Straße, 24107 Kiel, Germany
Telefon: +49 431 2390 400 -- Telefax: +49 431 2390 499
Service: Service(a)NetUSE.DE -- http://NetUSE.DE/
Hi,
as many of you knows, mysql module on ser-0.8.14 (latest) lacks
the option to reconnect to the DB server if the server goes away
(ie server restarts, crash, blah).
With this simple patch, I backported the reconnect option of ser CVS,
along with the ping server option.
You can use these 2 module params:
-> modparam("mysql","auto_reconnect",1)
// can be 0 or 1
-> modparam("mysql","ping_interval",60)
// in seconds. if the connection has been idle for more than ping_interval,
// the server will be pinged before the next query
There's another addition: since Mysql 5.03 the reconnect option
in the MySQL struct is disabled, so this patch takes
care also to enable this flag (this thing is not done by
the CVS version).
Hope can be of any help,
Matteo.
Hello list,
I am not so familiar with C syntax but I suspect that the circumflex
changes the parsing method. What is the difference between these two:
first-> search("^(Contact|m): .*(a)(192\.168\.|10\.|172\.16)")
second-> search("(From|f):.*@foo.bar")
Questions:
1. How does the circumflex affect the string inside ( )
2. How is ( ) used?
Thanks,
Che