--- /dev/null
+--- a/Makefile
++++ b/Makefile
+@@ -1,15 +1,12 @@
+-LUA = lua-5.1.4
++LUA = lua-5.2.0
+ #LUA = lua-5.2.0
+ STATIC = false
+
+-CFLAGS = -fno-exceptions -fno-rtti -O2 -I$(LUA) -L$(LUA)
++CFLAGS = -fno-exceptions -fno-rtti -O2
+ SRC = main.cpp soap.cpp mem.cpp mcast.cpp luaxlib.cpp luaxcore.cpp luajson.cpp luajson_parser.cpp
++STAGING_DIR = /u01/home/shocker/staff/openwrt/staging_dir
+ LUAMYCFLAGS = -DLUA_USE_LINUX
+
+-SDK_8_09 = /u01/home/shocker_old/staff/openwrt_8_09/staging_dir
+-SDK_BACKFIRE = /u01/home/shocker_old/staff/openwrt/staging_dir
+-SDK_BBREAKER = /home/shocker/staff/openwrt/staging_dir
+-
+ ifeq ($(STATIC),true)
+ CFLAGS+=-static
+ LUAMYCFLAGS+=-static
+@@ -36,42 +33,18 @@
+
+
+ # D-Link DIR-320/DD-WRT (mipsel)
+-bcm947x_ddwrt:
+- $(MAKE) embedded TARGET=bcm947x-ddwrt SDK=$(SDK_8_09)/toolchain-mipsel_gcc3.4.6/mipsel-linux/bin UTILS=$(SDK_8_09)/toolchain-mipsel_gcc3.4.6/libexec/gcc/mipsel-linux-uclibc/3.4.6 STAGING_DIR=$(SDK_8_09)
++bcm947xx_ddwrt:
++ $(MAKE) embedded TARGET=bcm947xx-ddwrt SDK=/u01/home/shocker/staff/openwrt_8_09/staging_dir/toolchain-mipsel_gcc3.4.6/mipsel-linux/bin PATH=$(PATH):/u01/home/shocker/staff/openwrt_8_09/staging_dir/toolchain-mipsel_gcc3.4.6/libexec/gcc/mipsel-linux-uclibc/3.4.6
+
+ # OpenWrt Backfire
+-bcm947x_backfire:
+- $(MAKE) embedded TARGET=bcm947x-bf SDK=$(SDK_BACKFIRE)/toolchain-mipsel_gcc-3.4.6-bcm947xx/mipsel-openwrt-linux/bin UTILS=$(SDK_BACKFIRE)/toolchain-mipsel_gcc-3.4.6-bcm947xx/libexec/gcc/mipsel-openwrt-linux-uclibc/3.4.6 STAGING_DIR=$(SDK_BACKFIRE)
+-
+-ar71xx_backfire:
+- $(MAKE) embedded TARGET=ar71xx-bf SDK=$(SDK_BACKFIRE)/toolchain-mips_r2_gcc-4.3.3+cs-ar71xx/mips-openwrt-linux/bin UTILS=$(SDK_BACKFIRE)/toolchain-mips_r2_gcc-4.3.3+cs-ar71xx/libexec/gcc/mips-openwrt-linux-uclibc/4.3.3 STAGING_DIR=$(SDK_BACKFIRE)
+-
+-ar231x_backfire:
+- $(MAKE) embedded TARGET=ar231x-bf SDK=$(SDK_BACKFIRE)/toolchain-mips_gcc-4.3.3+cs-ar231x/mips-openwrt-linux/bin UTILS=$(SDK_BACKFIRE)/toolchain-mips_gcc-4.3.3+cs-ar231x/libexec/gcc/mips-openwrt-linux-uclibc/4.3.3 STAGING_DIR=$(SDK_BACKFIRE)
+-
+-
+-# OpenWrt Barrier Breaker
++bcm947xx:
++ $(MAKE) embedded TARGET=bcm947xx SDK=$(STAGING_DIR)/toolchain-mipsel_gcc-3.4.6-bcm947xx/mipsel-openwrt-linux/bin PATH=$(PATH):$(STAGING_DIR)/toolchain-mipsel_gcc-3.4.6-bcm947xx/libexec/gcc/mipsel-openwrt-linux-uclibc/3.4.6 STAGING_DIR=$(STAGING_DIR)
+
+-# Broadcom BCM2708/BCM2835
+-bcm2708:
+- $(MAKE) embedded TARGET=bcm2708 SDK=$(SDK_BBREAKER)/toolchain-arm_arm1176jzf-s+vfp_gcc-4.8-linaro-bcm2708/arm-openwrt-linux/bin UTILS=$(SDK_BBREAKER)/toolchain-arm_arm1176jzf-s+vfp_gcc-4.8-linaro-bcm2708/libexec/gcc/arm-openwrt-linux-uclibcgnueabi/4.8.3 STAGING_DIR=$(SDK_BBREAKER)
++ar71xx:
++ $(MAKE) embedded TARGET=ar71xx SDK=$(STAGING_DIR)/toolchain-mips_r2_gcc-4.3.3+cs-ar71xx/mips-openwrt-linux/bin PATH=$(PATH):$(STAGING_DIR)/toolchain-mips_r2_gcc-4.3.3+cs-ar71xx/libexec/gcc/mips-openwrt-linux-uclibc/4.3.3 STAGING_DIR=$(STAGING_DIR)
+
+-# Broadcom BCM47xx/BCM53xx (MIPS)
+-bcm47xx:
+- $(MAKE) embedded TARGET=bcm47xx SDK=$(SDK_BBREAKER)/toolchain-mipsel_mips32_gcc-4.8-linaro-bcm47xx/mipsel-openwrt-linux/bin UTILS=$(SDK_BBREAKER)/toolchain-mipsel_mips32_gcc-4.8-linaro-bcm47xx/libexec/gcc/mipsel-openwrt-linux-uclibc/4.8.3 STAGING_DIR=$(SDK_BBREAKER)
+-
+-# Broadcom BCM63xx
+-bcm63xx:
+- $(MAKE) embedded TARGET=bcm63xx SDK=$(SDK_BBREAKER)/toolchain-mips_mips32_gcc-4.8-linaro-bcm63xx/mips-openwrt-linux/bin UTILS=$(SDK_BBREAKER)/toolchain-mips_mips32_gcc-4.8-linaro-bcm63xx/libexec/gcc/mips-openwrt-linux-uclibc/4.8.3 STAGING_DIR=$(SDK_BBREAKER)
+-
+-# Atheros AR231x/AR5312
+ ar231x:
+- $(MAKE) embedded TARGET=ar231x SDK=$(SDK_BBREAKER)/toolchain-mips_mips32_gcc-4.8-linaro-ar231x/mips-openwrt-linux/bin UTILS=$(SDK_BBREAKER)/toolchain-mips_mips32_gcc-4.8-linaro-ar231x/libexec/gcc/mips-openwrt-linux-uclibc/4.8.3 STAGING_DIR=$(SDK_BBREAKER)
+-
+-# Atheros AR7xxx/AR9xxx
+-ar7xxx:
+- $(MAKE) embedded TARGET=ar7xxx SDK=$(SDK_BBREAKER)/toolchain-mips_34kc_gcc-4.8-linaro-ar7xxx/mips-openwrt-linux/bin UTILS=$(SDK_BBREAKER)/toolchain-mips_34kc_gcc-4.8-linaro-ar7xxx/libexec/gcc/mips-openwrt-linux-uclibc/4.8.3 STAGING_DIR=$(SDK_BBREAKER)
+-
++ $(MAKE) embedded TARGET=ar231x SDK=$(STAGING_DIR)/toolchain-mips_gcc-4.3.3+cs-ar231x/mips-openwrt-linux/bin PATH=$(PATH):$(STAGING_DIR)/toolchain-mips_gcc-4.3.3+cs-ar231x/libexec/gcc/mips-openwrt-linux-uclibc/4.3.3 STAGING_DIR=$(STAGING_DIR)
+
+ # Other
+ samsung_d:
+@@ -85,10 +58,11 @@
+
+
+ embedded:
+- PATH=$(PATH):$(UTILS) $(MAKE) -C $(LUA) CC=$(SDK)/$(CC) a MYCFLAGS='$(LUAMYCFLAGS)'
+- $(SDK)/$(CC) -O2 -c -B$(UTILS) -o md5.o md5c.c
+- $(SDK)/$(CC) $(CFLAGS) -B$(UTILS) -DWITH_URANDOM -o xupnpd-$(TARGET) $(SRC) md5.o -llua -lm -ldl
+- $(SDK)/strip xupnpd-$(TARGET)
++ export PATH
++ export STAGING_DIR
++ $(CC) -O2 -c -o md5.o md5c.c
++ ${CC} ${CFLAGS} ${LUAFLAGS} -DWITH_URANDOM -o xupnpd $(SRC) md5.o -llua -lm -ldl -rdynamic
++ ${STRIP} xupnpd
+
+ clean:
+ $(MAKE) -C $(LUA) clean
--- /dev/null
+From: [CST] Focus <focus.cst@gmail.com>
+Date: Thu, 24 Aug 2013 10:03:45 +0400
+Subject: [PATCH] xupnpd: don't bind daemon to specific ip address
+
+---
+--- src/luaxcore.cpp.org 2013-08-22 20:53:31 +0400
++++ src/luaxcore.cpp 2013-08-22 09:44:37 +0400
+@@ -113,8 +113,10 @@
+ sin.sin_addr.s_addr=INADDR_ANY;
+ sin.sin_port=htons(port);
+
++#if 0
+ if(strcmp(host,"*") && strcmp(host,"any"))
+ sin.sin_addr.s_addr=inet_addr(host);
++#endif
+
+ int fd=socket(sin.sin_family,SOCK_STREAM,0);
+ if(fd==-1)
--- /dev/null
+From b561abf5bd2555088eb408b783b81a95ea77aceb Mon Sep 17 00:00:00 2001
+From: "J. Krieg" <bellum07@googlemail.com>
+Date: Tue, 15 Jul 2014 12:00:52 +0200
+Subject: [PATCH] xupnpd: fix memleak on coolstream boxes
+
+* add additional collectgarbage() call when playlists reload
+* thanks ng777 and the ng-return team!
+---
+ src/xupnpd_m3u.lua | 1 +
+ src/xupnpd_main.lua | 3 +++
+ 2 files changed, 4 insertions(+)
+
+diff --git a/xupnpd_m3u.lua b/xupnpd_m3u.lua
+index a68c400..52a35b6 100644
+--- a/xupnpd_m3u.lua
++++ b/xupnpd_m3u.lua
+@@ -79,6 +79,7 @@ end
+
+ function reload_playlists()
+ playlist_data={}
++ collectgarbage() -- free unused memory immediately
+ playlist_data.name='root'
+ playlist_data.objid='0'
+ playlist_data.size=0
+diff --git a/xupnpd_main.lua b/xupnpd_main.lua
+index 94f72c2..1fd51f9 100644
+--- a/xupnpd_main.lua
++++ b/xupnpd_main.lua
+@@ -2,6 +2,9 @@
+ -- clark15b@gmail.com
+ -- https://tsdemuxer.googlecode.com/svn/trunk/xupnpd
+
++-- fix memleak on coolstream boxes by changing collectgarbage() interval from 200 (default) to 50
++collectgarbage('setpause', 50)
++
+ http.sendurl_buffer_size(32768,1);
+
+ if cfg.daemon==true then core.detach() end
+--
+1.7.10.4
+
--- /dev/null
+--- a/xupnpd.lua 2014-05-01 16:44:16.000000000 +0200
++++ b/xupnpd.lua 2014-05-01 16:51:30.424628163 +0200
+@@ -1,13 +1,13 @@
+ cfg={}
+
+ -- multicast interface for SSDP exchange, 'eth0', 'br0', 'br-lan' for example
+-cfg.ssdp_interface='lo'
++cfg.ssdp_interface='any'
+
+ -- 'cfg.ssdp_loop' enables multicast loop (if player and server in one host)
+ cfg.ssdp_loop=1
+
+ -- SSDP announcement interval
+-cfg.ssdp_notify_interval=15
++cfg.ssdp_notify_interval=5
+
+ -- SSDP announcement age
+ cfg.ssdp_max_age=1800
+@@ -19,10 +19,10 @@
+ cfg.log_facility='local0'
+
+ -- 'cfg.daemon' detach server from terminal
+-cfg.daemon=false
++cfg.daemon=true
+
+ -- silent mode - no logs, no pid file
+-cfg.embedded=false
++cfg.embedded=true
+
+ -- 'cfg.debug' enables SSDP debug output to stdout (if cfg.daemon=false)
+ -- 0-off, 1-basic, 2-messages
+@@ -32,7 +32,7 @@
+ --cfg.udpxy_url='http://192.168.1.1:4022'
+
+ -- downstream interface for builtin multicast proxy (comment 'cfg.udpxy_url' for processing 'udp://@...' playlists)
+-cfg.mcast_interface='eth1'
++cfg.mcast_interface='eth0'
+
+ -- 'cfg.proxy' enables proxy for injection DLNA headers to stream
+ -- 0-off, 1-radio, 2-radio/TV
+@@ -51,16 +51,17 @@
+ cfg.dlna_subscribe_ttl=1800
+
+ -- group by 'group-title'
+-cfg.group=true
++cfg.group=false
+
+ -- sort files
+ cfg.sort_files=false
+
+ -- Device name
+-cfg.name='UPnP-IPTV'
++--cfg.name='UPnP-IPTV'
++cfg.name=io.popen("uname -n"):read("*l")..'-xupnpd'
+
+ -- static device UUID, '60bd2fb3-dabe-cb14-c766-0e319b54c29a' for example or nil
+-cfg.uuid='60bd2fb3-dabe-cb14-c766-0e319b54c29a'
++cfg.uuid=''
+
+ -- max url cache size
+ cfg.cache_size=8
+@@ -72,12 +73,14 @@
+ cfg.default_mime_type='mpeg'
+
+ -- feeds update interval (seconds, 0 - disabled)
+-cfg.feeds_update_interval=0
++cfg.feeds_update_interval=3600
+ cfg.playlists_update_interval=0
+
+ -- playlist (m3u file path or path with alias
+ playlist=
+ {
++ { '/media/sda1/movies', 'Local Record Files' },
++ { '/media/sda1/pic', 'Local Picture Files' },
+ -- { './playlists/mozhay.m3u', 'Mozhay.tv' },
+ -- { './localmedia', 'Local Media Files' }
+ -- { './private', 'Private Media Files', '127.0.0.1;192.168.1.1' } -- only for 127.0.0.1 and 192.168.1.1
+@@ -86,10 +89,10 @@
+ -- feeds list (plugin, feed name, feed type)
+ feeds=
+ {
+- { 'vimeo', 'channel/hd', 'Vimeo HD Channel' },
+- { 'vimeo', 'channel/hdxs', 'Vimeo Xtreme sports' },
+- { 'vimeo', 'channel/mtb', 'Vimeo MTB Channel' },
+- { 'youtube', 'channel/top_rated', 'YouTube Top Rated' },
++-- { 'vimeo', 'channel/hd', 'Vimeo HD Channel' },
++-- { 'vimeo', 'channel/hdxs', 'Vimeo Xtreme sports' },
++-- { 'vimeo', 'channel/mtb', 'Vimeo MTB Channel' },
++-- { 'youtube', 'channel/top_rated', 'YouTube Top Rated' },
+ -- { 'youtube', 'Drift0r', 'Drift0r' },
+ -- { 'youtube', 'XboxAhoy', 'XboxAhoy' },
+ -- { 'ag', 'videos', 'AG - New' },
+@@ -97,6 +100,8 @@
+ -- { 'gametrailers', 'ps3', 'GT - PS3' },
+ -- { 'giantbomb', 'all', 'GiantBomb - All' },
+ -- { 'dreambox', 'http://192.168.0.1:8001/','Dreambox1' },
++ { 'coolstream', 'localhost', 'CST' },
++-- { 'coolstream', '172.16.1.10', 'CST-Remote' },
+ }
+
+ -- log ident, pid file end www root
+@@ -107,8 +112,8 @@
+ cfg.tmp_path='/tmp/'
+ cfg.plugin_path='./plugins/'
+ cfg.config_path='./config/'
+-cfg.playlists_path='./playlists/'
+---cfg.feeds_path='/tmp/xupnpd-feeds/'
++cfg.playlists_path='./playlists/'
++cfg.feeds_path='/tmp/xupnpd-feeds/'
+ cfg.ui_path='./ui/'
+ cfg.drive='' -- reload playlists only if drive state=active/idle, example: cfg.drive='/dev/sda'
+ cfg.profiles='./profiles/' -- device profiles feature
$(REMOVE)/libupnp-$(LIBUPNP_VER)
touch $@
-XUPNP_DEFREF = r404
-XUPNP_DL_PATH = http://tsdemuxer.googlecode.com/svn/trunk/xupnpd
-
-#$(BUILD_TMP)/xupnpd/src/Makefile:
-$(D)/xupnpd_$(XUPNP_DEFREF):
- if [ -e $(BUILD_TMP)/xupnpd ]; then \
- rm -fr $(BUILD_TMP)/xupnpd; \
- fi; \
- mkdir -p $(BUILD_TMP)/xupnpd;
- cd $(BUILD_TMP)/xupnpd; \
- git svn init $(XUPNP_DL_PATH) --ignore-paths="^src/lua-5" ; \
- git svn fetch --revision=360:HEAD; \
- git svn rebase; \
- ID=$$(git svn find-rev $(XUPNP_DEFREF)); \
- git checkout $$ID; \
- git checkout -b work; \
- git am $(PATCHES)/xupnpd/svn$(XUPNP_DEFREF)/*.patch; \
- git rebase master; \
- touch $@
-
-xupnpd-update: $(BUILD_TMP)/xupnpd/src/Makefile | $(TARGETPREFIX)
- cd $(BUILD_TMP)/xupnpd; \
- REV1=$$(git svn find-rev master --before HEAD); \
- git checkout master; \
- git svn fetch; \
- git svn rebase; \
- git checkout work; \
- REV2=$$(git svn find-rev master --before HEAD); \
- if [ ! "$$REV1" = "$$REV2" ]; then \
- echo "before: r$$REV1, after: r$$REV2"; \
- echo "git rebase master"; \
- git rebase master; \
- else \
- echo "before: r$$REV1, after: r$$REV2"; \
- echo "No changes..."; \
- fi
-
-$(D)/xupnpd: $(D)/udpxy $(D)/lua $(D)/xupnpd_$(XUPNP_DEFREF) | $(TARGETPREFIX)
- set -e; cd $(BUILD_TMP)/xupnpd; \
- git checkout work; \
- cd src; \
- make clean; \
+$(D)/xupnpd: $(ARCHIVE)/xupnpd-git-$(XUPNPD_GIT).tar.gz $(D)/udpxy $(D)/lua | $(TARGETPREFIX)
+ $(UNTAR)/xupnpd-git-$(XUPNPD_GIT).tar.gz
+ pushd $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src; \
+ $(PATCH)/xupnpd/xupnpd-crossbuild.diff; \
+ $(PATCH)/xupnpd/xupnpd_cst.diff; \
+ $(PATCH)/xupnpd/xupnpd-fix-memleak-on-coolstream-boxes.patch; \
+ $(PATCH)/xupnpd/xupnpd-dont-bind-daemon-to-specific-ip-address.patch; \
make embedded \
CC=$(TARGET)-gcc \
STRIP=$(TARGET)-strip \
LUAFLAGS="-I$(TARGETPREFIX)/include -L$(TARGETPREFIX)/lib -L$(TARGETPREFIX_BASE)/lib";
- cp -f $(BUILD_TMP)/xupnpd/src/xupnpd $(TARGETPREFIX)/bin/
+ cp -f $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/xupnpd $(TARGETPREFIX)/bin/
mkdir -p $(TARGETPREFIX)/share/xupnpd/
- cp -rf $(SOURCE_DIR)/git/PLUGINS/scripts-lua/xupnpd/xupnpd_18*.lua $(BUILD_TMP)/xupnpd/src/plugins/staff
- cp -rf $(SOURCE_DIR)/git/PLUGINS/scripts-lua/xupnpd/xupnpd_cc*.lua $(BUILD_TMP)/xupnpd/src/plugins/staff
- cp -rf $(SOURCE_DIR)/git/PLUGINS/scripts-lua/xupnpd/xupnpd_co*.lua $(BUILD_TMP)/xupnpd/src/plugins
- cp -rf $(SOURCE_DIR)/git/PLUGINS/scripts-lua/xupnpd/xupnpd_yo*.lua $(BUILD_TMP)/xupnpd/src/plugins
- cp -rf $(BUILD_TMP)/xupnpd/src/playlists $(TARGETPREFIX)/share/xupnpd/
- cp -rf $(BUILD_TMP)/xupnpd/src/plugins $(TARGETPREFIX)/share/xupnpd/
- cp -rf $(BUILD_TMP)/xupnpd/src/profiles $(TARGETPREFIX)/share/xupnpd/
- cp -rf $(BUILD_TMP)/xupnpd/src/www $(TARGETPREFIX)/share/xupnpd/
- cp -rf $(BUILD_TMP)/xupnpd/src/ui $(TARGETPREFIX)/share/xupnpd/
- cp -f $(BUILD_TMP)/xupnpd/src/*.lua $(TARGETPREFIX)/share/xupnpd/
+ cp -rf $(SOURCE_DIR)/git/PLUGINS/scripts-lua/xupnpd/xupnpd_18*.lua $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/plugins/staff
+ cp -rf $(SOURCE_DIR)/git/PLUGINS/scripts-lua/xupnpd/xupnpd_cc*.lua $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/plugins/staff
+ cp -rf $(SOURCE_DIR)/git/PLUGINS/scripts-lua/xupnpd/xupnpd_co*.lua $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/plugins
+ cp -rf $(SOURCE_DIR)/git/PLUGINS/scripts-lua/xupnpd/xupnpd_yo*.lua $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/plugins
+ cp -rf $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/playlists $(TARGETPREFIX)/share/xupnpd/
+ cp -rf $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/plugins $(TARGETPREFIX)/share/xupnpd/
+ cp -rf $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/profiles $(TARGETPREFIX)/share/xupnpd/
+ cp -rf $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/www $(TARGETPREFIX)/share/xupnpd/
+ cp -rf $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/ui $(TARGETPREFIX)/share/xupnpd/
+ cp -f $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT)/src/*.lua $(TARGETPREFIX)/share/xupnpd/
$(REMOVE)/xupnpd
touch $@
tar cvpzf $@ cortex-strings-git-$(CRTXSTR_GIT)
$(REMOVE)/cortex-strings-git-$(CRTXSTR_GIT)
+$(ARCHIVE)/xupnpd-git-$(XUPNPD_GIT).tar.gz:
+ set -e; cd $(BUILD_TMP); \
+ rm -rf xupnpd-git-$(XUPNPD_GIT); \
+ git clone https://github.com/clark15b/xupnpd.git xupnpd-git-$(XUPNPD_GIT)
+ set -e; cd $(BUILD_TMP)/xupnpd-git-$(XUPNPD_GIT); \
+ git reset --hard $(XUPNPD_GIT)
+ set -e; cd $(BUILD_TMP); \
+ tar cvpzf $@ xupnpd-git-$(XUPNPD_GIT)
+ $(REMOVE)/xupnpd-git-$(XUPNP_GIT)
+
$(ARCHIVE)/samba-$(SAMBA2_VER).tar.gz:
$(WGET) http://samba.org/samba/ftp/old-versions/samba-$(SAMBA2_VER).tar.gz
# Very secure ftp-Server
VSFTPD_VER = 3.0.3
+# eXtensible UPnP agent (official)
+XUPNPD_GIT=fdeeb91
+
# zlib; compression an decompressin library
ZLIB_VER=1.2.8