diff options
Diffstat (limited to 'sms')
-rw-r--r-- | sms/Makefile | 47 | ||||
-rw-r--r-- | sms/sms.class | 122 |
2 files changed, 169 insertions, 0 deletions
diff --git a/sms/Makefile b/sms/Makefile new file mode 100644 index 0000000..33cd428 --- /dev/null +++ b/sms/Makefile @@ -0,0 +1,47 @@ +## +## $Id$ +## +## Makefile for itools/sms.lib +## +## $Log$ +## Revision 1.1 2000/01/10 23:04:09 weber +## SMS functions added +## + +CPP= cpp +QUIETMAKE= $(MAKE) -s +PHPCOMPILE= /usr/local/bin/phpcompile + +MODULE= sms +SUBDIRS= +CLASSES= sms.class + +# +# Library creation rules, do not change stuff below... +# +SLIB= $(MODULE).slib +LIB= ../$(MODULE).lib + +all: $(LIB) + +$(LIB): $(SLIB) + @if [ -x $(PHPCOMPILE) ]; then (echo Compiling $(SLIB) to $(LIB) ...) 1>&2; $(PHPCOMPILE) <$(SLIB) >$(LIB); else (echo $(PHPCOMPILE) not found, copying $(SLIB) to $(LIB) ...) 1>&2; cp $(SLIB) $(LIB); fi + +$(SLIB): $(CLASSES) DUMMY + @(echo Creating $(SLIB) from $(SUBDIRS) $(CLASSES) ...) 1>&2 + @echo "<?php" >$(SLIB) + @(for dir in DUMMY $(SUBDIRS); do (test -d $$dir && cd $$dir && $(QUIETMAKE) cat); done; for class in DUMMY $(CLASSES); do test -f $$class && cat $$class; done) | $(CPP) -P -undef | perl -ne 's/^\s+//g; print unless /^\s*$$/' | grep -v "^<?php" | grep -v "^?>" >>$(SLIB) + @echo "?>" >>$(SLIB) + +$(SUBDIRS):: + @(cd $@; $(QUIETMAKE)) + +DUMMY: + +cat: $(SLIB) + @cat $(SLIB) + +clean: + @(echo Cleaning $(SLIB) $(LIB) ...) 1>&2 + @rm -f $(SLIB) $(LIB) + @for dir in DUMMY $(SUBDIRS); do (test -d $$dir && cd $$dir && $(QUIETMAKE) $@) || :; done diff --git a/sms/sms.class b/sms/sms.class new file mode 100644 index 0000000..6483035 --- /dev/null +++ b/sms/sms.class @@ -0,0 +1,122 @@ +<?php +/* +** $Id$ +** +** ITools - the Internet Tools Library +** +** Copyright (C) 1995-2003 by the ITools Authors. +** This program is free software; you can redistribute it and/or +** modify it under the terms of either the GNU General Public License +** or the GNU Lesser General Public License, as published by the Free +** Software Foundation. See http://www.gnu.org/licenses/ for details. +** +** sms.class - SMS gateway interface (both ways) using the Minick SMS gateway +*/ + +class it_sms +{ + /* Public readonly */ + var $service; /* Service name ("soltime", "superweb", etc.) */ + var $keyword; /* Short number service keyword ("SOLTIME", "SW", etc.) */ + + var $direction; /* "IN": Handy -> it_sms; "OUT": it_sms -> Handy */ + var $date; /* Date of message sent / received */ + + var $number; /* FQPhone number of other party z. B. 0041763901391 */ + var $message; /* Message text */ + + var $result; /* Result of transaction or empty */ + + /* Private */ + var $logfile; /* Log file name or empty for no log */ + + + /* Constructor */ + function it_sms($service, $keyword, $logfile="XX") + { + $this->service = $service; + $this->keyword = $keyword; + $this->logfile = $logfile; + + if ($logfile == "XX") + $this->logfile = $_SERVER['DOCUMENT_ROOT']."/../log/sms.log"; + } + + + /* Write a log file entry */ + function log() + { + if ($this->logfile == "") + return; + + $log = date("Y-m-d H:i:s") . " DIR=$this->direction NUMBER=$this->number RESULT=$this->result TEXT=\"$this->message\""; + if ($_COOKIE['UID']) + $log .= " UID=\"" . $_COOKIE['UID'] . "\""; + + if ($file = fopen($this->logfile, "a")) + { + fwrite($file, $log . "\n"); + fclose($file); + } + } + + + /* Send an SMS. Returns 1 on success, 0 otherwise. */ + function send($number, $message) + { + $this->direction = "OUT"; + $this->date = date("Y-m-d H:i:s"); + + /* Remove all non-digits */ + $number = ereg_replace('[^+0-9]', '', $number); + + /* Change 076 to 004176 etc. */ + $this->number = ereg_replace('^0([1-9])', '0041\\1', $number); + + $this->message = $message; + + $url = "http://panther.minick.ch/cgi-bin/$this->service/send?number=$this->number&message=" . urlencode($this->keyword." ".$this->message); + + /* debug("Sending SMS: $url<br>\n"); */ + + $result = file($url); + $this->result = trim($result[5]); /* "OKAY" or "NOTOK" w/o newline */ + $this->log(); + + if ($this->result == "OKAY") + return 1; /* Success */ + + return 0; /* Failure */ + } + + + /* + ** Receive an SMS from HTTP GET request + ** Format: number=Absendertelefonnummer, message=SMS-Text, id=xxxxx + ** Returns: 1=got a valid message, 0=got invalid garbage, ignore. + */ + function receive($secret="") + { + $this->direction = "IN"; + $this->date = date("Y-m-d H:i:s"); + + $this->number = $_GET['number']; + $this->message = $_GET['message']; + + if ($_GET['id'] == $secret) + { + $this->result = "OKAY"; + $this->log(); + return 1; + } + else + { + $this->result = "NOTOK: Bad authentication \"".$_GET['id']."\""; + $this->log(); + $this->number = $this->message = ""; + return 0; + } + } + +} /* End class it_sms */ +?> |