Increased compatibility
This commit is contained in:
parent
cee5cacfaa
commit
d976de8dca
@ -1,13 +1,13 @@
|
||||
#!perl -w
|
||||
use strict;
|
||||
use Socket;
|
||||
use IO::Socket;
|
||||
|
||||
# auto-flush on socket
|
||||
$| = 1;
|
||||
|
||||
my $VERSION="1.10";
|
||||
my $VERSION="1.20";
|
||||
|
||||
print "AISdispatcher.pl $VERSION, by Frans Veldman s/v ZwerfCat (https://www.zwerfcat.nl)\n";
|
||||
print "AISdispatcher.pl $VERSION, by Frans Veldman, TheFloatingLab (https://www.thefloatinglab.world)\n";
|
||||
|
||||
my $tcp=0;
|
||||
my $gpsd=0;
|
||||
@ -50,6 +50,7 @@ foreach my $a(@ARGV) {
|
||||
}
|
||||
next if($a=~/^-/);
|
||||
if($a=~/^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])):([0-9]+)$/) {
|
||||
my $dummy=$5; # Dummy variable, somehow necessary for some obscure change of interpretation of $5.
|
||||
push @sockets,pack_sockaddr_in($5, inet_aton($1));
|
||||
} else {
|
||||
die "Error: $a is not a valid IP:PORT address!\n";
|
||||
@ -223,16 +224,32 @@ sub getmmsi {
|
||||
|
||||
|
||||
sub sourceconnect {
|
||||
my ($p,$i)=unpack_sockaddr_in($sockets[0]);
|
||||
$i=inet_ntoa($i);
|
||||
|
||||
if($tcp) {
|
||||
# Connect for TCP source
|
||||
|
||||
print "Connecting... " if(!$daemon);
|
||||
socket($sock, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || die "socket: $!";
|
||||
setsockopt($sock, SOL_SOCKET, SO_KEEPALIVE, 1);
|
||||
connect($sock,$sockets[0]) || die "Could not connect to TCP port!\n";
|
||||
print "Connected!\n" if(!$daemon);
|
||||
$sock = new IO::Socket::INET (
|
||||
PeerAddr => $i,
|
||||
PeerPort => $p,
|
||||
Proto => 'tcp',
|
||||
ReuseAddr => 1,
|
||||
KeepAlive => 1,
|
||||
BLocking => 1,
|
||||
Type => SOCK_STREAM,
|
||||
Sockopts => [
|
||||
[ SOL_SOCKET, SO_REUSEADDR ],
|
||||
[ SOL_SOCKET, SO_KEEPALIVE ],
|
||||
]
|
||||
);
|
||||
die "Could not create socket : $!\n" unless $sock;
|
||||
print "Socket created: $sock\n" if(!$daemon);
|
||||
if($gpsd) {
|
||||
# Configure GPSD output, and skip config messages
|
||||
send($sock,'?WATCH={"enable":true,"json":false,"nmea":true,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false}',0);
|
||||
# print $sock,'?WATCH={"enable":true,"json":false,"nmea":true,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false}';
|
||||
while(my $line= <$sock>) {
|
||||
last unless($line=~/\{/);
|
||||
print $line if(!$daemon);
|
||||
@ -240,10 +257,15 @@ sub sourceconnect {
|
||||
}
|
||||
} else {
|
||||
# Connect to UDP source
|
||||
socket($sock, PF_INET, SOCK_DGRAM, getprotobyname('udp')) || die "socket: $!";
|
||||
setsockopt($sock, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) || die "setsockopt: $!";
|
||||
setsockopt($sock,SOL_SOCKET,SO_RCVBUF,100000);
|
||||
bind($sock, $sockets[0]) || die "bind: $!";
|
||||
|
||||
$sock = new IO::Socket::INET (
|
||||
LocalHost => $i,
|
||||
LocalPort => $p,
|
||||
Proto => 'udp',
|
||||
ReuseAddr => 1,
|
||||
);
|
||||
die "Could not create socket : $!\n" unless $sock;
|
||||
print "Socket created: $sock\n" if(!$daemon);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user