From da49eeb8f9d03d8fcc8b840e752c28236b856183 Mon Sep 17 00:00:00 2001 From: Colin Campbell Date: Sat, 9 Jun 2012 15:17:14 +0100 Subject: [PATCH] Bug 7619 Use CRLF as default terminator Most units require or tolerate CRLF as the terminator Using only \r causes many including 3M units to signal errors due to delay this resets CRLF to be default but adds a single constant variable and explanation so that if you have a "strictly conforming" unit (the 'Baby' is the only I have encountered you know where to make the change Signed-off-by: Chris Cormack Signed-off-by: Paul Poulain --- C4/SIP/Sip.pm | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/C4/SIP/Sip.pm b/C4/SIP/Sip.pm index e9e1392b99..1d563badfa 100644 --- a/C4/SIP/Sip.pm +++ b/C4/SIP/Sip.pm @@ -8,6 +8,7 @@ use strict; use warnings; use English; use Exporter; +use Readonly; use Sys::Syslog qw(syslog); use POSIX qw(strftime); @@ -38,7 +39,16 @@ BEGIN { our $error_detection = 0; our $protocol_version = 1; -our $field_delimiter = '|'; # Protocol Default +our $field_delimiter = '|'; # Protocol Default +# The message terminator for a SIP message is '\r' in the standard doc +# However most sip devices in the wild send a CR LF pair +# This is required by Telnet if that is your carrier mechanism +# On raw connections it may also be required because the buffer is +# only flushed on linefeed and its absence causes enough delay for +# client machines to go into an error state +# The below works for almost all machines if however you have one +# which does not like the additional linefeed change value to $CR +Readonly my $msg_terminator => $CRLF; # We need to keep a copy of the last message we sent to the SC, # in case there's a transmission error and the SC sends us a @@ -234,10 +244,10 @@ sub write_msg { if ($file) { $file->autoflush(1); - print $file "$msg\r"; + print $file $msg, $msg_terminator; } else { STDOUT->autoflush(1); - print $msg, "\r"; + print $msg, $msg_terminator; syslog("LOG_INFO", "OUTPUT MSG: '$msg'"); } -- 2.39.5