Server Disconnected when SIGINT occured
Hi all, I've done a sample program (In perl ESL) , which play a file to the caller and then it will call recvEvent() and print the event name. I've handled signals also. When I send SIGINT to my program (Perl), the signal handler is called and I can see the print output. But in the same time, I received SERVER_DISCONNECTED from freeswitch as event. I don't know why I received SERVER_DISCONNECTED from freeswitch. Is it because, the recvEvent() from perl internally calls the recvevent function in the Esl.c and when it waits to receive the information from socket, the signal occurred??? Please clarify me!! Here is my program require ESL; use IO::Socket::INET; use Data::Dumper; my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock; ®ister_Signals(); for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; my $host = $new_sock->sockhost(); my $fd = fileno($new_sock); my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo(); my $uuid = $info->getHeader("unique-id"); printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); while($con->connected()) { my $e = $con->recvEvent(); if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); } sub register_Signals() { foreach ( keys %SIG ) { $SIG{$_} = 'sig_Handler'; } } sub sig_Handler() { my $handle=$_[0]; if($handle eq "INT") { print "$$: SIGNAL SIG$handle is generated\n"; } }
you would have to register signals in your child process too On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy <lakindia89@gmail.com>wrote:
Hi all,
I've done a sample program (In perl ESL) , which play a file to the caller and then it will call recvEvent() and print the event name. I've handled signals also.
When I send SIGINT to my program (Perl), the signal handler is called and I can see the print output. But in the same time, I received SERVER_DISCONNECTED from freeswitch as event.
I don't know why I received SERVER_DISCONNECTED from freeswitch. Is it because, the recvEvent() from perl internally calls the recvevent function in the Esl.c and when it waits to receive the information from socket, the signal occurred???
Please clarify me!!
Here is my program require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock; ®ister_Signals();
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav");
while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); } sub register_Signals() { foreach ( keys %SIG ) { $SIG{$_} = 'sig_Handler'; } }
sub sig_Handler() { my $handle=$_[0]; if($handle eq "INT") { print "$$: SIGNAL SIG$handle is generated\n"; } }
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
I taught the signal handler will be inherited by the child process. It also does like that. After making a call, If I press ctrl + c, the above program printed PARENT PID: Signal SIGINT is generated CHILD PID: Signal SIGINT is generated. So I think the sigal handlers will be inherited to the child. Anyway I'll also try registering signal handlers in child also, and then I'll come back with that result. Thanks.... On Wed, Jan 13, 2010 at 9:48 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
you would have to register signals in your child process too
On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Hi all,
I've done a sample program (In perl ESL) , which play a file to the caller and then it will call recvEvent() and print the event name. I've handled signals also.
When I send SIGINT to my program (Perl), the signal handler is called and I can see the print output. But in the same time, I received SERVER_DISCONNECTED from freeswitch as event.
I don't know why I received SERVER_DISCONNECTED from freeswitch. Is it because, the recvEvent() from perl internally calls the recvevent function in the Esl.c and when it waits to receive the information from socket, the signal occurred???
Please clarify me!!
Here is my program require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock; ®ister_Signals();
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav");
while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); } sub register_Signals() { foreach ( keys %SIG ) { $SIG{$_} = 'sig_Handler'; } }
sub sig_Handler() { my $handle=$_[0]; if($handle eq "INT") { print "$$: SIGNAL SIG$handle is generated\n"; } }
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
Here is the result Program: require ESL; use IO::Socket::INET; use Data::Dumper; my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock; for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; ®ister_Signals_Child(); sub register_Signals_Child() { foreach ( keys %SIG ) { $SIG{$_} = 'Handler'; } } sub Handler() { my $handle=$_[0]; if($handle eq "INT") { print "CHILD $$: SIGNAL SIG$handle is generated\n"; } else { print "CHILD $$: Received $handle\n"; } } my $host = $new_sock->sockhost(); my $fd = fileno($new_sock); my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo(); my $uuid = $info->getHeader("unique-id"); printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); while($con->connected()) { my $e = $con->recvEvent(); if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); } I executed the program and the following things were printed CHILD PID: 6778 Connected call e0d1001a-03f4-11df-b002-db488337e0ea, from 1001 $VAR1 = 0; EVENT [CHANNEL_EXECUTE] EVENT [CHANNEL_ANSWER] EVENT [CHANNEL_EXECUTE_COMPLETE] EVENT [COMMAND] EVENT [CHANNEL_EXECUTE] EVENT [HEARTBEAT] EVENT [RE_SCHEDULE] EVENT [CHANNEL_EXECUTE_COMPLETE] Then from another shell I executed kill -2 6778, the result is follows CHILD 6778: SIGNAL SIGINT is generated EVENT [SERVER_DISCONNECTED] But the child process is still running as expected. But I don't know why I received SERVER_DISCONNECTED from freeswitch??? On Thu, Jan 14, 2010 at 1:27 PM, lakshmanan ganapathy <lakindia89@gmail.com>wrote:
I taught the signal handler will be inherited by the child process. It also does like that. After making a call, If I press ctrl + c, the above program printed PARENT PID: Signal SIGINT is generated CHILD PID: Signal SIGINT is generated.
So I think the sigal handlers will be inherited to the child. Anyway I'll also try registering signal handlers in child also, and then I'll come back with that result.
Thanks.... On Wed, Jan 13, 2010 at 9:48 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
you would have to register signals in your child process too
On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Hi all,
I've done a sample program (In perl ESL) , which play a file to the caller and then it will call recvEvent() and print the event name. I've handled signals also.
When I send SIGINT to my program (Perl), the signal handler is called and I can see the print output. But in the same time, I received SERVER_DISCONNECTED from freeswitch as event.
I don't know why I received SERVER_DISCONNECTED from freeswitch. Is it because, the recvEvent() from perl internally calls the recvevent function in the Esl.c and when it waits to receive the information from socket, the signal occurred???
Please clarify me!!
Here is my program require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock; ®ister_Signals();
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav");
while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); } sub register_Signals() { foreach ( keys %SIG ) { $SIG{$_} = 'sig_Handler'; } }
sub sig_Handler() { my $handle=$_[0]; if($handle eq "INT") { print "$$: SIGNAL SIG$handle is generated\n"; } }
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
try a less famous signal like SIGUSR1 it's possible something in perl still reacts to SIGINT On Mon, Jan 18, 2010 at 5:22 AM, lakshmanan ganapathy <lakindia89@gmail.com>wrote:
Here is the result
Program:
require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock;
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; ®ister_Signals_Child(); sub register_Signals_Child() { foreach ( keys %SIG ) { $SIG{$_} = 'Handler'; } }
sub Handler() {
my $handle=$_[0]; if($handle eq "INT") { print "CHILD $$: SIGNAL SIG$handle is generated\n"; } else { print "CHILD $$: Received $handle\n";
} } my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); }
I executed the program and the following things were printed
CHILD PID: 6778 Connected call e0d1001a-03f4-11df-b002-db488337e0ea, from 1001 $VAR1 = 0; EVENT [CHANNEL_EXECUTE] EVENT [CHANNEL_ANSWER] EVENT [CHANNEL_EXECUTE_COMPLETE] EVENT [COMMAND] EVENT [CHANNEL_EXECUTE] EVENT [HEARTBEAT] EVENT [RE_SCHEDULE] EVENT [CHANNEL_EXECUTE_COMPLETE]
Then from another shell I executed kill -2 6778, the result is follows CHILD 6778: SIGNAL SIGINT is generated EVENT [SERVER_DISCONNECTED]
But the child process is still running as expected. But I don't know why I received SERVER_DISCONNECTED from freeswitch???
On Thu, Jan 14, 2010 at 1:27 PM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
I taught the signal handler will be inherited by the child process. It also does like that. After making a call, If I press ctrl + c, the above program printed PARENT PID: Signal SIGINT is generated CHILD PID: Signal SIGINT is generated.
So I think the sigal handlers will be inherited to the child. Anyway I'll also try registering signal handlers in child also, and then I'll come back with that result.
Thanks.... On Wed, Jan 13, 2010 at 9:48 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
you would have to register signals in your child process too
On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Hi all,
I've done a sample program (In perl ESL) , which play a file to the caller and then it will call recvEvent() and print the event name. I've handled signals also.
When I send SIGINT to my program (Perl), the signal handler is called and I can see the print output. But in the same time, I received SERVER_DISCONNECTED from freeswitch as event.
I don't know why I received SERVER_DISCONNECTED from freeswitch. Is it because, the recvEvent() from perl internally calls the recvevent function in the Esl.c and when it waits to receive the information from socket, the signal occurred???
Please clarify me!!
Here is my program require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock; ®ister_Signals();
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav");
while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); } sub register_Signals() { foreach ( keys %SIG ) { $SIG{$_} = 'sig_Handler'; } }
sub sig_Handler() { my $handle=$_[0]; if($handle eq "INT") { print "$$: SIGNAL SIG$handle is generated\n"; } }
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
try a less famous signal like SIGUSR1 it's possible something in perl still reacts to SIGINT
Such as an interrupted system call, perhaps? Depending on the operating system, some system calls restart and some do not. There is not enough debugging information in the original message to know what is happening in the program when it is interrupted. If the interrupted system call is not restarted, it probably returns an "interrupted" error code and needs to be called, again. -- Russell Mosemann ________________________________________________________ Concordia University, Nebraska See http://www.cune.edu/ for the latest news and events!
I tried with SIGUSR1, but no progress. I got SERVER_DISCONNECTED. Output: CHILD 3814: Received USR1 EVENT [SERVER_DISCONNECTED] In esl.c, in esl_recv_event() function, line no: 824 if (rrval < 0) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } When the program is blocked under receive, I passed the signal. So recv returns -1, and in fail: it call esl_disconnect(handle). Is it because of this??? If so, whether it should be fixed or not??? On Mon, Jan 18, 2010 at 9:54 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
try a less famous signal like SIGUSR1 it's possible something in perl still reacts to SIGINT
On Mon, Jan 18, 2010 at 5:22 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Here is the result
Program:
require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock;
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; ®ister_Signals_Child(); sub register_Signals_Child() { foreach ( keys %SIG ) { $SIG{$_} = 'Handler'; } }
sub Handler() {
my $handle=$_[0]; if($handle eq "INT") { print "CHILD $$: SIGNAL SIG$handle is generated\n"; } else { print "CHILD $$: Received $handle\n";
} } my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); }
I executed the program and the following things were printed
CHILD PID: 6778 Connected call e0d1001a-03f4-11df-b002-db488337e0ea, from 1001 $VAR1 = 0; EVENT [CHANNEL_EXECUTE] EVENT [CHANNEL_ANSWER] EVENT [CHANNEL_EXECUTE_COMPLETE] EVENT [COMMAND] EVENT [CHANNEL_EXECUTE] EVENT [HEARTBEAT] EVENT [RE_SCHEDULE] EVENT [CHANNEL_EXECUTE_COMPLETE]
Then from another shell I executed kill -2 6778, the result is follows CHILD 6778: SIGNAL SIGINT is generated EVENT [SERVER_DISCONNECTED]
But the child process is still running as expected. But I don't know why I received SERVER_DISCONNECTED from freeswitch???
On Thu, Jan 14, 2010 at 1:27 PM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
I taught the signal handler will be inherited by the child process. It also does like that. After making a call, If I press ctrl + c, the above program printed PARENT PID: Signal SIGINT is generated CHILD PID: Signal SIGINT is generated.
So I think the sigal handlers will be inherited to the child. Anyway I'll also try registering signal handlers in child also, and then I'll come back with that result.
Thanks.... On Wed, Jan 13, 2010 at 9:48 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
you would have to register signals in your child process too
On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Hi all,
I've done a sample program (In perl ESL) , which play a file to the caller and then it will call recvEvent() and print the event name. I've handled signals also.
When I send SIGINT to my program (Perl), the signal handler is called and I can see the print output. But in the same time, I received SERVER_DISCONNECTED from freeswitch as event.
I don't know why I received SERVER_DISCONNECTED from freeswitch. Is it because, the recvEvent() from perl internally calls the recvevent function in the Esl.c and when it waits to receive the information from socket, the signal occurred???
Please clarify me!!
Here is my program require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock; ®ister_Signals();
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav");
while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); } sub register_Signals() { foreach ( keys %SIG ) { $SIG{$_} = 'sig_Handler'; } }
sub sig_Handler() { my $handle=$_[0]; if($handle eq "INT") { print "$$: SIGNAL SIG$handle is generated\n"; } }
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
Its nothing we can fix, that is what you must do on a failed read syscall. you can do a non blocking read instead and take your chances. On Tue, Jan 19, 2010 at 3:07 AM, lakshmanan ganapathy <lakindia89@gmail.com>wrote:
I tried with SIGUSR1, but no progress. I got SERVER_DISCONNECTED. Output:
CHILD 3814: Received USR1 EVENT [SERVER_DISCONNECTED]
In esl.c, in esl_recv_event() function, line no: 824 if (rrval < 0) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } When the program is blocked under receive, I passed the signal. So recv returns -1, and in fail: it call esl_disconnect(handle).
Is it because of this??? If so, whether it should be fixed or not???
On Mon, Jan 18, 2010 at 9:54 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
try a less famous signal like SIGUSR1 it's possible something in perl still reacts to SIGINT
On Mon, Jan 18, 2010 at 5:22 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Here is the result
Program:
require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock;
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; ®ister_Signals_Child(); sub register_Signals_Child() { foreach ( keys %SIG ) { $SIG{$_} = 'Handler'; } }
sub Handler() {
my $handle=$_[0]; if($handle eq "INT") { print "CHILD $$: SIGNAL SIG$handle is generated\n"; } else { print "CHILD $$: Received $handle\n";
} } my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); }
I executed the program and the following things were printed
CHILD PID: 6778 Connected call e0d1001a-03f4-11df-b002-db488337e0ea, from 1001 $VAR1 = 0; EVENT [CHANNEL_EXECUTE] EVENT [CHANNEL_ANSWER] EVENT [CHANNEL_EXECUTE_COMPLETE] EVENT [COMMAND] EVENT [CHANNEL_EXECUTE] EVENT [HEARTBEAT] EVENT [RE_SCHEDULE] EVENT [CHANNEL_EXECUTE_COMPLETE]
Then from another shell I executed kill -2 6778, the result is follows CHILD 6778: SIGNAL SIGINT is generated EVENT [SERVER_DISCONNECTED]
But the child process is still running as expected. But I don't know why I received SERVER_DISCONNECTED from freeswitch???
On Thu, Jan 14, 2010 at 1:27 PM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
I taught the signal handler will be inherited by the child process. It also does like that. After making a call, If I press ctrl + c, the above program printed PARENT PID: Signal SIGINT is generated CHILD PID: Signal SIGINT is generated.
So I think the sigal handlers will be inherited to the child. Anyway I'll also try registering signal handlers in child also, and then I'll come back with that result.
Thanks.... On Wed, Jan 13, 2010 at 9:48 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
you would have to register signals in your child process too
On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Hi all,
I've done a sample program (In perl ESL) , which play a file to the caller and then it will call recvEvent() and print the event name. I've handled signals also.
When I send SIGINT to my program (Perl), the signal handler is called and I can see the print output. But in the same time, I received SERVER_DISCONNECTED from freeswitch as event.
I don't know why I received SERVER_DISCONNECTED from freeswitch. Is it because, the recvEvent() from perl internally calls the recvevent function in the Esl.c and when it waits to receive the information from socket, the signal occurred???
Please clarify me!!
Here is my program require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock; ®ister_Signals();
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav");
while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); } sub register_Signals() { foreach ( keys %SIG ) { $SIG{$_} = 'sig_Handler'; } }
sub sig_Handler() { my $handle=$_[0]; if($handle eq "INT") { print "$$: SIGNAL SIG$handle is generated\n"; } }
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com<MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org<sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
Thanks for all your reply's. Will give a try to on non-blocking. On Tue, Jan 19, 2010 at 9:34 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
Its nothing we can fix, that is what you must do on a failed read syscall. you can do a non blocking read instead and take your chances.
On Tue, Jan 19, 2010 at 3:07 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
I tried with SIGUSR1, but no progress. I got SERVER_DISCONNECTED. Output:
CHILD 3814: Received USR1 EVENT [SERVER_DISCONNECTED]
In esl.c, in esl_recv_event() function, line no: 824 if (rrval < 0) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } When the program is blocked under receive, I passed the signal. So recv returns -1, and in fail: it call esl_disconnect(handle).
Is it because of this??? If so, whether it should be fixed or not???
On Mon, Jan 18, 2010 at 9:54 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
try a less famous signal like SIGUSR1 it's possible something in perl still reacts to SIGINT
On Mon, Jan 18, 2010 at 5:22 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Here is the result
Program:
require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock;
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; ®ister_Signals_Child(); sub register_Signals_Child() { foreach ( keys %SIG ) { $SIG{$_} = 'Handler'; } }
sub Handler() {
my $handle=$_[0]; if($handle eq "INT") { print "CHILD $$: SIGNAL SIG$handle is generated\n"; } else { print "CHILD $$: Received $handle\n";
} } my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); }
I executed the program and the following things were printed
CHILD PID: 6778 Connected call e0d1001a-03f4-11df-b002-db488337e0ea, from 1001 $VAR1 = 0; EVENT [CHANNEL_EXECUTE] EVENT [CHANNEL_ANSWER] EVENT [CHANNEL_EXECUTE_COMPLETE] EVENT [COMMAND] EVENT [CHANNEL_EXECUTE] EVENT [HEARTBEAT] EVENT [RE_SCHEDULE] EVENT [CHANNEL_EXECUTE_COMPLETE]
Then from another shell I executed kill -2 6778, the result is follows CHILD 6778: SIGNAL SIGINT is generated EVENT [SERVER_DISCONNECTED]
But the child process is still running as expected. But I don't know why I received SERVER_DISCONNECTED from freeswitch???
On Thu, Jan 14, 2010 at 1:27 PM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
I taught the signal handler will be inherited by the child process. It also does like that. After making a call, If I press ctrl + c, the above program printed PARENT PID: Signal SIGINT is generated CHILD PID: Signal SIGINT is generated.
So I think the sigal handlers will be inherited to the child. Anyway I'll also try registering signal handlers in child also, and then I'll come back with that result.
Thanks.... On Wed, Jan 13, 2010 at 9:48 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
you would have to register signals in your child process too
On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
> Hi all, > > I've done a sample program (In perl ESL) , which play a file to the > caller and then it will call recvEvent() and print the event name. I've > handled signals also. > > When I send SIGINT to my program (Perl), the signal handler is called > and I can see the print output. But in the same time, I received > SERVER_DISCONNECTED from freeswitch as event. > > I don't know why I received SERVER_DISCONNECTED from freeswitch. Is > it because, the recvEvent() from perl internally calls the recvevent > function in the Esl.c and when it waits to receive the information from > socket, the signal occurred??? > > Please clarify me!! > > Here is my program > require ESL; > use IO::Socket::INET; > use Data::Dumper; > > my $ip = "192.168.1.222"; > my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => > '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); > die "Could not create socket: $!\n" unless $sock; > ®ister_Signals(); > > for(;;) { > my $new_sock = $sock->accept(); > next if (not defined ($new_sock)); > my $pid = fork(); > if ($pid) { > close($new_sock); > next; > } > print "CHILD PID: $$\n"; > my $host = $new_sock->sockhost(); > my $fd = fileno($new_sock); > > my $con = new ESL::ESLconnection($fd); > my $info = $con->getInfo(); > > my $uuid = $info->getHeader("unique-id"); > > printf "Connected call %s, from %s\n", $uuid, > $info->getHeader("caller-caller-id-number"); > my $r=$con->execute("answer"); > print Dumper $r; > $con->events("plain","all"); > my > $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); > > while($con->connected()) { > my $e = $con->recvEvent(); > > if ($e) { > my $name = $e->getHeader("event-name"); > print "EVENT [$name]\n"; > if ($name eq "DTMF") { > my $digit = $e->getHeader("dtmf-digit"); > print "$digit\n"; > } > } > } > close($new_sock); > } > sub register_Signals() { > foreach ( keys %SIG ) { > $SIG{$_} = 'sig_Handler'; > } > } > > sub sig_Handler() { > my $handle=$_[0]; > if($handle eq "INT") { > print "$$: SIGNAL SIG$handle is generated\n"; > } > } > > > _______________________________________________ > FreeSWITCH-users mailing list > FreeSWITCH-users@lists.freeswitch.org > http://lists.freeswitch.org/mailman/listinfo/freeswitch-users > UNSUBSCRIBE: > http://lists.freeswitch.org/mailman/options/freeswitch-users > http://www.freeswitch.org > >
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com<MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org<sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
Hi all, I've solved that problem by adding. use POSIX; POSIX::sigaction( SIGINT, POSIX::SigAction->new( \&Handler, 0, POSIX::SA_RESTART),); This will restart the system calls if that is failed because of the SIGINT signal. Provided here as an information... Thanks all... On Tue, Jan 19, 2010 at 9:34 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
Its nothing we can fix, that is what you must do on a failed read syscall. you can do a non blocking read instead and take your chances.
On Tue, Jan 19, 2010 at 3:07 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
I tried with SIGUSR1, but no progress. I got SERVER_DISCONNECTED. Output:
CHILD 3814: Received USR1 EVENT [SERVER_DISCONNECTED]
In esl.c, in esl_recv_event() function, line no: 824 if (rrval < 0) { strerror_r(handle->errnum, handle->err, sizeof(handle->err)); goto fail; } When the program is blocked under receive, I passed the signal. So recv returns -1, and in fail: it call esl_disconnect(handle).
Is it because of this??? If so, whether it should be fixed or not???
On Mon, Jan 18, 2010 at 9:54 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
try a less famous signal like SIGUSR1 it's possible something in perl still reacts to SIGINT
On Mon, Jan 18, 2010 at 5:22 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
Here is the result
Program:
require ESL; use IO::Socket::INET; use Data::Dumper;
my $ip = "192.168.1.222"; my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); die "Could not create socket: $!\n" unless $sock;
for(;;) { my $new_sock = $sock->accept(); next if (not defined ($new_sock)); my $pid = fork(); if ($pid) { close($new_sock); next; } print "CHILD PID: $$\n"; ®ister_Signals_Child(); sub register_Signals_Child() { foreach ( keys %SIG ) { $SIG{$_} = 'Handler'; } }
sub Handler() {
my $handle=$_[0]; if($handle eq "INT") { print "CHILD $$: SIGNAL SIG$handle is generated\n"; } else { print "CHILD $$: Received $handle\n";
} } my $host = $new_sock->sockhost(); my $fd = fileno($new_sock);
my $con = new ESL::ESLconnection($fd); my $info = $con->getInfo();
my $uuid = $info->getHeader("unique-id");
printf "Connected call %s, from %s\n", $uuid, $info->getHeader("caller-caller-id-number"); my $r=$con->execute("answer"); print Dumper $r; $con->events("plain","all"); my $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); while($con->connected()) { my $e = $con->recvEvent();
if ($e) { my $name = $e->getHeader("event-name"); print "EVENT [$name]\n"; if ($name eq "DTMF") { my $digit = $e->getHeader("dtmf-digit"); print "$digit\n"; } } } close($new_sock); }
I executed the program and the following things were printed
CHILD PID: 6778 Connected call e0d1001a-03f4-11df-b002-db488337e0ea, from 1001 $VAR1 = 0; EVENT [CHANNEL_EXECUTE] EVENT [CHANNEL_ANSWER] EVENT [CHANNEL_EXECUTE_COMPLETE] EVENT [COMMAND] EVENT [CHANNEL_EXECUTE] EVENT [HEARTBEAT] EVENT [RE_SCHEDULE] EVENT [CHANNEL_EXECUTE_COMPLETE]
Then from another shell I executed kill -2 6778, the result is follows CHILD 6778: SIGNAL SIGINT is generated EVENT [SERVER_DISCONNECTED]
But the child process is still running as expected. But I don't know why I received SERVER_DISCONNECTED from freeswitch???
On Thu, Jan 14, 2010 at 1:27 PM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
I taught the signal handler will be inherited by the child process. It also does like that. After making a call, If I press ctrl + c, the above program printed PARENT PID: Signal SIGINT is generated CHILD PID: Signal SIGINT is generated.
So I think the sigal handlers will be inherited to the child. Anyway I'll also try registering signal handlers in child also, and then I'll come back with that result.
Thanks.... On Wed, Jan 13, 2010 at 9:48 PM, Anthony Minessale < anthony.minessale@gmail.com> wrote:
you would have to register signals in your child process too
On Wed, Jan 13, 2010 at 3:13 AM, lakshmanan ganapathy < lakindia89@gmail.com> wrote:
> Hi all, > > I've done a sample program (In perl ESL) , which play a file to the > caller and then it will call recvEvent() and print the event name. I've > handled signals also. > > When I send SIGINT to my program (Perl), the signal handler is called > and I can see the print output. But in the same time, I received > SERVER_DISCONNECTED from freeswitch as event. > > I don't know why I received SERVER_DISCONNECTED from freeswitch. Is > it because, the recvEvent() from perl internally calls the recvevent > function in the Esl.c and when it waits to receive the information from > socket, the signal occurred??? > > Please clarify me!! > > Here is my program > require ESL; > use IO::Socket::INET; > use Data::Dumper; > > my $ip = "192.168.1.222"; > my $sock = new IO::Socket::INET ( LocalHost => $ip, LocalPort => > '8447', Proto => 'tcp', Listen => 1, Reuse => 1 ); > die "Could not create socket: $!\n" unless $sock; > ®ister_Signals(); > > for(;;) { > my $new_sock = $sock->accept(); > next if (not defined ($new_sock)); > my $pid = fork(); > if ($pid) { > close($new_sock); > next; > } > print "CHILD PID: $$\n"; > my $host = $new_sock->sockhost(); > my $fd = fileno($new_sock); > > my $con = new ESL::ESLconnection($fd); > my $info = $con->getInfo(); > > my $uuid = $info->getHeader("unique-id"); > > printf "Connected call %s, from %s\n", $uuid, > $info->getHeader("caller-caller-id-number"); > my $r=$con->execute("answer"); > print Dumper $r; > $con->events("plain","all"); > my > $re=$con->execute("playback","/usr/local/freeswitch1/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"); > > while($con->connected()) { > my $e = $con->recvEvent(); > > if ($e) { > my $name = $e->getHeader("event-name"); > print "EVENT [$name]\n"; > if ($name eq "DTMF") { > my $digit = $e->getHeader("dtmf-digit"); > print "$digit\n"; > } > } > } > close($new_sock); > } > sub register_Signals() { > foreach ( keys %SIG ) { > $SIG{$_} = 'sig_Handler'; > } > } > > sub sig_Handler() { > my $handle=$_[0]; > if($handle eq "INT") { > print "$$: SIGNAL SIG$handle is generated\n"; > } > } > > > _______________________________________________ > FreeSWITCH-users mailing list > FreeSWITCH-users@lists.freeswitch.org > http://lists.freeswitch.org/mailman/listinfo/freeswitch-users > UNSUBSCRIBE: > http://lists.freeswitch.org/mailman/options/freeswitch-users > http://www.freeswitch.org > >
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com<MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org<sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE: http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com <MSN%3Aanthony_minessale@hotmail.com> GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com<PAYPAL%3Aanthony.minessale@gmail.com> IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org <sip%3A888@conference.freeswitch.org> iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org<googletalk%3Aconf%2B888@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
participants (3)
-
Anthony Minessale
-
lakshmanan ganapathy
-
Russell.Mosemann@cune.org