@@ -, +, @@ --- C4/SIP/SIPServer.pm | 40 +++++++++++++--------------------------- 1 files changed, 13 insertions(+), 27 deletions(-) --- a/C4/SIP/SIPServer.pm +++ a/C4/SIP/SIPServer.pm @@ -35,7 +35,6 @@ BEGIN { my %transports = ( RAW => \&raw_transport, telnet => \&telnet_transport, - # http => \&http_transport, # for http just use the OPAC ); # @@ -126,31 +125,18 @@ sub raw_transport { my $self = shift; my ($input); my $service = $self->{service}; - my $strikes = 3; - eval { - local $SIG{ALRM} = sub { die "raw_transport Timed Out!\n"; }; - syslog("LOG_DEBUG", "raw_transport: timeout is %d", $service->{timeout}); - while ($strikes--) { - alarm $service->{timeout}; - $input = Sip::read_SIP_packet(*STDIN); - alarm 0; - if (!$input) { - # EOF on the socket - syslog("LOG_INFO", "raw_transport: shutting down: EOF during login"); - return; - } - $input =~ s/[\r\n]+$//sm; # Strip off trailing line terminator(s) - last if Sip::MsgType::handle($input, $self, LOGIN); - } - }; - - if (length $@) { - syslog("LOG_ERR", "raw_transport: LOGIN ERROR: '$@'"); - die "raw_transport: login error (timeout? $@), exiting"; - } elsif (!$self->{account}) { - syslog("LOG_ERR", "raw_transport: LOGIN FAILED"); - die "raw_transport: Login failed (no account), exiting"; + while (!$self->{account}) { + local $SIG{ALRM} = sub { die "raw_transport Timed Out!\n"; }; + syslog("LOG_DEBUG", "raw_transport: timeout is %d", $service->{timeout}); + $input = Sip::read_SIP_packet(*STDIN); + if (!$input) { + # EOF on the socket + syslog("LOG_INFO", "raw_transport: shutting down: EOF during login"); + return; + } + $input =~ s/[\r\n]+$//sm; # Strip off trailing line terminator(s) + last if Sip::MsgType::handle($input, $self, LOGIN); } syslog("LOG_DEBUG", "raw_transport: uname/inst: '%s/%s'", @@ -272,8 +258,7 @@ sub sip_protocol_loop { while (1) { $input = Sip::read_SIP_packet(*STDIN); unless ($input) { - print("96$CR"); - next; + return; # EOF } # begin input hacks ... a cheap stand in for better Telnet layer $input =~ s/^[^A-z0-9]+//s; # Kill leading bad characters... like Telnet handshakers @@ -281,6 +266,7 @@ sub sip_protocol_loop { while (chomp($input)) {warn "Extra line ending on input";} unless ($input) { syslog("LOG_ERR", "sip_protocol_loop: empty input skipped"); + print("96$CR"); next; } # end cheap input hacks --