CHANGELOG - GNUMP3d 1.0 [ ] - MISC: Keep track of the currently streaming songs. - MISC: Optimize CUtility::uc and CUtility::lc - MISC: Optimize CUtility::replaceStrInStr - MISC: Use CUtility::int2str function, which is new, throughout. - MISC: Fixed memory leaks in ID3 tag handling. - MISC: Cleaned up the configuration file. - MISC: Several minor optimizations and cleanups. - MISC: Be more forgiving of user agent identification. - MISC: Use a large buffer when reading stats output. - PLUGINS: Added custom playlist generated plugin. - PLUGINS: Added currently playing plugin. - PLUGINS: Attempt to allow them to build under Cygwin better. - PLUGINS: Allow arbitary plugins to be selectively disabled. - PLUGINS: Search plugin will allow multiple terms. - PLUGINS: Search plugin will highlight matches on the output page. - PLUGINS: Ignore non-readable shared libraries and directories when searching for plugins to load. - CLEANUP: CDirectory::ReadDirectoryRecursively stores directory names. - CLEANUP: Remove .deps and .libs prior to building a distribution. - CLEANUP: Logfiles now record the actual data size served to clients. As well as the HTTP header code served. - CLEANUP: Minor autoconf changes. - CLEANUP: Report errors in the main GUI if files can't be read. - CLENAUP: Limit $FILENAME to the filename minus suffix, and directory name. - BUGFIX: Updated default config file on gnump3d-top script. - BUGFIX: The stats script will report errors to the server via STDOUT now - so permission problems will be caught with ease. Hopefully. - BUGFIX: Fixed big per-connection memory leak. :( - BUGFIX: Playlists don't contain duplicate '//''s. - BUGFIX: Directory limiting for searching is restored. - BUGFIX: Send HTTP status code when serving search form. - BUGFIX: Escape directory names when sending banner. - BUGFIX: Exit cleanly if the socket cannot be bound for listening. - BUGFIX: Fixed crash on unreadable .OGG files. - BUGFIX: Make sure the song+directory names in the 'last' plugin are absolute. - PORTABILITY: Optionally use 'dlopen' interface for loading plugins. (Useful for Cygwin systems). - PORTABILITY: Detect when building under Cygwin. - Updated version number. - Allow the user to control the display order of files in the GUI, and in the playlists via new option 'sort_order'. - Allow the server admin to selectively disable individual plugins via the configuration file. - Changed all mutex protection. - Added hook for passing arguments to the stats program. - Attempt to display hostnames rather than IP addresses when possible. - Track numbers are recognised in OGG Vorbis files. - Serialize incoming requests if we're using paranoid threading. - Don't use any caching if we're paranoid about threading. - Added support for more media types. - Added new 'RedGrey' theme from Rodolphe Quiedeville - Added new 'LaFrere' theme from Rodolphe Quiedeville - Switched to using the GNU regex code. 1.0-pre1 [ August 19th 2002 ] - BUGFIX: Fixed bad HTML in the /versions/ plugin - BUGFIX: Applied patch from FreeBSD ports collection. - BUGFIX: Don't assume a plugin handled the path it said it would. - BUGFIX: Handle broken 'Host:' headers. - BUGFIX: Don't abort if the root directory contains '.'. (Only abort if it contains '..'). - BUGFIX: Strip trailing '/' from root directory if present. - BUGFIX: Updated the contributed RC files. - BUGFIX: Escape '+' characters in file and directory names. - BUGFIX: Make CUtility::splitStr deal with the last entry in the string correctly. - BUGFIX: Correctly close shared library handles if they don't implement our plugin API. - BUGFIX: Strip the '.so' from plugins when initializing them. - CLEANUP: gnump3d-top script decodes URL's prior to display. - CLEANUP: Removed some obsolete config options. - CLEANUP: Moved regular expression class into seperate source + header files. - CLEANUP: Log malformed requests in 'serveDirectory'. - CLEANUP: Improved Makefile.am's. - CLEANUP: Default template is now valid XHTML. - CLEANUP: The split theme is now valid XHTML. - CLEANUP: The simpled theme is now valid XHTML. - CLEANUP: The default HTML is now lowercased to be valid XHTML - MISC: Added dump of loaded plugins to /versions/ output. - MISC: Set the stream URL to something sensible for the WinAmp minibrowser. - MISC: Added optional command line argument '--pid fileName' - MISC: Reopen the logfile in response to SIGHUP. - MISC: Added function to mplib - mp_get_bitrate. - MISC: Record the build date of each file. - MISC: Allow the size of the servering buffer to be tweaked. - PORTABILITY: Reorded headers so that FreeBSD compile works. - PORTABILITY: Fixes for 64bit archs - PORTABILITY: Autoconf stuff may now build without GNU Make. - Updated the version number. - Added new playlist type 'random.m3u' this will behave as a randomized recursive playlist contributed by Mark Howson <aonq05@dsl.pipex.com> - Added new option 'recursive_randomize' which will force normal recursive playlists to be randomized also. - Updated the gnump3d-config script to use the correct config file. (Debian GNU/Linux specific fix). - Added support for downsampling IN PROGRESS.. - Expand $LENGTH In the templates -> length of the track in HH:MM:SS - User playlists are re-written appropriatly. - Added a bug reporting plugin to help people make good bug reports. - Link to the new online forums. 0.9.9.9.2 [Jul 14th 2002] - BUGFIX: Fixed potential bug with CUtility::replaceStrInStr(); - BUGFIX: Correctly terminate the shoutcast header. - BUGFIX: Don't trample on any existing gnump3d.conf file on install. - BUGFIX: Fully qualify the string namespace in CBase64. (GCC 3) - BUGFIX: Expand '$BPS' into the bitrate of the tracks. - BUGFIX: The track number of MP3's is now available. - CLEANUP: Change the parsing of URL parameter arguments. - CLEANUP: Removed several obsolete functions. - CLEANUP: We now use one centralized config file parser. - CLEANUP: Only show 'subdirectories' section if subdirs exist. - CLEANUP: Only show 'files' section if songs exist. - CLEANUP: Only show 'playlists' section if playlists are found. - CLEANUP: Only show 'play results' if songs were found in the search. - PORTABILITY: Included an Autoconf bootstrapping script. - PORTABILITY: Test for more header files and types in 'configure' - PORTABILITY: Integrated version of 'mplib' for reading ID3v[12] tags. - MISC : Added support for loadable modules with libtool + libltdl - MISC : Migrated lots of core functionality into external modules. - MISC : Added 'last 20 tracks' plugin. - MISC : Added 'theme browsing' plugin. - MISC : A new configuration option 'denied_clients'. - MISC : If a song has no artist + title information use the filename. - Added the ability to limit the starting path of searchs. - Cache the contents of template files. - Included several loop optimizations. - Included an updated Nausicaa theme from Lawrence Lin. - Process and display user generated playlists. - Updated the version number. 0.9.9.9.1 [Jun 24th 2002] - CLEANUP: Each theme shows itself as being selected. - CLEANUP: Use libvorbis if available to parse song tags. [This allows international characters to display] - CLEANUP: 'Play All' links aren't shown for empty directories. - CLEANUP: 'Play Recursively' links aren't shown unless there are subdirectories present. - CLEANUP: User may specify the text to show for the play all/ play recursively links. - CLEANUP: The banner shown above search pages is correct. - BUGFIX: Fixed default directory_format string. - BUGFIX: Made sure that theme_directory is specified in gnump3d.conf - BUGFIX: Improved URL encoding function to handle foreign characters. - BUGFIX: Don't send extra newline after the end of HTTP headers. - PORTABILITY: Install to /usr/local/{ bin man etc} by default. - PORTABILITY: Use autoconf + automake. : Test the libraries we need to use for socket functions. : Test for different versions of pthreads. : Insert the correct path to the Perl interpretter. - Other Changes: - Allow content to be served from the template directories, eg logos. - Updated error messages. - Added decent error reporting for missing _directories_. - The search results page show the directory which contains the given result. - Minor updates have been applied to the supplied themes. - All names of scripts directorys and programs have been changed: *mp3d* -> *gnump3d* This is a pain for users, but it's better to do it sooner than later - we were having collisions with the perl server 'mp3d' - Optional minimal support for syslog. - Optional support for libid3. - Updated version number. 0.9.9.9 [12-Jun-2002 04:33] - CLEANUP: The uninstall target is much more streamlined. - CLEANUP: Permissions are corrected on theme installation. - CLEANUP: Not a single malloc in the entire server! - CLEANUP: Protected all singleton objects with private copy constructors and assignment operators. - BUGFIX: Minor cleanup to allow streaming upon FreeBSD/OpenBSD. - BUGFIX: Only display audio files in the directory listings. - BUGFIX: mp3d-top uses the first 'log_file' value it finds. - PORTABILITY: Included patch found in the FreeBSD ports tree. - PORTABILITY: Added distinct NetBSD and OpenBSD Makefiles. - DOCUMENTATION: Moved README-C++ to src/ - DOCUMENTATION: Update man pages. - Other changes: - Updated version number. - Accept multiple values in 'allowed_clients'. - Added 'realm' password protection to the server. - Added base64.[ch] - (Implements realm decoding from BASE64). - Removed obsolete 'allow_save' config option. - Added Debian configuration script 'mp3d-config'. 0.9.9.8 [Wednesday, May 29th 2002 16:43 EDT] - CLEANUP: 'make install' will install all themes properly. - CLEANUP: Major updates made to the configuration file. - CLEANUP: Themes are tested for validity prior to usage. - BUGFIX: Search results display the correct files. - BUGFIX: Search results takes notice of 'always_stream'. - BUGFIX: Logfile works with '--background'. - BUGFIX: Genres are now supported in MP3's via $GENRE - PORTABILITY: User may specify the theme directory. - PORTABILITY: Minor fix for Mac OS X compatibility. - PORTABILITY: Updated the 'test-tag-parser' test program. - DOCUMENTATION: Removed duplication in source code documentation. - Other changes: - Updated version number. - New theme 'nausicaa' - A coloured version of the default. - New theme 'split' - A two paned 'explorer' style theme. - Themes may be specified on a per client basis, with cookies. - All themes have been updated to include a theme choosing option. - Themes may contain configuration options which override 'mp3d.conf' - Debian packages built! 0.9.9.7 [16-May-2002 06:43] - BUGFIX: Fixed off-by-one error when reading config file. - BUGFIX: Fixed thread creation/termination bug. - BUGFIX: OGG tag parsing is now more robust. - BUGFIX: `make uninstall` removes the correct binary. - PORTABILITY: MacOS X port now builds and runs. - CLEANUP: Added the small test programs to the CVS repository. - CLEANUP: The server configuration isn't browsable via /status/ - CLEANUP: New virtual path '/search/' which serves a search form. - CLEANUP: If the hostname isn't set use 'localhost' in playlists. - Other changes: - Updated version number. - Introduced a theming system which allows end-users to completely customize the appearence of the server. - Use the clients 'Host: ' header, if present. (New configuration variable 'use_client_host' controls this). 0.9.9.6 [05-May-2002 22:23] - BUGFIX: Allow songs to contain '..' in their filenames. - BUGFIX: Added fixes which allow compilation under GCC 3.x. - BUGFIX: Tidied up headers + namespaces for GCC 3.x - BUGFIX: 'all.m3u', and 'recurse.m3u' links work for directories requested without trailing '/' character. - BUGFIX: Delete the results of CDir::ReadDirectory. - BUGFIX: Free the results of 'scandir' correctly. - BUGFIX: Free the results of CUtility::splitString - CLEANUP: Made CServer a singleton object. - CLEANUP: Renamed all singleton accessors 'GetInstance'. - CLEANUP: Documented CMutex properly. - CLEANUP: Removed unnecessary #include's to speed compilation. - CLEANUP: Minor optimizations to CFile::normalizePath - Other changes: - Updated version number. - Received another RC file from: watsondk@pobox.com - Added previous release dates to the changelog. - Be more carefull setting the group + user ID. - Doubled the size of the file serving buffer. - Greatfully received several new logo submissions at: http://www.gnump3d.org/logos.html 0.9.9.5 [21-Apr-2002 15:27] - CLEANUP: Removed 'CFile::GetFullPath' its not used anywhere. - CLEANUP: Removed some system headers that aren't needed. - CLEANUP: Renamed 'CHeader' class to 'CRequestHeader'. - CLEANUP: Introduced mutex abstraction class 'CMutex'. - CLEANUP: Changed CApacheLog + CDebugLog to have CMutex members. - CLEANUP: Changed the signature of 'sendData'. - CLEANUP: Tidied up the Makefiles for all systems. - CLEANUP: Don't attempt to remove previous versions on 'make install'. - CLEANUP: Install manpages in correct location for FreeBSD. - CLEANUP: Move file comparison function into CFile. - CLEANUP: Move song tag comparison function into CPlaylist. - CLEANUP: Order object files alphabetically. - CLEANUP: Remove '-g' when compiling. - BUGFIX: Close the debug file handle when destroyed. - BUGFIX: Show unknown command line options after usage info. (Simpler to read that way). - BUGFIX: Don't print 'Not reached' - when server exits. - BUGFIX: Removed a lot of printf's which aren't often seen. - BUGFIX: Show the correct error message when the server admin disables access to '/status/' - BUGFIX: Correctly bound the header when reading a request from the client. (Off by one error in CRequestHeader::ReadHeader). - BUGFIX: New class CConnectionCount; handles max_connections properly - BUGFIX: mp3d-top takes notice of 'always_stream'. - BUGFIX: CApacheLog - fixed off by one error in 'AddEntry'. - BUGFIX: Expand '$COMMENT' in song displays. - BUGFIX: Display directories sorted alphabetically - BUGFIX: URL Encode files in playlists, this allows files with '+' in their names, for example, to work. - BUGFIX: Use correct thread type - fixes compilation issue on *BSD - BUGFIX: CUtility::stripWhitespace will return "" if given a string composed wholly of whitespace characters. - BUGFIX: Delete the CClientConnection object on thread termination. - DOCUMENTATION: Updated misleading comments throughout the code. - DOCUMENTATION: Cleaned up + expanded the man pages. - Other Changes: - Expand $HOST in the header and footer templates. (This is $HOSTNAME minus any domain information). - New option 'allow_saving' if this is enabled a 'save' link is generated next to each track, to allow simple downloads. 0.9.9.4 [14-Apr-2002 09:09] - Major update : Re-wrote all the code in C++. - Major update : Re-wrote all the code in C++ - worth stating twice. - DOCUMENTATION: Added manpages, in doc/ - DOCUMENTATION: Updated README for grammer, spelling, etc. - DOCUMENTATION: Added README-C++ - DOCUMENTATION: Updated comments in 'mp3d.conf' - DOCUMENTATION: Document the hostname option in mp3d.conf - DOCUMENTATION: Added source code documentation in src/html/ - BUGFIX: Handle the debugging options correctly. - BUGFIX: Expand the MP3 Albumn tag, via $ALBUM. - BUGFIX: Close filehandle when an abort happens on file serving. (ie. ignore SIGPIPE). - BUGFIX: Allow searching on song tags - BUGFIX: Abort if the configuration file doesn't exist. - BUGFIX: Handle directories without a trailing '/' correctly. - BUGFIX: Removed striping on search results. - BUGFIX: Terminate headers with '\r\n' as per RFC's. - BUGFIX: Don't show play link if search returns no results. - BUGFIX: URL encoding/decoding RFC 1738 compliant. - BUGFIX: Loop until all network data sent - stops random stuttering. - PORTABILITY: Code builds + runs on Solaris properly now. - PORTABILITY: Updated Cygwin build. - PORTABILITY: Embryonic MacOS X support. - PORTABILITY: Use 'stat' instead of FILE * functions. - Other changes: - Tidied up the startup banner. - Removed logo from the source code repository, now in website src. - Implemented access controls, and connection limiting. - /status/ now shows source versions. - Configurable shoutcast title streaming - thanks to the author of Ample for a good explaination of how this works: http://ample.sf.net/ - New command line option '--background' - Received an RPM .spec file, from: Angles Puglisi <devel@aminvestments.com> - Perform thread cleanup correctly. - Parse OGG Vorbis tags - this is very simplistic. - Cache the ID3/OGG TAG information which we retrieve. - Added debug tracing throughout the entire codebase. - Add option to disable server browsing, strange as that might seem. 0.9.9.3 [12-Mar-2002 07:48] - Made portability fixes to portable.c - for FreeBSD. - Added Slackware rc file, from : Boris Kurktchiev <linux@BgDefenderS.zzn.com> - Added logo, from: Adam Doxtater <adoxx@hotmail.com> - Made the daemon re-read its configuration file upon receipt of SIGHUP. - Allows config file to control the notion of what is an audio file. - BUGFIX: Make sure file info is served with a playlist for a single file, as a result of 'always_stream=1', and 'advanced_playlist=1' - Added Access Control, based upon IP addresses. - Updated Header template, contributed by : Boris Kurktchiev <linux@BgDefenderS.zzn.com> - BUGFIX: Send proper HTTP header prior to sending error messages. - BUGFIX: Send message to clients that aren't allowed to connect. - Default to appending to our logfile, with config file controlling whether we truncate or not. - BUGFIX: Stop blanking out the hostname, as this broke the template expansion. - Removed all references to WIN32 - AS OF NOW THERE IS NO WINDOWS PORT - Show IP address (hostname) in the top N users. - CODE-CLEANUP: Handle the special requests in a neater manner. - CODE-CLEANUP: Don't, needlessly, return the requested path - BUGFIX: Remove trailing slashes from clickable directory headers. - mp3d-top : Don't cache hostnames needlessly. - BUGFIX: Removed the trailing slash which is displayed on all directory names in the main index. - BUGFIX: $VERSION is now expanded in header + footer files. - BUGFIX: mp3d-stats use numerical comparison, fix by TAHARA Ryozo <r-tahara@yamatosokki.co.jp> - BUGFIX: serve .m3u files properly, fix by: TAHARA Ryozo <r-tahara@yamatosokki.co.jp> - Updated handling of comments, and 'logfile' key in mp3d-top from: TAHARA Ryozo <r-tahara@yamatosokki.co.jp> 0.9.9.2 [01-Mar-2002 10:47] - Moved mutex handling code into threads.[ch] - Added Cygwin Makefile. - Renamed links to '/' to read 'Home' - Added song titles to playlists, so that the players may use them. This is controlled by the config entry "advanced_playlist". - Wrapped server status in pretty HTML to match search results, etc. - Avoided reading the 'Hostname:' from client requests, if this is not equal to our server hostname bad things are afoot - the server hostname may be explicitly set by the configuration entry 'binding_host' option anyway. - Re-write playlist files on the fly, if they aren't http entries. Code from: TAHARA Ryozo <r-tahara@yamatosokki.co.jp> - Added a statistics program, which is run when people request '/stats/' (The statistics program is "mp3d-top", and running "mp3d-top --help" will give running instructions.) - Added an RC file for Debian. - Tidied up the usage of the configFile, and port handling. - Added the "contrib/debian/" directory, which can be used to build a .deb binary file - contributed by : Henning Glawe <glawe@web.de> - Created contrib/win32/ - Finally solved the issues with terminating the server. As suggested by : Andrew Birkett <adb@tardis.ed.ac.uk>, over a pint. - Honour the "Range:" header - this allows people to seek within a song, if the player supports it. (WinAmp does). - Made all the files + directories in the stats page clickable. - Allow the user to specify the colour of the border used in all the display sections, via the "border_colour" config file entry. - Massive code commentry update. - Fixed a filehandle leak. (We were losing one handle for each music file served). - Added the ability to play all the results of a search. - Added SuSe rc file, from: Daniel Troeder <daniel@troeder.de> 0.9.9.1 [23-Feb-2002 12:35] - Added simple search. - Added option 'search_enabled'. - Updated header template to include a search form. - Search results now honour the 'always_stream' flag. - Added patch to encode URL's in generated playlists, from: Francesco Usseglio Gaudi <cecco@libero.it> - Perform variable expansion in /status page. - Improved the portability of code in 'portable.c'. - Fixed playlists so they are served properly. (Hand made playlists, which are placed in the directory tree, not the auto-generated all.m3u / recurse.m3u files). - Updated the comments in the supplied config file considerably. - Updated the links at the top/bottom of directories to be made of links to the path components. - Fixed access logging, the log is written at the start of a file-serving transaction, not the end. 0.9.9 [19-Feb-2002 11:57] - Created a centralized routine for searching for files. - Migrated existing code to use it. - Updating network connection, no more "Address already in use" errors! - Addition of a new config option, to specify the log file. - Accesses are logged in an Apache common log compatable format. - BUGFIX: Playlists had erroneous '\n' character in them. - BUGFIX: Report + abort on unknown command line option. - BUGFIX: make install works correctly, and the binary reads the installed configuration file properly. - New 'theme' system, allows all pages to be surrounded by user specified text. - Expand $HOSTNAME, and $DIRECTORY in template files. - BUGFIX: Install signal handlers only if they're available. Contributed : by Alan Stein <ajs@ajsoft.com> - Updated the Win32 port. TODO: FIXME - Allow playlists to be listed in the directory tree. - BUGFIX: Handling of missing files killed server, if they didn't have a suffix. - BUGFIX: The number of currently active connections only increased. 0.9.8 [12-Feb-2002 10:02] - Changed the link title for the server status. - Updated the header + footer. - Made some code cleanups. - Moved all file handling code to files.[ch]. - Moved all debug handling code to debug.[ch] - Added 'always_serve' option, as suggested by : Thomas Sattler - Fixed up logging, so that 'all.m3u', and 'recurse.m3u' are correctly reported. - Added a simple build system for dealing with new platforms, this includes those files/changes submitted by other people. - Fixed bug: generated m3u files not having port numbers in them. - Fixed bug: searching for suffixes stopped at the first period. - Code cleanup : Pass connection_info around, not client_socket. - Code cleanup : centralized debug interface. - Added --debug switch, to replace the x-debug target. - Added "ostype" to the --version information, and updated the startup banner. - Added Emacs mode settings. - Fixed bug: signal 11 -> replacestrinstr was buggy. bigtime. - Fixed bug: make sure subdirectories + links have "%20", not ' '. 0.9.7 [08-Feb-2002 04:01] - Added id3parse.[ch] - C routines for accessing ID3 tags. - A new make target 'test': will build test programs for the ID3 parser, and the config file parser. - Allow user to specify how files are displayed, via 'song_format' - Fixed issue with processing the files in a directory. - Updated the handling of missing files to send the appropriate HTTP status code, (404), along with a more friendly error message. - A working recursion option. - Added bzero, and stricmp implementations for those that lack them. - Test that the root directory exists before starting the server. D'oh. - Updated "IsAudioFile", to compare case insensitively, this fixes incorrect file count bugs. - Added DoesDirExist - Allow the server to change UID & GUID after bind(). (means server can be started with port<1024, and no risk ;). - Send "Date" headers with all pages. - Save starting date + time of server, not just time. 0.9.6 [08-Feb-2002 04:01] - Added basic logging; connection number, ip address, and request path - Added server-start-time to the status page. - Show the number of active connections. - Added new configuration option "stripe_depth", controls the size of stripes. - Updated the HTML generation, to change the layout. - Updated Makefile(s) to build on FreeBSD. - Added server stats in a basic manner. 0.9.5 [06-Feb-2002 04:34] - Added the configuration file, to control the server, this involves the introduction of many new features, eg. controllable mime typing. - Added parse.[ch], removed getopt.[ch]. - Added the ability to report on server status. - Added test program for the parser. - Added '--quiet' option. Released to the World, via Freshmeat.net Pre-history: 0.9 - Allows directory contents to be played, via an "All" link. 0.8 - Shows the contents of directories in an attractive manner. - Allows navigation back up the directory tree. 0.7 - Correctly processes directories. - Ignores '.' files, and directories. - Has a root directory, browsing outwith this is prohibited. 0.6 - Serve files. Woo hoo! No longer shows dotfiles of any kind. Note: content type is fixed at text/html. This should be teakable via a config file, something like: [MimeTypes] .htm=text/html .html=text/html .txt=text/plain 0.5 - Shows directory listings, which include ".", and ".." 0.4 - Replace string in string works multiple times. 0.3 - Control the errors, via text substitution. Replace this with an error file for each permissable error, eg. HTTP 404 -> not found. 0.2 - Send an error message when things go bad... ;) 0.1 - Start up the listening socket - and make sure that its not already in use, and >= 1024