#!/usr/bin/perl -w
	
#`killall -9 mygnokii 1>/dev/null 2>/dev/null`;
`killall -9 gnokii 1>/dev/null 2>/dev/null`;
sleep(1);

use File::Copy;

# use Gnokii::GSM;
# my $gsm_conn = Gnokii::GSM->new("/dev/ttyS1","5110");

my $outfolder = "/var/gsm/out";
my $infolder = "/var/gsm/in";
my $sentfolder = "/var/gsm/sent";
my $failfolder = "/var/gsm/fail";
my $tmpfolder = "/var/gsm/tmp";
my $number="";
my $message="";
my $failemail="neshac_nospam\@gmail.com";
my $okemail="neshac_nospam\@gmail.com";
my $gnokii = "/usr/bin/gnokii";
#my $gnokii_getsms = "/usr/bin/mygnokii";
my $gnokii_getsms = "/usr/bin/gnokii";
my @when_retry = (0,1,3,5,10,20);
my $max_retry = $when_retry[-1];

# lets read the messages, one by one
# Then lets send them and move to either "sent" or "fail" folder

for $file ( <$outfolder/*> ) {
	$message="";
	$number="";
	open INFILE, "<$file" || print "Error in opening file $file: $!";
	while (<INFILE>) {
		if (/^NUMBER:/) { 
			chomp;
			$number = $_;
			$number =~ s/NUMBER//g;
			$number =~ s/://g;
			$number =~ s/-//g;
			$number =~ s/\s//g;
		} else {
			$message = $message . $_;
			$message =~ s/^$//g;
		}
	}	
	close INFILE;

	my $newfile = $file;
	$newfile =~ s/\/.*\///g;
	if ($number eq "") { $number="381641769071"; }
	my $replyf = system("touch $tmpfolder/$newfile > /dev/null 2>&1"); 
	my $number_of_try = 0;
	if ($replyf == "256") {
	  $number_of_try = `cat $tmpfolder/$newfile` + 1;
	}
	system("echo $number_of_try > $tmpfolder/$newfile");
	undef @is_time_to_retry;
	for (@when_retry) { $is_time_to_retry[$_] = 1; }
	if ($is_time_to_retry[$number_of_try]) {
      	   if ($number =~ /,/) {
		  my @numbers = split (/,/,$number);
		  my $error_send = 0;
		  foreach $number (@numbers) {
			    if ($number ne "") {
                                my $reply = system("echo '$message'|$gnokii --sendsms $number");
                                if($reply == "0") {
                                    print "ok $number ($file)\n";				
                                    #open M, "|mail -s 'Sent SMS' $okemail";			
                                    #close M;
                                }
                                else
                                {
                                    $error_send = 1;
                                    print "failed $number ($file)\n";
                                    if ($number_of_try == $max_retry) {
                                      move("$file", "$failfolder" . "/$newfile") || print "Error $!";
                                      open M, "|mail -s 'Failed SMS' $failemail";
                                      print M "$number\n$message\n ($failfolder/$newfile)\n\n";
                                      close M;
                                      unlink("$tmpfolder/$newfile") || print "Error $!";
                                    }
                                }
                            }
                    }
                  if($error_send eq "0") {
		    #print "$number\n$message\n ($sentfolder/$newfile)\n\n";
		    move("$file", "$sentfolder" . "/$newfile") || print "Error $!";
		    unlink("$tmpfolder/$newfile") || print "Error $!";
                  }
            } 
            else 
            {
		my $reply = system("echo '$message'|$gnokii --sendsms $number");
		if($reply == "0") {
			print "ok $number ($file)\n";
			move("$file", "$sentfolder" . "/$newfile") || print "Error $!";
			unlink("$tmpfolder/$newfile") || print "Error $!";
		}
		else
		{
			print "failed $number ($file)\n";
			if ($number_of_try == $max_retry) {
			  move("$file", "$failfolder" . "/$newfile") || print "Error $!";
			  open M, "|mail -s 'Failed SMS' $failemail";
			  print M "$number\n$message\n ($failfolder/$newfile)\n\n";
			  close M;
			  unlink("$tmpfolder/$newfile") || print "Error $!";
                        }
		}
            }
	}
}
sleep(1);
`killall -9 gnokii 1>/dev/null 2>/dev/null`;

############# SENDING IS READY #################


############# START RECEIVING ##################
#	for (my $place=1; $place<5; $place++) {
#		my $reply = `$gnokii_getsms --getsms ME $place`;
#		chomp($reply);
#		if ($reply ne "SMS location ME $place empty." && $reply ne "") {
#			my @lines = split "\n",$reply;
#			my $sender="";
#			my $tmp="";
#			my @tmp;
#			my $datetime;
#			foreach (@lines) {
#				if (/Sender:/) {
#					s/.*Sender:/Sender:/;
#					($tmp,$sender,@tmp) = split (" ",$_);
#					chomp($sender);
#					$sender =~ s/\+//g;
#					#print "$sender\n";
#				}
#				if (/^Date/) {
#					($datetime) = $_;
#					chomp($datetime);
#					$datetime =~ s/Date\/time: //g;
#					$datetime =~ s/(:)|(\/)/./g;
#					$datetime =~ s/ /_/g;
#					$datetime =~ s/_\+.*$//g;
#					#print "$datetime\n";
#				}
#			}
#
#			print "SMS nro $place\n";
#			my $in = "$infolder" . "/$sender-$datetime" . ".txt";
#			print "$in";
#			open SMSIN, ">>$in" || die "ERROR: $_";
#			print SMSIN "$reply";
#			close SMSIN;
#			open M, "|mail -s 'Incoming SMS' $okemail";
#			print M "$in:\n$reply\n\n";
#			close M;
#
#			############ DELETING SMS FROM PHONE #########
#			$reply=`$gnokii_getsms --deletesms ME $place $place`;
#			print "$reply";
#		}
#	`killall -9 mygnokii 1>/dev/null 2>/dev/null`;
#	sleep(2);
#	}

########### RECEIVING IS READY ###########
