commit 4db94b6ff0fe23ae2fa7bd8318774ee49e3f741d Author: Jon Bonilla Date: Sun Oct 10 08:49:46 2010 +0000 sipwise-reminder package created diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..f6e6019 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +sipwise-reminder (0.1.0-1) unstable; urgency=low + + * Initial release. + + -- Jon Bonilla Fri, 16 Apr 2010 12:03:01 +0200 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..57631c3 --- /dev/null +++ b/debian/control @@ -0,0 +1,13 @@ +Source: sipwise-reminder +Section: comm +Priority: extra +Maintainer: Jon Bonilla +Build-Depends: debhelper (>= 5) +Standards-Version: 3.8.4 +Homepage: http://sipwise.com/ + +Package: sipwise-reminder +Architecture: all +Depends: ${shlibs:Depends}, ${misc:Depends}, perl-modules, libdbi-perl, sipwise-asterisk +Description: Reminder call scripts + Scripts for Sipwise reminder calls. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..04f88fe --- /dev/null +++ b/debian/copyright @@ -0,0 +1,7 @@ +Upstream Author: The Sipwise Team - http://sipwise.com/ +Copyright: Copyright (c) 2007-2010 Sipwise GmbH, Austria +License: All software included in this package is + Copyright (c) Sipwise GmbH, Austria. + All rights reserved. You may not copy, distribute + or modify without prior written permission from + Sipwise GmbH, Austria. diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..dbafd21 --- /dev/null +++ b/debian/rules @@ -0,0 +1,62 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +build: build-stamp + +build-stamp: + dh_testdir + #cd docs && make && cd .. + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + #cd docs && make clean && cd .. + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs usr/sbin /etc/cron.d /etc/sipwise-reminder + + install -m 755 reminder.pl debian/sipwise-reminder/usr/sbin/reminder + install -m 644 reminder.cron debian/sipwise-reminder/etc/cron.d/reminder + install -m 644 reminder.conf debian/sipwise-reminder/etc/sipwise-reminder/reminder.conf + +# Build architecture-dependent files here. +binary-arch: build install +# We have nothing to do by default. + +# Build architecture-independent files here. +binary-indep: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + #dh_installman docs/rate-o-mat.8 + dh_installinit + dh_link + dh_strip + #mkdir -p $(CURDIR)/debian/sipwise-rate-o-mat/usr/share/lintian/overrides/ + #cp -av debian/overrides $(CURDIR)/debian/sipwise-rate-o-mat/usr/share/lintian/overrides/sipwise-rate-o-mat + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff --git a/reminder.conf b/reminder.conf new file mode 100644 index 0000000..25cdd16 --- /dev/null +++ b/reminder.conf @@ -0,0 +1,16 @@ +#Configuration file for sipwise-reminder call scripts + +#callfile settings +retries = 2 +retry_time = 60 +wait_time = 30 +context = reminder +sip_peer = sip_proxy +spool = /var/spool/asterisk/outgoing +tmpdir = /tmp + +#database settings +database = provisioning +dbhost = localhost +dbuser= soap +dbpassword = s:wMP4Si diff --git a/reminder.cron b/reminder.cron new file mode 100644 index 0000000..481d56c --- /dev/null +++ b/reminder.cron @@ -0,0 +1 @@ +* * * * * root /usr/sbin/reminder 1>/dev/null diff --git a/reminder.pl b/reminder.pl new file mode 100755 index 0000000..a84ce2e --- /dev/null +++ b/reminder.pl @@ -0,0 +1,87 @@ +#!/usr/bin/perl -w +use strict; + +use File::Temp qw(tempfile); +use File::Basename; +use File::Copy; +use DBI; + +our $retries; +our $retry_time; +our $wait_time; +our $context; +our $sip_peer; +our $spool; +our $tmpdir; + +our $database; +our $dbhost; +our $dbuser; +our $dbpassword; + + +my $config_file = "/etc/sipwise-reminder/reminder.conf"; +open CONFIG, "$config_file" or die "Program stopping, couldn't open the configuration file '$config_file'.\n"; + +while () { + chomp; # no newline + s/#.*//; # no comments + s/^\s+//; # no leading white + s/\s+$//; # no trailing white + next unless length; # anything left? + my ($var, $value) = split(/\s*=\s*/, $_, 2); + no strict 'refs'; + $$var = $value; +} +close CONFIG; + +my $dsn = "DBI:mysql:database=$database;host=$dbhost;port=0"; + + +my $dbh = DBI->connect($dsn, $dbuser, $dbpassword); + +my $sth = $dbh->prepare("SELECT a.username, b.domain, c.recur, c.id " . + "FROM voip_subscribers a, voip_domains b, voip_reminder c " . + "WHERE c.subscriber_id = a.id and a.domain_id = b.id " . + "and c.time = time_format(now(), '%H:%i:00')"); + +my $sth_d = $dbh->prepare("delete from voip_reminder where id=?"); + +$sth->execute; +while (my $ref = $sth->fetchrow_hashref()) +{ + print "$ref->{'username'}\@$ref->{'domain'}, recur=$ref->{'recur'}\n"; + + if($ref->{'recur'} eq "weekdays") + { + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time); + next if($wday == 0) # only exclude sunday for now + } + + my ($tmp, $tmp_filename) = tempfile("$ref->{'username'}.XXXXXX", DIR => $tmpdir, UNLINK => 0); + unless(defined $tmp) + { + die "Failed to create temporary call file: $!\n"; + } + + print "Using tmpfile '$tmp_filename'\n"; + + print $tmp "Channel: SIP/$sip_peer/$ref->{'username'}\n"; + print $tmp "MaxRetries: $retries\n"; + print $tmp "RetryTime: $retry_time\n"; + print $tmp "WaitTime: $wait_time\n"; + print $tmp "Extension: s\n"; + print $tmp "Context: $context\n"; + print $tmp "Priority: 1\n"; + close $tmp; + move "$tmp_filename", "$spool/".basename($tmp_filename) + or die "Failed to move call '$tmp_filename' file to spool: $!\n"; + + if($ref->{'recur'} eq "never") + { + $sth_d->execute($ref->{'id'}); + } +} + +$sth->finish; +