+die "need KOHA_URL, eg. http://ffzg.koha-dev.rot13.org:8080" unless $koha_url;
+
+our $rfid_sid_cache;
+
+sub rfid_borrower {
+ my $hash = shift;
+ if ( my $json = $rfid_sid_cache->{ $hash->{sid} } ) {
+ return $json;
+ }
+ my $ua = LWP::UserAgent->new;
+ my $url = URI->new( $koha_url . '/cgi-bin/koha/ffzg/rfid/borrower.pl');
+ $url->query_form(
+ RFID_SID => $hash->{sid}
+ , OIB => $hash->{OIB}
+ , JMBAG => $hash->{JMBAG}
+ );
+ warn "GET ",$url->as_string;
+ my $response = $ua->get($url);
+ if ( $response->is_success ) {
+ my $json = decode_json $response->decoded_content;
+ $rfid_sid_cache->{ $hash->{sid} } = $json;
+ return $json;
+ } else {
+ warn "ERROR ", $response->status_line;
+ }
+}
+
+
+sub sip2_message {
+ my $send = shift;
+
+ my $sock = $sip2->{sock} || die "no sip2 socket";
+
+ local $/ = "\r";
+
+ $send .= "\r" unless $send =~ m/\r$/;
+ warn "SIP2 >>>> ",dump($send), "\n";
+ print $sock $send;
+ $sock->flush;
+
+ my $expect = substr($send,0,2) | 0x01;
+
+ my $in = <$sock>;
+ $in =~ s/^\n//;
+ warn "SIP2 <<<< ",dump($in), "\n";
+
+ die "expected $expect" unless substr($in,0,2) != $expect;
+
+ $in =~ s/\r$//;
+
+ my $hash;
+ if ( $in =~ s/^([0-9\s]+)// ) {
+ $hash->{fixed} = $1;
+ }
+ foreach ( split(/\|/, $in ) ) {
+ my ( $f, $v ) = ( $1, $2 ) if m/([A-Z]{2})(.+)/;
+ $hash->{$f} = decode('utf-8',$v);
+ }
+
+ warn "# sip2 hash response ",dump($hash);
+
+ return $hash;
+}
+
+if ( my $server = $sip2->{server} ) {
+ my $sock = $sip2->{sock} = IO::Socket::INET->new( $server ) || die "can't connect to $server: $!";
+ warn "SIP2 server ", $sock->peerhost, ":", $sock->peerport, "\n";
+
+ # login
+ if ( sip2_message("9300CN$sip2->{user}|CO$sip2->{password}|")->{fixed} !~ m/^941/ ) {
+ die "SIP2 login failed";
+ }
+
+}
+