X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProtout.pm;h=68405f8f4236e4521cf6e320fe0be1bbafc285b4;hb=98b0984d0ab735a1ae2d96e36728c7e334cf5fd7;hp=a2b69a67a9f4dfbba796dfaa5c17e7dde67aa184;hpb=72568e838d146250a78fea19bd4bbafc760e6a49;p=spider.git diff --git a/perl/DXProtout.pm b/perl/DXProtout.pm index a2b69a67..68405f8f 100644 --- a/perl/DXProtout.pm +++ b/perl/DXProtout.pm @@ -21,10 +21,14 @@ use strict; use vars qw($VERSION $BRANCH); $VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); -$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0; +$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0)); $main::build += $VERSION; $main::branch += $BRANCH; +use vars qw($sentencelth); + +$sentencelth = 180; + # # All the PCxx generation routines # @@ -62,14 +66,15 @@ sub pc11 # create an announce message sub pc12 { - my ($call, $text, $tonode, $sysop, $wx) = @_; + my ($call, $text, $tonode, $sysop, $wx, $origin) = @_; my $hops = get_hops(12); - $sysop = ' ' if !$sysop; - $text = ' ' if !$text; - $wx = '0' if !$wx; - $tonode = '*' if !$tonode; + $origin ||= $main::mycall; + $sysop ||= ' '; + $text ||= ' '; + $wx ||= '0'; + $tonode ||= '*'; $text =~ s/\^/%5E/g; - return "PC12^$call^$tonode^$text^$sysop^$main::mycall^$wx^$hops^~"; + return "PC12^$call^$tonode^$text^$sysop^$origin^$wx^$hops^~"; } # @@ -85,15 +90,18 @@ sub pc16 my $ncall = $node->call; my @out; - while (@_) { - my $str = "PC16^$ncall"; - for ( ; @_ && length $str < 200; ) { - my $ref = shift; - $str .= sprintf "^%s %s %d", $ref->call, $ref->conf ? '*' : '-', $ref->here; + my $s = ""; + for (@_) { + next unless $_; + my $ref = $_; + my $str = sprintf "^%s %s %d", $ref->call, $ref->conf ? '*' : '-', $ref->here; + if (length($s) + length($str) > $sentencelth) { + push @out, "PC16^$ncall" . $s . sprintf "^%s^", get_hops(16); + $s = ""; } - $str .= sprintf "^%s^", get_hops(16); - push @out, $str; + $s .= $str; } + push @out, "PC16^$ncall" . $s . sprintf "^%s^", get_hops(16); return @out; } @@ -115,7 +123,7 @@ sub pc17 # Request init string sub pc18 { - return "PC18^DXSpider Version: $main::version Build: $main::build^$DXProt::myprot_version^"; + return "PC18^DXSpider Version: $main::version Build: $main::build NewRoute^$DXProt::myprot_version^"; } # @@ -124,20 +132,24 @@ sub pc18 sub pc19 { my @out; - - while(@_) { - my $str = "PC19"; - for (; @_ && length $str < 200;) { - my $ref = shift; - my $call = $ref->call; - my $here = $ref->here; - my $conf = $ref->conf; - my $version = $ref->version; - $str .= "^$here^$call^$conf^$version"; + my @in; + + my $s = ""; + for (@_) { + next unless $_; + my $ref = $_; + my $call = $ref->call; + my $here = $ref->here; + my $conf = $ref->conf; + my $version = $ref->version; + my $str = "^$here^$call^$conf^$version"; + if (length($s) + length($str) > $sentencelth) { + push @out, "PC19" . $s . sprintf "^%s^", get_hops(19); + $s = ""; } - $str .= sprintf "^%s^", get_hops(19); - push @out, $str; + $s .= $str; } + push @out, "PC19" . $s . sprintf "^%s^", get_hops(19); return @out; } @@ -210,7 +222,7 @@ sub pc28 sub pc29 { my ($fromnode, $tonode, $stream, $text) = @_; - $text = ' ' unless $text && length $text > 0; + $text = ' ' unless defined $text && length $text > 0; $text =~ s/\^/%5E/og; # remove ^ return "PC29^$fromnode^$tonode^$stream^$text^~"; } @@ -346,6 +358,69 @@ sub pc51 return "PC51^$to^$from^$val^"; } +my $hexlasttime = 0; +my $hexlastlet = 'A'; + +sub hexstamp +{ + my $t = shift || $main::systime; + if ($t ne $hexlasttime) { + $hexlasttime = $t; + $hexlastlet = 'A'; + } else { + do { + $hexlastlet = chr(ord($hexlastlet) + 1); + } while ($hexlastlet eq '^'); + } + return sprintf "%s%08X", $hexlastlet, $hexlasttime; +} + +sub pc58 +{ + my $sort = shift; + my $hexstamp = shift || hexstamp(); + my $from = shift; + my $to = shift; + my $text = unpad(shift); + $text = ' ' if !$text; + $text =~ s/\^/%5E/g; + return "PC58^$sort^$hexstamp^$from^$to^$text" . sprintf "^%s^", get_hops(58); +} + +sub pc59 +{ + my @out; + my $sort = shift; + my $hexstamp = shift || hexstamp(); + my $node = shift; + + my $s = "PC59^$sort^$hexstamp^$node"; + for (@_) { + next unless $_; + my $ref = $_; + my $call = $ref->call; + my $here = $ref->here; + $s .= $ref->isa('Route::Node') ? "^N$here$call" : "^U$here$call"; + } + push @out, sprintf "$s^%s^", get_hops(59); + return @out; +} + +sub PC59c +{ + return PC59('C', @_); +} + +sub PC59a +{ + return PC59('A', @_); +} + +sub PC59d +{ + return PC59('D', @_); +} + # clx remote cmd send sub pc84 { @@ -360,6 +435,11 @@ sub pc85 return "PC85^$tonode^$fromnode^$call^$msg^~"; } +# spider route broadcast +sub pc90 +{ +} + 1; __END__