[Freeswitch-users] recvEventTimed - SERVER_DISCONNECTED

Nagalenoj H. nagalenoj at gmail.com
Mon Mar 8 20:33:15 PST 2010


Anything wrong with this question?! I didn't find any replies for this..

On Fri, Mar 5, 2010 at 10:37 AM, Nagalenoj H. <nagalenoj at gmail.com> wrote:

> Dear friends,
>      I've faced an issue in event socket. I would want to know why it
> behaves such a way.
>
>      My program is working with the hep of events. So, based on the
> received event, the process will continue it's work. When I need DTMF, I use
> recvEventTimed and in the other cases, I use recvEvent.
>      So, In the mid if caller hangsup, I expect for the SERVER_DISCONNECTED
> event. When the caller hangsup when I'm waiting in recvEvent, I'm getting
> SERVER_DISCONNECTED. But, when I'm waiting in recvEventTimed, I'mnot
> receiving SERVER_DISCONNECTED, instead receiving an undefined value.
>
>     To handle this, I've checked esl connection inside the timeout part and
> put a recvEvent, then I receive SERVER_DISCONNECTED.
>
>     My question is, why am I not receiving SERVER_DISCONNECTED when I recv
> event using recvEventTimed?!
>
> This is a sample program I execute,
>
> require ESL;
> use IO::Socket::INET;
>
> my $ip = "127.0.0.1";
> my $sock = new IO::Socket::INET ( LocalHost => $ip,  LocalPort => '9242',
> Proto => 'tcp',  Listen => 1,  Reuse => 1 );
> die "Could not create socket: $!\n" unless $sock;
>
> for(;;) {
>   my $new_sock = $sock->accept();
>   my $pid = fork();
>   if ($pid) {
>     close($new_sock);
>     next;
>   }
>
>   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 $e = $con->filter("unique-id", $uuid);
>   if ($e) {
>     print $e->serialize();
>   } else {
>     printf("WTF?\n");
>   }
>
>   $con->events("plain", "SERVER_DISCONNECTED DTMF");
>   $con->execute("answer");
>
>   while($con->connected()) {
>     $e = $con->recvEvent();   ############# CASE 1 ##
>     # $e = $con->recvEventTimed(10000);       ############# CASE 2 ##
>
>     unless ($e) {
>         unless ($con->connected()) {
> ###############################
>            $e = $con->recvEvent();                         ##
>            print $e->serialize();                               ##   Added
> code to get SERVER_DISCONNECTED.
>            print "SERVER_DISCONNECTED";     ##
>         }
> ###############################
>         print "DTMF timeout\n";
>     }
>     if ($e) {
>       my $name = $e->getHeader("event-name");
>       print "EVENT [$name]\n";
>       if ($name eq "DTMF") {
>         my $digit = $e->getHeader("dtmf-digit");
>         my $duration = $e->getHeader("dtmf-duration");
>         print "DTMF digit $digit ($duration)\n";
>       }
>     }
>   }
>   print "BYE\n";
>   close($new_sock);
> }
>
> --
> Regards,
> Nagalenoj H.
>



-- 
Regards,
Nagalenoj H.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20100309/369bae7f/attachment-0002.html 


More information about the FreeSWITCH-users mailing list