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 <chris@bigballofwax.co.nz>
Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
This commit is contained in:
Colin Campbell 2012-06-09 15:17:14 +01:00 committed by Paul Poulain
parent ce138ac96f
commit da49eeb8f9
1 changed files with 13 additions and 3 deletions

View File

@ -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'");
}