return if $pcno == 26;
# send out the filtered spots
- my @dxchan = get_all_ak1a();
- my $dxchan;
-
- # send it if it isn't the except list and isn't isolated and still has a hop count
- # taking into account filtering and so on
- foreach $dxchan (@dxchan) {
- next if $dxchan == $self;
- my $routeit;
- my ($filter, $hops) = Filter::it($dxchan->{spotfilter}, @spot) if $dxchan->{spotfilter};
- if ($hops) {
- $line =~ s/\^H\d+\^\~$/\^H$hops\^\~/;
- $routeit = $line;
- } else {
- $routeit = adjust_hops($dxchan, $line); # adjust its hop count by node name
- next unless $routeit;
- }
- if ($filter) {
- $dxchan->send($routeit) if $routeit;
- } else {
- $dxchan->send($routeit) unless $dxchan->{isolate} || $self->{isolate};
- }
- }
-
- # send orf to the users
- if (@spot) {
- my $buf = Spot::formatb($field[1], $field[2], $d, $text, $spotter);
- broadcast_users("$buf\a\a", 'dx', $spot[0]);
- }
-
+ send_dx_spot($self, $line, @spot) if @spot;
return;
}
#
# some active measures
#
+sub send_dx_spot
+{
+ my $self = shift;
+ my $line = shift;
+ my @dxchan = DXChannel->get_all();
+ my $dxchan;
+
+ # send it if it isn't the except list and isn't isolated and still has a hop count
+ # taking into account filtering and so on
+ foreach $dxchan (@dxchan) {
+ my $routeit;
+ my ($filter, $hops) = Filter::it($dxchan->{spotfilter}, @_, $self->{call} ) if $dxchan->{spotfilter};
+ if ($dxchan->is_ak1a) {
+ next if $dxchan == $self;
+ if ($hops) {
+ $routeit = $line;
+ $routeit =~ s/\^H\d+\^\~$/\^H$hops\^\~/;
+ } else {
+ $routeit = adjust_hops($dxchan, $line); # adjust its hop count by node name
+ next unless $routeit;
+ }
+ if ($filter) {
+ $dxchan->send($routeit) if $routeit;
+ } else {
+ $dxchan->send($routeit) unless $dxchan->{isolate} || $self->{isolate};
+
+ }
+ } elsif ($dxchan->is_user) {
+ my $buf = Spot::formatb($_[0], $_[1], $_[2], $_[3], $_[4]);
+ $buf .= "\a\a" if $dxchan->beep;
+ $dxchan->send($buf) if !$hops || ($hops && $filter);
+ }
+ }
+}
sub send_local_config
{
my $self = shift;
my $n;
my @nodes;
-
+ my @localnodes;
+ my @remotenodes;
+
# send our nodes
if ($self->{isolate}) {
- @nodes = (DXCluster->get_exact($main::mycall));
+ @localnodes = (DXCluster->get_exact($main::mycall));
} else {
# create a list of all the nodes that are not connected to this connection
# and are not themselves isolated, this to make sure that isolated nodes
# don't appear outside of this node
- @nodes = DXNode::get_all();
- @nodes = grep { $_->dxchan != $self } @nodes;
- @nodes = grep { !($_->dxchan && $_->dxchan->isolate) } @nodes;
+ @nodes = DXNode::get_all();
+ @nodes = grep { $_->{call} ne $main::mycall } @nodes;
+ @nodes = grep { $_->dxchan != $self } @nodes if @nodes;
+ @nodes = grep { !$_->dxchan->{isolate} } @nodes if @nodes;
+ @localnodes = grep { $_->dxchan->{call} eq $_->{call} } @nodes if @nodes;
+ unshift @localnodes, DXCluster->get_exact($main::mycall);
+ @remotenodes = grep { $_->dxchan->{call} ne $_->{call} } @nodes if @nodes;
}
- my @s = $me->pc19(@nodes);
+ my @s = $me->pc19(@localnodes, @remotenodes);
for (@s) {
my $routeit = adjust_hops($self, $_);
$self->send($routeit) if $routeit;
}
# get all the users connected on the above nodes and send them out
- foreach $n (@nodes) {
+ foreach $n (@localnodes, @remotenodes) {
my @users = values %{$n->list};
my @s = pc16($n, @users);
for (@s) {
}
}
-# broadcast a message to all clusters [except those mentioned after buffer]
+# broadcast a message to all clusters taking into account isolation
+# [except those mentioned after buffer]
sub broadcast_ak1a
{
my $s = shift; # the line to be rebroadcast
}
}
+# broadcast a message to all clusters ignoring isolation
+# [except those mentioned after buffer]
+sub broadcast_all_ak1a
+{
+ my $s = shift; # the line to be rebroadcast
+ my @except = @_; # to all channels EXCEPT these (dxchannel refs)
+ my @dxchan = get_all_ak1a();
+ my $dxchan;
+
+ # send it if it isn't the except list and isn't isolated and still has a hop count
+ foreach $dxchan (@dxchan) {
+ next if grep $dxchan == $_, @except;
+ my $routeit = adjust_hops($dxchan, $s); # adjust its hop count by node name
+ $dxchan->send($routeit);
+ }
+}
+
# broadcast to all users
# storing the spot or whatever until it is in a state to receive it
sub broadcast_users