diff options
Diffstat (limited to 'rhnop-server')
-rw-r--r-- | rhnop-server/Makefile | 110 | ||||
-rw-r--r-- | rhnop-server/conf.lua | 44 | ||||
-rwxr-xr-x | rhnop-server/configure | 223 | ||||
-rw-r--r-- | rhnop-server/debian/changelog | 62 | ||||
-rw-r--r-- | rhnop-server/debian/compat | 1 | ||||
-rw-r--r-- | rhnop-server/debian/control | 15 | ||||
-rw-r--r-- | rhnop-server/debian/copyright | 28 | ||||
-rwxr-xr-x | rhnop-server/debian/postinst | 9 | ||||
-rwxr-xr-x | rhnop-server/debian/postrm | 13 | ||||
-rw-r--r-- | rhnop-server/debian/rhnop-server.runit | 5 | ||||
-rw-r--r-- | rhnop-server/debian/rhnop-server.runit.log | 9 | ||||
-rwxr-xr-x | rhnop-server/debian/rules | 68 | ||||
-rw-r--r-- | rhnop-server/l_pipe.c | 137 | ||||
-rw-r--r-- | rhnop-server/l_pipe.h | 33 | ||||
-rwxr-xr-x | rhnop-server/noprml | 64 | ||||
-rw-r--r-- | rhnop-server/nopsyncd.c | 171 | ||||
-rw-r--r-- | rhnop-server/nopsyncd.conf | 18 | ||||
-rw-r--r-- | rhnop-server/playlog.lua | 98 | ||||
-rw-r--r-- | rhnop-server/qlistener.lua | 98 | ||||
-rw-r--r-- | rhnop-server/rddb.lua | 80 | ||||
-rw-r--r-- | rhnop-server/tcpserver.lua | 133 |
21 files changed, 0 insertions, 1419 deletions
diff --git a/rhnop-server/Makefile b/rhnop-server/Makefile deleted file mode 100644 index 8435d2c..0000000 --- a/rhnop-server/Makefile +++ /dev/null @@ -1,110 +0,0 @@ -## -## rhnop -## -## Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> -## -## This file is part of rhnop. -## -## rhnop is free software: you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## any later version. -## -## rhnop is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with rhnop. If not, see <http://www.gnu.org/licenses/>. -## - -ifneq ($(MAKECMDGOALS),distclean) -include include.mk -endif - -EXECUTABLE := nopsyncd - -C_OBJS := l_pipe.o \ - nopsyncd.o - -C_SRCS := $(C_OBJS:%.o=%.c) - -.PHONY: clean distclean install install-bin install-etc uninstall remove purge - -all: $(EXECUTABLE) - -%.d: %.c - @set -e; rm -f $@; \ - $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ - sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ - rm -f $@.$$$$; echo '(re)building $@' - -ifneq ($(MAKECMDGOALS),distclean) --include $(C_SRCS:%.c=%.d) -endif - -$(EXECUTABLE): $(C_OBJS) - $(CC) $(C_OBJS) -o $@ $(LDFLAGS) - -%.o: %.c - $(CC) $(CFLAGS) -c $< - -strip: $(EXECUTABLE) - $(STRIP) -s $(EXECUTABLE) - - -distclean: clean - find . -name *.o -exec rm -f {} \; - find . -name "*.\~*" -exec rm -rf {} \; - rm -f include.mk - rm -f config.h - -clean: - rm -f *.o - rm -f *.d - rm -f *.d.* - rm -f $(EXECUTABLE) - -INSTALL_TARGETS := install-bin install-lib install-etc -REMOVE_TARGETS := remove-bin remove-lib remove-etc - -install: all $(INSTALL_TARGETS) - -install-bin: $(EXECUTABLE) - $(INSTALL) -d $(DESTDIR)$(BINDIR) - $(INSTALL) -m 755 $(EXECUTABLE) $(DESTDIR)$(BINDIR) - $(INSTALL) -m 755 noprml $(DESTDIR)$(BINDIR) - -install-lib: - $(INSTALL) -d $(DESTDIR)$(LIBDIR) - $(INSTALL) -m 644 conf.lua $(DESTDIR)$(LIBDIR) - $(SED) -e 's#^local filename.*$$#local filename = "$(ETCDIR)/rhnop/nopsyncd.conf"#' -i $(DESTDIR)$(LIBDIR)/conf.lua - $(INSTALL) -m 644 playlog.lua $(DESTDIR)$(LIBDIR) - $(INSTALL) -m 644 rddb.lua $(DESTDIR)$(LIBDIR) - $(INSTALL) -m 644 qlistener.lua $(DESTDIR)$(LIBDIR) - $(INSTALL) -m 644 tcpserver.lua $(DESTDIR)$(LIBDIR) - -install-etc: - $(INSTALL) -d $(DESTDIR)$(ETCDIR)/rhnop - $(INSTALL) -m 640 nopsyncd.conf $(DESTDIR)$(ETCDIR)/rhnop - -uninstall: remove - -remove: $(REMOVE_TARGETS) - -remove-bin: - rm -f $(DESTDIR)$(BINDIR)/$(EXECUTABLE) - rm -f $(DESTDIR)$(BINDIR)/noprml - -remove-lib: - rm -f $(DESTDIR)$(LIBDIR)/conf.lua - rm -f $(DESTDIR)$(LIBDIR)/playlog.lua - rm -f $(DESTDIR)$(LIBDIR)/rddb.lua - rm -f $(DESTDIR)$(LIBDIR)/qlistener.lua - rm -f $(DESTDIR)$(LIBDIR)/tcpserver.lua - -remove-etc: - -purge: remove - rm -rf $(DESTDIR)$(ETCDIR)/rhnop diff --git a/rhnop-server/conf.lua b/rhnop-server/conf.lua deleted file mode 100644 index 8294df6..0000000 --- a/rhnop-server/conf.lua +++ /dev/null @@ -1,44 +0,0 @@ --- --- rhnop --- --- Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> --- --- This file is part of rhnop. --- --- rhnop is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- any later version. --- --- rhnop is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with rhnop. If not, see <http://www.gnu.org/licenses/>. --- - -local conf = {} - -local filename = "nopsyncd.conf" - -local file = assert(io.open(filename, "r")) -for line in file:lines() do - local k,v = string.match(line, "^([^=#]+)=(.*)$") - if k and v and v ~= "" then - conf[k] = v - end -end -file:close() - -if conf.music_carts_lo == nil then - conf.music_carts_lo = 400000 -end -if conf.music_carts_hi == nil then - conf.music_carts_hi = 499999 -end -conf.music_carts_lo = tonumber(conf.music_carts_lo) -conf.music_carts_hi = tonumber(conf.music_carts_hi) - -return conf diff --git a/rhnop-server/configure b/rhnop-server/configure deleted file mode 100755 index 42f5435..0000000 --- a/rhnop-server/configure +++ /dev/null @@ -1,223 +0,0 @@ -#!/bin/sh -# -# rhnop -# -# Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> -# -# This file is part of rhnop. -# -# rhnop is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# any later version. -# -# rhnop is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with rhnop. If not, see <http://www.gnu.org/licenses/>. -# - -TARGET=`uname -s` -EBUILD_COMPAT=0 - -CFLAGS='-g -O2' -LDFLAGS='-g -Wall -O2 -lpthread' - -LUA_DIR='' -LUA='' - -PREFIX='/usr/local' -BINDIR='' -ETCDIR='' -LIBDIR='' - -print_usage() { - echo "configure --help print this" - echo " --target=<TARGET> build target i.e. Linux (default: autodetect)" - echo " --prefix=<PREFIX> the installation prefix (default: /usr/local)" - echo " --bindir=<DIR> the path to the bin directory (default: $PREFIX/bin)" - echo " --sysconfdir=<DIR> the path to the system configuration directory (default: $PREFIX/etc)" - echo " --libdir=<DIR> the path to the lua library directory (default: $PREFIX/lib/rhnop-server)" - echo " --with-lua=<DIR> use this lua tree instead of system default" -} - -for arg -do - case $arg in - --target=*) - TARGET=${arg#--target=} - ;; - --prefix=*) - PREFIX=${arg#--prefix=} - ;; - --bindir=*) - BINDIR=${arg#--bindir=} - ;; - --sysconfdir=*) - ETCDIR=${arg#--sysconfdir=} - ;; - --libdir=*) - LIBDIR=${arg#--libdir=} - ;; - --with-lua=*) - LUA_DIR=${arg#--with-lua=} - ;; - --ebuild-compat) - EBUILD_COMPAT=1 - ;; - --help) - print_usage - exit 0 - ;; - *) - ERRORS="$ERRORS $arg" - ;; - esac -done - -if [ -n "$ERRORS" ] && [ $EBUILD_COMPAT -ne 1 ]; then - for error in $ERRORS; do - echo "Unknown argument: $error" - done - - print_usage - exit 1 -fi - -rm -f config.h -rm -f include.mk -case $TARGET in - Linux) - LDFLAGS=$LDFLAGS' -ldl' - ;; - *) - echo "platform not supported" - exit 1; - ;; -esac - - -test_lua_version() -{ - LUA_VERSION=`cat $1 | grep "#define LUA_VERSION[ ]" | cut -f2- | tr -d '"' | sed -e 's/Lua \([0-9][0-9.]*\)/\1/'` - LUA_VERSION_NUM=`cat $1 | grep "#define LUA_VERSION_NUM" | awk '{ print $3 }'` - LUA_RELEASE=`cat $1 | grep "#define LUA_RELEASE[ ]" | cut -f2-` - - if [ $LUA_VERSION_NUM -ge 501 ]; then - return 1; - else - return 0; - fi -} - -if [ -z "$LUA_DIR" ]; then - for prefix in /usr /usr/local; do - if [ -e $prefix/include/lua.h ]; then - test_lua_version $prefix/include/lua.h - if [ $? -eq 1 ]; then - echo "using Lua $LUA_VERSION ($LUA_RELEASE) found at $prefix/include" - CFLAGS="$CFLAGS -I'$prefix/include'" - LDFLAGS="$LDFLAGS -L'$prefix/lib' -llua" - LUA=$prefix/lua - LUAC=$prefix/luac - break - fi - else - for dir in `ls -d $prefix/include/lua* 2> /dev/null`; do - if [ -e $dir/lua.h ]; then - test_lua_version $dir/lua.h - if [ $? -eq 1 ]; then - echo "using Lua $LUA_VERSION ($LUA_RELEASE) found at $dir" - CFLAGS="$CFLAGS -I$dir" - if [ -x "$prefix/bin/lua$LUA_VERSION" ]; then - LDFLAGS="$LDFLAGS -L'$prefix/lib' -llua$LUA_VERSION" - LUA=$prefix/bin/lua$LUA_VERSION - LUAC=$prefix/bin/luac$LUA_VERSION - elif [ -x "$prefix/bin/lua-$LUA_VERSION" ]; then - LDFLAGS="$LDFLAGS -L'$prefix/lib' -llua-$LUA_VERSION" - LUA=$prefix/bin/lua-$LUA_VERSION - LUAC=$prefix/bin/luac-$LUA_VERSION - else - echo "ERROR: found lua.h at $dir/lua.h but no matching lua and luac" - return 1 - fi - break - fi - fi - done - if [ -n "$LUAC" ]; then - break - fi - fi - done - - if [ -z "$LUAC" ]; then - echo "ERROR: no suitable lua found .. please install lua 5.1 or higher or use --with-lua" - return 1 - fi - -else - CFLAGS="$CFLAGS -I'$LUA_DIR/include'" - LDFLAGS="$LDFLAGS '$LUA_DIR/lib/liblua.a'" - LUA=$LUA_DIR/bin/lua - LUAC=$LUA_DIR/bin/luac -fi - -if [ -z "$BINDIR" ]; then - BINDIR=$PREFIX/bin -fi - -if [ -z "$ETCDIR" ]; then - ETCDIR=$PREFIX/etc -fi - -if [ -z "$LIBDIR" ]; then - LIBDIR=$PREFIX/lib/rhnop-server -fi - -cat > include.mk <<EOF -# this file was created automatically -# do not edit this file directly -# use ./configure instead - -TARGET := '$TARGET' -CC := gcc -CFLAGS := $CFLAGS -LDFLAGS := $LDFLAGS -LUA := '$LUA' -LUAC := '$LUAC' -STRIP := strip -INSTALL := install -SED := sed - -PREFIX := '$PREFIX' -BINDIR := '$BINDIR' -ETCDIR := '$ETCDIR' -LIBDIR := '$LIBDIR' -EOF - -cat > config.h <<EOF -/* - * nopsyncd version info - * - * this file was created automatically - * do not edit this file directly - * use ./configure instead - */ - -#ifndef NOPSYNCD_config_h_INCLUDED -#define NOPSYNCD_config_h_INCLUDED - -#define TARGET "$TARGET" -#define PREFIX "$PREFIX" -#define BINDIR "$BINDIR" -#define ETCDIR "$ETCDIR" -#define LIBDIR "$LIBDIR" - -#endif -EOF - -exit 0 diff --git a/rhnop-server/debian/changelog b/rhnop-server/debian/changelog deleted file mode 100644 index 3013dfe..0000000 --- a/rhnop-server/debian/changelog +++ /dev/null @@ -1,62 +0,0 @@ -rhnop-server (0.10) unstable; urgency=low - - * forcing utf-8 - - -- Christian Pointner <equinox@helsinki.at> Tue, 11 Mar 2014 16:46:13 +0100 - -rhnop-server (0.9) unstable; urgency=low - - * fixed error due to new luasql library version - - -- Christian Pointner <equinox@helsinki.at> Wed, 05 Mar 2014 19:28:44 +0100 - -rhnop-server (0.8) unstable; urgency=low - - * fixed runit script. - * added log services to runit. - * switched to microsends for timestamp. - - -- Christian Pointner <equinox@helsinki> Wed, 02 Apr 2011 17:53:25 +0200 - -rhnop-server (0.7) unstable; urgency=low - - * fixed utf-8 handling. - * changed to bigint for timestamp. - - -- Christian Pointner <equinox@helsinki> Wed, 31 Mar 2011 20:39:52 +0200 - -rhnop-server (0.6) unstable; urgency=low - - * fixed handling of invalid carts. - - -- Christian Pointner <equinox@helsinki> Wed, 30 Mar 2011 19:36:22 +0200 - -rhnop-server (0.5) unstable; urgency=low - - * better handling of invalid carts. - - -- Christian Pointner <equinox@helsinki> Wed, 30 Mar 2011 19:35:22 +0200 - -rhnop-server (0.4) unstable; urgency=low - - * noprml ignores dummy carts now. - - -- Christian Pointner <equinox@helsinki> Wed, 30 Mar 2011 18:35:22 +0200 - -rhnop-server (0.3) unstable; urgency=low - - * some cleanup. - - -- Christian Pointner <equinox@helsinki> Wed, 30 Mar 2011 17:32:21 +0200 - -rhnop-server (0.2) unstable; urgency=low - - * added runit init scrip. - - -- Christian Pointner <equinox@helsinki> Wed, 30 Mar 2011 16:34:24 +0200 - -rhnop-server (0.1) unstable; urgency=low - - * Initial release. - - -- Christian Pointner <equinox@helsinki> Wed, 30 Mar 2011 13:50:41 +0200 diff --git a/rhnop-server/debian/compat b/rhnop-server/debian/compat deleted file mode 100644 index 7ed6ff8..0000000 --- a/rhnop-server/debian/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/rhnop-server/debian/control b/rhnop-server/debian/control deleted file mode 100644 index 97b440e..0000000 --- a/rhnop-server/debian/control +++ /dev/null @@ -1,15 +0,0 @@ -Source: rhnop-server -Section: interpreters -Priority: optional -Maintainer: Christian Pointner <equinox@helsinki.at> -Build-Depends: debhelper (>= 5), liblua5.1-0-dev, lua5.1 -Standards-Version: 3.8.2 -Homepage: http://www.helsinki.at/ - -Package: rhnop-server -Architecture: any -Depends: ${shlibs:Depends}, adduser, liblua5.1-mq, liblua5.1-socket2, liblua5.1-sql-mysql-2, liblua5.1-posix1, lua5.1, runit -Description: Radio Helsinki now playing information system - server - The Radio Helsinki now playing information system gathers the - now playing info into an mysql database for further processing. - This package contains the server component (rivendell side).
\ No newline at end of file diff --git a/rhnop-server/debian/copyright b/rhnop-server/debian/copyright deleted file mode 100644 index 2ab2caa..0000000 --- a/rhnop-server/debian/copyright +++ /dev/null @@ -1,28 +0,0 @@ -This package was debianized by Christian Pointner <equinox@helsinki.at> on -Fri, 30 Mar 2011 11:23:42 +0200. - -Upstream Author: Christian Pointner <equinox@helsinki.at> - -Copyright: 2011-2014 Christian Pointner - -License: - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this package; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -On Debian systems, the complete text of the GNU General -Public License can be found in `/usr/share/common-licenses/GPL-3'. - -The Debian packaging is © 2009, Christian Pointner <equinox@helsinki.at> and -is licensed under the GPL, see above. diff --git a/rhnop-server/debian/postinst b/rhnop-server/debian/postinst deleted file mode 100755 index 4b5c141..0000000 --- a/rhnop-server/debian/postinst +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -# postinst script for rhnop-server - -set -e - -if [ "$1" = "configure" ]; then - adduser --quiet --system --group --no-create-home --home /var/run/rhnop rhnop - chgrp rhnop /etc/rhnop/nopsyncd.conf -fi diff --git a/rhnop-server/debian/postrm b/rhnop-server/debian/postrm deleted file mode 100755 index 18cb882..0000000 --- a/rhnop-server/debian/postrm +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -# postrm script for rhnop-server - -set -e - -if [ "$1" = "purge" ] ; then - if [ -x "$(command -v deluser)" -a -x "$(command -v delgroup)" ]; then - deluser --quiet --system rhnop || true - delgroup --quiet --system rhnop || true - else - echo "Not removing rhnop user and group: adduser package not found." >&2 - fi -fi diff --git a/rhnop-server/debian/rhnop-server.runit b/rhnop-server/debian/rhnop-server.runit deleted file mode 100644 index 37b0795..0000000 --- a/rhnop-server/debian/rhnop-server.runit +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -set -e - -exec 2>&1 -exec chpst -u rhnop:rhnop /usr/bin/nopsyncd diff --git a/rhnop-server/debian/rhnop-server.runit.log b/rhnop-server/debian/rhnop-server.runit.log deleted file mode 100644 index a8766ea..0000000 --- a/rhnop-server/debian/rhnop-server.runit.log +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -e - -LOG_D="/var/log/nopsyncd/" -if [ ! -d "$LOG_D" ]; then - mkdir -p -m0750 "$LOG_D" -fi -chown root:adm "$LOG_D" -exec chpst -u root:adm svlogd -tt "$LOG_D" diff --git a/rhnop-server/debian/rules b/rhnop-server/debian/rules deleted file mode 100755 index ac5d9fc..0000000 --- a/rhnop-server/debian/rules +++ /dev/null @@ -1,68 +0,0 @@ -#!/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 - -configure: configure-stamp -configure-stamp: - dh_testdir - ./configure --prefix=/usr --sysconfdir=/etc - touch configure-stamp - -build: build-stamp - -build-stamp: configure-stamp - dh_testdir - $(MAKE) - touch $@ - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - $(MAKE) distclean - dh_clean - -install: build - dh_testdir - dh_testroot - dh_installdirs - $(MAKE) DESTDIR=$(CURDIR)/debian/rhnop-server install - mkdir -p $(CURDIR)/debian/rhnop-server/etc/sv/rhnop-server/log - ln -s /var/run/sv.rhnop-server/ $(CURDIR)/debian/rhnop-server/etc/sv/rhnop-server/supervise - cp $(CURDIR)/debian/rhnop-server.runit $(CURDIR)/debian/rhnop-server/etc/sv/rhnop-server/run - ln -s /var/run/sv.rhnop-server.log/ $(CURDIR)/debian/rhnop-server/etc/sv/rhnop-server/log/supervise - cp $(CURDIR)/debian/rhnop-server.runit.log $(CURDIR)/debian/rhnop-server/etc/sv/rhnop-server/log/run - -# Build architecture-independent files here. -binary-indep: install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: install - dh_testdir - dh_testroot - dh_installdocs - dh_installchangelogs - dh_installexamples - dh_link - dh_strip - dh_compress - dh_fixperms - chmod 640 debian/rhnop-server/etc/rhnop/nopsyncd.conf - chmod 755 debian/rhnop-server/etc/sv/rhnop-server/run - chmod 755 debian/rhnop-server/etc/sv/rhnop-server/log/run - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/rhnop-server/l_pipe.c b/rhnop-server/l_pipe.c deleted file mode 100644 index 1cd8e49..0000000 --- a/rhnop-server/l_pipe.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - * rhnop - * - * Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> - * - * This file is part of rhnop. - * - * rhnop is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * rhnop is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with rhnop. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <lua.h> -#include <lauxlib.h> - -#include <string.h> -#include <errno.h> -#include <unistd.h> - -#include "l_pipe.h" - -static int pipefds_[2]; - -int pipe_init() -{ - return pipe(pipefds_); -} - -void pipe_close() -{ - close(pipefds_[0]); - close(pipefds_[1]); -} - -static int l_pipe_signal(lua_State *L) -{ - size_t len = 0, written = 0; - const char* data = luaL_checklstring(L, 1, &len); - len++; // also send trailing zero - - int ret = 0; - for(;;) { - ret = write(pipefds_[1], &(data[written]), len - written); - if(!ret) continue; - if(ret == -1 && (errno == EAGAIN || errno == EINTR)) continue; - - written += ret; - if(written == len) break; - - break; - } - - lua_pushinteger(L, ret); - return 1; -} - -static int l_pipe_getfd(lua_State *L) -{ - if(!lua_istable(L, -1)) - luaL_error(L, "can't retreive pipe fd"); - - lua_pushliteral(L, "fd"); - lua_gettable(L, -2); - return 1; -} - -static int l_pipe_dirty(lua_State *L) -{ - lua_pushboolean(L, 0); - return 1; -} - -static int l_pipe_getreadfd(lua_State *L) -{ - lua_newtable(L); - lua_pushliteral(L, "fd"); - lua_pushinteger(L, pipefds_[0]); - lua_settable(L, -3); - lua_pushliteral(L, "getfd"); - lua_pushcfunction(L, l_pipe_getfd); - lua_settable(L, -3); - lua_pushliteral(L, "dirty"); - lua_pushcfunction(L, l_pipe_dirty); - lua_settable(L, -3); - return 1; -} - -static int l_pipe_consume(lua_State *L) -{ - char data[17]; // 17 should be sufficient - size_t len = 0; - - int ret = 0; - for(;;) { - ret = read(pipefds_[0], &(data[len]), 1); - if(ret == 0) break; - if(ret == -1 && (errno == EAGAIN || errno == EINTR)) continue; - - if(data[len] == 0) - break; - - len += ret; - if(len >= sizeof(data)) { - ret = 0; - break; - } - } - - if(ret) - lua_pushstring(L, data); - else - lua_pushnil(L); - - return 1; -} - -static const struct luaL_reg pipe_funcs [] = { - { "signal", l_pipe_signal }, - { "getreadfd", l_pipe_getreadfd }, - { "consume", l_pipe_consume }, - { NULL, NULL } -}; - -LUALIB_API int luaopen_pipe(lua_State *L) -{ - luaL_register(L, LUA_PIPELIBNAME, pipe_funcs); - return 1; -} diff --git a/rhnop-server/l_pipe.h b/rhnop-server/l_pipe.h deleted file mode 100644 index ee3a424..0000000 --- a/rhnop-server/l_pipe.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * rhnop - * - * Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> - * - * This file is part of rhnop. - * - * rhnop is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * rhnop is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with rhnop. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef NOPSYNCD_l_pipe_h_INCLUDED -#define NOPSYNCD_l_pipe_h_INCLUDED - -#include <lua.h> - -int pipe_init(); -void pipe_close(); - -#define LUA_PIPELIBNAME "pipe" -LUALIB_API int luaopen_pipe(lua_State *L); - -#endif diff --git a/rhnop-server/noprml b/rhnop-server/noprml deleted file mode 100755 index cb9ddce..0000000 --- a/rhnop-server/noprml +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/lua --- --- rhnop --- --- Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> --- --- This file is part of rhnop. --- --- rhnop is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- any later version. --- --- rhnop is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with rhnop. If not, see <http://www.gnu.org/licenses/>. --- --- --- send now and next cart# and length to nopsyncd --- this script should be called by the now/next macro cart --- the arguments should be: now# nowlen next# nextlen --- - -local queue_name = "/rhnop" - --- reading timestamp (milliseconds since epoch) -local p = assert(io.popen("/bin/date --utc '+%s %N'" , 'r')) -local time = assert(p:read('*l')) -p:close() -local s, ns = assert(string.match(time, "([0-9]+) ([0-9]+)")) -local timestamp = s .. string.format("%06d", math.floor(ns/1000)) - --- check arguments -if #arg < 4 then - io.stderr:write("too few parameters\n") - os.exit(1) -end - -require "posix" -mq = require "mq" - --- open message queue -posix.umask("rwxrwxr-x") -local q, err = mq.create(queue_name, "wo", "rw-rw----") -if q == nil then - q, err = mq.open(queue_name, "wo") - if q == nil then - io.stderr:write("creation of message queue failed: " .. err .. "\n") - os.exit(1) - end -end - --- send out message to nopsyncd -local result, err = mq.send(q, timestamp .. " " .. arg[1] .. " " .. arg[2] .. " " .. arg[3] .. " " .. arg[4], 0) -if result == nil then - io.stderr:write("sending message failed: " .. err .. "\n") - os.exit(2) -end - -mq.close(q) diff --git a/rhnop-server/nopsyncd.c b/rhnop-server/nopsyncd.c deleted file mode 100644 index 35558c2..0000000 --- a/rhnop-server/nopsyncd.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * rhnop - * - * Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> - * - * This file is part of rhnop. - * - * rhnop is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * rhnop is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with rhnop. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <errno.h> -#include <string.h> -#include <pthread.h> - -#include <lua.h> -#include <lualib.h> -#include <lauxlib.h> - -#include "l_pipe.h" -#include "config.h" - -#define LUA_MAIN_LOOP_FUNC "main_loop" -#define QLISTENER LIBDIR"/qlistener.lua" -#define TCPSERVER LIBDIR"/tcpserver.lua" - -static const luaL_Reg nopsyncd_lualibs[] = { - {"", luaopen_base}, - {LUA_LOADLIBNAME, luaopen_package}, - {LUA_TABLIBNAME, luaopen_table}, - {LUA_STRLIBNAME, luaopen_string}, - {LUA_MATHLIBNAME, luaopen_math}, - {LUA_IOLIBNAME, luaopen_io}, - {LUA_OSLIBNAME, luaopen_os}, - {LUA_PIPELIBNAME, luaopen_pipe}, - {NULL, NULL} -}; - -int init_main_loop(lua_State *L, const char* filename) -{ - const luaL_Reg *lib = nopsyncd_lualibs; - for (; lib->func; lib++) { - lua_pushcfunction(L, lib->func); - lua_pushstring(L, lib->name); - lua_call(L, 1, 0); - } - - int ret = luaL_loadfile(L, filename); - if(ret) { - const char* err_str = luaL_checkstring(L, -1); - switch(ret) { - case LUA_ERRSYNTAX: fprintf(stderr, "luaL_loadfile() syntax error: %s\n", err_str); break; - case LUA_ERRMEM: fprintf(stderr, "luaL_loadfile() malloc error: %s\n", err_str); break; - case LUA_ERRFILE: fprintf(stderr, "lauL_loadfile() error: %s\n", err_str); break; - default: fprintf(stderr, "luaL_loadfile() unknown error: %s\n", err_str); break; - } - return -1; - } - - lua_pushstring(L, LIBDIR); - lua_setglobal(L, "rhnoplibdir"); - - ret = lua_pcall(L, 0, 0, 0); - if(ret) { - const char* err_str = luaL_checkstring(L, -1); - switch(ret) { - case LUA_ERRRUN: fprintf(stderr, "lua_pcall() runtime error: %s\n", err_str); break; - case LUA_ERRMEM: fprintf(stderr, "lua_pcall() malloc error: %s\n", err_str); break; - case LUA_ERRERR: fprintf(stderr, "lua_pcall() error at error handler function: %s\n", err_str); break; - } - return -1; - } - - return 0; -} - -int call_main_loop(lua_State* L, const char* filename) -{ - lua_getglobal(L, LUA_MAIN_LOOP_FUNC); - if(!lua_isfunction(L, -1)) { - fprintf(stderr, "there is no function '%s' at file '%s'\n", LUA_MAIN_LOOP_FUNC, filename); - return -1; - }; - - int ret = lua_pcall(L, 0, 1, 0); - if(ret) { - const char* err_str = luaL_checkstring(L, -1); - switch(ret) { - case LUA_ERRRUN: fprintf(stderr, "lua_pcall(%s:%s) runtime error: %s\n", filename, LUA_MAIN_LOOP_FUNC, err_str); break; - case LUA_ERRMEM: fprintf(stderr, "lua_pcall(%s:%s) malloc error: %s\n", filename, LUA_MAIN_LOOP_FUNC, err_str); break; - case LUA_ERRERR: fprintf(stderr, "lua_pcall(%s:%s) error at error handler function: %s\n", filename, LUA_MAIN_LOOP_FUNC, err_str); break; - } - return -1; - } - - ret = lua_tointeger(L, 1); - return ret; -} - -void* main_loop(void* file) -{ - if(!file) - pthread_exit(NULL); - - - lua_State *L; - L = luaL_newstate(); - if(!L) { - fprintf(stderr, "error creating lua state\n"); - pthread_exit(NULL); - } - - int ret = init_main_loop(L, (char*)file); - if(!ret) - ret = call_main_loop(L, (char*)file); - - printf("%s returned with %d\n", (char*)file, ret); - - lua_close(L); - - /* this should bring down the other thread as well - at least this is true for the tcp-server thread */ - pipe_close(); - - pthread_exit(NULL); -} - -int main(int argc, char* argv[]) -{ - printf("starting nopsyncd...\n"); - - pthread_t qlistener, tcpserver; - - int ret = pipe_init(); - if(ret) { - fprintf(stderr, "Error creating pipe: %s\n", strerror(errno)); - return 1; - } - - ret = pthread_create(&qlistener, NULL, main_loop, QLISTENER); - if(ret) { - fprintf(stderr, "Error creating qlistener thread (code: %d)\n", ret); - return 1; - } - pthread_detach(qlistener); /* can't kill this thread so don't join to it */ - - ret = pthread_create(&tcpserver, NULL, main_loop, TCPSERVER); - if(ret) { - fprintf(stderr, "Error creating tcpserver thread (code: %d)\n", ret); - return 1; - } - -/* this thread can't be cancelled so don't wait for it */ -/* pthread_join(qlistener, NULL); */ - pthread_join(tcpserver, NULL); - - printf("stopping nopsyncd.\n"); - return 0; -} diff --git a/rhnop-server/nopsyncd.conf b/rhnop-server/nopsyncd.conf deleted file mode 100644 index a80d620..0000000 --- a/rhnop-server/nopsyncd.conf +++ /dev/null @@ -1,18 +0,0 @@ -queue_name=/rhnop -tcp_host=* -tcp_port=2345 - -music_carts_lo=400000 -music_carts_hi=499999 - -rddb_db=rivendell -rddb_host=127.0.0.1 -#rddb_port=3306 -rddb_user= -rddb_pwd= - -playlog_db=rhnop -playlog_host=127.0.0.1 -#playlog_port=3306 -playlog_user= -playlog_pwd= diff --git a/rhnop-server/playlog.lua b/rhnop-server/playlog.lua deleted file mode 100644 index 591ee6b..0000000 --- a/rhnop-server/playlog.lua +++ /dev/null @@ -1,98 +0,0 @@ --- --- rhnop --- --- Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> --- --- This file is part of rhnop. --- --- rhnop is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- any later version. --- --- rhnop is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with rhnop. If not, see <http://www.gnu.org/licenses/>. --- - -luasql = require "luasql.mysql" - --- CREATE DATABASE rhnop CHARACTER SET utf8 COLLATE utf8_unicode_ci; --- GRANT select,insert,update ON rhnop.* TO 'nopsyncd' IDENTIFIED BY '<password>'; --- GRANT select ON rhnop.* TO 'nopcollectd' IDENTIFIED BY '<password>'; --- USE rhnop --- CREATE TABLE IF NOT EXISTS now (timestamp BIGINT UNSIGNED PRIMARY KEY NOT NULL, cart INT NOT NULL, len INT, showtitle VARCHAR(255), title VARCHAR(255), artist VARCHAR(255), album VARCHAR(255), ismusic BOOLEAN); --- ALTER TABLE now CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; - -conf = require "conf" - -local playlog = {} - -function playlog:init() - local err - - self.env, err = luasql.mysql() - if self.env == nil then - return nil, err - end - - self.con, err = self.env:connect(conf.playlog_db, conf.playlog_user, conf.playlog_pwd, conf.playlog_host, conf.playlog_port) - if self.con == nil then - return nil, err - end - - local ret, err = self.con:execute("SET CHARACTER SET utf8") - if ret == nil then - return nil, err - end - - ret, err = self.con:setautocommit(true) - if ret == nil then - return nil, err - end - - return true -end - -function playlog:getLastCart() - local cur, err = self.con:execute("SELECT cart FROM now WHERE timestamp = (SELECT MAX(timestamp) FROM now)") - if cur == nil then - return nil, err - end - - local cart = cur:fetch() - if cart == nil then cart = 0 end - return cart -end - -function playlog:insertNowMusic(timestamp, cart, len, title, artist, album) - cart = tonumber(cart) - len = tonumber(len) - if cart < 400000 or cart > 450000 then - poolnum = 0 - else - poolnum = math.floor(cart/1000) - 399 - end - local cur, err = self.con:execute("INSERT into now VALUES(" .. self.con:escape(timestamp) .. ", " .. cart .. ", " .. len .. ", 'Musikpool " .. poolnum .. "', '" .. self.con:escape(title) .. "', '" .. self.con:escape(artist) .."', '" .. self.con:escape(album) .. "', 1)") - if cur == nil then - return nil, err - end - - return true -end - -function playlog:close() - if self.con then - self.con:close() - end - - if self.env then - self.env:close() - end -end - -return playlog diff --git a/rhnop-server/qlistener.lua b/rhnop-server/qlistener.lua deleted file mode 100644 index b41e2a7..0000000 --- a/rhnop-server/qlistener.lua +++ /dev/null @@ -1,98 +0,0 @@ --- --- rhnop --- --- Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> --- --- This file is part of rhnop. --- --- rhnop is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- any later version. --- --- rhnop is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with rhnop. If not, see <http://www.gnu.org/licenses/>. --- - -local last_cart = nil - -require "posix" -mq = require "mq" - -package.path = package.path .. ";" .. rhnoplibdir .. "/?.lua" -playlog = require "playlog" -rddb = require "rddb" -conf = require "conf" - -function handle_now(timestamp, nowcart, nowlen) - local results, err = rddb:getCartInfo(nowcart); - if results == nil then - io.stderr:write("can't fetch cart info: " .. err .. "\n") --- TODO: this error shouldn't be ignored!!!! - else --- print(timestamp .. " Info: '" .. results.TITLE .. "' von '" .. results.ARTIST .. "' aus '" .. results.ALBUM .. "'") - local ret, err = playlog:insertNowMusic(timestamp, nowcart, nowlen, results.TITLE, results.ARTIST, results.ALBUM) - if ret == nil then - io.stderr:write("can't insert music info: " .. err .. "\n") - else - pipe.signal(timestamp) - end - end -end - -function handle_message(msg) - local timestamp, nowcart, nowlen, nextcart, nextlen = string.match(msg, "^(%d+) (%d+) (%d+) (%d+) (%d+)$"); - if not timestamp or not nowcart or not nowlen or not nextcart or not nextlen then - io.stderr:write("ignoring malformed message\n") - else - nowcart = tonumber(nowcart) - nowlen = tonumber(nowlen) - if last_cart ~= nowcart and nowcart >= conf.music_carts_lo and nowcart <= conf.music_carts_hi and nowlen > 0 then - last_cart = nowcart - handle_now(timestamp, nowcart, nowlen) - end - -- TODO handle next info - end -end - -function main_loop() - posix.umask("rwxrwxr-x") - local q, err = mq.create(conf.queue_name, "ro", "rw-rw----") - if q == nil then - q, err = mq.open(conf.queue_name, "wo") - if q == nil then - io.stderr:write("creation of message queue failed: " .. err .. "\n") - os.exit(1) - end - end - - local ret, err = playlog:init() - if ret == nil then - io.stderr:write("creation of playlog failed: " .. err .. "\n") - os.exit(1) - end - last_cart = assert(playlog:getLastCart()) - - local ret, err = rddb:init() - if ret == nil then - io.stderr:write("opening rivendell db failed: " .. err .. "\n") - playlog:close() - os.exit(1) - end - - while true do - local msg, prio = mq.receive(q) - if msg == nil then - io.stderr:write("recv error: " .. prio .. "\n") - rddb:close() - playlog:close() - os.exit(2) - end - handle_message(msg) - end -end diff --git a/rhnop-server/rddb.lua b/rhnop-server/rddb.lua deleted file mode 100644 index 9626632..0000000 --- a/rhnop-server/rddb.lua +++ /dev/null @@ -1,80 +0,0 @@ --- --- rhnop --- --- Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> --- --- This file is part of rhnop. --- --- rhnop is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- any later version. --- --- rhnop is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with rhnop. If not, see <http://www.gnu.org/licenses/>. --- - -luasql = require "luasql.mysql" - -conf = require "conf" - -local rddb = {} - -function rddb:init() - local err - - self.env, err = luasql.mysql() - if self.env == nil then - return nil, err - end - - self.con, err = self.env:connect(conf.rddb_db, conf.rddb_user, conf.rddb_pwd, conf.rddb_host, conf.rddb_port) - if self.con == nil then - return nil, err - end - - local ret, err = self.con:execute("SET CHARACTER SET utf8") - if ret == nil then - return nil, err - end - - return true -end - -function rddb:getCartInfo(cartnum) - local cur, err = self.con:execute("select TITLE,ARTIST,ALBUM from CART where NUMBER = " .. self.con:escape(cartnum)) - if cur == nil then - return nil, err - end - - if cur:numrows() ~= 1 then - return nil, "nothing found in rivendell db" - end - - local results = {} - results, err = cur:fetch(results, "a") - cur:close() - - if results.TITLE == nil then results.TITLE = "" end - if results.ARTIST == nil then results.ARTIST = "" end - if results.ALBUM == nil then results.ALBUM = "" end - - return results, err -end - -function rddb:close() - if self.con then - self.con:close() - end - - if self.env then - self.env:close() - end -end - -return rddb diff --git a/rhnop-server/tcpserver.lua b/rhnop-server/tcpserver.lua deleted file mode 100644 index fcc8a2e..0000000 --- a/rhnop-server/tcpserver.lua +++ /dev/null @@ -1,133 +0,0 @@ --- --- rhnop --- --- Copyright (C) 2011-2014 Christian Pointner <equinox@helsinki.at> --- --- This file is part of rhnop. --- --- rhnop is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- any later version. --- --- rhnop is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with rhnop. If not, see <http://www.gnu.org/licenses/>. --- - -require "socket" - -package.path = package.path .. ";" .. rhnoplibdir .. "/?.lua" -conf = require "conf" - -function init_server() - local server = assert(socket.tcp()) - - assert(server:setoption('reuseaddr', true)) - assert(server:bind(conf.tcp_host, conf.tcp_port)) - assert(server:listen(5)) - - return server -end - -local clients = {} - -function add_client(hdl) - -- print("new client(" .. hdl:getfd() .. ") from " .. hdl:getpeername()) - local client = {} - client.buffer = "" - client.hdl = hdl - client.getfd = function() return hdl:getfd() end - client.dirty = function() return hdl:dirty() end - table.insert(clients, client) -end - -function remove_client(c) - local idx = 0 - for idx, client in ipairs(clients) do - if client == c then - break - end - end - - -- print("removing client(" .. c.hdl:getfd() .. ")") - c.hdl:close() - table.remove(clients, idx) -end - -function cleanup_clients() - for _, client in ipairs(clients) do - client:close() - end -end - -function clients_get_writeables() - local fds = {} - - for _, client in ipairs(clients) do - if client.buffer ~= "" then - table.insert(fds, client) - end - end - - return fds -end - -function clients_senddata(timestamp) - for _, client in ipairs(clients) do - client.buffer = client.buffer .. timestamp .. "\n" - end -end - -function main_loop() - local pipefd = pipe.getreadfd() - - server = init_server() - while true do - local readables, writeables, err = socket.select({ pipefd , server , unpack(clients) } , clients_get_writeables()) - if err then - print("select returned with error: " .. err) - return -1 - else - for _, input in ipairs(readables) do - if input == pipefd then - local timestamp = pipe.consume() - if timestamp == nil then - return 2 - end - -- print("pipe was signaled with timestamp: " .. timestamp) - clients_senddata(timestamp) - elseif input == server then - local client = assert(server:accept()) - add_client(client) - else - if input.hdl then - -- receive is insanely stupid, therefore we must always read one byte only - local _, err = input.hdl:receive(1) - if err then - remove_client(input) - end - end - end - end - - for _, output in ipairs(writeables) do - local ret = output.hdl:send(output.buffer) - if(ret == nil) then - remove_client(output) - else - output.buffer = string.sub(output.buffer, ret+1) - end - end - end - end - - server:close() - cleanup_clients() - - return 0 -end |