#!/usr/bin/perl -w
use POSIX;
use strict;
use Getopt::Long;
use vars qw($opt_V $opt_h $opt_v $verbose $PROGNAME $opt_e $opt_d $opt_t $opt_fs $command $opt_M $mailq $status $state $msg $msg_q $msg_p $opt_r $opt_C $mailq @lines $_reg_user $_realm $_token $_url $_expires $_network_ip $_network_port $_network_proto $_hostname %srcdomains %dstdomains);
use lib "/usr/lib64/nagios/plugins";
use utils qw(%ERRORS &print_revision &support &usage );

sub print_help ();
sub print_usage ();
sub process_arguments ();

$ENV{'PATH'}='';
$ENV{'BASH_ENV'}=''; 
$ENV{'ENV'}='';
$PROGNAME = "check_fs_register";
$command = "/usr/local/freeswitch/bin/fs_cli --execute 'show registrations'";
$state = $ERRORS{'UNKNOWN'};
Getopt::Long::Configure('bundling');
$status = process_arguments();
if ($status){
  print "ERROR: processing arguments\n";
  exit $ERRORS{"UNKNOWN"};
}



$SIG{'ALRM'} = sub {
  print ("ERROR: timed out waiting for $utils::PATH_TO_MAILQ \n");
  exit $ERRORS{"WARNING"};
};


alarm($opt_t);

foreach (`$command`){
  ($_reg_user,$_realm,$_token,$_url,$_expires,$_network_ip,$_network_port,$_network_proto,$_hostname) = split /,/;
  if ($_reg_user !~ /\D+/) {
    print "$_reg_user,$_realm,$_token,$_url,$_expires,$_network_ip,$_network_port,$_network_proto,$_hostname\n" if $verbose;
    if (defined($opt_r)){
      if (($opt_r eq $_realm) and ($_reg_user eq $opt_e)) {
	print "EXT\@R OK: $_reg_user,$_realm,$_token,$_url,$_expires,$_network_ip,$_network_port,$_network_proto,$_hostname";
	exit $ERRORS{'OK'};
      }
    }
    else{
      if ($_reg_user eq $opt_e){
	print "EXT OK: $_reg_user,$_realm,$_token,$_url,$_expires,$_network_ip,$_network_port,$_network_proto,$_hostname";
	exit $ERRORS{'OK'};
      }
    }
  }
}

print "EXT CRITICAL: $opt_e", $opt_r?'@'."$opt_r":'', " not registered\n";
exit $ERRORS{'CRITICAL'};

sub print_usage () {
  print "Usage: $PROGNAME -e extension [-r realm ] [-t <timeout>] [-f <path to fs_cli>] [-v verbose]\n";
}


sub print_help () {
  print_revision($PROGNAME,'0.0.1');
  print "Copyright (c) 2012 Luis Daniel Lucio Quiroz\n";
  print "\n";
  print_usage();
  print "\n";
  print " Checks the number of messages in the mail queue (supports multiple sendmail queues, qmail)\n";
  print " Feedback/patches to support non-sendmail mailqueue welcome\n\n";
  print "-e (--extension) = Extension number to verify connection\n";
  print "-r (--realm) = realm/domain name of sip, if you omit then we use any\n";
  print "-t (--timeout) = Plugin timeout in seconds (default = $utils::TIMEOUT)\n";
  print "-f (--fscli) = Path to fs_cli\n";
  print "-h (--help)\n";
  print "-V (--version)\n";
  print "-v (--verbose) = debugging output\n";
  print "\n\n";
  support();
}

sub process_arguments(){
  GetOptions
    ("V" => \$opt_V, "version" => \$opt_V,
      "v" => \$opt_v, "verbose" => \$opt_v,
      "h" => \$opt_h, "help" => \$opt_h,
      "e=s" => \$opt_e, "extension=s" => \$opt_e, # mailserver (default sendmail)
      "r:s" => \$opt_r, "realm:s" => \$opt_r, # warning if above this number
      "t:i" => \$opt_t, "timeout:i" => \$opt_t,
      "f:s" => \$opt_fs,"fscli:s" => \$opt_fs
    );

  if ($opt_V) {
    print_revision($PROGNAME,'0.0.1');
    exit $ERRORS{'OK'};
  }

  if ($opt_h) {
    print_help();
    exit $ERRORS{'OK'};
  }

  if (! defined $opt_e){
    print "Missing extention number\n";
    exit $ERRORS{'UNKNOWN'};
  }

  if (defined $opt_v ){
    $verbose = $opt_v;
  }

  unless (defined $opt_t) {
    $opt_t = $utils::TIMEOUT ; # default timeout
  }

  if (defined $opt_fs) {
    $command = "$opt_fs --execute 'show registrations'"
  }

  return $ERRORS{'OK'};
}