try to fix DXSubprocess errors
authorDirk Koopman <djk@tobit.co.uk>
Sat, 23 May 2020 13:51:09 +0000 (14:51 +0100)
committerDirk Koopman <djk@tobit.co.uk>
Sat, 23 May 2020 13:57:42 +0000 (14:57 +0100)
That are happening at the EA3CV-2.
Also make sure that an incoming connection's IP address is recorded.

perl/DXSubprocess.pm
perl/Msg.pm

index 44427621714da6251c72beb2ac3eb963c24efbc0..6ff5adae1bbba143f2531007359e19bd31ed9a09 100644 (file)
@@ -8,6 +8,7 @@ package DXSubprocess;
 
 use DXUtil;
 use DXDebug;
+use DXLog;
 use Mojo::IOLoop;
 use    Mojo::IOLoop::Subprocess;
 use JSON;
@@ -18,6 +19,45 @@ sub new
 {
        my $pkg = shift;
        my $class = ref $pkg || __PACKAGE__;
-       my $ref = Mojo::IOLoop::Subprocess->new->serialize(\&encode_json)->deserialize(\&decode_json);
+       my $ref = Mojo::IOLoop::Subprocess->new->serialize(\&freeze)->deserialize(\&thaw);
        return bless $ref, $class;
 }
+
+sub freeze
+{
+       my $r;
+       my $j = shift;
+       unless ($j) {
+               LogDbg('DXUser', "DXSubcommand::freeze: undefined or empty input");
+               return q{[null, ""]};
+       }
+       
+       eval { $r = encode_json($j) };
+       if ($@) {
+               my $dd = dd($j);
+               LogDbg('DXUser', "DXSubcommand::freeze: json error on '$dd': $@");
+               $r = qq{['$@','']};
+       }
+       return $r;
+}
+
+sub thaw
+{
+       my $r;
+       my $j = shift;
+       unless ($j) {
+               LogDbg('DXUser', "DXSubcommand::thaw: empty string on input");
+               return q{[null, ""]};
+       }
+
+       return [undef, [1]] unless $j; 
+       eval { $r = decode_json($j) };
+       if ($@) {
+               LogDbg('DXUser', "DXSubcommand::thaw: json error on '$j': $@");
+               $r = qq{[$@,[1]]};
+       }
+       return $r;
+}
+1;
+
+       
index 3c4b51f3d0d2504adff8ccaf7bd61781bf6163f9..5e40d3c2afa5bdfb86e9a8b3aaf302a551f3ebd6 100644 (file)
@@ -146,7 +146,7 @@ sub _on_connect
        $sock->timeout(0);
        $sock->start;
        $conn->{peerhost} = eval { $handle->peerhost; };
-       dbg((ref $conn) . " connected $conn->{cnum} to $conn->{peerhost}:$conn->{peerport}") if isdbg('connll');
+       dbg((ref $conn) . " connected $conn->{cnum} to $conn->{peerhost}:$conn->{peerport}") if isdbg('conn') || isdbg ('connect');
        if ($conn->{on_connect}) {
                &{$conn->{on_connect}}($conn, $handle);
        }
@@ -485,7 +485,7 @@ sub new_client {
        $conn->{peerhost} = $handle->peerhost;
        $conn->{peerhost} =~ s|^::ffff:||; # chop off leading pseudo IPV6 stuff on dual stack listeners
        $conn->{peerport} = $handle->peerport;
-       dbg((ref $conn) . " accept $conn->{cnum} from $conn->{peerhost}:$conn->{peerport}") if isdbg('connll');
+       dbg((ref $conn) . " accept $conn->{cnum} from $conn->{peerhost}:$conn->{peerport}") if isdbg('conn') || isdbg('connect');
        my ($rproc, $eproc) = &{$server_conn->{rproc}} ($conn, $conn->{peerhost}, $conn->{peerport});
        $conn->{sort} = 'Incoming';
        if ($eproc) {