X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXUtil.pm;h=d23c27cfa5e3d73e4d3c21fae04aef16d6d08a9e;hb=dc9a699965ba5a2e347a72d4ba8b0612f8adc63e;hp=51272d743420eea029be9a8d0b9e04bc77e029a1;hpb=710e02b70cb2530802812577229cd62a50da8090;p=spider.git diff --git a/perl/DXUtil.pm b/perl/DXUtil.pm index 51272d74..d23c27cf 100644 --- a/perl/DXUtil.pm +++ b/perl/DXUtil.pm @@ -15,6 +15,7 @@ use File::Copy; use Data::Dumper; use Time::HiRes qw(gettimeofday tv_interval); use Text::Wrap; +use Socket qw(AF_INET6 AF_INET inet_pton); use strict; @@ -29,7 +30,7 @@ require Exporter; is_qra is_freq is_digits is_pctext is_pcflag insertitem deleteitem is_prefix dd is_ipaddr $pi $d2r $r2d localdata localdata_mv diffms _diffms _diffus difft parraydifft is_ztime basecall - normalise_call + normalise_call is_numeric ); @@ -45,6 +46,14 @@ $pi = 3.141592653589; $d2r = ($pi/180); $r2d = (180/$pi); +our $ptonok; + +BEGIN { + $ptonok = !defined inet_pton(AF_INET, '016.17.184.1') + && !defined inet_pton(AF_INET6, '2067::1:') + # Some old versions of Socket are hopelessly broken + && length(inet_pton(AF_INET, '1.1.1.1')) == 4; +} # a full time for logging and other purposes sub atime @@ -222,7 +231,7 @@ sub phash my $ref = shift; my $out; - while (my $k = sort keys %$ref) { + foreach my $k (sort keys %$ref) { $out .= "${k}=>$ref->{$k}, "; } $out =~ s/, $// if $out; @@ -380,8 +389,8 @@ sub filecopy sub unpad { my $s = shift; - $s =~ s/\s+$//; - $s =~ s/^\s+//; + $s =~ s/^\s*//; + $s =~ s/\s*$//; return $s; } @@ -448,7 +457,25 @@ sub is_latlong # is it an ip address? sub is_ipaddr { - return $_[0] =~ /^\d+\.\d+\.\d+\.\d+$/ || $_[0] =~ /^[0-9a-f:,]+$/; + $_[0] =~ s|/\d+$||; + if ($ptonok) { + if ($_[0] =~ /:/) { + if (inet_pton(AF_INET6, $_[0])) { + return ($_[0] =~ /([:0-9a-f]+)/); + } + } else { + if (inet_pton(AF_INET, $_[0])) { + return ($_[0] =~ /([\.\d]+)/); + } + } + } else { + if ($_[0] =~ /:/) { + return ($_[0] =~ /^(:?:?(?:[0-9a-f]{1,4}\:)?(?:\:[0-9a-f]{1,4}(?:\:\:)?){1,8})$/i); + } else { + return ($_[0] =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/); + } + } + return undef; } # is it a zulu time hhmmZ @@ -551,7 +578,7 @@ sub diffms sub difft { my $b = shift; - my $adds = shift; + my $adds = shift // 0; my $t; if (ref $b eq 'ARRAY') { @@ -578,7 +605,7 @@ sub difft $t -= $h * 3600; $m = int $t / 60; $out .= sprintf ("%s${m}m", $adds?' ':'') if $m; - if ($d == 0 && $adds || $adds == 2) { + if (($d == 0 && $adds) || (int $adds && $adds == 2)) { $s = int $t % 60; $out .= sprintf ("%s${s}s", $adds?' ':'') if $s; $out ||= sprintf ("%s0s", $adds?' ':''); @@ -614,3 +641,8 @@ sub normalise_call $ncall .= "-$ssid" if $ssid; return $ncall; } + +sub is_numeric +{ + return $_[0] =~ /^[\.\d]+$/; +}