Add smstools3 package from http://smstools3.kekekasvi.com/ Tested successfull as an email/sms gateway with : - Device: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem - Trunk: OpenWrt Chaos Calmer r43753 - Kirkwood : Globalscale Technologies Guruplug Server Plus Send and receive SMS with modem : OK Forward received SMS to mailhub : OK Signed-off-by: Gerald Kerma <dreagle@doukki.net>lilik-openwrt-22.03
@ -0,0 +1,74 @@ | |||
# | |||
# Copyright (C) 2014 OpenWrt.org | |||
# | |||
# This is free software, licensed under the GNU General Public License v2. | |||
# See /LICENSE for more information. | |||
# | |||
include $(TOPDIR)/rules.mk | |||
PKG_NAME:=smstools3 | |||
PKG_VERSION:=3.1.15 | |||
PKG_RELEASE:=1 | |||
PKG_MAINTAINER:=Gérald Kerma <dreagle@doukki.net> | |||
PKG_LICENSE:=GPL-2.0 | |||
PKG_LICENSE_FILES:=LICENSE | |||
PKG_BUILD_PARALLEL:=0 | |||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||
PKG_SOURCE_URL:=http://smstools3.kekekasvi.com/packages/ | |||
PKG_MD5SUM:=0241ef60e646fac1a06254a848e61ed7 | |||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) | |||
PKG_BUILD_DEPENDS:=libiconv-full iconv socket nsl | |||
include $(INCLUDE_DIR)/package.mk | |||
define Package/smstools3 | |||
SECTION:=utils | |||
CATEGORY:=Utilities | |||
TITLE:=SMS Server Tools 3 | |||
DEPENDS:=+libiconv-full +iconv | |||
URL:=http://smstools3.kekekasvi.com/ | |||
endef | |||
define Package/smstools3/description | |||
The SMS Server Tools 3 is a SMS Gateway software which can send and receive | |||
short messages through GSM modems and mobile phones. | |||
endef | |||
TARGET_CFLAGS = -D NUMBER_OF_MODEMS=1 | |||
TARGET_CFLAGS += -D USE_ICONV | |||
TARGET_CFLAGS += -D DISABLE_INET_SOCKET | |||
TARGET_CFLAGS += -W -Wall | |||
TARGET_CFLAGS += -D_FILE_OFFSET_BITS=64 | |||
TARGET_LDFLAGS += -liconv | |||
BINDIR=/usr/local/bin | |||
define Build/Compile | |||
$(MAKE) -C "$(PKG_BUILD_DIR)"/src \ | |||
CC="$(TARGET_CC)" \ | |||
USER_CFLAGS='$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS) \ | |||
-I"$(STAGING_DIR)/usr/lib/libiconv-full/include"' \ | |||
USER_LDFLAGS='$(TARGET_LFLAGS) $(EXTRA_LDFLAGS) -L"$(STAGING_DIR)/usr/lib/libiconv-full/lib"' \ | |||
all | |||
endef | |||
define Package/smstools3/install | |||
$(INSTALL_DIR) $(1)/$(BINDIR) | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/smsd $(1)/$(BINDIR)/smsd | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/sendsms $(1)/$(BINDIR)/sendsms | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/sms2html $(1)/$(BINDIR)/sms2html | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/sms2unicode $(1)/$(BINDIR)/sms2unicode | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/unicode2sms $(1)/$(BINDIR)/unicode2sms | |||
$(INSTALL_DIR) $(1)/etc/init.d | |||
$(INSTALL_DATA) -m 0755 ./files/smstools3.init $(1)/etc/init.d/smstools3 | |||
$(INSTALL_DIR) $(1)/etc | |||
$(INSTALL_DATA) -m 0755 ./files/smstools3.conf $(1)/etc/smsd.conf | |||
endef | |||
$(eval $(call BuildPackage,smstools3)) |
@ -0,0 +1,20 @@ | |||
# | |||
# Description: Main configuration file for the smsd | |||
# | |||
devices = GSM1 | |||
incoming = /var/spool/sms/incoming | |||
outgoing = /var/spool/sms/outgoing | |||
checked = /var/spool/sms/checked | |||
failed = /var/spool/sms/failed | |||
sent = /var/spool/sms/sent | |||
receive_before_send = no | |||
autosplit = 3 | |||
[GSM1] | |||
init = AT+CPMS="ME","ME","ME" | |||
device = /dev/ttyUSB0 | |||
incoming = yes | |||
pin = 0000 | |||
baudrate = 9600 | |||
@ -0,0 +1,152 @@ | |||
#!/bin/sh /etc/rc.common | |||
# Copyright (C) 2014 OpenWrt.org | |||
# smsd initscript openwrt mod | |||
START=99 | |||
STOP=99 | |||
EXTRA_COMMANDS="status" | |||
EXTRA_HELP=" status View pid and service status " | |||
# Set USER and GROUP, if necessary: | |||
USER="" | |||
GROUP="" | |||
# If an unpriviledged user is selected, make sure that next two | |||
# files are writable by that user: | |||
PIDFILE="/var/run/smsd.pid" | |||
INFOFILE="/var/run/smsd.working" | |||
# Logfile can also be defined in here: | |||
LOGFILE="/var/log/smsd.log" | |||
DAEMON=/usr/local/bin/smsd | |||
# A program which turns power off for couple of seconds: | |||
RESETMODEMS=/usr/local/bin/smsd_resetmodems | |||
NAME=smsd | |||
PSOPT="" | |||
# Set/edit this before starting service !!!!! | |||
WRT_SPOOL=/var/spool | |||
# Maximum time to stop smsd, after that it gets killed hardly: | |||
MAXWAIT=45 | |||
boot() { | |||
start | |||
} | |||
start() { | |||
test -x $DAEMON || exit 0 | |||
echo "Creating minimum spool directories" | |||
mkdir -p $WRT_SPOOL | |||
mkdir -p $WRT_SPOOL/sms | |||
mkdir -p $WRT_SPOOL/sms/incoming | |||
mkdir -p $WRT_SPOOL/sms/outgoing | |||
mkdir -p $WRT_SPOOL/sms/checked | |||
mkdir -p $WRT_SPOOL/sms/failed | |||
mkdir -p $WRT_SPOOL/sms/sent | |||
echo -n "Starting SMS Daemon: " | |||
MSG="." | |||
ARGS="-n MAINPROCESS -p$PIDFILE -i$INFOFILE" | |||
[ "x$USER" != x ] && ARGS="$ARGS -u$USER" | |||
[ "x$GROUP" != x ] && ARGS="$ARGS -g$GROUP" | |||
[ "x$LOGFILE" != x ] && ARGS="$ARGS -l$LOGFILE" | |||
PID=`cat $PIDFILE 2>/dev/null` | |||
if [ "x$PID" != x ]; then | |||
if kill -0 $PID 2>/dev/null; then | |||
MSG=" already running ($PID)." | |||
else | |||
PID="" | |||
fi | |||
fi | |||
if [ "x$PID" = x ]; then | |||
if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then | |||
MSG=" already running." | |||
else | |||
$DAEMON $ARGS | |||
sleep 1 | |||
PIDS=`ps $PSOPT | grep $NAME | grep -v grep` | |||
[ "x$PIDS" = x ] && MSG=" failed." | |||
fi | |||
fi | |||
echo "$NAME$MSG" | |||
} | |||
stop() { | |||
if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then | |||
PID=`cat $PIDFILE 2>/dev/null` | |||
if [ "x$PID" != x ]; then | |||
P=`kill -0 $PID 2>/dev/null` | |||
[ "x$P" != x ] && PID="" | |||
fi | |||
if [ "x$PID" != x ]; then | |||
kill $PID | |||
else | |||
kill `ps $PSOPT | grep $NAME | grep -v grep | awk '{print $1}'` >/dev/null 2>&1 | |||
fi | |||
sleep 1 | |||
if ps $PSOPT | grep $NAME | grep -v grep >/dev/null; then | |||
echo "Allowing $NAME to terminate gracefully within $MAXWAIT seconds" | |||
infofound=0 | |||
dots=0 | |||
seconds=0 | |||
while ps $PSOPT | grep $NAME | grep -v grep >/dev/null; do | |||
if [ $infofound -lt 1 ]; then | |||
if [ -f $INFOFILE ]; then | |||
infofound=1 | |||
if [ $dots -gt 0 ]; then | |||
echo "" | |||
dots=0 | |||
fi | |||
$ECHO -n "$NAME is currently " | |||
cat $INFOFILE | |||
echo "Time counting is now disabled and we will wait until this job is complete." | |||
fi | |||
fi | |||
[ $infofound -lt 1 ] && seconds=`expr $seconds + 1` | |||
echo -n "." | |||
dots=`expr $dots + 1` | |||
if [ "$seconds" -ge $MAXWAIT ]; then | |||
if [ $dots -gt 0 ]; then | |||
echo "" | |||
dots=0 | |||
fi | |||
echo "Timeout occured, killing $NAME hardly." | |||
kill -9 `ps $PSOPT | grep $NAME | grep -v grep | awk '{print $1}'` >/dev/null 2>&1 | |||
[ -f $PIDFILE ] && rm $PIDFILE | |||
seconds=0 | |||
fi | |||
sleep 1 | |||
done | |||
[ $dots -gt 0 ] && echo "" | |||
#echo "$NAME is stopped." | |||
fi | |||
fi | |||
} | |||
restart() { | |||
stop | |||
start | |||
} | |||
status() { | |||
PID=$(cat $PIDFILE) | |||
test -e $PIDFILE | |||
if [ $? == 0 ]; then | |||
echo $NAME " running! pid $PID" | |||
else | |||
echo $NAME " not running !!!" | |||
fi | |||
} | |||
reset() { | |||
$0 stop | |||
[ -f "$RESETMODEMS" ] && "$RESETMODEMS" | |||
sleep 30 | |||
$0 start | |||
} | |||
@ -0,0 +1,13 @@ | |||
--- a/src/smsd.c 2010-09-21 13:47:48.000000000 +0300 | |||
+++ b/src/smsd.c 2013-03-05 05:26:26.000000000 +0300 | |||
@@ -5200,8 +5200,8 @@ | |||
int result = 1; | |||
char *cmd; | |||
char *p; | |||
- char answer[500]; | |||
- char buffer[600]; | |||
+ char answer[1024]; | |||
+ char buffer[1024]; | |||
int fd; | |||
int log_retry = 3; | |||
int i; |
@ -0,0 +1,12 @@ | |||
--- a/src/Makefile 2014-12-20 18:33:55.654252867 +0100 | |||
+++ b/src/Makefile 2014-12-20 18:31:10.241359741 +0100 | |||
@@ -43,7 +43,7 @@ | |||
ifneq (,$(findstring SOLARIS,$(CFLAGS))) | |||
ifeq (,$(findstring DISABLE_INET_SOCKET,$(CFLAGS))) | |||
-override LFLAGS += -lsocket -lnsl | |||
+ override LFLAGS += -lsocket -lnsl | |||
endif | |||
endif | |||