diff --git a/C4/SIP/Sip.pm b/C4/SIP/Sip.pm
index c29bff282f..cfaa202dac 100644
--- a/C4/SIP/Sip.pm
+++ b/C4/SIP/Sip.pm
@@ -187,11 +187,16 @@ sub boolspace {
#
sub write_msg {
- my ($self, $msg, $file, $terminator, $encoding) = @_;
+ my ($self, $msg, $server) = @_;
+ my $terminator = $server->{account}->{terminator};
+ my $encoding = $server->{account}->{encoding};
$terminator ||= q{};
$terminator = ( $terminator eq 'CR' ) ? $CR : $CRLF;
+ my $separator = $server->{account}->{convert_nonprinting_characters};
+ $msg =~ s/[^[:print:]]/$separator/g if defined $separator;
+
$msg = encode($encoding, $msg) if ( $encoding );
my $cksum;
@@ -206,15 +211,9 @@ sub write_msg {
$msg .= sprintf('%04.4X', $cksum);
}
-
- if ($file) {
- $file->autoflush(1);
- print $file $msg, $terminator;
- } else {
- STDOUT->autoflush(1);
- print $msg, $terminator;
- siplog("LOG_INFO", "OUTPUT MSG: '$msg'");
- }
+ STDOUT->autoflush(1);
+ print $msg, $terminator;
+ siplog("LOG_INFO", "OUTPUT MSG: '$msg'");
$last_response = $msg;
}
diff --git a/C4/SIP/Sip/MsgType.pm b/C4/SIP/Sip/MsgType.pm
index 12bfd526f5..6ad48672fd 100644
--- a/C4/SIP/Sip/MsgType.pm
+++ b/C4/SIP/Sip/MsgType.pm
@@ -509,7 +509,7 @@ sub handle_patron_status {
$koha_patron->update_lastseen('connection');
}
$resp = build_patron_status( $patron, $lang, $fields, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (PATRON_STATUS_REQ);
}
@@ -649,7 +649,7 @@ sub handle_checkout {
}
}
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (CHECKOUT);
}
@@ -748,7 +748,7 @@ sub handle_checkin {
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server );
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (CHECKIN);
}
@@ -795,7 +795,7 @@ sub handle_block_patron {
}
$resp = build_patron_status( $patron, $patron->language, $fields, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (BLOCK_PATRON);
}
@@ -836,7 +836,7 @@ sub handle_request_acs_resend {
# We haven't sent anything yet, so respond with a
# REQUEST_SC_RESEND msg (p. 16)
- $self->write_msg( REQUEST_SC_RESEND, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( REQUEST_SC_RESEND, $server );
} elsif ( ( length($last_response) < 9 )
|| substr( $last_response, -9, 2 ) ne 'AY' ) {
@@ -850,7 +850,7 @@ sub handle_request_acs_resend {
# Cut out the sequence number and checksum, since the old
# checksum is wrong for the resent message.
my $rebuilt = substr( $last_response, 0, -9 );
- $self->write_msg( $rebuilt, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $rebuilt, $server );
}
return REQUEST_ACS_RESEND;
@@ -932,7 +932,7 @@ sub handle_login {
$status = login_core( $server, $uid, $pwd );
}
- $self->write_msg( LOGIN_RESP . $status, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( LOGIN_RESP . $status, $server );
return $status ? LOGIN : '';
}
@@ -1110,7 +1110,7 @@ sub handle_patron_info {
$resp .= maybe_add( FID_SCREEN_MSG, INVALID_CARD, $server );
}
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (PATRON_INFO);
}
@@ -1137,7 +1137,7 @@ sub handle_end_patron_session {
$resp .= maybe_add( FID_SCREEN_MSG, $screen_msg, $server );
$resp .= maybe_add( FID_PRINT_LINE, $print_line, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (END_PATRON_SESSION);
}
@@ -1219,7 +1219,7 @@ sub handle_fee_paid {
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server );
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (FEE_PAID);
}
@@ -1312,7 +1312,7 @@ sub handle_item_information {
$resp .= $item->build_custom_field_string( $server );
}
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (ITEM_INFORMATION);
}
@@ -1362,7 +1362,7 @@ sub handle_item_status_update {
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server );
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (ITEM_STATUS_UPDATE);
}
@@ -1416,7 +1416,7 @@ sub handle_patron_enable {
$resp .= add_field( FID_INST_ID, $ils->institution, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (PATRON_ENABLE);
}
@@ -1481,7 +1481,7 @@ sub handle_hold {
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server );
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (HOLD);
}
@@ -1568,7 +1568,7 @@ sub handle_renew {
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server );
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (RENEW);
}
@@ -1621,7 +1621,7 @@ sub handle_renew_all {
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server );
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line, $server );
- $self->write_msg( $resp, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $resp, $server );
return (RENEW_ALL);
}
@@ -1727,7 +1727,7 @@ sub send_acs_status {
# Do we want to tell the terminal its location?
- $self->write_msg( $msg, undef, $server->{account}->{terminator}, $server->{account}->{encoding} );
+ $self->write_msg( $msg, $server );
return 1;
}
diff --git a/etc/SIPconfig.xml b/etc/SIPconfig.xml
index a1432b13f3..1988477691 100644
--- a/etc/SIPconfig.xml
+++ b/etc/SIPconfig.xml
@@ -59,6 +59,7 @@
+