diff -uNr ushare-1.1a/configure ushare-1.1b/configure --- ushare-1.1a/configure 2007-12-09 08:03:36.000000000 -0500 +++ ushare-1.1b/configure 2012-03-25 17:35:07.000000000 -0400 @@ -42,6 +42,9 @@ echo " --with-libdlna-dir=DIR check for libdlna installed in DIR" echo "" echo "Advanced options (experts only):" + echo " --disable-sysconf disable installation of init files" + echo " --enable-developer enable developer options" + echo " --disable-developer disable developer options" echo " --enable-debug enable debugging symbols" echo " --disable-debug disable debugging symbols" echo " --disable-strip disable stripping of executables at installation" @@ -164,6 +167,11 @@ echo "#define $1 \"$2\"" >> $CONFIG_H } +check_cmd_exists(){ + log check_cmd_exists "$@" + which "$@" >>$logfile 2>&1 +} + check_cmd(){ log "$@" "$@" >>$logfile 2>&1 @@ -300,13 +308,15 @@ strip="strip" cpu=`uname -m` optimize="yes" +sysconf="yes" +developer="no" debug="no" dostrip="yes" extralibs="" installstrip="-s" cross_compile="no" INSTALL="/usr/bin/install -c" -VERSION="1.1a" +VERSION="1.2.0" system_name=`uname -s 2>&1` ################################################# @@ -420,6 +430,12 @@ ;; --disable-dlna) dlna="no" ;; + --disable-sysconf) sysconf="no" + ;; + --enable-developer) developer="yes" + ;; + --disable-developer) developer="no" + ;; --enable-debug) debug="yes" ;; --disable-debug) debug="no" @@ -584,6 +600,25 @@ linux && add_cflags -D_GNU_SOURCE ################################################# +# check for developer options +################################################# +if enabled developer; then + add_cflags -Werror + add_cflags -DHAVE_DEVELOPER + + have_ctags='no' + if check_cmd_exists 'ctags'; then + have_ctags='yes' + fi + + have_etags='no' + if check_cmd_exists 'etags'; then + have_etags='yes' + fi + +fi + +################################################# # check for debug symbols ################################################# if enabled debug; then @@ -684,6 +719,8 @@ echolog " STRIP $strip" echolog " make $make" echolog " CPU $cpu ($tune)" +echolog " install sysconf $sysconf" +echolog " developer options $developer" echolog " debug symbols $debug" echolog " strip symbols $dostrip" echolog " optimize $optimize" @@ -724,6 +761,10 @@ append_config "LDFLAGS=$LDFLAGS" append_config "INSTALL=$INSTALL" +append_config "INSTALL_SYSCONF=$sysconf" +append_config "DEVELOPER=$developer" +append_config "HAVE_CTAGS=$have_ctags" +append_config "HAVE_ETAGS=$have_etags" append_config "DEBUG=$debug" diff -uNr ushare-1.1a/scripts/Makefile ushare-1.1b/scripts/Makefile --- ushare-1.1a/scripts/Makefile 2007-12-09 08:03:36.000000000 -0500 +++ ushare-1.1b/scripts/Makefile 2012-03-25 17:35:07.000000000 -0400 @@ -3,6 +3,11 @@ endif include ../config.mak +INSTALL_RULES = +ifeq ($(INSTALL_SYSCONF),yes) + INSTALL_RULES += install-sysconf +endif + CONF_FILE = "ushare.conf" INITD_FILE = "ushare" @@ -14,7 +19,9 @@ distclean: -install: +install: $(INSTALL_RULES) + +install-sysconf: $(INSTALL) -d $(sysconfdir) $(INSTALL) -m 644 $(CONF_FILE) $(sysconfdir) $(INSTALL) -d $(sysconfdir)/init.d diff -uNr ushare-1.1a/src/Makefile ushare-1.1b/src/Makefile --- ushare-1.1a/src/Makefile 2007-12-09 08:03:36.000000000 -0500 +++ ushare-1.1b/src/Makefile 2012-03-25 17:35:07.000000000 -0400 @@ -3,6 +3,15 @@ endif include ../config.mak +ifeq ($(DEVELOPER),yes) + ifeq ($(HAVE_ETAGS),yes) + BUILD_RULES += TAGS + endif + ifeq ($(HAVE_CTAGS),yes) + BUILD_RULES += tags + endif +endif + PROG = ushare EXTRADIST = ushare.1 \ @@ -50,7 +59,7 @@ .SUFFIXES: .c .o -all: depend $(PROG) +all: depend $(BUILD_RULES) $(PROG) .c.o: $(CC) -c $(CFLAGS) $(OPTFLAGS) -o $@ $< @@ -58,6 +67,14 @@ $(PROG): $(OBJS) $(CC) $(OBJS) $(LDFLAGS) $(EXTRALIBS) -o $@ +TAGS: + @rm -f $@; \ + ( find -name '*.[chS]' -print ) | xargs etags -a + +tags: + @rm -f $@; \ + ( find -name '*.[chS]' -print ) | xargs ctags -a; + clean: -$(RM) -f *.o $(PROG) -$(RM) -f .depend diff --git a/src/ctrl_telnet.c b/src/ctrl_telnet.c index 0849d80..b3e9e8d 100644 --- a/src/ctrl_telnet.c +++ b/src/ctrl_telnet.c @@ -202,6 +202,7 @@ ctrl_telnet_start (int port) void ctrl_telnet_stop (void) { + ssize_t tmp; pthread_mutex_lock (&startstop_lock); if (!started) @@ -211,7 +212,7 @@ ctrl_telnet_stop (void) } /* yes is int, which is bigger then char, so this should be safe */ - write (ttd.killer[1], &yes, sizeof (char)); + tmp = write (ttd.killer[1], &yes, sizeof (char)); pthread_mutex_unlock (&startstop_lock); pthread_join (ttd.thread, NULL); diff --git a/src/mime.c b/src/mime.c index 66c48ab..bf0121b 100644 --- a/src/mime.c +++ b/src/mime.c @@ -144,7 +144,8 @@ char *mime_get_protocol (struct mime_type_t *mime) if (!mime) return NULL; - sprintf (protocol, mime->mime_protocol); + //sprintf (protocol, mime->mime_protocol); + strcpy (protocol, mime->mime_protocol); strcat (protocol, "*"); return strdup (protocol); } diff --git a/src/mime.c b/src/mime.c index bf0121b..f38deca 100644 --- a/src/mime.c +++ b/src/mime.c @@ -53,6 +53,7 @@ const struct mime_type_t MIME_Type_List[] = { { "mpeg2", UPNP_VIDEO, "http-get:*:video/mpeg2:"}, { "m4v", UPNP_VIDEO, "http-get:*:video/mp4:"}, { "m4p", UPNP_VIDEO, "http-get:*:video/mp4:"}, + { "mp4", UPNP_VIDEO, "http-get:*:video/mp4:"}, { "mp4ps", UPNP_VIDEO, "http-get:*:video/x-nerodigital-ps:"}, { "ts", UPNP_VIDEO, "http-get:*:video/mpeg2:"}, { "ogm", UPNP_VIDEO, "http-get:*:video/mpeg:"}, @@ -79,7 +80,6 @@ const struct mime_type_t MIME_Type_List[] = { { "mp1", UPNP_AUDIO, "http-get:*:audio/mp1:"}, { "mp2", UPNP_AUDIO, "http-get:*:audio/mp2:"}, { "mp3", UPNP_AUDIO, "http-get:*:audio/mpeg:"}, - { "mp4", UPNP_AUDIO, "http-get:*:audio/mp4:"}, { "m4a", UPNP_AUDIO, "http-get:*:audio/mp4:"}, { "ogg", UPNP_AUDIO, "http-get:*:audio/x-ogg:"}, { "wav", UPNP_AUDIO, "http-get:*:audio/wav:"}, diff -wbBur ushare-1.1a/src/http.c ushare-1.1a.my/src/http.c --- ushare-1.1a/src/http.c 2007-12-09 13:03:36.000000000 +0000 +++ ushare-1.1a.my/src/http.c 2010-10-29 11:13:07.000000000 +0000 @@ -77,8 +77,7 @@ info->content_type = ixmlCloneDOMString (content_type); } -static int -http_get_info (const char *filename, struct File_Info *info) +int http_get_info (const char *filename, struct File_Info *info) { extern struct ushare_t *ut; struct upnp_entry_t *entry = NULL; @@ -197,8 +196,7 @@ return ((UpnpWebFileHandle) file); } -static UpnpWebFileHandle -http_open (const char *filename, enum UpnpOpenFileMode mode) +UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode) { extern struct ushare_t *ut; struct upnp_entry_t *entry = NULL; @@ -251,8 +249,7 @@ return ((UpnpWebFileHandle) file); } -static int -http_read (UpnpWebFileHandle fh, char *buf, size_t buflen) +int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen) { struct web_file_t *file = (struct web_file_t *) fh; ssize_t len = -1; @@ -286,8 +283,7 @@ return len; } -static int -http_write (UpnpWebFileHandle fh __attribute__((unused)), +int http_write (UpnpWebFileHandle fh __attribute__((unused)), char *buf __attribute__((unused)), size_t buflen __attribute__((unused))) { @@ -296,8 +292,7 @@ return 0; } -static int -http_seek (UpnpWebFileHandle fh, off_t offset, int origin) +int http_seek (UpnpWebFileHandle fh, off_t offset, int origin) { struct web_file_t *file = (struct web_file_t *) fh; off_t newpos = -1; @@ -371,8 +366,7 @@ return 0; } -static int -http_close (UpnpWebFileHandle fh) +int http_close (UpnpWebFileHandle fh) { struct web_file_t *file = (struct web_file_t *) fh; @@ -402,13 +396,3 @@ return 0; } - -struct UpnpVirtualDirCallbacks virtual_dir_callbacks = - { - http_get_info, - http_open, - http_read, - http_write, - http_seek, - http_close - }; diff -wbBur ushare-1.1a/src/http.h ushare-1.1a.my/src/http.h --- ushare-1.1a/src/http.h 2007-12-09 13:03:36.000000000 +0000 +++ ushare-1.1a.my/src/http.h 2010-10-29 11:13:11.000000000 +0000 @@ -25,6 +25,13 @@ #include #include -struct UpnpVirtualDirCallbacks virtual_dir_callbacks; +int http_close (UpnpWebFileHandle fh); +int http_write (UpnpWebFileHandle fh __attribute__((unused)), + char *buf __attribute__((unused)), + size_t buflen __attribute__((unused))); +int http_seek (UpnpWebFileHandle fh, off_t offset, int origin); +UpnpWebFileHandle http_open (const char *filename, enum UpnpOpenFileMode mode); +int http_read (UpnpWebFileHandle fh, char *buf, size_t buflen); +int http_get_info (const char *filename, struct File_Info *info); #endif /* _HTTP_H_ */ diff -wbBur ushare-1.1a/src/ushare.c ushare-1.1a.my/src/ushare.c --- ushare-1.1a/src/ushare.c 2007-12-09 13:03:36.000000000 +0000 +++ ushare-1.1a.my/src/ushare.c 2010-10-29 11:17:45.000000000 +0000 @@ -188,7 +188,7 @@ if (strcmp (request->DevUDN + 5, ut->udn)) return; - ip = request->CtrlPtIPAddr.s_addr; + ip = (*(struct sockaddr_in*)&request->CtrlPtIPAddr).sin_addr.s_addr; ip = ntohl (ip); sprintf (val, "%d.%d.%d.%d", (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF); @@ -348,7 +348,47 @@ UpnpEnableWebserver (TRUE); - res = UpnpSetVirtualDirCallbacks (&virtual_dir_callbacks); + res = UpnpVirtualDir_set_WriteCallback(http_write); + if (res != UPNP_E_SUCCESS) + { + log_error (_("Cannot set virtual directory callbacks\n")); + free (description); + return -1; + } + + res = UpnpVirtualDir_set_GetInfoCallback(http_get_info); + if (res != UPNP_E_SUCCESS) + { + log_error (_("Cannot set virtual directory callbacks\n")); + free (description); + return -1; + } + + res = UpnpVirtualDir_set_ReadCallback(http_read); + if (res != UPNP_E_SUCCESS) + { + log_error (_("Cannot set virtual directory callbacks\n")); + free (description); + return -1; + } + + res = UpnpVirtualDir_set_OpenCallback(http_open); + if (res != UPNP_E_SUCCESS) + { + log_error (_("Cannot set virtual directory callbacks\n")); + free (description); + return -1; + } + + res = UpnpVirtualDir_set_SeekCallback(http_seek); + if (res != UPNP_E_SUCCESS) + { + log_error (_("Cannot set virtual directory callbacks\n")); + free (description); + return -1; + } + + res = UpnpVirtualDir_set_CloseCallback(http_close); if (res != UPNP_E_SUCCESS) { log_error (_("Cannot set virtual directory callbacks\n")); diff -uNr ushare-1.1a.a/src/cds.c ushare-1.1a.b/src/cds.c --- ushare-1.1a.a/src/cds.c 2007-12-09 08:03:36.000000000 -0500 +++ ushare-1.1a.b/src/cds.c 2012-05-27 11:28:42.000000000 -0400 @@ -19,7 +19,9 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include #include +#include #include #include diff -uNr ushare-1.1a.a/src/cms.c ushare-1.1a.b/src/cms.c --- ushare-1.1a.a/src/cms.c 2007-12-09 08:03:36.000000000 -0500 +++ ushare-1.1a.b/src/cms.c 2012-05-27 11:25:03.000000000 -0400 @@ -20,6 +20,7 @@ */ #include +#include #include #include diff -uNr ushare-1.1a.a/src/http.c ushare-1.1a.b/src/http.c --- ushare-1.1a.a/src/http.c 2012-05-27 11:23:32.000000000 -0400 +++ ushare-1.1a.b/src/http.c 2012-05-27 11:25:13.000000000 -0400 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include diff -uNr ushare-1.1a.a/src/presentation.c ushare-1.1a.b/src/presentation.c --- ushare-1.1a.a/src/presentation.c 2007-12-09 08:03:36.000000000 -0500 +++ ushare-1.1a.b/src/presentation.c 2012-05-27 11:30:08.000000000 -0400 @@ -18,7 +18,9 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include #include +#include #if HAVE_LANGINFO_CODESET # include diff -uNr ushare-1.1a.a/src/services.c ushare-1.1a.b/src/services.c --- ushare-1.1a.a/src/services.c 2007-12-09 08:03:36.000000000 -0500 +++ ushare-1.1a.b/src/services.c 2012-05-27 11:25:26.000000000 -0400 @@ -20,6 +20,7 @@ */ #include +#include #include #include diff -Naur ushare-1.1a/scripts/ushare.conf ushare-1.1a_/scripts/ushare.conf --- ushare-1.1a/scripts/ushare.conf 2007-12-09 14:03:36.000000000 +0100 +++ ushare-1.1a_/scripts/ushare.conf 2012-07-05 09:35:00.000000000 +0200 @@ -2,11 +2,11 @@ # Configuration file for uShare # uShare UPnP Friendly Name (default is 'uShare'). -USHARE_NAME= +USHARE_NAME=coolstream # Interface to listen to (default is eth0). # Ex : USHARE_IFACE=eth1 -USHARE_IFACE= +USHARE_IFACE=eth0 # Port to listen to (default is random from IANA Dynamic Ports range) # Ex : USHARE_PORT=49200 @@ -18,7 +18,7 @@ # Directories to be shared (space or CSV list). # Ex: USHARE_DIR=/dir1,/dir2 -USHARE_DIR= +USHARE_DIR=/media/sda1,media/sdb1 # Use to override what happens when iconv fails to parse a file name. # The default uShare behaviour is to not add the entry in the media list @@ -28,7 +28,7 @@ # as is. (Umlauts for all!) # # Options are TRUE/YES/1 for override and anything else for default behaviour -USHARE_OVERRIDE_ICONV_ERR= +USHARE_OVERRIDE_ICONV_ERR=yes # Enable Web interface (yes/no) ENABLE_WEB=