Re: DAST: Multicast Beacon - Configuring a central server - raul.fernandez --at-- mci.com


This was exactly what was wrong. Mitch, everything, including the local-to-the-server client is showing up now.

thanks much for the patch!


At 18:11 +0200 10/26/05, Havard Eidnes wrote:
> > Another fix was mailed to the list by someone else?

That would be me, I think. I didn't prepare it as a patch (I will do that when I return from a two-day travel starting in, um, 10 minutes...) [...]

Time to make good on my promise. Diff attached below.

Regards,

- Håvard

--- src/beacon.in.orig	2004-09-07 16:36:42.000000000 +0200
+++ src/beacon.in	2005-10-26 18:08:39.000000000 +0200
@@ -125,6 +125,10 @@
 my %tcp_ip_lookup;			# Central Server SSRC to IP hash
 my %tcp_meta;				# Central Server SSRC to metadata hash

+my %lines; # Central server, hash of references to
+ # arrays of lines, one array per TCP client
+
+
my %stats; # Where to keep the overall stats
my %reports; # Count of reports from each SR during each interval
my %tcp_reports; # Count of reports from each SR during each interval
@@ -2967,31 +2971,51 @@


# As long as there's data pending on the connection
- while (@ready = $select->can_read(1)) {
- foreach $fh (@ready) {
- if($fh == $server) {
+ # As long as there's data pending on the connection
+ while (@ready = $select->can_read(1)) {
+ NEXTFH:
+ foreach $fh (@ready) {
+ if($fh == $server) {
# Create a new socket
- $newsock = $server->accept;
+ $newsock = $server->accept;


+		$select->add($newsock);
+	    }
+	    else {
+		if (eof($fh)) {
+		    undef(@{$lines{$fh}});
+		    $select->remove($fh);
+		    close($fh);
+		    next;
+		}
+		while(defined($line = <$fh>) && ($line ne $ENDMESSAGE)) {
+		    if (!defined($lines{$fh})) {
+			@{$lines{$fh}} = ();
+		    }
+		    push(@{$lines{$fh}}, $line);
+		}
+		if (!defined($line)) {
+		    if ($DEBUG>4) {
+			printf("Incomplete message, %d lines collected\n",
+			       scalar(@{$lines{$fh}}));
+		    }
+		    next NEXTFH; # incomplete message, collect more later
+		}

- $select->add($newsock);
- }
- else {
- @lines = ();
+ # Here we have $line eq $ENDMESSAGE, i.e. a complete message
+ # has been collected, so proceed to process it
+ @lines = @{$lines{$fh}};
+ undef(@{$lines{$fh}});
+
+ if ($DEBUG>4) {
+ printf("Processing %d lines\n", scalar(@lines));
+ }
+
+ # "scalar(@lines) is just the length of @lines -- Ie,
+ # loop for all lines in the array.
+ my $ii=0; # Simple linecounter for receiving report + while ($ii < scalar(@lines)) {


- if (eof($fh)) {
- $select->remove($fh);
- close($fh);
- next;
- }
- while (defined ($line = <$fh>) && ($line ne $ENDMESSAGE)) {
- push(@lines, $line);
- }
-
- # "scalar(@lines) is just the length of @lines -- Ie, loop for all lines
- # in the array.
- my $ii=0; # Simple linecounter for receiving report - while ($ii < scalar(@lines)) {
chomp $lines[$ii]; # Whack trailing line return
# First line - Authenticate! Is this valid Beacon TCP traffic?


--

-debbie
Debbie Fligor, n9dn       Network Engineer, CITES, Univ. of Il
email: fligor@uiuc.edu          <http://www.uiuc.edu/ph/www/fligor>
"Every keystroke can be monitored. And the computers never forget."



Other Mailing lists | Author Index | Date Index | Subject Index | Thread Index