Got: X-Call~4.xml#:#380_
####
Got: X-Call~4.xml#:#
Got:380_
Got:
####
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
use IO::Select;
use Time::Local;
use File::Basename;
########################################################################################
#xml Variables
my ($xinput_path, $xmlout, $debug, $port, $logfile, $new_file, $rules);
my ($hb, $hb_prev, $now, $hb_email, $hb_duration, $buffer, $max_clients, $slm);
my ($checkdir_thresh, $checkdir_duration, $checkdir_prev, $manager);
#Socket Variables
my ($remote, $sock, @client_list, $sel, $new_remote);
#Misc Variables
my ($VERSION);
########################################################################################
my $rc = 0;
$VERSION = "1.0.0";
my $timeout = 5;
my $save_dir = './files' ;
unless (&Create_Socket()) {
print "Problem with Creating a Socket: $!\n";
exit(99);
}
my ($filesave, $filesize, $filename, $data_content);
while(1) {
my @client_list = $sel->can_read(1);
foreach $remote(@client_list) {
if ($remote == $sock) {
$new_remote = $sock->accept;
$sel->add($new_remote) if ($new_remote);
}
else {
my $in;
if (sysread($remote, $in, 1024)) {
if (defined $remote) {
print "Got: $in\n";
if ($in =~ /#:#$/) {
$filename = $in;
$filename =~ s/#:#$// ;
print "Filename = $filename\n";
}
elsif ($in =~ /_$/) {
$filesize = $in;
$filesize =~ s/_$// ;
print "Filename = $filename\n";
print "Filesize = $filesize\n";
}
elsif ($in =~ /__END$/) {
close (FILENEW) ;
print "...\n\n" ;
$sel->remove($remote);
close($remote);
($filesave, $filesize, $filename, $data_content) = 0;
}
else {
print "About to save file\n";
unless ($filesave) {
$filesave = "$save_dir/$filename" ;
print "FileSave - $filesave\n";
if (-e $filesave) {
unlink ($filesave) ;
}
print "Saving: $filesave ($filesize bytes)\n" ;
}
open (FILENEW,">>$filesave") ;
binmode(FILENEW) ;
print FILENEW $in ;
}
}
else {
print "DEBUG - \$remote Client NOT defined\n";
}
}
else {
print "WARNING - X-InputServer Could not Read data from a connected socket: @_\n";
$sel->remove($remote);
close($remote);
}
}
}
}
exit($rc);
########################################################################################
##
## SUB ROUTINES
##
########################################################################################
#Create a Socket to listen on
sub Create_Socket
{
$SIG{CHLD} = 'IGNORE';
$sock = IO::Socket::INET->new(
LocalPort => 6123,
Proto => 'tcp',
Reuse => 1,
Listen => 100
) or return(0);
$sel = IO::Select->new($sock);
print "INFORMATION - Socket Created ... Successful\n";
print "INFORMATION - Awaiting messages on: 6123\n";
return(1);
}
####
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket; #Socket Handeling Functions
use File::Basename; #To handle the path and filename functions
########################################################################################
#program version
my $VERSION="4.0.0";
#Setup Vars
my ($xbridge_path, $sock);
my $rc = 0;
my $port = "6123";
my $srv = "192.x.x.x";
########################################################################################
if (&Setup_Log()){
while(1) {
my @list = ();
if (opendir DIR, "./files") {
while (my $file = readdir DIR) {
next if $file =~/^\./;
push @list, $file;
}
}
if ($list[$#list]) {
print "about to process ./files/$list[$#list]\n";
if (&Transmit("./files/$list[0]")) {
print "Moved ./files/$list[0]\n";
unlink("./files/$list[0]");
}
}
else {
print "Nothing to process yet\n";
sleep(1);
}
}
}
else {
print "X-Bridge Could Not Perform the Setup_Log: $!";
$rc = 1;
}
exit ($rc);
########################################################################################
##
## SUB ROUTINES
##
########################################################################################
#Brief Setup_Log to initiate the LOG file
sub Setup_Log
{
my $rc = 0;
# Open Config File and Read Values into Hash
my $path = "$ENV{'MyConfigDir'}/XInput";
if ($path =~ /:/) {
if ($xbridge_path = Win32::GetShortPathName($path)) {
$xbridge_path =~s /\\/\//g;
print "path = $path\n";
$rc = 1;
}
else {
print "$0 - Path Problems in Setup for $path: $^E\n";
}
}
else {
print "path = $path\n";
$rc = 1;
}
return($rc);
}
sub Transmit
{
my $rc = 0;
my $bandwidth = 1024*5 ; # 5Kb/s
my $file = shift;
if (-s $file) {
my $file_size = -s $file ;
my ($name, $path, $type) = fileparse($file, '\..+');
my $file_name = "$name$type";
print "Filename = $file_name\n";
if ($sock = new IO::Socket::INET (
PeerAddr => $srv,
PeerPort => $port,
Proto => 'tcp',
)) {
$sock->autoflush(1);
print "Sending $file_name\n$file_size bytes." ;
print $sock "$file_name#:#" ; # send the file name.
print $sock "$file_size\_" ; # send the size of the file to server.
open (FILE,$file) ;
binmode(FILE) ;
my $buffer = 0;
while( sysread(FILE, $buffer , $bandwidth) ) {
print $sock $buffer ;
print "." ;
sleep(1) ;
}
close (FILE);
print $sock "__END";
$sock->shutdown(1); # close socket for writing
$rc = 1;
}
else {
print "Socket Error: \n";
}
}
else {
print "ERROR! Can't find or blank file $file: $!" ;
}
return($rc)
}