many changes (see Changes)
[spider.git] / perl / DXProtout.pm
index 03676089dc33acd5b5072cd973f0babb32258398..acb538826e2bc40c43aa51ec40f96c64afb786aa 100644 (file)
@@ -11,7 +11,7 @@
 
 package DXProt;
 
-@ISA = qw(DXProt DXChannel);
+@ISA = qw(DXChannel);
 
 use DXUtil;
 use DXM;
@@ -19,7 +19,7 @@ use DXDebug;
 
 use strict;
 
-use vars qw($sentencelth $pc19_version $pc9x_nodupe_first_slot);
+use vars qw($sentencelth $pc19_version $pc9x_nodupe_first_slot $pc92c_ipaddr_enable);
 
 $sentencelth = 180;
 $pc9x_nodupe_first_slot = 1;
@@ -43,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';
@@ -119,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^";
 }
 
 #
@@ -221,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^~";
 }
 
@@ -385,7 +396,8 @@ sub _gen_pc92
        }
        for (@_) {
                $s .= '^' . _encode_pc92_call($_, $ext);
-               $ext = 0;                               # only the first slot has an 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^';
 }
@@ -410,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
@@ -422,7 +434,7 @@ 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
@@ -461,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;
 }