<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">Well I think it is, in Spot.pm:<br>
      <br>
      <font face="monospace">sub handle_dupecalls<br>
        {<br>
            my $call = shift;<br>
            my $reason = shift;<br>
            my $testtype = shift;<br>
            my $just_find = shift;<br>
            my $timeout = shift || $dupecall;<br>
            my $threshold = shift || $dupecallthreshold;<br>
            my <font color="#ff0000"><b>$tick </b></font>= shift<font
          color="#ff0000"><b> || $calltick;</b></font><br>
                    <br>
            my $check = $just_find ? 'CHECK' : 'ADD  ';<br>
            <br>
            # we are DEFINITELY kicking the timer down the road until it
        stops<br>
            # in a sustained attack this will oscillate between systime
        and systime + threshold until<br>
            # the attack stops and the record is cleaned away as normal<br>
            my $ldupkey = "X$call";<br>
            my $t = DXDupe::find($ldupkey);<br>
            <br>
            if ($t > 0) {<br>
                my $new = $t +<font color="#ff0000"><b> $tick;</b></font><br>
                if ($t < $main::systime + $threshold) {<br>
      </font><br>
      A bit further up this function is called:<br>
      <b><br>
        <font face="monospace"> </font></b><font face="monospace">   #
        first crude flood protection. This plain callsign checking
        spotting anything that isn't caught by preceding tests.<br>
            if ($dupecall) {<br>
                $t = handle_dupecalls($call, $reason, "(CALL)",
        $just_find) if $do_call_check;<br>
                $t ||= handle_dupecalls($by, $reason, "(BY)",
        $just_find) if $do_by_check;<br>
                $t ||= handle_dupecalls("N$node", $reason, "(NODE)",
        $just_find, $nodetime, $nodetimethreshold) if $do_node_check;<br>
                $t ||= handle_dupecalls($ipaddr, $reason, "(IPADDR)",
        $just_find) if $do_ipaddr_check && $ipaddr &&
        is_ipaddr($ipaddr);<br>
        <br>
                return $t if $t && $just_find;<br>
            }</font><br>
      <br>
      As the last three arguments are not set in the function calls,
      they get the defaults. One of which is <font face="monospace">$calltick.</font><br>
      <br>
      The problem with trying to model this is that the time continues
      underneath all these timers. So analysing it is pretty
      non-deterministic. You have send the spot and then observe the
      result at exactly the same number of seconds later.<br>
      <br>
      Hope this helps<br>
      <br>
      Dirk G1TLH<br>
      <br>
      On 05/04/2025 16:39, Kin via Dxspider-support wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:0b4501dba640$e2bebb70$a83c3250$@cronux.net">
      <pre wrap="" class="moz-quote-pre">Hi Dirk,

I'm analysing these two spots, and it seems to me that $calltick is not
actually being applied. Instead, it appears to be replaced by $dupecall.

Spot-1
1743764875^PC61^28482.0^4X4HQ^
4-Apr-2025^1107Z^CQing^ON3FZT^PA1RBZ^91.177.93.57^H27^

DXDupe::add key: X4X4HQ|ON3FZT|28482|1743764820|CQING time: 11:17:55Z (time
de llegada al nodo) 
DXDupe::add key: X4X4HQ|28482 time: 11:09:00Z
DXDupe::add key: X4X4HQ|CQING time: 11:13:00Z
DXDupe::add key: X4X4HQ time: 11:08:05Z
DXDupe::add key: XON3FZT time: 11:08:05Z
DXDupe::add key: X91.177.93.57 time: 11:08:05Z

Spot-2
1743764885^PC61^28482.0^4X4HQ^
4-Apr-2025^1107Z^CQing^ON3FZT^PA1RBZ^91.177.93.57^H27^

DXDupe::add key: X4X4HQ|ON3FZT|28482|1743764820|CQING time: 11:18:05Z (time
de llegada al nodo)
DXDupe::add key: X4X4HQ|28482 time: 11:09:00Z
DXDupe::add key: X4X4HQ|CQING time: 11:13:00Z
DXDupe::add key: X4X4HQ time: 11:08:15Z ***
DXDupe::add key: XON3FZT time: 11:08:15Z ***
DXDupe::add key: X91.177.93.57 time: 11:08:15Z ***

Note ***
Previous expiration t = 11:07:55Z = 1743764875
$main::systime = 11:08:05Z = 1743764885
Threshold ($Spot::dupecallthreshold) = 35
So: t < $main::systime + 35 -> OK
New value calculated: 1743764885 + 5 = 1743764890 = 11:08:10Z
($main::systime is equal to the arrival time of the second spot)

However, that value is not actually used. Instead, it is replaced with:
$main::systime + $dupecall = 1743764885 + 10 = 1743764895 = 11:08:15Z

The keys X4X4HQ, XON3FZT, and X91.177.93.57 are all renewed using $dupecall
(10 seconds), not $calltick.
The $calltick = 5 is effectively not applied here, because:
Even though the code computes t + $calltick, it is overwritten by:
DXDupe::add($ldupkey, $main::systime + $dupecall)

Variable values used:
$Spot::dupage 600
$Spot::dupeqrgcall 65
$Spot::dupecallinfo 305
$Spot::dupecall 10
$Spot::calltick 5
$Spot::dupecallthreshold 35

Is my understanding correct?

Kin EA3CV


_______________________________________________
Dxspider-support mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Dxspider-support@tobit.co.uk">Dxspider-support@tobit.co.uk</a>
<a class="moz-txt-link-freetext" href="https://mailman.tobit.co.uk/mailman/listinfo/dxspider-support">https://mailman.tobit.co.uk/mailman/listinfo/dxspider-support</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>