add user level ping as link check command
authorDirk Koopman <djk@tobit.co.uk>
Fri, 3 Mar 2023 14:22:54 +0000 (14:22 +0000)
committerDirk Koopman <djk@tobit.co.uk>
Fri, 3 Mar 2023 14:22:54 +0000 (14:22 +0000)
Changes
cmd/Commands_en.hlp
cmd/ping.pl

diff --git a/Changes b/Changes
index 9d9e2466f71ee3bdafdeb0c2471970179fbadc97..8ee7916f07b997da5588c3a870284b43d9ecc4af 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,6 +2,10 @@
 1. Fix DXDebug::DXDebug not found errors in rarely used functions. This is 
    also an interaction with differing versions of Mojolicious. Clearly this 
    has never happened to me (sigh).
+2. Allow non-privileged users to use ping (no arguments) and get 'PONG nn' 
+   where nn is an incrementing counter or if there is an argument it will 
+   return 'PONG <argument>' - all in UPPER CASE. See help ping for more
+   details. 
 02Mar23=======================================================================
 1. Fix sh/dx/30 problem. I.e. allow old style version of sh/dx 30.  
 01Mar23=======================================================================
index 909c3b7d795612b57bc4eca7bff9bdac0acfcaaf..63cef603878c022925d56a0c03cd5ca73cea1d10 100644 (file)
@@ -1128,6 +1128,27 @@ PC protocol to connected nodes either for testing or to unstick things.
 You can also use in the same way as a talk command to a connected user but
 without any processing, added of "from <blah> to <blah" or whatever.
  
+=== 0^PING [argument]^User level link check command
+At the user level, this command allows the user to check that they
+are still connected to a functioning node. If the command is
+issued with no arguments it will return string 'PONG 123' where
+'123' is a node global counter starting at 1. This number cannot
+be relied to run consecutively as it is shared by all users.
+
+If an argument is supplied then the return is 'PONG ARGUMENT'. So it
+you are a client program and you need a counter or some other unique
+string to satisfy yourself that you are not being spoofed, then you
+will need to supply the argument and check that reply is what you
+expect:
+
+ping 23 or ping xyzzy
+
+will return
+
+PONG 23 or PONG XYZZY
+
+respectively.
+
 === 1^PING <node call>^Check the link quality between nodes
 This command allows you to send a frame to another cluster node on
 the network and get a return frame.  The time it takes to do this
index 32efda31aabf0c8b7baa48ca9ef575b2015ecb3a..89f43a0bb86144eb90284d0e1ed087f7dd0b221a 100644 (file)
@@ -6,27 +6,43 @@
 #
 #
 
-my $self = shift;
-my $line = uc shift;   # only one callsign allowed 
-my ($call) = $line =~ /^\s*(\S+)/;
+my $counter;
 
-# are we permitted?
-return (1, $self->msg('e5')) if $self->priv < 1;
+sub init
+{
+       $counter = 0;
+}
 
-# is there a call?
-return (1, $self->msg('e6')) if !$call;
+sub handle
+{
+       my $self = shift;
+       my $line = uc shift;            # only one callsign allowed 
+       my ($call) = $line =~ /^\s*(\S+)/;
 
-# is it me?
-return (1, $self->msg('pinge1')) if $call eq $main::mycall;
+#      $DB::single = 1;
 
-# can we see it? Is it a node?
-my $noderef = Route::Node::get($call);
+       if ($self->{priv} < 1) {
+               if ($call) {
+                       return (1, "PONG $call");
+               }
+               ++$counter, return (1, "PONG $counter") 
+       }
 
-return (1, $self->msg('e7', $call)) unless $noderef;
+       # is there a call?
+       return (1, $self->msg('e6')) if !$call;
 
-# ping it
-DXXml::Ping::add($self, $call);
+       # is it me?
+       return (1, $self->msg('pinge1')) if $call eq $main::mycall;
 
-return (1, $self->msg('pingo', $call));
+       # can we see it? Is it a node?
+       my $noderef = Route::Node::get($call);
+
+       return (1, $self->msg('e7', $call)) unless $noderef;
+
+       # ping it
+       DXXml::Ping::add($self, $call);
+
+       return (1, $self->msg('pingo', $call));
+}