#!/usr/bin/perl # # Load some modules use GSM::SMS::Config; use GSM::SMS::NBS; use Getopt::Long; use Log::Agent; require Log::Agent::Driver::File; # # No output buffering $|++; # # Arguments my $ARG_CONFIG; my $ARG_TRANSPORTCONFIG; my $ARG_VERBOSE; GetOptions( "config=s" => \$ARG_CONFIG, "transportconfig:s" => \$ARG_TRANSPORTCONFIG, "verbose" => \$ARG_VERBOSE ); unless ( $ARG_CONFIG ) { print < [--transportconfig=] [--verbose] EOT exit(1); } # # Read & process sms config file my $config = {}; open CFG, $ARG_CONFIG or die "Can't read sms config file: $ARG_CONFIG!\n"; while () { chomp; s/#.*//; s/^\s+//; s/\s+$//; next unless length; my ($var, $value) = split(/\s*=\s*/, $_, 2); $config->{$var} = $value; } close CFG; my $CFG_LOG = $config->{"log"}; my $CFG_LOGLEVEL = $config->{"loglevel"}; my $CFG_GROUPGFXDIR = $config->{"groupgraphicdir"}; my $CFG_GROUPGFXPREFIX = $config->{"groupgraphicprefix"}; my $CFG_RTTTLDIR = $config->{"rtttldir"}; my $CFG_RTTTLPREFIX = $config->{"rtttlprefix"}; my $CFG_ACL = $config->{"access"}; my @CFG_ACL = split /,/, $CFG_ACL; verb(< $CFG_LOGLEVEL, -driver => Log::Agent::Driver::File->make( -prefix => $0, -showpid => 1, -channels => { 'error' => "$CFG_LOG/$0.err", 'output' => "$CFG_LOG/$0.out", 'debug' => "$CFG_LOG/$0.dbg" }, ) ); } if ( $CFG_LOG eq "" && $CFG_LOGLEVEL ne "" ) { logconfig( -level => $CFG_LOGLEVEL ); } my $nbs = GSM::SMS::NBS->new( $ARG_TRANSPORTCONFIG ); my $msisdn; my $message; my $timestamp; my $transportname; my $port; # # Start server ... while (1) { verb( "waiting for message ..." ); # blocking receive $nbs->receive( \$msisdn, \$message, \$timestamp, \$transportname, \$port, 1 ); verb(<; close F; $nbs->sendRTTTL( $msisdn, $rtttl_string ); logsay( sprintf("\"$message\"\t\"$msisdn\"") ); } } # handle group graphics if ( $prefix eq $CFG_GROUPGFXPREFIX ) { verb( "groupgfx\n" ); my $file = $CFG_GROUPGFXDIR . '/' . $resource . '.gif'; verb( "file $file " ); if ( -e $file ) { verb( "is a valid resource!\n" ); $nbs->sendGroupGraphic_file( $msisdn, $file ); logsay( sprintf("\"$message\"\t\"$msisdn\"") ); } } } } verb( "\n" ); } exit(0); # # Verbose function sub verb { print shift if $ARG_VERBOSE; }