]> git.sesse.net Git - nms/blobdiff - mbd/mbd.pl
Added Chillout.
[nms] / mbd / mbd.pl
index e1f9824de481b7acb121296ad9e6254b8d472df7..4900c1b21498a4a6f32e399f3fee2cab1daaf58f 100644 (file)
@@ -9,6 +9,12 @@ require './access_list.pl';
 require './nets.pl';
 require './survey.pl';
 require './mbd.pm';
+use lib '../include';
+use nms;
+use strict;
+use warnings;
+
+my ($dbh, $q);
 
 sub fhbits {
        my $bits = 0;
@@ -78,8 +84,16 @@ while (1) {
                my $age = Time::HiRes::tv_interval($active_surveys{$sport}{start}, $now);
                if ($age > $Config::survey_time && $active_surveys{$sport}{active}) {
                        print "Survey for '" . $Config::access_list[$active_surveys{$sport}{entry}]->{name} . "'/" .
-                               $active_surveys{$sport}{dport} . ": " .  $active_surveys{$sport}{num} . " active servers.\n";
+                               $active_surveys{$sport}{dport} . ": " . $active_surveys{$sport}{num} . " active servers.\n";
                        $active_surveys{$sport}{active} = 0;
+       
+                       # (re)connect to the database if needed 
+                       if (!defined($dbh) || !$dbh->ping) {
+                               $dbh = nms::db_connect();
+                               $q = $dbh->prepare("INSERT INTO mbd_log (ts,game,port,description,active_servers) VALUES (CURRENT_TIMESTAMP,?,?,?,?)")
+                                       or die "Couldn't prepare query";
+                       }
+                       $q->execute($active_surveys{$sport}{entry}, $active_surveys{$sport}{dport}, $Config::access_list[$active_surveys{$sport}{entry}]->{name}, $active_surveys{$sport}{num});
                }
                if ($age > $Config::survey_time * 3.0) {
                        delete $active_surveys{$sport};
@@ -186,25 +200,10 @@ while (1) {
 
                my $num_nets = 0;
                for my $net (@Config::networks) {
-                       next if (cache_cidrlookup(inet_ntoa($saddr), $net));
-
                        my ($range) = cache_cidrrange($net);
                        $range =~ /-(.*?)$/;
                        my $broadcast = $1;
 
-                       $sendsock->set({
-                               ip => {
-                                       saddr => inet_ntoa($saddr),
-                                       daddr => $broadcast
-                               },
-                               udp => {
-                                       source => $sport,
-                                       dest => $dport,
-                                       data => $data
-                               }
-                       });
-                       $sendsock->send;
-
                        if ($survey) {
                                $sendsock->set({
                                        ip => {
@@ -220,6 +219,21 @@ while (1) {
                                $sendsock->send;
                        }
 
+                       next if (cache_cidrlookup(inet_ntoa($saddr), $net));
+
+                       $sendsock->set({
+                               ip => {
+                                       saddr => inet_ntoa($saddr),
+                                       daddr => $broadcast
+                               },
+                               udp => {
+                                       source => $sport,
+                                       dest => $dport,
+                                       data => $data
+                               }
+                       });
+                       $sendsock->send;
+
                        ++$num_nets;
                }