this is the nature of bugs - if i waited to fix everything and release it... oh wait, i tried to do that after the build 29 release by holding back builds until i'd not had any newer bug reports and look at the shit i've gotten for that in addition to all of the other issues with getting releases out. every piece of software has bugs and on reflection i should have just done point releases every month or two with updates than what happened but what happened has happened and that's just how it goes.
if it failed 100% of the time then it would have been fixed before build 29 was released. however, as it's intermittent as i've tried to explain and the kick issue never appeared during our testing because of the reasons i'd explained previously. or to make it simpler, you need to rub your tummy, pat your head, jump on the spot and for the sun and moon to be in a specific alignment for the issue to appear.
and this issue only appeared intermittently when people started using the v2 DNAS as no one wanted to use the beta builds and only started testing it when it was out of beta and due to that (as there's only so much which can be internally tested - if you can achieve 100% testing coverage and 0% bugs then you're a mythical being) then this wasn't caught.
and based on 1 response back to the test build of the v2 DNAS i sent out 2 weeks back, it makes me seriously wonder if there's any point in even trying to get a fixed build released if those who explicitly said they wanted to help and test out updates just don't care.
http://forums.winamp.com/showthread.php?p=2790357#known lists the main issues. and not that you'll believe it, but the following is the changelog between build 29 and what is part of those internal builds sent out:
- Added a setup mode which allows basic configuration of the server when run without a configuration file (see documentation for usage)
- Added a builder mode which allows for the configuration builder to be run within the server (broadcasting is disabled in this mode)
- Added automatic authhash generation when a stream source is connected on a public stream and an authhash was not already present (can be disabled using autoauthhash=0)
- Added /statistics which consolidates all of the /stats?sid=# results for all known and active streams
- Added 'flashpolicyserverport' allowing the DNAS to serve up the Flash policy file (as per 'flashpolicyfile') on port 843 or a custom port (as well as on 'portbase')
- Added serving of 'shoutcast.swf' for custom flash players to be handled in the same domain as the server (see documentation for usage)
- Added listen.xspf and listen.qtl to the /listen* playlist options available (so now pls, m3u, asx, qtl and xspf are available on a stream)
- Added 'portlegacy' to allow changing or disabling the port legacy v1 sources connect on (see documentation for usage)
- Added 'streamportlegacy' to allow for supporting more than one direct legacy v1 source connection to the server (see documentation for usage)
- Added 'publicport' to allow changing the port reported to the YP servers and any clients using the /listen.* playlists where 'portbase' is not the port externally seen
- Added option on 'Server Summary' page (accessed from admin.cgi?sid=0) to allow for manually setting the stream authhash e.g. if needed for a relay
- Added 'Stream DJ' (if known) on the stream admin pages as well as <DJ/> in all statistics for getting the current DJ of the connected source (more formal specification than fiddling the IRC / AIM / ICQ values as used with v1 DNAS setups)
- Added 'streammaxbitrate' and 'maxbitrate' options for per-stream or global limiting of the source bitrate allowed for a connection
- Added 'streambackupurl' option for per-stream fallback if the original source (direct or via a relay) fails to keep the stream alive (see documentation for usage)
- Added server bandwidth usage reporting for the server administrator via the admin.cgi?mode=bandwidth action (see documentation for usage)
- Added JSON and JSON-P responses to the /stats?sid=# and /statistics responses by appending &json=1 for JSON and appending &callback=<function> for JSON-P
- Added XML, JSON and JSON-P support to the /played response as well as to support &pass to allow song history access to the XML, JSON and JSON-P responses even when public display of them is disabled
- Added admin.cgi?mode=viewjson as a JSON and JSON-P equivalent of admin.cgi?mode=viewxml (see documentation for usage)
- Added ability to kick all connected clients on a stream via the stream admin summary page in addition to the existing single client kicking
- Added 'redirecturl', 'streamredirecturl' and 'streamhidestats' options for per-stream or global redirection / blocking of publically accessible pages when 'hidestats' or the new 'streamhidestats' options are enabled
- Added SIGUSR1 and SIGUSR2 support in non-Windows builds for reloading the configuration file from the console (see documentation for usage)
- Added SIGWINCH support in non-Windows builds for reloading the Reserved IP file(s) from the console (see documentation for usage)
- Added support for GZIP (RFC 1952) encoding of appropriate page and data responses if supported by the requesting connection and will provide a bandwidth saving
- Added a 'View Source Login Details' page to the server summary page to make it easier to get the login details required for all appropriate stream configurations
- Added sp=<streampath> support to all web methods which support sid=<streamid> to be able to access a page by streampath instead of streamid - streamid is still the preferred method (see documentation for usage)
- Added 'admin.cgi?mode=viewlog&viewlog=save' method to allow for downloading the server log output as a GZIP compressed archive (useful for checking the log output remotely or for support issues)
- Added 'streammovedurl' option for per-stream redirection of permanently stopped or moved streams from the server
- Added archiving of log, w3c and streamw3c files when rotating these files would cause them to be deleted (which happens when there are usually five rotated copies already)
- Added 'logrotates' and 'logbackup' options to provide finer control over the rotation (default of 5 files) and backup (default off) of the log files during rotations
- Added icy=http parameter detection on v1 client connections to return a HTTP instead of a ICY header response type e.g. server
ort/?icy=http
- Added 'url' parameter to the 'updinfo' action to replicate v1 DNAS functionality which had not been re-implemented in the v2 DNAS
- Added 'ypstatus' method for the server administrator via the admin.cgi?mode=ypstatus action (see documentation for usage)
- Added reporting of the stationid for public listings on the server and stream administrator pages
- Added 'streamuptime' to the /stats and /statistic responses to aid in monitoring of the length of source connections to the server
- Added /streamart?sid=# and /playingart?sid=# methods as a public version of the verions viewable via 'admin.cgi?mode=art&sid=#'
- Added back /7(.html) support due to issues in getting legacy reporting tools updated to support the recommended 'stats' methods
- Added admin.cgi?mode=history as an admin page equivalent of played.html?sid=# so stream administrators can easily see the played history of the stream
- Improved YP interaction when the IP address of the DNAS changes whilst it is still broadcasting (requires YP update for this to work fully)
- Improved handling of source relay connections especially via the server's admin pages e.g. a pending source relay connection can be aborted
- Improved handling with large client numbers to reduce CPU usage as well as not crashing when exhausting the imposed maximum file descriptors (e.g. ulimit -n)
- Changed 'streampath' to default to / for streamid=1 to improve compatibility (/stream/<sid>/ is still default on all other streams)
- Changed config file handling to automatically use 'sc_serv.ini' or 'sc_serv.conf' if present if no config file is specified (better replicates v1 DNAS behaviour)
- Changed relayconnectretries to accept zero (relayconnectretries=0) to keep trying to reconnect to the relay source and changed the default to 0 from 3
- Changed reporting of the YP connection state on the admin pages to make it clearer if the authhash is invalid or empty
- Changed the 'Stream Configurations' xml response to fill <STREAMAUTHHASH/> with EMPTY or INVALID on error as applicable
- Changed YP2 connection attempts to not be made if the authhash is determined to be invalid or empty
- Changed 'hidestats' to allow for more control over the pages which are able to be disabled (see documentation for usage)
- Changed 'updinfo' to not need 'type=xml' as it now auto-detects how to process the title information received
- Changed 'configrewrite' to accept 'configrewrite=2' so now 'configrewrite=1' generates minimal configurations (only saves values not at the default) and 'configrewrite=2' outputs all configuration options (like 'configrewrite=1' used to do)
- Changed YP2 handling to show the stream number, outputting of detailed error messages (where provided) and not output /yp/resp/updatefreq errors
- Changed handling of the SHOUTcast site player client connections to not send in-stream metadata to workaround issues with title changes
- Changed song history and current song titles shown in any reports to use the pre-formatted title from the source if available (does not change titles in clients)
- Changed handling of introfile to attempt to strip any tags from the raw file to improve client compatibility
- Changed client listener reports (via the stream administrator page and xml reports) to now be sorted oldest to newest
- Changed w3c log handling to output header information to improve tool compatibility (replicates v1 DNAS behaviour)
- Changed handling of 'streamid' so if not specified then a stream configuration will be created if any appropriate stream* options are read on loading
- Changed SHOUTcast 2 source logging to only output complete metadata and connection details when using uvox2sourcedebug=1 (instead of always as before)
- Changed all /listen* playlist options to output the 'backupserver' provided by the YP where possible
- Changed some of the server and stream admin page header links to better hide invalid options and to make navigation easier, etc
- Changed the configuration reload option ('admin.cgi?mode=reload' on the 'Server Summary' page) to also update the debugging options and other options (see documentation for additions)
- Changed Reserved IP handling to allow connections from 127.0.0.1 through even if not specified (allows access to admin pages)
- Changed the Ban and Reserve IP administration actions to save changes (if enabled) at the time instead of only on exit
- Changed YP2 stream registration to wait until the source has provided a title to allow the station listing to appear sooner (requires YP update for this to work fully)
- Changed handling of authhash changes via the update option to update the current stream information without requiring the stream(s) to be restarted
- Changed server summary page to count inactive relay configurations (if correctly specified) as available streams so it is possible to restart them easier
- Changed the user agent (mainly for relay connections) to now be 'Ultravox/2.1 SHOUTcast Server x.x.x.x' (where x.x.x.x is the version and build numbers)
- Changed the stream admin page to also report the type (v1 or v2) of the connected clients
- Changed the current listener list on the admin summary page (admin.cgi?sid=#) to group client connections from the same IP address (make non-unique connections easier to find)
- Changed all /listen.* handling to use the public IP of the DNAS as reported by the YP when publically listed (requires YP update for this to work fully)
- Changed 'flashpolicyfile' handling to use an internal copy if a custom file is not specified (which has the benefit of specifying the actual ports used)
- Changed console output to highlight errors in red, warnings in yellow and debug output in green to make them more obvious (cannot be disabled)
- Changed the 'view logfile' administration pages to highlight errors, warnings and debug output to make them more obvious (colours can be changed via css)
- Changed /stats?sid=# to support &pass to allow stats access even when public display of them is disabled
- Changed Windows builds to only send warning and error messages to the event log in service mode or if a critical error happens on startup before file logging occurs
- Changed autodumpsourcetime and streamautodumpsourcetime to be known as autodumptime and streamautodumptime respectively to better reflect the general usage of these options
- Changed server summary page to display configured but non-running configurations along with active sources and inactive relay configurations
- Changed 'yptimeout' default from 60 to 30 seconds
- Changed 'Shoutcast Metadata Puller' handling to only return the title update (if enabled) instead of the audio data to help save bandwidth on popular listed streams
- Changed GCC version used to build the Linux versions (now using GCC 4.4.6 instead of GCC 4.1.2 from CentOS 5.8)
- Changed 'admin.cgi?sid=#&mode=kickdst' to support IP address(s) in addition to the existing unique client id(s) support
- Removed Ultravox 2.0 (old Aol Radio) client and source support (reduces memory and cpu usage - amount depends on the setup used)
- Removed 'yp2' configuration option and the ability to run the DNAS in YP1 mode
- Fixed all reported issues with the authhash management system since it was first released for public use
- Fixed random crashes due to incomplete / dodgy client requests made to the server (resolved from user reports)
- Fixed destip not being followed for YP connections so binding to a different IP or using a DNS name should now work (requires YP update for this to fully work)
- Fixed some rare issues with binding to a custom destip failing when it should have worked
- Fixed updating of 'streampath' not causing a YP details refresh (remove then add) on any changed stream configurations
- Fixed crash on Windows versions after choosing a config file to use when run without write permissions to create 'logfile' when no config file is specified
- Fixed crash on non-Windows versions when processing invalid xml metadata from sources
- Fixed some attempts to create / update authhashes not working due to url-encoding issues with the data passed on to the YP
- Fixed handling of clearly invalid authhashes to not show the update and remove admin options
- Fixed handling of 'unique' causing the DNAS to lockup on loading in some scenarios
- Fixed some relative path issues when using 'include' in some scenarios
- Fixed v1 sources not able to connect if icy-name / icy-url are empty even if titleformat / urlformat have been specified
- Fixed stream url on the summary pages not providing valid links in some scenarios
- Fixed MAXLISTENERS on /stats?sid=# reporting maxuser instead of streammaxuser when no source is connected
- Fixed UID in the Listener Stats being output in the wrong number format
- Fixed the 'Unique Listeners' total on the administrator summary page not always reporting the correct number
- Fixed the SHOUTcast Directory metadata puller / tester client statistics filtering due to related YP changes
- Fixed accessing the root summary page with the Opera browser to not start streaming like a client connection
- Fixed /currentsong?sid=# not returning a title if present when songhistory or streamhistory is zero
- Fixed titles not appearing in the SHOUTcast Directory listings when using a v1 source in some scenarios
- Fixed some v1 sources (e.g. butt) not being able to connect in some cases due to non-standard icy* headers received
- Fixed the windows w3c log file outputting additional linebreaks which were not required
- Fixed some Winamp v5.5x clients being incorrectly sent a v2 instead of a v1 SHOUTcast stream (resolves missing stream titles)
- Fixed loading issues related to not being able to create the logfile and force reverts to default path
- Fixed OS path conversion on config file entries not always working e.g. when moving a windows config to linux
- Fixed relays not running if http:// was not specified (is now automatically appended internally)
- Fixed additional issues relating to relay connection errors including not following the retry timeouts in all scenarios or not attempting to reconnect in specific scenarios
- Fixed the next song being incorrectly reported at times or not being correctly cleared as applicable
- Fixed enabling 'riponly=1' blocking access to the admin pages of the DNAS plus it now allowa connections from 127.0.0.1 / localhost through even if not added to the list (for local monitoring)
- Fixed Banned and Reserved IP checks not always working (better validates against per-stream and global lists now)
- Fixed handling of user agents with invalid control characters causing log / reporting issues
- Fixed issues with 'admin.cgi?mode=reload' attempting to keep updating values which were already updated or incorrectly removing additional stream configurations when only 1 needed removing
- Fixed accessing a stream using 'streampath' not working correctly in all cases e.g. when no / was prefixed for the entry in the configuration file
- Fixed current song display issues with some v1 based relays where non-english characters are present and were not correctly handled as utf-8
- Fixed issues with multiple connection attempts generated for an already pending relay connection via the configuration reload or 'startrelay' method or when a relay is removed but was pending
- Fixed issues with Windows service and non-Windows daemon use primarily when no configuration file is specified (see documentation for amended usage)
- Fixed more clients than is specified for (stream)maxusers if only reserved clients are allowed to connect to the server (will reject reserved clients if no one can be kicked to free a slot)
- Fixed listen.pls generation for NSV streams generating incomplete playlists (all other playlist formats were generated correctly)
- Fixed out of order metadata packets being incorrectly handled if another metadata packet of a different type is received whilst waiting on an existing type (mainly affected in-stream artwork)
- Fixed checking for configuration files not always working on non-Windows versions or incorrectly reporting a directory as a valid file
- Fixed 'w3clog' and 'streamw3clog' not always being rotated when using SIGHUP or when the main log file is auto-rotated or on starting the server
- Fixed DNS lookup issue on non-Windows builds which could prevent access to the SHOUTcast servers
- Fixed crash when getting repeated connection attempts and no source is connected in rare cases
- Fixed some invalid characters being kept from song title updates which could cause some of the XML responses being invalid
- Fixed title updates from some v1 based sources not being accepted when allowed by a v1 based DNAS server previously
- Fixed some DNAS provided web page access failing in specific OS and machine configurations
- Upgraded libraries to use expat-2.1.0
- Other miscellaneous code changes, de-duplication of error messages, cleanup of normal running log messages, admin page tweaks and minimisations, improvments and related documentation updates