removed spurious ' ' after comment in PC93
[spider.git] / perl / DXProtout.pm
index 4f4da1e50677953c3d1a8235703f0e22849abff2..8525b5396aef6c8bb0405e7e713746dc568a1535 100644 (file)
@@ -11,7 +11,7 @@
 
 package DXProt;
 
-@ISA = qw(DXProt DXChannel);
+@ISA = qw(DXChannel);
 
 use DXUtil;
 use DXM;
@@ -19,9 +19,10 @@ use DXDebug;
 
 use strict;
 
-use vars qw($sentencelth $pc19_version);
+use vars qw($sentencelth $pc19_version $pc9x_nodupe_first_slot $pc92c_ipaddr_enable);
 
 $sentencelth = 180;
+$pc9x_nodupe_first_slot = 1;
 
 #
 # All the PCxx generation routines
@@ -42,28 +43,39 @@ sub pc10
        $origin ||= $main::mycall;
        $text = unpad($text);
        $text = ' ' unless $text && length $text > 0;
-       $text =~ s/\^/%5E/g;
+       $text =~ s/\^/~/g;
        return "PC10^$from^$user1^$text^*^$user2^$origin^~";
 }
 
-# create a dx message (call, freq, dxcall, text)
+# create a dx message (call, freq, dxcall, text) see also pc61
 sub pc11
 {
        my ($mycall, $freq, $dxcall, $text) = @_;
        my $hops = get_hops(11);
        my $t = time;
        $text = ' ' if !$text;
-       $text =~ s/\^/%5E/g;
+       $text =~ s/\^/~/g;
        return sprintf "PC11^%.1f^$dxcall^%s^%s^$text^$mycall^$main::mycall^$hops^~", $freq, cldate($t), ztime($t);
 }
 
+# create a dx message (call, freq, dxcall, text, $ipaddr) see also pc11
+sub pc61
+{
+       my ($mycall, $freq, $dxcall, $text, $ipaddr) = @_;
+       my $hops = get_hops(61) || get_hops(11);
+       my $t = time;
+       $text = ' ' if !$text;
+       $text =~ s/\^/~/g;
+       return sprintf "PC61^%.1f^$dxcall^%s^%s^$text^$mycall^$main::mycall^$ipaddr^$hops^~", $freq, cldate($t), ztime($t);
+}
+
 # create an announce message
 sub pc12
 {
        my ($call, $text, $tonode, $sysop, $wx, $origin) = @_;
        my $hops = get_hops(12);
        $text ||= ' ';
-       $text =~ s/\^/%5E/g;
+       $text =~ s/\^/~/g;
        $tonode ||= '*';
        $sysop ||= ' ';
        $wx ||= '0';
@@ -118,7 +130,7 @@ sub pc17
 sub pc18
 {
        my $flags = shift;
-       return "PC18^DXSpider Version: $main::version Build: $main::subversion.$main::build$flags^$DXProt::myprot_version^";
+       return "PC18^DXSpider Version: $main::version Build: $main::build Git: $main::gitbranch/$main::gitversion$flags^$DXProt::myprot_version^";
 }
 
 #
@@ -220,7 +232,7 @@ sub pc29
 {
        my ($fromnode, $tonode, $stream, $text) = @_;
        $text = ' ' unless defined $text && length $text > 0;
-       $text =~ s/\^/%5E/og;                   # remove ^
+       $text =~ s/\^/~/g;                      # remove ^
        return "PC29^$fromnode^$tonode^$stream^$text^~";
 }
 
@@ -378,8 +390,14 @@ sub _gen_pc92
        my $sort = shift;
        my $ext = shift;
        my $s = "PC92^$main::mycall^" . gen_pc9x_t() . "^$sort";
+       if ($pc9x_nodupe_first_slot && ($sort eq 'A' || $sort eq 'D') && $_[0]->call eq $main::mycall) {
+               shift;
+               $s .= '^';
+       }
        for (@_) {
-               $s .= "^" . _encode_pc92_call($_, $ext);
+               $s .= '^' . _encode_pc92_call($_, $ext);
+               $ext = 0 unless $sort eq 'A ';                          # only the first slot has an ext except A
+               $ext = 2 if $pc92c_ipaddr_enable && $sort eq 'C';
        }
        return $s . '^H99^';
 }
@@ -391,6 +409,10 @@ sub gen_pc92_with_time
        my $t = shift;
        my $ext = 1;
        my $s = "PC92^$call^$t^$sort";
+       if ($pc9x_nodupe_first_slot && ($sort eq 'A' || $sort eq 'D') && $_[0]->call eq $main::mycall) {
+               shift;
+               $s .= '^';
+       }
        for (@_) {
                $s .= "^" . _encode_pc92_call($_, $ext);
        }
@@ -400,7 +422,7 @@ sub gen_pc92_with_time
 # add a local one
 sub pc92a
 {
-       return _gen_pc92('A', 0, @_);
+       return _gen_pc92('A', 2, @_);
 }
 
 # delete a local one
@@ -412,7 +434,18 @@ sub pc92d
 # send a config
 sub pc92c
 {
-       return _gen_pc92('C', 1, @_);
+       return _gen_pc92('C', $pc92c_ipaddr_enable ? 2 : 1, @_);
+}
+
+# send a keep alive
+sub pc92k
+{
+       my $nref = shift;
+       my $s = "PC92^$main::mycall^" . gen_pc9x_t() . "^K";
+       $s .= "^" . _encode_pc92_call($nref, 1) . ":$main::me->{build}";
+       $s .= "^" . scalar $nref->nodes;
+       $s .= "^" . scalar $nref->users;
+       return $s . '^H99^';
 }
 
 # send a 'find' message
@@ -440,11 +473,17 @@ sub pc93
        my $via = shift || '*';                 # *, node call
        my $line = shift;                       # the text
        my $origin = shift;                     # this will be present on proxying from PC10
+       my $ipaddr = shift;
 
        $line = unpad($line);
-       $line =~ s/\^/\\5E/g;           # remove any ^ characters
+       $line =~ s/\^/~/g;              # remove any ^ characters
        my $s = "PC93^$main::mycall^" . gen_pc9x_t() . "^$to^$from^$via^$line";
        $s .= "^$origin" if $origin;
+       if ($ipaddr) {
+               $s .= '^' unless $origin;
+               $ipaddr =~ s/:/,/;
+               $s .= "^$ipaddr";
+       }
        $s .= "^H99^";
        return $s;
 }