diff --git a/Koha/REST/V1/SIP2/Listeners.pm b/Koha/REST/V1/SIP2/Listeners.pm index 78adae38d5..b372b5f857 100644 --- a/Koha/REST/V1/SIP2/Listeners.pm +++ b/Koha/REST/V1/SIP2/Listeners.pm @@ -108,6 +108,12 @@ sub add { openapi => { error => "Given " . $to_api_mapping->{ $_->parameter } . " does not exist" } ); } + elsif ( $_->isa('Koha::Exceptions::ObjectNotCreated') ) { + return $c->render( + status => 500, + openapi => { error => $_->error } + ); + } } $c->unhandled_exception($_); diff --git a/Koha/SIP2/Listener.pm b/Koha/SIP2/Listener.pm index cc34a30fad..54c09a57f4 100644 --- a/Koha/SIP2/Listener.pm +++ b/Koha/SIP2/Listener.pm @@ -19,6 +19,8 @@ use Modern::Perl; use base qw(Koha::Object); +use IO::Socket; + =head1 NAME Koha::SIP2::Listener- Koha Sip Listener Object class @@ -29,6 +31,34 @@ Koha::SIP2::Listener- Koha Sip Listener Object class =cut +=head3 store + +store + +=cut + +sub store { + my ($self) = @_; + + my ($port) = $self->port =~ /:(\d+)/; + my ($addr) = $self->port =~ /([0-9.]+)/; + + my $socket = IO::Socket::INET->new( + LocalAddr => $addr, + LocalPort => $port, + Proto => 'tcp', + ReuseAddr => 0, + Listen => 1 + ); + + unless ($socket) { + Koha::Exceptions::ObjectNotCreated->throw( + error => "Can't listen on port " . $self->port . ". Port already in use." ); + } + + return $self->SUPER::store; +} + =head3 get_for_config Returns the listener hashref as expected by C4/SIP/Sip/Configuration->new;