Timeout in protocol loop user/tsbere/loop_timeout
authorThomas Berezansky <tsbere@mvlc.org>
Tue, 28 Aug 2012 16:50:47 +0000 (12:50 -0400)
committerThomas Berezansky <tsbere@mvlc.org>
Tue, 28 Aug 2012 16:53:34 +0000 (12:53 -0400)
To (hopefully) prevent dead connections from hanging around.

Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
SIPServer.pm [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 36f505d..f34afa6
@@ -262,6 +262,7 @@ sub sip_protocol_loop {
     my $service = $self->{service};
     my $config  = $self->{config};
     my $input;
+    my $timeout = $self->{service}->{timeout} || $config->{timeout} || 0;
 
     # Now that the terminal has logged in, the first message
     # we recieve must be an SC_STATUS message.  But it might be
@@ -279,7 +280,9 @@ sub sip_protocol_loop {
     #$expect = SC_STATUS;
     $expect = '';
 
+    alarm $timeout; # First loop timeout
     while ( $input = Sip::read_SIP_packet(*STDIN) ) {
+        alarm 0; # Don't timeout while we are processing
         $input =~ s/[\r\n]+$//sm;    # Strip off any trailing line ends
 
         my $status = Sip::MsgType::handle($input, $self, $expect);
@@ -297,5 +300,6 @@ sub sip_protocol_loop {
 
         # We successfully received and processed what we were expecting
         $expect = '';
+        alarm $timeout; # Next loop timeout
     }
 }