Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/10_customer2017/1204__intel/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : /var/www/web-klick.de/dsh/10_customer2017/1204__intel/BlackBoard.pm

package BlackBoard;
use Time::HiRes;
use Data::Dumper;

use strict;
use DBI;
use DBD::SQLite;

#  Dieses Modul implementiert ein BlackBoard, ein Schwarzes Brett.
#  Nachrichten koennen eingetragen werden  mit $self->msg(<nachricht>),
#  wobei <nachricht> ein beliebiger ASCII-Text ist. Ausgelesen werden
#  koennen Nachrichten mit $self->get().
#
#  Das Schwarze Brett ist als SQLite-Datenbank implementiert. Der
#  Name des entsprechenden Files im Filesystem ist im Konstruktor
#  mit zu uebergeben. Diese Implementierung gestattet eine gemeinsame
#  Nutzung des BlackBoards fuer alle Prozesse, die auf dieses File
#  zugreifen koennen. Damit sind asynchrone Ueberwachungen und
#  Meldungen moeglich.
#
#  ACHTUNG: Das Modul Time::HiRes muss zur Verfuegung stehen, ggfs.
#  mit ppm  bzw  cpan  laden.


sub new {
   
   my $class  = shift;
   my $dbfile = shift;       #  Datenbankfile
   my $self   = {};
   $self->{'LAST'} = shift;  #  ROWID der als letztes gelesenen Meldung
   my $db     = 1;
   $db        = 0 if (!(-f $dbfile));

   bless($self,$class);
   return($self) if (!($dbfile));

   my $dbh    = DBI->connect("dbi:SQLite:$dbfile");
   $self->{'DBH'}  = $dbh;

   if (!$db) {   #  Datenbankfile wird erzeugt, falls es nicht da ist
      $dbh->do("create table channel (datetime longint, message vartext)");
      $self->{'LAST'} = 0;
   }
   elsif (!($self->{'LAST'})) {  #  wenn es $self->{'LAST'} nicht gibt,
                                 #  dann wird diejenige Meldung als LAST genommen
                                 #  die als letzte vor dem gegenwaertigen
                                 #  Zeitpunkt eingegangen ist
      my $akttime = Time::HiRes::time() * 100000;
      my $sth = $dbh->prepare("select ROWID from channel where datetime > $akttime");
      $sth->execute();
      my @ee = $sth->fetchrow();
      $self->{'LAST'} = $ee[0] - 1;
      if ($self->{'LAST'} < 0) {
         $sth = $dbh->prepare(
              "select count (*) from channel");
         $sth->execute();
         my @ee = $sth->fetchrow();
         $self->{'LAST'} = $ee[0];
      }
   }

   return($self);

}

#*******************************************************************

sub msg {   #  Message anbringen

   my $self = shift;
   my $text = shift;
   return() if (!($self->{'DBH'}));

   my $akttime = Time::HiRes::time() * 100000;   
   my $sth = $self->{'DBH'}->prepare(
            "insert into channel values (\"$akttime\",?)");
   $sth->bind_param(1,$text);
   $sth->execute();

}

#*******************************************************************

sub get {   #  Message abholen

   my $self = shift;
   return([]) if (!($self->{'DBH'}));
   
   my $sth = $self->{'DBH'}->prepare(
          "select ROWID,datetime,message from channel where ROWID > " .
           $self->{'LAST'});
   $sth->execute();
   my $erg = [];
   my @ee;
   while (@ee = $sth->fetchrow()) {
      $self->{'LAST'} = $ee[0];
      push(@$erg,[$ee[1],$ee[2]]);
   }
   return($erg);

}
   
#*******************************************************************

sub _test_get {   #   Test-Routine zum Ueberwachen eingehender Nachrichten

   my $self = shift;

   my $o;
   while (0 == 0) {

      my $erg  = $self->get();
      print Dumper($erg);
      sleep 1;

   }

}

#*******************************************************************

sub last {   #  gibt den LAST-Wert zurueck, um in einem neuen Handler
             #  erneut verwendet werden zu koennen. So gehen dann keine
             #  Meldungen verloren, auch wenn der Handler gerade nicht laeuft.
   my $self = shift;
   return($self->{'LAST'});

}

#*******************************************************************


1;

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net