Neubot 0.4.8 [2012-02-08] * M-Lab: fail deploy if we cannot stop a running Neubot * M-Lab/deploy.sh: autogen neubot.tgz even if -n * M-Lab/deploy.sh: document command line options * scripts/collect.sh: scalable data collection * updater/unix.py: make update channel configurable * utils_rc: configuration file parser * updater/unix.py: honor /etc/updater/unix config file * Release neubot/0.4.8-rc1 * Merge experimental code to follow development on MacOSX * scripts/collect.sh: count number of good/bad privacy settings * scripts/collect.sh: do not mirror the neubot folder * scripts/collect.sh: create and commit the publisheable tarball * scripts/collect.sh: do not prepare $today for publishing * scripts/collect.sh: generate better logs * scripts/collect.sh: publish publisheable data * scripts/collect.sh: set -e after option parsing. * scripts/collect.sh: never change the script directory * Merge working code for automatic data collection * M-Lab: startup the rsync server * scripts/collect.sh: make sure we generate tarball just once * scripts/rh: regression test helper * Check privacy when running command line tests in the local context * filesys_posix.py: delay datadir_init() * regress/filesys_posix.sh: document why it fails on Linux * Makefile: record failures but don't stop regress * regress/Makefile: repair install test * notify.py: raise the interval between comet * log.py: no point in logging empty lines * regress: Tidy up * regress: repair database/table_{bittorrent,speedtest}.py * regress/Makefile: update install.noexec.txt to 0.4.7 * regress/neubot/http/rootdir.sh: repair after regress tidy up * regress: adjust some comments * regress/neubot/utils_posix.sh: document why it fails on Linux * Tidy up regression tests * Win32/neubot.nsi: s/HKLM/HKCU/g * filesys: add filesystem null so Neubot for Windows works again * Revert "Release neubot/0.4.8-rc1" * Merge MacOSX code to automatically follow development * updater/unix.py: correct nit in comment * doc/updater/unix.txt: correctly document time between update checks * updater/unix.py: add stub to clear base directory * updater/unix.py: document __install_new_version() * Merge some updater/unix.py fixes * Rewrite /api/config and zap /api/configlables * regress/Makefile: add newly added files * scripts: extract code to update_changelog from release * Release neubot/0.4.8-rc2 * MacOS/makepkg.py: do not create the latest file * scripts/publish: helper to publish releases * data: add LICENSE and README for data * data/LICENSE: nit * data/README: update bittorrent result description * scripts/collect.sh: classify_by_privacy(): print extra empty line * Merge branch 'next' into MASTER * README -> README.rst for nicer project description on GitHub * README.rst: bump copyright * scripts/diffstat: require first and last commit * M-Lab/redir_table.py: bump copyright year * M-Lab/redir_table.py: do not override italy anymore * M-Lab/ip_addr.sh: use the proper fqdn names * M-Lab/servers.py: update M-Lab database location * M-Lab/redir_table.py: more than one server per country * M-Lab/redir_table.py: drop comment * M-Lab/redir_table.py: also print time when it was generated * Merge redirection table improvements * Release neubot/0.4.8 Neubot 0.4.7 [2012-01-30] * PRIVACY: s/measurement-lab.net/measurementlab.net/ * M-Lab/deploy.sh: pass -q to compileall * M-Lab/deploy.sh: better command line options parsing * M-Lab/deploy.sh: allow to skip check for tarball * M-Lab/deploy.sh: rewrite with two nested shells * M-Lab/deploy.sh: change semantic from resume to force * M-Lab/deploy.sh: make sure all ports are bound * M-Lab/deploy.sh: arrange things so that we don't need ping * M-Lab/post_deploy.py: postprocess deploy log * Merge improvements in M-Lab deployment scripts * utils_path.py: util functions for paths * utils_posix.py: util functions for posix * utils_posix.py: pass uid, gid to mkdir and touch * filesys: file system abstraction * backend: generic backend for saving results * negotiate/server_bittorrent.py: use backend * negotiate/server_speedtest.py: use backend * neubot/server.py: switch to JSON backend * Merge code for scalable data collection * Clear previous test results when we change test name * state.js: wrap long lines * state.js: mechanically replace _self with state_ctx * state.js: mechanically replace me with tracker_ctx * state.js: document the code * state.js: remove useless code * Merge maintenance patches for state.js * update.js: remove pasto and make update.js operative again * Release neubot/0.4.7 Neubot 0.4.6 [2012-01-23] * regress/http/rootdir.sh: sort output before comparison * regress/http/rootdir.txt: sort lines * log.html: do not open textual logs in another page * notifier/unix.py: better wording * Debian/control/postinst: better wording * privacy.html: better wording * Release neubot/0.4.6 Neubot 0.4.6-rc5 [2012-01-23] * TODO: update * privacy.js: reload when updating privacy fails * config.py: better explain interval * api/server.py: better comment * settings.js: reload settings on failure * bittorrent/client.py: remember to print upload speed * regress/negotiate/smoke.sh: add command to --kill * regress/negotiate/smoke.sh: run w/ runner disabled * Release neubot/0.4.6-rc5 Neubot 0.4.6-rc4 [2012-01-22] * .gitignore: Ignore .swp .pyc files * www: less confusion: enable controls automatic tests * config.py: less confusion: enable controls automatic tests * privacy.js: reload on success * runner_lst: export list of known test names * marshal: support for dict to xml * runner_core: let run() select negotiate URI * runner_rendezvous: simplified rendezvous client for runner * runner_core: trigger rendezvous when test list is empty * rendezvous_client runner_api: Adapt to new runner_core.run() * runner_clnt: print the full exception * runner_clnt: clear indicate logs copied from the server * runner_core: do not stop streaming immediately * runner_core: prefix log messages with module name * runner: Automatically rendezvous when test list is empty * www: the usage of H4 there is OK * footer.html: Mention Measurement Lab * log_api.py: Rewrite /api/log code * api/server.py: properly unescape incoming URIs * log.html: add small intro * Makefile: find -executable is not portable * regress/Debian/*: be a NOP on non-debian systems * regress/bittorrent/config.py: default on-demand server changed * regress/http/rootdir.sh: *.pyc files break the test * Makefile: _install: clear .DS_Store files first * regress/Makefile/install.sh: find -executable is not portable * regress/Makefile: We're now installing more files * chmod -x neubot/updater/unix.py * Release neubot/0.4.6-rc4 Neubot 0.4.6-rc3 [2012-01-20] * M-Lab: scripts to deploy, start and stop * M-Lab/deploy.sh: make sure $HOST is up and running * M-Lab/deploy.sh: two more prints to help automatic output parsing * M-Lab/deploy.sh: stanza format to separate host logs * M-Lab: fetch the list of hosts in realtime * M-Lab/deploy.sh: Improve the deploy script * M-Lab: more explanatory comments * M-Lab: import contries information from Wikipedia * M-Lab/servers.py: write approxymate location of nodes * M-Lab/ip_addr.sh: get slivers IP address * .gitignore: Ignore generated M-Lab files * M-Lab/redir_table.py: code to build redirection table * M-Lab/countries.dat: allow comments and convert to UTF-8 * M-Lab/deploy.sh: add help message * M-Lab/servers.py: write output to M-Lab/servers.dat * M-Lab/redir_table.py: always use just one server per country * M-Lab/redir_table.py: DELETE all, don't DROP table * M-Lab/redir_table.py: fix some SQL doofus * www: use new NEXA logo * Toplevel: Update to privacy policy 2.0 * neubot/www: Update to privacy policy 2.0 * lang/it.js: typos * rendezvous/client.py: Remove useless privacy check * table_speedtest.py: Move glue to speedtest/client.py * database/_table_utils.py: allow to rename columns * neubot/privacy.py: Refactor main() * neubot/config.py: Update to privacy policy 2.0 * neubot/privacy.py: Update to privacy policy 2.0 * database: Update to privacy policy 2.0 * neubot/privacy: Add command line option to test settings * clients servers: Update to privacy policy 2.0 * Remainder of neubot/: Update to privacy policy 2.0 * Debian: Update to privacy policy 2.0 * neubot/log.py: listify(): don't unconditionally connect to database * Makefile: add target to run all the available regression tests * neubot/config.py: do not suggest to sqlite3.connect() * notifier/unix.py: stop spreading lies in comments * regress/negotiate/smoke.sh: better usage message * regress: Add regression tests for database version schema * regress: Add regression test for database/migrate.py * regress: Repair table_*_gen.py * Merge some regression test goodies * M-Lab: Install /etc/rc.d/rc.local not /etc/rc.local * net/stream.py: Bump copyright * net/stream.py: disable less relevant pylint warnings * net/stream.py: remove unused bytes_recv bytes_sent * net/stream.py: remove unused import os * Sanitize certfile before passing it to wrap_socket() * net/stream.py: get rid of two simple pylint warnings * net/stream.py: Connector: avoid pylint warning * net/stream.py: Listener: avoid pylint warning * net/stream.py: directly access all configuration variables * net/stream.py: cosmetic change * net/stream.py: return to settings for localhost * net/stream.py: do not duplicate code in main() * regress: net/stream.py: repair after recent changes * Merge maintenance patches for net/stream.py * agent.py: net.stream does not provide default settings anymore * regress: add regression test for http.server.rootdir setting * server.py: more info on selected ports * net/poller.py: zap comment * net/poller.py: say we're gonna replace the task scheduler * regress: add regression test for net/poller.py * net/poller.py: simplify check_timeout() code * log.py: delayed string interpolation * viewer/unix.py: adjust not_running.html path when not installed * MacOS: Update PrivacyPane to privacy policy 2.0 * MacOS: prerun.sh: cosmetic changes * MacOS/makepkg.py: cosmetic changes * MacOS: postflight: cosmetic changes * MacOS: postflight: update to privacy policy 2.0 * MacOS: /tmp/neubot-can-share is no more * Merge branch 'pu.privacy' into next * net/stream.py: missing import * http/message.py: compose(): support for up_to_eof body * net/stream.py: Don't delay close() after EOF * log.py: avoid some pylint warnings * log.py: Introduce streaming API * runner_lst.py: Keep track of available tests * runner_core.py: Run a test on demand * runner_api.py: Implements /api/runner * runner_api.py: NOT (streaming AND overlapped tests) * runner_clnt.py: Client for running tests via /api/runner * api/server.py: Enable /api/runner * rendezvous/client.py: Use the runner module * config.py: add runner.enabled setting * bittorrent/__init__.py: Use runner by default * speedtest/client.py: Use runner by default * log.py: Kill interactive * Globally s/neubot.blupixel.net/master.neubot.org/ * rendezvous/client.py: get_next_test() may return None * www: allow to start test manually * runner_api: disable /api/runner when a test is running * runner_clnt: select return value more carefully * log.py: don't pass ACCESS logs down the stream * www: now we support tests from the web interface * Merge code to run tests from web user interface * www: Italian is not an opinion * updater/unix.py: Do not delay startup * notifier/macos.py: notify users of bad privacy settings * notifier: support for macos notifier * MacOS: Add notifier PLIST * MacOS: Include notifier PLIST in package * MacOS: Install notifier PLIST * www: better privacy message * Merge simple and stupid MacOS notifier * Release neubot/0.4.6-rc3 Neubot 0.4.5 [2011-11-24] * MacOS: tell the login screen not to pick Neubot user * Debian: control/postinst: empty setting implies false * Release neubot/0.4.5 Neubot 0.4.5-rc3 [2011-11-22] * regress: bittorrent/sched.py: add test case for sched_idx() * regress: bittorrent/config.py: add test case for finalize_conf() * regress: bittorrent/config.py: add test case for _random_bytes() * scripts/debugmem: allow to monitor objects count * scripts/debugmem: move time.sleep at the beginning of the loop * scripts/debugmem: doofus in the while condition * server: more flexible debugmem instrumentation * speedtest/server.py: keep memory fragmentation under control * regress: negotiate/smoke.sh: more aggressive testing * Debian: control/prerm: update pkill arguments * Debian: control/postinst: refactor * regress: add unit test Debian/control/postinst * regress: add unit test Debian/control/prerm * regress: add unit test Debian/control/postrm * regress: add Debian/reinst unit test * regress: add Debian/inst regression test * regress: Debian/reinst: account for notification * Debian: control/preinst: show notification on first install * regress: add Debian/conflict regression test * regress: Debian/inst: fix informative message * speedtest/wrapper.py: old clients do not set content-length * rendezvous: more strict rules for redirection * rendezvous/server.py: rewrite update advertisement * Release neubot/0.4.5-rc3 Neubot 0.4.5-rc2 [2011-11-18] * MacOS/makepkg.py: update location of manual page * Makefile: swap find arguments to avoid warning * scripts/cleanup: remember to cleanup gzipped manpages * simplejson: move CHANGES.txt LICENSE.txt below doc/ * Makefile: honour $(LOCALSTATEDIR) * regress/Makefile/install.sh: more checks * regress/Makefile/install.sh: also check directories * regress/Makefile/install: do not install more exec files than needed * Makefile: rewrite uninstall in terms of install * Makefile: zap empty line * Debian: get dependency right * Debian: support for -nox flavour * Makefile: remember to compile modules on plain install * i18n: do not use empty string to indicate default language * Makefile: automatize uninstall * viewer/unix.py: refactor * negotiate: tweak the big patch after code review * negotiate: deal with old speedtest clients (part 1) * bittorrent: simplify and clarify maximum message length * Release neubot/0.4.5-rc2 Neubot 0.4.5-rc1 [2011-11-15] * debian: make sure neubot is restarted * debian: document previous patch * nagios-plugin-neubot: allow to specify alternative port * negotiate: complete rewrite * speedtest: repair /speedtest/latency * server: memleak debugging infrastructure * geoip_wrapper.py: die in open_or_die() only * geoip_wrapper.py: Improve pylint score * utils/blocks.py: kickstart by fetching the first block * Merge branch 'pu.mlab' into next * config: define www.lang setting * i18n in Settings * js/settings.js: Revert some unneeded bits in previous patch * Merge branch 'pu.wwwlang' into next * privacy.py: do not assume database directory exists * privacy.py: improve pylint score * debugmem: make absolute view the default * setup.py: chmod +x * setup.py: do not install nagios-plugin-neubot * debian: reset packager version number * UNIX: simplify the task of creating a package * server.py: add /debug/count to debug API * Win32: consolidate win32-only files * icons: remove the folder and its content * Win32/setup.py: pylintify * Remove all references to start-neubot-daemon * debian -> Debian * Debian: simplify packaging * Debian: What's the point of an empty preinst? * BUGS: it may be confusing to mention the ML address like this * README: sync with Debian/control/control * simplejson: Upgrade to simplejson 2.2.1 * regress/bittorrent/config.py: maintenance * bittorrent/config.py: maintenance * regress/bittorrent/sched.py: maintenance * bittorrent/sched.py: maintenance * bittorrent: remove support for sending big messages * bittorrent: remove support for receiving big messages * bittorrent/stream.py: remove unused PieceMessage class * bittorrent/stream.py: remove unused import * bittorrent/stream.py: reduce the number of pylint warnings * regress/database: reorganize * regress/net/stream.py: maintenance * regress/config.py: maintenance * regress/log.py: maintenance * regress/state.py: maintenance * Release neubot/0.4.5-rc1 Neubot 0.4.4 [2011-10-25] * nagios-plugin-neubot: fix usage string * bin/nagios-plugin-neubot: print current queue length * table_config.py: Python 2.5 sqlite3.Row cannot iterate * net/stream.py: avoid exception in atclose() * rendezvous/server.py: no more separate bittorrent negotiation * Release neubot/0.4.4 Neubot 0.4.3 [2011-10-25] * scripts/diffstat: helpers for release announcement * debian: control/postinst: restart neubot if privacy is OK * debian: cron.daily/neubot: honour grammar * js/update.js: don't live commentedout code around * Makefile: use SYSCONFDIR not /etc * UNIX: always install neubot_notify and neubot_gui * Release neubot/0.4.3 Neubot 0.4.3-rc4 [2011-10-21] * debian: create system user and group * debian: postinst: avoid races between neubot and sqlite3 * Release neubot/0.4.3-rc4 Neubot 0.4.3-rc3 [2011-10-20] * debian: add sqlite3 to predepends * debian: bye bye neubot-web-ui.desktop * debian: rename neubot-on-gui-login.desktop neubot.desktop * net/stream.py: garbage collect encrypt and decrypt * Makefile: adjust debian package permissions * debian: Better name for menu entry * debian/neubot_notify: die when graphic session is over * www: pleasant no-privacy informative message * Revert "debian: use cron.hourly for debugging purpose" * neubot_notify: tune sleep interval and log exceptions * doc/RELEASE: tweak final part of the file * Release neubot/0.4.3-rc3 Neubot 0.4.3-rc2 [2011-10-19] * post-release: Undo some unwanted strings changes * Makefile: GC release_stable _release DEB_UPDATE_URI * rendezvous: "just works" update notification for Windows * doc/RELEASE: misc updates * api/server.py: close stream on /api/close * utils/blocks.py: repair win32 bug using WWW * http/server.py: honour the connection header * api/server.py: escape watchdog for active streams * privacy.py: skip checks if no privacy settings involved * js/i18n.js: correct privacy policy display with IE * api/server.py: add reachable objects info to /api/debug * Release neubot/0.4.3-rc2 Neubot 0.4.3-rc1 [2011-10-19] * Makefile: I don't need SHA256.inc anymore * privacy.html: fixed size text area * neubot_webkit: Maximize at startup. * neubot_webkit: Shows a static page if neubot is not running. * neubot_webkit: Tweak previous * neubot_webkit: zap unused arguments * neubot_webkit: no need to repeat window title * neubot_webkit: note we need to be more precise * database: unbreak migrate * database: Zap tool_* * table_bittorrent.py table_speedtest.py: pylintify * table_config.py: byebye functional style * regress: unbreak table_config.py regression * debian: preinst: ask for privacy settings if needed * Makefile: add preinst to debian package * debian: control: Less lintian warnings * debian: move 'update-rc.d remove' from prerm to postrm * debian: mention config files * Makefile: compress manpages * debian: add changelog and copyright * Makefile: do not install *.pyc and useless scripts * Makefile: install neubot-on-gui-login.desktop w/o +x bit * debian: /etc/init.d/neubot: mention $remote_fs * debian: /etc/init.d/neubot: add fake force-reload * debian: control/postinst: use invoke-rc.d * debian: prerm: do not use /usr/bin/pkill * debian: prerm: use invoke-rc.d * debian: control: list python as pre-depend * debian: preinst: show full privacy policy in webkit * debian: preinst: do not use curses to show license text * debian: preinst: help users stuck in less(1) * debian: preinst: avoid some pylint warnings * Merge branches 'pu.database', 'pu.debian' and 'pu.debian-webkit' into next * Move utils.py -> utils/__init__.py * Move libersion.py to utils/version.py * http/utils.py: remove unused negotiate_mime() * http: make prettyprintbody a method of Message * http: move date() to Message * http: make content_length a method of Message * http: move parse_range to speedtest/server.py * http: move urlsplit to http/message.py * http/utils.py: remove unused imports * http: move nextstate() to stream.py and justice utils.py * http: improve pylint score * Merge branches 'pu.http' and 'pu.utils' into next * net: Remove measurer * speedtest/client.py: fallback of measurer removal * net: simpler and more robust timeout model * net: Simplify task scheduling * net: start using same names as asyncore * net: more asyncore affinity * Merge branch 'pu.net' into next * poller.py: fallout after scheduler simplification * stream.py: stop passing exceptions upstream * scripts/make_lang_en.py: fallout of http rationalization * privacy: policy v2.0 * lang/it.js: zap old privacy policy translation * www/privacy.html: make it wellformed XML * www/lang/en.js: regen * Merge branch 'pu.privacy-policy' into next * Merge branch 'next' of github.com:neubot/neubot into next * privacy: Revert privacy policy to version 1.0 * debian: control/postinst: Most moral license choice * debian: add etc/cron.daily/neubot * debian: nuke python-based preinst * Makefile: do not require superuser privs to make deb package * debian: robust and least surprising reenable-repository algorithm * debian: use cron.hourly for debugging purpose * debian: Privacy strategy that works (TM) * privacy: Bye bye special provisions * win32: open browser if privacy not OK * www: use \r\n in privacy policy to please IE * privacy.py: use system default database path * neubot_notify: fallback to browser * neubot.nsi: install with user privilege level * Repair favicon * Garbage collect on_gui_login and infobox * js/privacy.js: explicit var declaration * MacOS: update privacy policy * Garbage collect unused show_database command * Ditch statusicon * compat.py: garbage collect unused code * Forgot to rename utils/version.py unit test * Garbage collect unused arcfour * utils/blocks.py: new data generator * Unbreak release script * Release neubot/0.4.3-rc1 Neubot 0.4.2 [2011-09-19] * Release neubot/0.4.2 Neubot 0.4.2-rc6 [2011-09-18] * scripts/sed_inplace: clarify help message * scripts/sed_inplace: quote the pattern * updater/unix.py: remove duplicate informational message * updater/unix.py: saner interval between two updates checks * MacOS: don't log on stderr in SH scripts * Release neubot/0.4.2-rc6 Neubot 0.4.2-rc5 [2011-09-16] * updater/unix.py: more robustness in the main loop * updater/unix.py: note we should install a signal handler * updater/unix.py: mark a possibly-redundant piece of code * updater/unix.py: debug-friendlier syslog output * updater/unix.py: more frequent check for updates * updater/unix.py: syslog cmdline to verify signature * doc/updater/unix.txt: more documentation * Merge branch 'pu.updater' into next * Release neubot/0.4.2-rc5 Neubot 0.4.2-rc4 [2011-09-16] * MacOS: Remove Neubot-pkg * MacOS: add neubot-pkg * MacOS doc: s/Neubot-VERSION.pkg/neubot-VERSION.pkg/ * Merge branch 'pu.MacOS' into next * database: fix regression with old clients * database/_table_utils.py: allow null entries * table_bittorrent.py table_speedtest.py: pylintify * neubot.nsi: make sure we delete all from autostart * neubot.nsi: Typo * neubot.nsi: Want to run as admin * Merge branch 'pu.win32-installer' into next * Release neubot/0.4.2-rc4 Neubot 0.4.2-rc3 [2011-09-15] * doc: updater/unix.py: no need to use current version number * doc: MacOS/installer.txt: mention the ``latest`` file * MacOS: makepkg.py: also create the ``latest`` file * Merge branches 'pu.MacOS' and 'pu.doc' into next * scripts/fixperms: fix permissions * neubot.nsi: do not autostart neubot * Makefile: force UID=0 and GID=0 when installing * Release neubot/0.4.2-rc3 Neubot 0.4.2-rc2 [2011-09-10] * MacOS/makepkg.py: be python2.6-compatible * www: privacy.js: don't mix 1/0 and true/false in settings.html * www: settings.html: clarify that some settings require restart * doc: MacOS/installer.txt: update * Merge branches 'pu.MacOS' and 'pu.www' into next * updater/unix.py: reverse time comparison to give updates a chance * updater/unix.py: must chdir before chroot * updater/unix.py: follow 'setuid demystified' guidelines * updater/unix.py: naive chroot for MacOSX * updater/unix.py: make sure chroot directory starts with / * updater/unix.py: be more precise with respect to copyright * updater/unix.py: unbreak downloading sha256 sum * updater/unix.py: unbreak switching to new version * updater/unix.py: more readable error messages * updater/unix.py: improve pylint score * updater/unix.py: disable chroot for 0.4.2 * Merge branch 'pu.updater' into next * Release neubot/0.4.2-rc2 Neubot 0.4.2-rc1 [2011-09-07] * log.py: table_log may be None * system/unix.py: fix openlog() and syslog() flags * system/unix.py: remove possible incompatibility with pypy * system/unix.py: rewrite BackgroundLogger to improve pylint score * system/unix.py: factor lookup_user_info * system/unix.py: improve pylint score * system/unix.py: python3 compatible * system/unix.py: prettify redirection to /dev/null * Merge branch 'pu.system' into next * libversion: print numeric representation for arbitrary versions * scripts/release: also update numeric representation * del neubot/updater.py * doc/neubot.1.txt: document neubot/main/__init__.py * man/man1/neubot.1: regen * Revert "main/__init__.py: remove fork nonsense" * main/__init__.py: make the code more readable * main/__init__.py: X11.app avail by default on 10.5+ * main/__init__.py: don't open browser when running as root * main/__init__.py: don't blindly override address and port * MacOS: Neubot-app: update neubot.icns icons * MacOS: basedir-skel/start.sh: spelling * MacOS: versiondir-skel/start.sh: start updater/unix.py * MacOS: versiondir-skel/prerun.sh: add _neubot_update user * MacOS/icon.txt: update procedure to create icon * doc/MacOS/installer.txt: use 0.4.0 as example version * MacOS: Neubot-pkg: Info.plist: omit major and minor * debian: prerm: attempt to kill 'neubot on_gui_login' * system: clean-up log backend a bit * system/unix.py: sys.exit -> os._exit for robustness * updater/unix.py: Updater daemon for Unix * doc/updater/unix.txt: Updater documentation * Merge branches 'pu.MacOS', 'pu.debian', 'pu.doc', 'pu.main', 'pu.system' and 'pu.updater' into next * bittorrent/config.py: Raise watchdog timeout * database/_table_utils.py: more robust INSERT INTO autogen * database/_table_utils.py: deploy docstrings * database/_table_utils.py: longer variable names * database/table_speedtest.py: use _table_utils * regress: Add speedtest/__init__.py * Move neubot/speedtest/gen.py -> regress/speedtest/_gen.py * database/table_speedtest.py: move unit-test to regress * database/table_config.py: move unit test to regress * database/table_config.py: add docstrings * database: add os_name and neubot_version columns * log.py: Break circular dependencies * net/stream.py: undo 262144 recvbuf optimization * privacy: redirect to /privacy.html if no privacy settings * privacy.py: explicitly utils.intify() privacy settings * privacy.py: more checks * Merge branches 'pu.bittorrent', 'pu.database', 'pu.log', 'pu.stream' and 'pu.privacy' into next * database/migrate.py: use logging.info not LOG.info * poller.py notify.py: We MUST stringify compact_traceback() * speedtest/client.py: it was not intended to create tuples * database: Use sys.platform not os.name * doc/updater/unix.txt: use previous version to avoid autobump * main/__init__.py: ditch creeping featurism * main/browser.py: bump pylint score to 10.0 * main/browser.py: python3 ready * main/browser.py: deploy a couple of flush() * doc: update neubot.1.txt * man: regen * Merge branches 'pu.main' and 'pu.doc' into next * server.py: enable sapi w/o SSL * negotiate.py: export the queue length * speedtest/session.py: export the queue length * server.py: export queue length via sapi * server.py: Put sapi into global http server * nagios-plugin-neubot: adapt to work with /sapi/state * nagios-plugin-neubot: add --hostname flag * nagios-plugin-neubot: sync docstring with reality * Merge branch 'pu.nagios' into next * speedtest/client.py: use just one connection * patches: rm not needed fix-manpage.patch * updater/unix.py: add code to verify signature * doc: MacOS/installer.txt: document public key * MacOS: versiondir-skel: add public key * log.py: ditch debugging leftover * log.py: sched maintenance when we use database only * Merge branches 'pu.updater' and 'pu.log' into next * Merge branch 'pu.speedtest' into next * MacOS/makepkg.py: generate autoupdate, checksum and signature * doc: MacOS/installer.txt: sync with autoupdates * debian: add neubot_webkit command * debian: control/prerm: tear down neubot_webkit * Makefile: add neubot_webkit to debian package * applications: add neubot.desktop * Makefile: add neubot.desktop to NEEDEDIT list * main/__init__.py: settle after merge * Merge branches 'pu.debian' and 'pu.updater' into next * Release neubot/0.4.2-rc1 Neubot 0.4.1 [2011-08-30] * MacOS: uninstall.sh: remove all Neubot receipts * MacOS: uninstall.sh: add comment * Merge branch 'pu.MacOS' into next * Release neubot/0.4.1 Neubot 0.4.1-rc4 [2011-08-29] * MacOS: move icon-creation tutorial to the proper place * doc/RELEASE: mention the Mac package too * icons: Update neubot.ico * icons/Makefile: forgot to mention neubot-48x48.png * icons: update neubot-48x48.png * www: update header web * www: Translate title and subtitle into italian * Merge branches 'pu.MacOS', 'pu.icons' and 'pu.www' into next * doc/RELEASE: sections * doc/RELEASE: prepend .exe to the command * MacOS: preflight: Make sure /tmp/neubot-can-share exists * Merge branches 'pu.doc' and 'pu.MacOS' into next * neubot: make sure there are no executable files inside * MacOS: makepkg.py must be run by root. Period. * MacOS: document makepkg.py algorithm * simplejson: Upgrade to 2.1.6 * MacOS: makepkg.py: more precise unhandled exceptions handling * MacOS: makepkg.py must not write bytecode * MacOS: makepkg.py: really ensure root:wheel ownership * Merge branches 'pu.MacOS', 'pu.doc', 'pu.icons', 'pu.simplejson' and 'pu.www' into next * Release neubot/0.4.1-rc4 Neubot 0.4.1-rc3 [2011-08-28] * bittorrent: don't need to exit(0) * bittorrent: drop privileges after listen() * rendezvous/server.py: export initialization via run() * negotiate: export run() and propagate changes * neubot: Add server.py to start server-side components * Merge branch 'server-command' into next * main/module.py: re-raise SystemExit * speedtest: server: Remove old test server code * speedtest: server: We don't need StringIO anymore * server.py: Expose simple server-side API on port 9775 * bin: Add Nagios plugin for Neubot * Merge branch 'nagios-plugin' into next * nagios-plugin-neubot: critical in nagios is 2 not 1 * nagios-plugin-neubot: set default socket timeout of 3 seconds * nagios-plugin-neubot: arm 10-seconds watchdog timeout * nagios-plugin-neubot: avoid NameError in error path * nagios-plugin-neubot: wrap very long line * nagios-plugin-neubot: basic command line options parsing * nagios-plugin-neubot: manual-compliant strings * nagios-plugin-neubot: Unknown is 3 not -1 * Merge branch 'nagios-plugin-fixes' into next * nagios-plugin-neubot: drop root privileges automatically * nagios-plugin-neubot: comment about the expected scenario * nagios-plugin-neubot: refuse to run as root * net/stream.py: Treat zero bytes send() as EOF * http/server.py: allow to flag some ports as SSL ports * net/CA.py: Generate self-signed certificate under posix * server.py: Export server-api using SSL * nagios-plugin-neubot: Fetch server state via SSL * Merge branch 'nagios-plugin-ssl-and-paranoia' into next * negotiate.py: clarify upstream modules' duties * regress: net/stream.py: repair after s/foo/handle_foo/ * icons: Improved Neubot icon, step 1 * New version management strategy * main/module.py: add two missing modules to py2exe list of modules * Locate neubot directory using os.path.dirname and abspath * Create package installer for MacOSX * main/module.py: disable some modules on Win32 * main/__init__.py: sys.exit(0) at the end is implied * main/__init__.py: remove fork nonsense * server.py: disable server sapi * rendezvous/server.py: explain recent change * libversion.py: print version number when invoked directly * Release neubot/0.4.1-rc3 Neubot 0.4.1-rc2 [2011-07-26] * infobox.py: better testing code * on_gui_login.py: Annoy the user if we cannot collect * privacy: add version number * scripts/make_lang_en.js: Autogenerate www/lang/en.js * www/privacy.html: make sure it's valid XML * www/footer.html: make i18n using class and not id * www/footer.html: always use same value of i18n_resultof * lang: Add autogenerated en.js to repository * Merge branch 'autogen-en.js' into next * debian: add and use postrm to honour apt-get purge * scripts/new_version.py: bugfix regex for 0.4.1-rc1 * scripts/release: zap code to auto-guess next version number * Release neubot/0.4.1-rc2 Neubot 0.4.1-rc1 [2011-07-21] * Don't offer -rc updates to stable clients * Offer to download from the frontend not the backend * doc/RELEASE: remove redundant sentence * doc/RELEASE: typo * Handle exceptions in calling module's MAIN() * api/server.py: make the dispatch table and his callbacks protected * on_gui_login: raise timeout * debian: zap also /var/neubot on purge * release: unbreak regex for matching version * Release neubot/0.4.1-rc1 Neubot 0.4 [2011-07-20] * rendezvous/server.py: stop redirecting bittorrent on a test server * Globally replace next(foo) with foo.next() * Release neubot/0.4 Neubot 0.4-rc6 [2011-07-20] * doc: add windows instructions to RELEASE * manpage: add BUGS section * manpage: s/help/COMMAND/ in in-place example * manpage: Claudio also contributed patches * Release neubot/0.4-rc6 Neubot 0.4-rc5 [2011-07-19] * neubot.list: No more testing repository * Makefile: adjust debian packaging number * privacy.py: keep the oops but switch to LOG.debug * bittorrent/config.py: use port 8080 not 80 * doc: document testing procedure before release * Release neubot/0.4-rc5 Neubot 0.4-rc4 [2011-07-19] * on_gui_login.py: Loop just once to avoid problems with Windows * i18n.js: correct bug, let i18n work on IE * js: delay i18n.translate() * Release neubot/0.4-rc4 Neubot 0.4-rc3 [2011-07-18] * Make it simpler to debug 404 Not Found events * Makefile: quick-dirty fix to adjust permissions * Makefile: initial support for uninstalling neubot * log.py: don't defer commit for too much time * Release neubot/0.4-rc3 Neubot 0.4-rc2 [2011-07-18] * setup.py: fix indent * main/module.py: align * main/module.py: ref all modules so py2exe includes them * on_gui_login.py: spam the user immediately * on_gui_login.py: give daemon time to breathe first * system: add win32 code to kill a process * on_gui_login: add -k switch to kill on_gui_login process * neubot.nsi: kill on_gui_login process on uninstall * neubot.nsi: change on_gui_login start-menu name * neubot.nsi: run also on_gui_login after install * Merge branch 'win32-fix-updates' into next * scripts/release: Initial support for -rc releases * Release neubot/0.4-rc2 Neubot 0.4-rc1 [2011-07-16] * manpage: simplify how-to-dump example * database/main.py: allow to query database path * Release neubot/0.3.7 * speedtest/client.py: remeber position-in-queue history * Let /api/debug return position-in-queue history too * Merge branch 'measure-queue' into next * speedtest/client.py: print uri we're connecting to * rendezvous: add geoip_wrapper.py * database: add table_geoloc.py * database: Bump minor version because of geoloc table * rendezvous/server.py: implement geo-aware rendezvous * geo-rendezvous: Update configuration properties * Merge branch 'geo-rendezvous' into next * rendezvous/server.py: transparent geo-aware rendezvous * api/client.py: hide some properties * api/server.py: remove duplicate properties * http/client.py: hide some properties * http/server.py: hide some properties * net/CA.py: hide some properties * net/stream.py: hide most properties * rendezvous/client.py: hide some properties * rendezvous/server.py: hide some properties * speedtest/client.py: hide some properties * speedtest/negotiate.py: hide some properties * speedtest/server.py: hide some properties * move agent.py properties to config.py * Merge branch 'remove-noise-from-config' into next * Makefile: deb: s/install/$(INSTALL)/g * Makefile: debian: fix postinst prerm permissions * Makefile: -m755 is already the default for install * Merge branch 'improve-Makefile-quality' into next * net/stream.py: duplicate http/stream.py outgoing functionality * http/stream.py: properly set/reset self.writing * http/stream.py: note we can use net/stream.py instead of outgoing * bittorrent/stream.py: allow PIECE block to be a file-like * bittorrent/stream.py: simplify code in the recv path * bittorrent/stream.py: stub for handling jumbo messages * Merge branch 'improve-bittorrent-core' into next * bittorrent/stream.py: prefer exceptions to LOG.error()+close() * bittorrent: Add and use new BitTorrent peer model * bittorrent: cache partial PIECE params in stream.py * bittorrent: ConnectingPeer + ListeningPeer = PeerSimple * bittorrent/stream.py: bitfield is optional * Merge branch 'add-bittorrent-peer' into next * bittorrent/peer.py: save peer bitfield * bittorrent: process HAVE messages * stream.py: add LOG.debug() for HAVE and BITFIELD * bittorrent/stream.py: check incoming CANCEL for correctness * bittorrent/stream.py: deploy more checks on the index * bittorrent/stream.py: deploy some more whitespaces * bittorrent/peer.py: allow to override default random infohash * bittorrent/peer.py: do not choke/unchoke automatically * bittorrent/stream.py: pack/unpack unsigned integers * Merge branch 'bittorrent-misc-enhancements' into next * bitfield.py: Add code to get a randomly filled bitfield * bittorrent/peer.py: use randomly filled bitfields * bittorrent/sched.py: simple algorithms for scheduling requests * bittorrent/peer.py: join initialization and configuration * bittorrent/peer.py: extend peer to perform a simple test * Merge branch 'extend-bittorrent-peer' into next * bittorrent/main.py: sync with new bittorrent/peer.py * Link /api/bittorrent to ServerAPI.api_speedtest() * bittorrent/peer.py: start measuring after the first PIECE * bittorrent/sched.py: ensure we always fill the pipeline * bittorrent/sched.py: force npieces npiecespipe to integer * bittorrent/peer.py: get rid of some self.conf gymnastics * Create a new Peer object for each peer that connects * bittorrent/peer.py: invoke complete() at the end of the test * bittorrent/peer.py: print more informative messages * bittorrent/main.py: stop when the test is complete * bittorrent/peer.py: sync channel adaptation with speedtest * Merge branch 'test-bittorrent-at-home' into next * Revert "bittorrent/sched.py: ensure we always fill the pipeline" * bittorrent/peer.py: Wait for the other end to complete the test * bittorrent/main.py: never activate the measurer * bittorrent/main.py: allow to hint with estimated download speed * bittorrent/peer.py: raise if inflight becomes negative * bittorrent/sched.py: do not schedule 0-7 in sequential order * bittorrent/stream.py: LOG.debug on incoming KEEPALIVEs * Pass time-to-connect to connection_made() * net/dns.py: Cache recent DNS lookups * http/client.py: print and save time-to-connect * bittorrent/peer.py: print and save time-to-connect * Merge branch 'better-time-to-connect-measurement' into next * bittorrent: pass also rtt to complete() * bittorrent/peer.py: implement seeder-only peer * bittorrent: handle each connection with a new Peer (sub)class * bittorrent/peer.py: make BitTorrent test a bit longer * bittorrent/bitfield.py cosmetics * Move bittorrent/main.py content to bittorrent/__init__.py * bittorrent/__init__.py: we don't use MEASURER * bittorrent/__init__.py: pull expected duration from peer.py * bittorrent/__init__.py: factor common code * bittorrent/bitfield.py: paranoid division by two * bittorrent/peer.py: clarify comment * bittorrent/peer.py: always update target_bytes * bittorrent/peer.py: refine and document the stopping rule * bittorrent/peer.py: clarify interested/not interested * bittorrent/sched.py: clarify comment * bittorrent/stream.py: remove unused import * bittorrent/stream.py: protocol_name -> PROTOCOL_NAME * bittorrent/stream.py: cosmetic changes * Merge branch 'bittorrent-maint' into next * speedtest/client.py: comment on some to-be-done refinements * Revert "net/dns.py: Cache recent DNS lookups" * debian: Update GPG pubkey expire time * debian: Update GPG pubkey expire time * debian: Bump packaging number * Makefile: deb: s/install/$(INSTALL)/g * Makefile: debian: fix postinst prerm permissions * debian: Bump packaging number * Makefile: -m755 is already the default for install * bittorrent/stream.py: redef message types for testability * bittorrent/stream.py: RuntimeError on jumbo protocol violation * bittorrent/stream.py: space nit * bittorrent: s/tostring/__str__/ for bitfield * bittorrent/stream.py: check handshake for correctness * bittorrent: send bitfield in peer.py not in stream.py * bittorrent/stream.py: simplify type and length checking * bittorrent: create bitfield at the peer level * bittorrent/stream.py: bugfix message reassembler * bittorrent/stream.py: allow to specify small-message threshold * bittorrent/stream.py: sync _send_message and send_piece * Add regress test for bittorrent/stream.py * Merge branch 'bittorrent-regress' into next * net/stream.py: some cosmetic changes * net/stream.py: move self.conf near self.parent self.poller * net/stream.py: {recvb,send}locked -> {recv,send}_blocked * net/stream.py: get rid of _do_close() * net/stream.py: s/isclosed/close_complete/ * net/stream.py: put all state variables together * net/stream.py: s/kickoffssl/recv_ssl_needs_kickoff/ * net/stream.py: Use True/False for booleans * net/stream.py: implement close-pending * Merge branch 'stream-maint' into next * net/stream.py: parent is not optional anymore * net/stream.py: distinguish between closed() and shutdown() * net/stream.py: protection against multiple closed() * net/stream.py: recv_maxlen was over-engineering * net/stream.py: guard vs. close_complete * net/stream.py: cosmetic change * net/stream.py: simplify and boolize recv_ssl_needs_kickoff * net/stream.py: reorganize and document global variables * net/stream.py: more clear read_send_queue() * regress: add net/stream.py set of tests * Merge branch 'stream-unittest' into next * net/poller.py: allow to pass arguments to sched() * www: Added language support * www: allow to i18n textareas too * www: i18n now use GetText idea * www: make the page visible when i18n is not available * Merge branch 'web-gui-i18n' into next * net/stream.py: print error if connect doesn't fail immediately * Update BitTorrent test to avoid simultaneous downloading * bittorrent: sync peer.py duration with speedtest * doc: add documentation for bittorrent/peer * Merge branch 'bittorrent-peer-enhancements' into next * net/dns.py: Cache recent DNS lookups * http/client.py: convert to debug() an annoying LOG.info() * net/dns.py: Make sure we also consider the port number * Merge branch 'cache-dns' into next * Under debian always use /usr/bin/python * http/stream.py: I don't like docstrings * http/stream.py: let net/stream.py manage outgoing queue * http/stream.py: raise RuntimeError on errors * http/stream.py: send_message(): allow to customize smallmessage * Merge branch 'http-layer-cleanups' into next * bittorrent/stream.py: update to new net/stream.py code * Note we should move close() from protocols to generic stream * http/messages.py: RFC2616-compliant host header support * http/client.py: Save host header value * When needed, pass compose() host header information * Merge branch 'fix-host-header' into next * http/message.py: responses are not supposed to have host header * Distinguish between periodic and nonperiodic notifications * notify.py: Do not declare global event names * Teach versioncmp() about release candidate numbers * Make sure versioncmp() refuses to process negative numbers * database/tool_collate.py: Collate various databases * database/tool_goodset.py: extract goodset from database * database/tool_slice.py: split database in monthly chunks * database/tool_users.py: Count per-month active users * database/tool_buckets.py: make stats out of a database * Merge branch 'database-analysis' into next * database/tool_collate.py: Honour -o command line option * database/tool_buckets.py: robustness vs negative values * database/tool_buckets.py: convert buckets number to real value * database/tool_buckets.py: write percentage not absolute value * utils.py: raise RuntimeError even if rc number is greater than sys.maxint * database/tool_buckets.py: minor fixes * database/tool_privacy.py: enforce privacy settings * database/tool_goodset.py: for god's sake don't commit every row * tool_gooset.py tool_privacy.py: Never override timestamp * database/tool_privacy.py: we can do better when we don't have perms * Merge branch 'database-goodies' into next * speedtest.html: internationalize page * www: added bittorrent support * database/_table_utils.py: helpers to build queries * database: always use sqlite.Row as row factory * bittorrent/_gen.py: generate random bittorrent results * database/table_bittorrent.py: manage table bittorrent * Bump database version number because we've added bittorrent table * api/server.py: Really implement /api/bittorrent * database/table_speedtest.py: remember we should update it * speedtest/gen.py: remember we should rename it * api/server.py: minor cleanup in api_speedtest() * Adapt existing BitTorrent code to test client and server * Prototype of BitTorrent test's client * Prototype of BitTorrent test's server * Merge branch 'bittorrent-negotiation' into next * database: Sort in descending order * www: insert connect time in bittorrent results * bittorrent.js speedtest.js: Better label for X axis * www: Less emphasis on the test name * main.py: Wait for more before timing out * main.py: Die if we cannot reach the GUI * main.py: response.read() before connection.close() * http/server.py: Do not violate RFC 2616 Sect. 14.30 * http/message.py: Capitalize HTTP header names * Live up to the promise that header names are case insensitive * Merge branch 'improve-openbrowser' into next * net/poller.py: Safer timeout algorithm * net: Implement watchdog mechanism * http/server.py: add connection_ready() * net/stream.py: add __repr__() to listener and connector * net/stream.py: register and then run hooks at close() * privacy.py: add collect_allowed() * tool_privacy.py: Make can_share count what is supposed to * regress/bittorrent/stream.py: bells and whistles * regress/net/streams.py: bells and whistles * regress/blocks.py: unbreak test * Move regress/speedtest.py to a more convenient place * Merge branch 'regress-love' into next * http/server.py: bells and whistles * http/server.py: export HTTP_SERVER * http/server.py: By default daemonize * Merge branch 'http-server-love' into next * http: allow for outgoing body to be a basestring * http: allow to rewrite request uri at will * streams: globally replace shutdown() with close() * log: allow to attach custom message to exception * doc: temporarily remove outdated documentation * http/utils.py: add content_length() function * net/stream.py: make atclose() robust wrt duplicate entries * http/utils.py: make prettyprintbody string-safe * http/server.py: send 500 if child.got_request_headers() fails * negotiate.py: Add new negotiation code * bittorrent: Use new negotiation code * www/privacy.html: corrected & -> & * www/privacy.html: add i18n classes * http/utils.py: unbreak prettyprintbody() * http/server.py: Better content-type and content-encoding * i18n: retain the i18n_ prefix for HTML classes * settings.html: add italian translation * database/tool_slice.py: make a slice over a true range * database/tool_buckets.py: count the number of tests per user * net/poller.py: check_timeout(): deploy some blank lines * net/poller.py: cosmetic: move break_loop() up * net/poller.py: Merge update_tasks() and dispatch_events() * net/poller.py: _loop_once(): remove redundant else * net/poller.py: Now ready to loop forever * Merge branch 'poller-prepare-to-loop-forever' into next * rendezvous/client.py: fix the unknown-test-type case * rendezvous/client.py: choose a test at random * rendezvous: support for BitTorrent test * Merge branch 'bittorrent-rendezvous' into next * net/poller.py: of course tasks are AHEAD in time * privacy.html: italian translation * lang/it.js: give credit to Claudio * www/bittorrent.html: minor language fix * bittorrent.html: translate to italian * Merge branch 'finalize-i18n' into next * database/table_config.py: Work-around Py 2.5 sqlite.Row * main.py: use bittorrent.client to implement bittorrent * bittorrent/server.py: Fix the port number * bittorrent/client.py: make sure we connect to port 6881 * speedtest/client.py: anticipate decision of test to perform * bittorrent/client.py: normalize response's queue_pos parsing * regress/negotiate.py: minor changes * bittorrent/client.py: do not collect if test fails * bittorrent/client.py: cosmetic change * js/state.js: cosmetic changes * js/state.js: avoid name clashes with reserved words * state.py: The dumber, the better * state.py: add unit test, remove ad-hoc test code * state.py: leading underscore before private attributes * Let BitTorrent update() the STATE * Clear results before test in a robust way * Merge branch 'bittorrent-api-state' into next * bittorrent/estimate.py: download and upload speed estimate * negotiate.py: always process request bodies * bittorrent: pass adjusted target_bytes to complete() * bittorrent: adapt target_bytes to channel conditions * Merge branch 'bittorrent-estimate' into next * bittorrent: log PEER_ID during handshake * bittorrent/stream.py: remove redundant conditional * bittorrent/server.py: always use the same PEER_ID * bittorrent: use same infohash for listener and connector * Merge branch 'more-compliant-bt' into next * rendezvous/client.py: alternate speedtest and bittorrent tests * net/poller.py: ongoing work * bittorrent: unsanely raise watchdog timeout * bittorrent: Instrument peer to measure time-to-upload * Merge branch 'bittorrent-upload-takes-too-much-time' into next * bittorrent/peer.py: oops, unbreak previous * Modularize main.py and make boot.py a submodule of main * Add new show_database command * log.py: reindent InteractiveLogger * log.py: Make oops() and exception() more similar * log.py: Move test code into regress * Merge branch 'log-misc' into next * bittorrent/client.py: remember to handle connection_failed * notify: print names of events we publish * net/poller.py: Take care of select() returning EINTR. * net: more readable function names * _table_utils.py: Verify strings more strictly * database: By default select ascending * Store log records into the database * regress: add test for neubot/config.py * bittorrent/peer.py: Cosmetic changes * bittorrent/peer.py: stub for connection_failed * bittorrent/client.py: Deal with BitTorrent connect() failure * Merge branch 'bittorrent-fixes' into next * bittorrent/negotiate.py: add explanatory comment * bittorrent/stream.py: add explanatory comment * bittorrent/stream.py: Use tuple not vector * bittorrent/stream.py: document global objects * bittorrent/stream.py: the project starts with uppercase * bittorrent/stream.py: Tweak comment * bittorrent/stream.py: Sync comment with reality * bittorrent/stream.py: More robustness in the reader * bittorrent/stream.py: document the reader a bit more * bittorrent: consistently use 'big' in place of 'jumbo' * bittorrent: improve function names * bittorrent/peer.py: add explanatory comment * bittorrent/peer.py: Use tuple, not vector, for states * bittorrent/client.py: add explanatory comment * Merge branch 'bittorrent-cosmetics' into next * log.js: Fetch severity properly when deciding color * utils.js: zap newline at end of file * bittorrent: improve scheduling and channel adaptation * bittorrent/peer.py: rewrite logging * bittorrent/peer.py: final comments * bittorrent/peer.py: watchdog timeout after 60 seconds * Merge branch 'more-bittorrent-love' into next * bittorrent/peer.py: committed wrong PIECE_LEN by mistake * bittorrent: log the endpoint we're connecting to * api/server.py: Unbreak /api/log?debug=1 * notify.py: default subscribe() context to None * poller: Use lambda to avoid special-case arguments * Error slippage: MacOSX getpeername() fails with EINVAL * notify.py: prefix protected stuff with underscore * notify.py: protect our assumptions with a warning * notify.py: allow to query whether an event is subscribed * Merge branch 'notify-love' into next * config.py: zap multiple blank lines * config.py: update docstring * config.py: print the source we're reading variables from * Merge branch 'config-love' into next * bittorrent: Add unit test for table_bittorrent.py * bittorrent/config.py Prepare to keep configuration * bittorrent: Make __init__.py the real module entry point * bittorrent: quit neubot when the client-side test is finished * bittorrent/client.py: print informative messages * bittorrent: LOG.oops() if "testdone" is not subscribed * bittorrent/sched.py: use a single next-piece scheduler * bittorrent/peer.py: Re-add robustness in channel adaptation * Merge branch 'bittorrent-love' into next * net/poller.py: pass args and kwargs correctly to tasks * log: Use the database only when we're the agent * log: periodically prune logs saved into the database * Merge branch 'log-database' into next * net/poller.py: be more precise wrt Task.timestamp * config.py: allow to __getitem__ from CONFIG * Move configuration helpers from bittorrent/config.py to config.py * bittorrent/__init__.py: grammar * main/common.py: Version must not end with newline * state.py: LOG.debug() on statechange * rendezvous/client.py: sort imports * rendezvous/client.py: Simplify code using lambda * rendezvous/client.py: No need to use StringIO * rendezvous/client.py: Factor out some common code * rendezvous/client.py: add brief file description * rendezvous/client.py: grammar * rendezvous/client.py: Ditch self.testing state variable * rendezvous/client.py: Use "testdone" instead of TESTDONE * rendezvous/client.py: _protected nazism * rendezvous/client.py: silently ignore the count argument * rendezvous/client.py: more cosmetics * Merge branch 'rendezvous-love' into next * database: Bump major version number because of log table * rendezvous/client.py: Move safety checks in connection_lost() * rendezvous/client.py: Use lambda to simplify code * rendezvous/client.py: Always use fresh configuration * agent rendezvous.client: Remove duplicate variables * Merge branch 'rendezvous-love' into next * Make sure CONFIG.register_defaults() scope is always global * settings.js: no point in changing agent.daemonize from web gui * config: Hide socket buffers options * config: Hide rendezvous.server-only variables * api/server.py: Very low barrier to prevent damage from kiddies * Merge branch 'config-love' into next * Fixed setup.py * Merge branch 'next.evfire' into next * it.js: shorter translation * rendezvous/server.py: bugfix need-update? algorithm * utils.py: strip version numbers before comparison * neubot/gui: message boxes using various GUIs * on_gui_login.py: check updates and privacy on gui login * neubot/main.py: add the on_gui_login command * neubot.nsi: run on_gui_login command on user login * unix_root: Add autostart .desktop file for GNOME * Makefile: install .desktop file to run some checks on login * Merge branch 'on-gui-login-initial' into next * Small fixes in infobox_tk and infobox_gtk * Merge branch 'next.evfire' into next * on_gui_login.py: make testing from commandline easier * gui: function infobox -> class InfoBox * gui: fallback to a valid InfoBox(message) stub * gui: add testing code to generic infobox.py too * gui: build a list of all the available infoboxes * gui: autoclose infobox after timeout * gui: add unit test for infobox * infobox_gtk.py: button large 1/3 of the window * infobox_gtk: use neubot icon * Zap infobox_win32: Tk we'll be enough for Windoze users * Merge branch 'improve-infobox' into next * setup.py: autogenerate sources and data * Makefile: use setup.py to install * Merge branch 'makefile-use-setup-py' into next * Added 'build/' and 'MANIFEST' to cleaned files * Handle gracefully failure in privilege dropping * Added a comment about PyPy compatibility. * main/module.py: changed the way neubot dinamically loads a module's main() at runtime * Merge branch 'next.evfire' into next * Merge branch 'next' * main/__init__.py: no newlines in version pls * debian: return package version to -1 * Release neubot/0.4-rc1 Neubot 0.3.7 [2011-05-20] * debian prerm: Consistent check and action * http/messages.py: Add response field * neubot/utils.py: Add asciify() * http/ssi.py: Add minimal support for server-side includes * http: add stream.py client.py server.py * Merge branch 'new-http-core' into next * api_service.py: Service for /api/foo requests * ui.py: Reimplement UIServer using http.server * Merge branch 'api_service' into next * TODO: We should SSI only text/html files * http/server.py: SSI text/html resources only * www: extract and use header.html, footer.html from index.html * Merge branch 'www-split' into next * speedtest.js: 80x24 orthodoxy * speedtest.js: don't attempt to plot empty data sets * www: Append .min to minified javascripts and update header.html * header.html: deploy one more media=screen * Merge branch 'www-settle' into next * README: refer to PRIVACY for privacy policy details * PRIVACY: spell out the details of our privacy policy * privacy.html: rst2html PRIVACY > privacy.html plus some editing * Merge branch 'privacy-policy' into next * marshal.py: Rewrite with more knowledge * neubot: Move config.py complexity to api_service.py * database.py: Hack for XML-on-database oddities * Merge branch 'new-marshal' into next * www: load the proper javascript for each page * http/server.py: Don't attempt to process empty services list * shell.py: Very simple command line shell * boot.py: Faster boot procedure * neubot neubotw: Try using new startup procedure * Merge branch 'main-maint' into next * start-neubot-daemon: Now safe to run neubot start * boot.py: Zap two premature sys.exit() * boot.py: We don't need to specify /index.html * boot.py: win32: Do not spawn a thread when already running * boot.py: Simplify logic * boot.py: The webgui command does not make sense * rootdir.py: Auto-compute location of WWW files * ui.py: Import WWW from neubot.rootdir * pathnames.py: Moved WWW to neubot.rootdir * boot.py: Auto-compute location of Neubot sources * Merge branch 'auto-paths' into next * system.px unix.py win32.py: Import code for daemons from utils.py * agent.py: The new default command * shell.py: Include the agent command * boot.py: Launch agent.py not rendezvous.py * rendezvous.py: Delete not-true-anymore comment * Merge branch 'agent' into next * api_service.py: Add missing blank line * http/server.py: Allow to register already-instantiated service * http/messages.py: Cosmetic changes * http/messages.py: Use collections.defaultdict * http: Automatically print headers, decommission prettyprint * http/stream.py: Do not debug() receiver state * Merge branch 'decommission-prettyprint' into next * utils.py: Decommission unused XML code * neubot: One step closer decommissioning fixkwargs() * neubot: Start decommissioning Stats and SimpleStats * utils.py: Sanitize imports * utils.py: I'm taking heed of it for 2011 too * Merge branch 'utils-maint' into next * marshal.py: Allow to serialize/unserialize vectors too * rendezvous.py: Preparatory work for the next patch * rendezvous.py: Convert to ServiceHTTP * rendezvous.py: Use marshal.py for RendezvousRequest * rendezvous.py: Use marshal.py for RendezvousResponse * rendezvous.py: Use new http client * rendezvous.py: Zap unused imports, style * rendezvous.py: Don't need to import/use ui anymore * rendezvous.py: Replace flags with boolean * rendezvous.py: Hardcode VERSION to 0.3.7 * Merge branch 'rendezvous-maint' into next * agent.py: Bugfix RendezvousClient.__init__() invocation * database.py: Work-around timestamp being a float * speedtest.py: Make sure SpeedtestCollect.timestamp is an integer * utils.py: improved version comparation algorithm * boot.py: Merge shell.py and dispose of shell.py * api_client.py: Use m.compose(...) not compose(m, ...) * speedtest.py: Make sure we use __init__() and inherit from object * speedtest.py: Use marshal.py for marshalling/unmarshalling * speedtest.py: Use m.compose(...) and not compose(m, ...) * Merge branch 'speedtest-maint' into next * HTTPListener: Immediately pass new request to the parent * http/stream.py: Avoid pychecker warning * http/server.py: Add sample ServiceHTTP to avoid pychecker warning * neubot/http: Avoid another pychecker warning * Merge branch 'http-reduce-warnings' into next * notify.py: Rewritten using collections.defaultdict() * speedtest.py: Unblur negotiator to tracker boundaries * speedtest.py: One more put-two-blank-lines-around-classes patch * speedtest.py: Get rid of RESTRICTED * speedtest.py: Re-implement server-side using ServerHTTP * speedtest.py: s/connection/stream/ after previous patch * doc/speedtest-server.png: Dispose of now-obsolete documentation * Merge branch 'speedtest-use-new-http-server' into next * bittorrent/stream.py: Don't upcall parent on connection lost * bittorrent/main.py: Get rid of VERBOSER * bittorrent/main.py: s/handler/stream/ * http/message.py: Remove unused import * net/stream.py: configure(): s/dictionary/conf/ * net/stream.py: configure(): Use dictionary.get(key, default) * net/streams.py: Get rid of StreamMeasurer * VERBOSER was actually not such a good idea * Merge branch 'stream-simplify' into next * http/server.py: process_request: s/func/serve/ * Don't pass listener param to http services * net/stream.py: GenericProtocolStream: Cosmetic changes * http: Don't pass upstream reference to connector or listener * http/server.py: ServerHTTP: s/dictionary/conf/ * BTListeningPeer BTConnectingPeer: s/dictionary/conf/ * net/stream.py: Simplify stream construction * http: Move connection_ready() up one level * Merge branch 'stream-v3' into next * Make sure we compute time-to-connect() * http/client.py: Register with measurer when needed * Migrate ap_client.py to http/client.py and propagate changes * http: support for sending chunked transfer encoding * arcfour.py: add support for generating random data for N seconds * speedtest.py: Cosmetic changes * speedtest.py: SessionTracker: zap comment * speedtest.py: Don't routinely print queue length if not needed * Elaborate on the idea of http server and child server * net/stream.py: allow to connect() more than one socket at a time * net/stream.py: Make sure SSL works * http/client.py: allow to connect to a given uri * http/client.py: seminal work to load arbitrary http clients * http/client.py: allow to load http class from another module * speedtest.py: deploy bits of the new speedtest client * Merge branch 'new-speedtest-client-alpha' into next * speedtest.py: new complete speedtest client * net/stream.py: allow to measure RTT only * speedtest.py: Make sure new tests collects results * speedtest.py: start using new speedtest client * net/stream.py: add two extra stat counters * speedtest.py: use bytes_*_tot to measure speed * net/streams.py: Measure: factor measure_speed() out * net/stream.py: measure_speed(): safer delta <=0 retval * net/stream.py: Measurer: gargabe collect measure() * Allow speedtest.py to perform incremental measurements * speedtest.py: don't connect() all connections at the same time * Merge branch 'incremental-measurements' into next * speedtest.py: always use two connections * speedtest.py: decommission old client code * speedtest.py: Prefer import to from..import for stdlib classes * Move neubot/boot.py to neubot/main.py * agent.py: Bypass neubot/ui.py * neubot/ui.py: F.O.D. * rm http/clients.py http/servers.py * http/utils.py: Fetch defs from http.stream not http.handlers * http/utils.py: throw away unused make_filename wankery * decommission http/handlers.py net/streams.py * neubot/tools: decommission * My dying neubot/pathnames.py * pathnames.py sleeps with the fishes * Merge branch 'slaughterhouse-number-five' into next * speedtest.py: Use one obytes per stream * Fix broken speedtest.py measurements * Update TODO file * Move system stuff below neubot/system/ * Funeral portrait for ismacosx() * system/unix.py should not test for if os.name == "posix" * system/unix.py: Remove unused import * system/win32.py: Zap __all__ and if os.name == "nt" check * Move api stuff into neubot/api/ * http: Rename messages.py to message.py * Version in neubot/__init__.py passed away * New home for compose() in messages.py: the recyle bin * Move database.py to database/__init__.py * Move rendezvous.py to rendezvous/__init__.py * Move speedtest.py to speedtest/__init__.py * Move debug-related files to neubot/debug * Merge branch 'tidy' into next * log.py: simplify code * system: move drop_privileges after go_background * Implement and use system-dependent redirect_to_dev_null() * Implement and use system-independent write_pidfile() * Dirge for utils.py's become_daemon() * Implement and use want_rw_file() in database.py * utils.py: ditch getpwnaml() getpwnamlx() * Merge branch 'cleanup-utils' into next * Taking care of neubot/debug/__init__.py * marshal.py: Move unicodize() stringify() to utils.py * s/asciify/asciiify/g using the new sed_inplace * scripts: Tweak sed_inplace to accept more than one file * utils.py: Simplify asciiify() implementation * utils.py: Implement and share function to convert string to bool * Merge branch 'coercers' into next * rendezvous/__init__.py: Adjust connection_failed() signature * Meld times.py into utils.py and propagate changes * utils.py: Add and use support to cherry-pick classes at runtime * www js: mv neubot.js index.js and propagate changes * www: get rid of non-existent CSS classes * www: replace absolute links with relative links * css/style.css: add newline at end of file * Merge branch 'www-maint-alessio' into next * www js: created function update_sidebar() and called it from comet * js/state.js: ... and justice for stray whitespaces * js/index.js: kill outdated comment * www: s/testName1/testNameSideBar/ * js/state.js: UTF-7 integralism * Merge branch 'js-maint' into next * api/server.py: Sort imports * api/server.py: Return {} on POST /api/config * After POST /api/config return only what changed via /api/state * Merge branch 'api-config-tweaks' into next * log.py: Sort imports * log.py: Two blank lines around Log, please! * log.py: Reword docstring * log.py: Remove protection against comet storms * log.py: Add _log() a SEVERITY argument * log.py: Improve test unit * log.py: Rewrite that crappy serialization mechanism * api/server.py: Add /api/log to read recent logs * log.py: Fix exception() with respect to splitting lines * Merge branch 'exhume-api-log' into next * api/server.py: Provide API support for /api/testnow * api/server.py: Make sure we JSONize logs * api/server.py: Unbreak previous by importing json * config.py: Keep configuration into a modified dictionary * api/server.py: Provide more information on internal errors * config.py: Spit out more meaningful errors * Merge branch 'config-on-dict' into next * config.py: Avoid pychecker warning * www: add log page * www: seek and destroy some more white spaces * Do not change directory to profile dir * From neubot import system to reduce number of imports * Unconditionally drop root privileges * Only the agent must write pidfile * write_pidfile(): Convert integer to string to avoid exception * Write pidfile only when needed * Merge branch 'system-love' into next * Add CONFIG flags to manage privacy settings * api/server.py: Write the database after POST /api/config * database: query_results_functional(): zap unused arguments * database/__init__.py: Remove outdated comment * database: Move code to migrate to database/migrate.py * database/__init__.py: Zap unused imports, sort remaining ones * Merge branch 'update-database' into next * database/__init__.py: Abstraction with sugar * api/server.py: database.dbm != sqlite3.Connection * scripts: Move make clean logic into a script * utils.py: Make sure we use integers to represent booleans * Keep boolean values consistent across CONFIG lifetime * config.py: Allow properties names to contain dots * config.py: store properties descriptions too * Merge branch 'improve-config' into next * boot.py: generic bootstrap code for neubot commands * net/stream.py: Avoid multiple from neubot.utils import * net/stream.py: do not hide soclose() errors * Merge branch 'stream-love' into next * net/stream.py: unit test: connect multiple sockets at once * net/stream.py: We don't need to define KIND* constants * net/stream.py: test unit: add echo protocol * Move measurer bits from net/stream.py to net/measurer.py * Support for serializing connect() landed into net/stream.py * Don't store reference to measurer into configuration * Merge branch 'more-stream-love' into next * www: highlight of tabs * www: improve getSetConfigVar function to get/set multiple values * www: added getConfigVars and setConfigVars * www: privacy now works * www: modified n/a in status * www: added settings page * www: added seconds to log page * www: moved numchanged variable * www: more whitespace intolerance * Merge branch 'palmero-www' into next * log.py: Put latest log first * www: added error function in setConfigVars * database: sort latest result first * speedtest/__init__.py: quick hack for measurer * agent: Bind or die when UI is enabled * www: moved tooltip code in state.js * www: abandoned idea to insert chart in homepage * www: when config variable change, the setting page is updated * Beating the ass of white lines again * Merge branch 'palmero-www' into next * speedtest: force the measurer we want just before we need it * www: added support for config labels and improve colors in Settings page * agent.py: Use boot.py config.py instead of options.py * api/client.py: Use boot.py config.py instead of options.py * net/CA.py: Use boot.py config.py instead of options.py * Merge branch 'decommission-options' into next * net/stream.py: Use boot.py config.py instead of options.py * main.py: updated options to start/stop/status * www: bugfix in settings.js * database: Make sure /api/speedtest returns real results * www: added feature not to modify dangerous settings * log.py: allow to print exceptions at different error levels * log.py: unit test: make sure we deal with exceptions gracefully * api/server.py: Use LOG.info() for ConfigError errors * Merge branch 'config-errors' into next * speedtest: Maybe this time I'll fix measurer for real * www: now charts rule * log.py: Add oops() function * net/stream.py: Use oops for the unicode warning * Merge branch 'discourage-sending-utf8' into next * api/server.py: sort configlabels * config.py: killed force property * http/message.py: check that the http request is utf8 * log.py: increase log size * log.py: reverse log order again * notify.py: TESTDONE should not run periodically * notify.py: Bugfix the TESTDONE hack * system/linux.py: collect system-dependent stats * utils.py: Add get_uuid() * speedtest/gen.py: Generate random results * database/table_config.py: Algorithms for config table * database/__init__.py: Use table_config * config.py: Use table_config * Merge branch 'table-config' into next * speedtest/__init__.py: Make sure we use client uuid * database/migrate.py: migrate from 1.1 to 2.0 * database/migrate.py: Give credit to Alessio * database/migrate.py: s/client_uuid/uuid/g * speedtest/get.py: s/client_uuid/uuid/ * speedtest/gen.py: use relative not absolute time * database/table_speedtest.py: Algorithms for speedtest table * database/migrate.py: Make 1.1 -> 2.0 migration more robust * Use code in database/table_speedtest.py * Merge branch 'table-speedtest' into next * net/stream.py: save conf reference into stream * net/stream.py: move duration checks in GenericProtocolStream * net/stream.py: separate handling of send and recv socket buffers * net/stream.py: allow to tune and reduce default chunk size * Merge branch 'stream-love' into next * bittorrent/main.py: migrate to neubot/config.py * log.py: allow to print custom message on complete() * log.py: add timing for operations * log.py: allow to personalize progress indicator * log.py: remove unused import * log.py: avoid pychecker warnings * log.py: add testing code for in-progress feature * Merge branch 'log-love' into next * net/stream.py: all-or-nothing semantic for multi-connect * HeadlessMeasurer: allow to restart from scratch * log.py: more precise check for exceptions in unit test * http/server.py: collapse all imports from neubot.utils * http/server.py: convert from options.py to config.py model * http/server.py: allow to disable mime-guessing code * http/server.py: syntactic sugar to serve current directory * Merge branch 'http-love' into next * agent.py: pass correct properties names to http/server.py * http/client.py: collapse imports from neubot.utils * http/client.py: remove unused import * http/client.py: migrate from options.py to config.py * Merge branch 'http-love' into next * Move neubot/options.py into the attic * Return to old-style speedtest * config.py: do not return ConfigDict() on select() * Merge branch 'speedtest-backout' into next * speedtest: Remove /speedtest/download/2 code * speedtest: make TestServer self-sustained * Merge branch 'speedtest-love' into next * arcfour.py: No more RandomData users * log.py: don't flood log with access logs * privacy: Responsible is JC, not DAUIN director * speedtest: don't save body when not needed * main.py: allow to turn on memleak debugging * speedtest/client.py: make sure we measure connect_time * speedtest: pass ClientSpeedtest the real configuration * http/stream.py: silence http stream a bit * http: pretty print body if possible * config: Not a good idea to copy just a subset * js/state.js: fetch /api/config just once * www/settings.html: do not encourage people to make random changes * css/style.css: there is no justification for this commit * speedtest/client.py: unbreak /api/state for negotiate and collect * http/utils.py: remove unused import * notify.py: dispose of deprecated code * api/server.py: Make /api more transparent and debuggable * api/server.py: garbage collect /api/testnow * api/server.py: return available APIs on GET /api * api/server.py: allow to inspect POLLER and NOTIFIER state * Merge branch 'api-love' into next * Remove neubot.dia icon from the repository * Make sure update_tasks() does not misbehave * speedtest/client.py: remember to stop the measurer * net: s/closing/closed/ in Connector and Listener * api/server.py: import version from boot * Comment on what should be done just after release * rendezvous: move message-handling code to compat.py * Copy rendezvous server code to rendezvous/server.py * Copy rendezvous client code to rendezvous/client.py * agent.py: use new rendezvous code by default * Shrink neubot/rendezvous/__init__.py * Merge branch 'rendezvous-love' into next * update.py: download and verify next version archive * update.py: specify the correct file name for MacOSX * rendezvous/server.py: use releases.n.o instead of w.n.o/download * Do not use with because Python 2.5 does not support it * rendezvous/server.py: allow to decide default speedtest server * rendezvous/server.py: we must return a list not a scalar * http/client.py: make connect_uri() more robust * rendezvous/client.py: subscribe before connect_uri * Add main() to speedtest client * Move speedtest TestServer into speedtest/server.py * arcfour.py: use warning again * Move a copy of speedtest messages to speedtest/compat.py * Copy to speedtest/session.py session-management code * Copy to speedtest/negotiate.py speedtest NegotiateServer * Merge branch 'speedtest-love' into next * speedtest/client.py: fetch structures from speedtest/compat.py * main.py: implement speedtest command using speedtest.client * We can now dispose of speedtest/__init__.py unused code * Merge branch 'speedtest-love' into next * api/server.py: alphabetically sort imports * api/server.py: remove unused import * api/server.py: import DATABASE not database from neubot.database * api/server.py: use table_speedtest.listify() * api/server.py: api_speedtest: relax checks on since, until * Merge branch 'api-server-love' into next * speedtest/negotiate.py: use table_speedtest * speedtest/client.py: use table_speedtest * api/server.py: Start moving properties to config.py * speedtest: cast privacy settings to integers * Merge branch 'speedtest-db-and-privacy' into next * Improve database code * boot.py: let the user decide not to merge from environment * boot.py: allow to list all the available properties * config.py: undo the starts-with-enable hack * boot.py: cosmetic changes * main.py: sync * Merge branch 'main-and-options' into next * log.py: cosmetic changes * system/win32.py: decommission NTEventHandler code * bin/neubotw: re-enable redirect-from-the-beginning * Merge branch 'log-love' into next * start-neubot-daemon: search for python2.7 too * Remove obsolete etc/neubot/config * doc/neubot.1.txt: remove references to /etc/neubot/config * man1/neubot.1: sync with doc/neubot.1.txt * Makefile: remove rules to install configuration file * Merge branch 'delete-old-etc-file' into next * Makefile: pathnames.py no longer exists * Makefile: remove seldom used bdist commands * Makefile: even lint was not used very often * Makefile: we can avoid the hidden _all target * Makefile: echo -n does not work on the Mac, so use printf * Makefile: we can kill some more blank lines * Makefile: PREFIX is just fine * neubot.nsi: deploy some more white lines * setup.py: update list of things to install * Makefile: shrink archive a little bit * Makefile: /etc/neubot is not relevant anymore * Makefile: simplify and improve source-installing procedure * Makefile: make some loops more robust * Makefile: do not install apple .DS_Store * Replace scripts to compute sums with python equivalent * Merge branch 'build-system-love' into next * Makefile: tell the user we're going to install * main.py: make sure we can start neubot using an alternate port * speedtest/client.py: adjust log messages for negotiation * database: Special case for when database is in memory * net/stream.py: add __repr__ to Stream * speedtest/session.py: add __repr__ to SessionState * regress: add test for speedtest * Be a little more paranoid about http.server.rootdir * Good-enough generator for data to exchange during tests * api/server.py: more UTF-7 integralism * privacy.html: move privacy policy into a textarea * privacy.py: Make sure privacy settings make sense * privacy.js: remove now unneeded ternary-operator gymnastics * privacy.js: notify the user if we cannot save privacy settings * Merge branch 'privacy-love' into next * main.py: be patient, wait for web gui to become ready * js: make sure we always put functions inside namespaces * utils.js :s/^\ *$//g * Make sure root directory guessing works for frozen win32 exe * scripts/release: run ./scripts/cleanup to remove garbage * Immediately break POLLER.loop() on /api/exit * config.py: Export uuid and version * Listener: make the accept() procedure much more robust * main.py: export api.client module * main.py: more terse --help output * database/main.py: don't use boot.common * doc man: Updated manual page * patches: add patch to fix some bits of the manual page * Manpage tweaks * Merge branch 'next' * Release neubot/0.3.7 Neubot 0.3.6 [2011-03-18] * arcfour.py: New home for ARC4 code * net/streams.py: Import ARC4 code from arcfour.py * net/streams.py: Unbreak ARC4 * Merge branch 'arcfour' into next * bittorrent/main.py: Simplest possible transmission test * bittorrent/main.py: Use arcfour_new to scramble pieces * bittorrent/main.py: Make piece scrambling conditional * bittorrent/main.py: Allow to obfuscate the whole protocol * bittorrent/streams.py: Pass CHOKE/UNCHOKE INTERESTED/NOT_INTERESTED * bittorrent/main.py: Honour CHOKE/UNCHOKE INTERESTED/NOT_INTERESTED * bittorrent/main.py: Keep at most 32 pieces in flight * bittorrent/main.py: Allow to ovverride default sobufs size * bittorrent/streams.py: Increase robustness and verbosity * Merge branch 'bittorrent-test' into next * neubot/times.py: The various definitions of time * Always pull the times functions from neubot/times.py * Merge branch 'maint-time' into next * system.py: Generic support for OSes * Always use neubot.system * Merge branch 'maint-system' into next * times.py: Zap a couple of whitespace errors * neubot/log.py: Simplify encoding to JSON * neubot/log.py: Remove __all__[] * neubot/log.py: Remove deprecated code * log.py: Avoid pychecker warning * Make sure we always import LOG from neubot.log * Merge branch 'maint-log' into next * neubot/options.py: Remove __all__[] * net/CA.py: Do not import * from options.py * options.py: Do not suggest to import * * Move neubot/options.py manual to do/neubot.3.txt * Merge branch 'maint-options' into next * net/pollers.py: Remove unneeded __del__ * net/pollers.py: Remove stats-printing code * net/pollers.py: Style * net/pollers.py: s/PollerTask/Task/g * net/pollers.py: Pass exceptions upstream * net/pollers.py: No more global funcs, just one global object * Always import POLLER from net.pollers * Merge branch 'maint-poller' into next * neubot/net: mv pollers.py poller.py * Make sure we always import from net.poller not net.pollers * net: Copy to stream.py the new classes of streams.py * Make sure we import from stream (not streams) where needed * bittorrent: mv streams.py stream.py * bittorrent/main.py: Import from bittorrent.stream not streams * Merge branch 'rename-files' into next * Revert "net/pollers.py: Pass exceptions upstream" * streams.py: Remember to remove self.stats * utils.py: Cosmetic changes * utils.py: Better to raise ValueError than Exception * handlers.py: Remove unused import * handlers.py: Use import rather than from..import for collections * messages.py: Cosmetic changes * messages.py: Store body length in a message field * messages.py: Use get(..., default) instead of fixkwargs * messages.py: Make compose() a method of Message * Merge branch 'http-maint' into next * README: Update copyright date to include 2011 too * marshal.py: Implement JSON_marshal() * marshal.py: Allow to test either XML or JSON marshalling * marshal.py: Zap a redundant `continue` * marshal.py: `object` is a reserved word * marshal.py: Remember to export JSON_marshal * marshal.py: endode -> encode * config.py: Return a JSON rather than an XML * ui.py: /api/config mimetype: text/xml -> application/json * marshal.py: Update to use LOG instead of log * Merge branch 'json-config' into next * marshal.py: One more endode -> encode fix * marshal.py: Implement XML_unmarshal() * database.py: Allow to export speedtest results using JSON * ui.py: Add /api/speedtest to pull JSON results * ui.py: Bye bye /api/results /api/results2 * database.py: Bye bye cache and old methods to access results * Merge branch 'json-speedtest' into next * statusicon.py: Always create the statusicon menu * notify.py: Use all-uppercase for global objects * notify.py: Allow to pass publish() the opaque time * Merge branch 'notify-T' into next * state.py: Rewrite to reduce complexity and use JSON * api_client.py: Add client that tracks /api/state using comet * ui.py: Update to use the new code in state.py, api_client.py * speedtest.py: Update to use the new code in state.py * rendezvous.py: Update to use the new code in state.py * statusicon.py: Update to use the new code in api_client.py * Merge branch 'json-state' into next * speedtest.py: Re-add removed-by-mistake latency.start() * Added button for start/stop daemon from web interface * Modified config in js to accept JSON * Delete function() in js * neubot.js: Reindent after function(...)() removal * neubot.js: Get rid of executeFunctionByName * neubot.js: Revert quick and dirty fix-update-box attempts * neubot.js: Be explicit: use jQuery and not the dollar symbol * js/contrib.js: new file that contains contributed code * js: Break up libneubot.js into three new files AND switch to JSON * A moment of silence for our beloved js/results.js * www: Make sure updateUri is a clickable hyperlink * www: Update to use new javascript infrastructure * results.html: Rewrite input form to filter results by date * www: Rename results.html to speedtest.html * js/neubot.js: Update state management to use JSON * Merge branch 'json-web' into next * utils.js: Changed upper case letter * www: Make links relative instead of absolute * speedtest.js: Note we should use a larger font for axis labels * speedtest.js: Throw away outdated comment * speedtest.js: Dispose of old, commented-out code chunks * speedtest.js: Sync duplicated code with neubot.js * speedtest.py: Minor cosmetic changes * net/stream.py: Become daemon on -Ddaemonize * bittorrent/main.py: Become daemon on -Ddaemonize * main.py: Allow to invoke net/stream.py main() * bittorrent/main.py: Adjust --help message * net/stream.py: Adjust --help message * net/stream.py: Use 'stream' not 'net' prefix for options * Merge branch 'new-tests' into next * tools/dbtool.py: Fix version number * net/stream.py: Zap unused import * speedtest.js: re-enable zoom (and other plugins) * speedtest.html: zap obsolete description * speedtest.html: center-align view-last control * Merge branch 'www-fixes' into next * index.html: Fix js inclusion order. * js: clear latest results during test * js: Insert enable/disable button in speedtest results page * jquery.qtip.js: updated to new version * neubot.js: prevStatus variable wiped * Merge branch 'www-maint' into next * rendezvous.py: Honour CONFIG.enabled flag * rendezvous.py: Make sure we sched at most 1 rendezvous at a time * Merge branch 'www-enable-disable' into next * arcfour: Lazy 'arc4 not available' warning * ui.py: Return 204 No Content to POST /api/config * config.py: Allow to export as a dictionary * ui.py: Trigger state change after POST /api/config * js: update config.enabled via /api/state * utils.js: Comment on the effect of recent 204 No Content change * Merge branch 'api-config-www' into next * README: clarify collection vs individual contribution copyright * speedtest.js: UTF-7 integralism * speedtest.js: Soft-tabs integralism * speedtest.js: Larger fontSize for plot * speedtest.js: Do not put 'hours ago' on X axis anymore * speedtest.js: Very simple X axis labels rendering * speedtest.js: changed xaxis data in graph * Merge branch 'beautify-x-axis' into next * patches: add py2exe-patch to ensure stderr is a blackhole * Revert "bin/neubotw: Make sure stderr.write() is a no-op" * utils.js: more UTF-7 integralism * utils.js: Avoid IE8 error * utils.js: blank-line-around-funcs integralism * utils.js: 80x24 integralism * Revert "POST /api/state returns 204 No Content" change * utils.js: getSetConfigVar(): Honour id parameter * www: Try to be less ambiguous when we have not performed any test * index.html: Do not mention the number of Neubots in queue * TODO: We should remove queue_len from speedtest-returned info * www: More informative text when we know nothing * index.html: Explain how to run a test now * www: Link to DAUIN not just to Polito * bittorrent/main.py: Choose better default address * bittorrent/main.py: Delegate buffer scaling to the sender only * bittorrent/main.py: Allow to control test duration * net/stream.py: Default test duration to 10 seconds * net/stream.py: Choose better default address * bittorrent/main.py: Also measure connect() time * Merge branch 'friendlier-experimental-tests' into next * arcfour.py: Downgrade to debug() ARC4 warning * debian/control/prerm: Attempt to kill running statusicon * state.py: Update current for canonical state changes only * neubot/statusicon.py: Cosmetic changes * state.js: Throw-away obsolete comment * neubot.js: Update comment wrt neubot.js vs index.js dilemma * neubot.js: s/tag/event/ in comment * neubot.js: Ignore negotiate.queue_len * neubot.js: let's deploy some more blank lines * neubot.js: Tweak comment * Merge branch 'js-maint' into next * statusicon.py: Unbreak update-checking code * neubot.js: Unbreak update-checking code * Merge branch 'check-updates' into next * neubot.1.txt: Correct Antonio's email * neubot.1.txt: Sync copyright statement with README * neubot.1.txt: Update manual page's copyright * neubot.1.txt: We now support two more transmission tests * neubot.1.txt: We now export data to JSON not XML * neubot.1.txt: Give credit to people that helped * man1/neubot.1: Regen * Merge branch 'update-man' into next * www: Unbreak sidebar spans * utils.js: Assign to object in a less baroque way * index.html: dispose of stray whitespace * bin/neubotw: Comment LOG.redirect() out and unbreak Win7 * Release neubot/0.3.6 Neubot 0.3.5 [2011-02-24] * options.py: Fix a typo in an error message * fake-db.py: improved fake rows generation * move fake-db.py to neubot/tools/dbgen.py * neubot/tools: Directory for standalone tools * tools/dbtool.py: Standalone tool to analyze database * tools/dbtool.py: Hackish fix for the accented letter issue * tools/dbtool.py: Add command to count unique uuids per day * neubot/tools/dbtool.py: add __init__() to SpeedtestResult class * dbtool.py: Let the user decide treshold on -C * dbtool.py: check if database files exist before trying to open them * dbtool.py: add __init__() to Anonymizer, CityResolver and ASNResolver * tools/dbtool.py: Fix version number * Merge branch 'topic.tools' into next * marshal.py: Rules to marshal and unmarshal simple classes * config.py: Update to use the new marshal.py module * ui.py: Use the updated config.py module * Merge branch 'topic.update-api-config' into next * Merge branch 'topic.typo-in-options' into next * streams.py: Allow to override default socket buffers size * streams.py: Add command line option to set socket buffers size * Merge branch 'topic.stream.buffer' into next * Do not import from neubot.net.connectors and neubot.net.listeners * neubot.net: Remove deprecated connectors.py listeners.py * Merge branch 'topic.rm-connector-listener' into next * streams.py: Add generic protocol to unit test * streams.py: in main() use the new GenericProtocol * streams.py: Remove unused protocols, connectors, listeners * streams.py: Rename clients the option count * streams.py: Allow to interrupt client(s) after N seconds * streams.py: Make sure -D duration=N prints stats for N seconds * Merge branch 'topic.stream-allow-download-test' into next * Merge branch 'topic.stream-improve-usage' into next * streams.py: We don't need to pass count to send_complete() * streams.py: Fork current Stream implementation * Revert "Revert "More clever buffer usage, kill send_pos"" * streams.py: Remove backward compatibility code from new stream * streams.py: start_recv: default maxlen to MAXBUF * doc: Add documentation for stream * streams.py: Compact the sendblocked and recvblocked cases * streams.py: Remove a couple of useless set_readable/writable calls * streams.py: Be paranoid, make the code slightly more robust * streams.py: Minor cosmetic changes * streams.py: rename close() shutdown() in Stream * streams.py: Refine the message we print on explicit close * streams.py: Adjust the version number * streams.py: Remove the ssl handshaking code from SSLWrapper * streams.py: Make sure client always kicks SSL negotiation off * Merge branch 'topic.fork-stream' into next * Merge branch 'topic.enhance-new-stream' into next * Merge branch 'topic.refine-new-stream' into next * Merge branch 'topic.ssl-handshake' into next * win32: Remove executables due to false-positive malware allegation * win32: Remove executables due to false-positive malware allegation * doc/protocol.png: Import new version of the protocol model * streams.py: Remove stream vs protocol semantic confusion * connector.py: Rebase on the new stream * connector.py: Implement send_piece() * connector.py: Fix the way we handshake the peer * connector.py: Cosmetic changes * connector.py: Print something useful when in verbose mode * main.py: New main for BitTorrent * neubot/main.py: Import BitTorrent's main from bittorrent/main.py * Merge branch 'topic.bittorrent-use-new-stream' into next * bittorrent: Remove unused files: handler.py wrapper.py * bittorrent: mv connector.py streams.py for simmetry with neubot.net * main.py: We have renamed connectors.py streams.py * Merge branch 'topic.bittorrent-cleanups-and-cosmetics' into next * options.py: override optionxform to fix uppercase options bug * net/CA.py: Use all-uppercase option prefix * Merge branch 'topic.uppercase-options' into next * net/CA.py: Adjust help string to look like streams.py one * net/CA.py: Remove the dots at the end of the help string * net/streams.py: Adjust help string to look like CA.py one * options.py: Adjust help string to look like net/CA.py one * bittorrent/main.py: Adjust help string to look like net/CA.py one * Merge branch 'topic.help-string-cosmetics' into next * Move neubot.ico icon from win32 to icons * setup.py: Use icons/neubot.ico for neubot.exe * setup.py: Make neubot.exe a windows executable * neubot.nsi: Always invoke neubot.exe * Make-dist.bat: Don't install the content of win32 * Remove win32 directory and all its content * Merge branch 'topic.win32-remove' into next * Make-dist.bat: Make sure we install all of www * win32.py: Use NT EventLog handler for logging * log.py: Delete comment: now there is NT EventLog handler * Merge branch 'topic.log-nt' into next * neubot: Add simplejson 2.1.3 sources * simplejson: Make sure it's possible to import from neubot * compat.py: Import simplejson if json not available * Merge branch 'topic.json' into next * log.py: Adjust the comment at the beginning * log.py: Make sure we use integers for timestamps * log.py: Logger: The prefix attribute is not used * log.py: Logger: Inherit explicitly from object * log.py: Implement a simple InteractiveLogger class * log.py: Simplify the code and use InteractiveLogger * log.py: Simplify the interactive check a bit * log.py: Rename the state variables * log.py: Reorganize attributes in __init__ * log.py: Get rid of _interactive() * log.py: Avoid possible but unlikely exception * log.py: Simplify a comment * log.py: Simplify another comment * log.py: Move MAXQUEUE definition around * log.py: Another cosmetic change * log.py: Add function to export using json * log.py: Remove getlines() because it's unused * log.py: The global object must have an all-uppercase name * log.py: Deprecate module-wide methods * log.py: Enhance unit test and dump json * log.py: clarify where BackgroundLogger comes from * log.py: With windows force background logger * log.py: Remove unused logging.handlers import * Merge branch 'topic.log-simplify' into next * dbgen.py: more realistic fake results generation * setup.py: Rewritten to drive the win32 build process * Make-*.bat: Remove the now-unneeded batch files * Revert "log.py: With windows force background logger" * bin/neubotw: Script that becomes the windows executable * bin/neubot: Import instead of from..import for stdlib * setup.py: Build both console and windows executables * neubot.nsi: Use neubotw.exe instead of neubot.exe * Merge branch 'win32-build-enhance' into next * www/results.html: unbreak plots for internet explorer * version number on the home page * www/index.html: Merge the about with version number info * www/results.html: Sync the about with index.html * js/results.js: Break x axis lables to unbreak zoom * js/ += jqplot.dateAxisRenderer.min.js * www/results.html: Import from jqplot.dateAxisRenderer * js/results.js: Quick-n-dirty hack to prettify the x axis labels * js/results.js: Remove old-n-commented-out x-axis-labels code * Merge branch 'adjust-results-plot' into next * js: libneubot.js results.js: Use base 10 not base 2 * js/libneubot.js: Use 3 digits as we do in results.js * js/results.js: Use Mbit/s rather than Mb/s * Globally replace iB -> iByte * Merge branch 'adjust-units' into next * www/index.html: Clarify that there is a tab for each test * www: index.html results.html: Update primary links * results.html: Link to OECD and provide more context * Merge branch 'add-context-to-results' into next * bin/neubotw: Make sure stderr.write() is a no-op * bin/neubotw: Be very silent when running in windows mode * Merge branch 'win32-gentler-logging' into next * speedtest.py: Use 4 instead of 2 connections * neubot/speedtest.py: First calibrate, then measure * speedtest.py: Measure download/upload speed every second * speedtest.py: upload: use 4 connections if needed * speedtest.py: Default to unit_formatter * speedtest.py: Use blupixel.net for on-demand tests * Merge branch 'enhance-speedtest' into next * neubot/speedtest.py: Use speed_formatter NOT unit_formatter * js/neubot.js: Make sure we output update URI * js/neubot.js: Make sure updates box is visible * js/neubot.js: Make sure updateUrl is a link * Merge branch 'next' * Release neubot/0.3.5 Neubot 0.3.4 [2011-01-18] * www/libneubot.js: shared javascript functions * www/libneubot.js: make the plot symmetric * libneubot.js: add helpers for the new web user interface * www/css: location for CSS sheets used by the new web user interface * www/image: location for images used by the new web user interface * www/js: location for the javascripts required by the new WEB-UI * www/new-neubot.*: Development sources of the new Web-UI * www/new-neubot.js: black magic to unbreak the tooltip * neubot/ui.py: By default use the new Web UI * www/new-neubot: disable plots because they kill my browser * neubot/tools: Directory for standalone tools * tools/dbtool.py: Standalone tool to analyze database * tools/dbtool.py: Hackish fix for the accented letter issue * tools/dbtool.py: Add command to count unique uuids per day * [tools] neubot/tools/dbtool.py: add __init__() to SpeedtestResult class * [tools] dbtool.py: Let the user decide treshold on -C * Merge branches 'topic.tools' and 'topic.www-api' into next * neubot/objgraph.py: Import v1.1b of objgraph * Renaming file to clean web interface * Edit index * Edit style and merge stuff in html file * Updated ui.py to use index.html * Clean CSS file * Clean image folders * jqplot folder removed * added needed jqplot files * moved results.js into js folder * deleted unneeded files * css/style.css: Increase the page width * www/index.html: Minor changes * www/results.html: Wrap the old page in the new style * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug' and 'topic.www-new-gui' into next * Make sure we import Stats and SimpleStats from neubot.utils * http/clients.py: Zap an old comment * http/clients.py: Group imports at the beginning * http/servers.py: Group declarations at the beginning * utils.py: Let Stats and SimpleStats inherit from object * neubot/options.py: Generic options parser for all modules * net/CA.py: Helper script to create certfiles for testing * neubot/www: Wide header * neubot/www: Cleanup after wide header patch * neubot/www: Add media property to CSS tags * neubot/www: Be readable by braille and nongraphic browsers too * neubot/net/: Move SSL code in streams.py * neubot/net: Move connect() and listen() in streams.py * neubot/net: Copy code of test.py into streams.py. * neubot/net: Bye bye neubot/net/test.py * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options' and 'topic.CA' into next * net/streams.py: import sys instead of from sys import ... * net/streams.py: Zap circular imports * net/streams.py: Zap useless from neubot.net.streams import ... * net/streams.py: Get rid of multiple from neubot import log * net/streams.py: Get rid of multiple from socket import error ... * net/streams.py: Don't import EWOULDBLOCK more than once * net/streams.py: Don't import fixkwargs more than once * net/streams.py: Don't import ticks more than once * net/streams.py: Make sure we import Pollable just once * net/streams.py: Don't import poller more than once * net/streams.py: Import SOCK_STREAM just once * net/streams.py: Import AF_INET just once * net/streams.py: Zap unused from socket import AF_INET6 * net/streams.py: don't import socket from socket twice * net/streams.py: Make sure we don't import getaddrinfo twice() * net/streams.py: Silence pychecker * net/streams.py: Just move all the imports at the beginning * net/streams.py: Cosmetics * net/streams.py: Define a variable that holds buffer size * net/streams.py: Make sure MAXBUF is big enough * net/streams.py: Every second calculate and print throughput * net/streams.py: Import types and not from types import ... * net/streams.py: Import ssl and not from ssl import ... * net/streams.py: Move import ssl before local imports * net/streams.py: Import socket and not from socket import ... * net/streams.py: Import errno and not from errno import ... * net/streams.py: Import os and not from os import ... * net/streams.py: Group all local imports together * dbtool.py: check if database files exist before trying to open them * dbtool.py: add __init__() to Anonymizer, CityResolver and ASNResolver * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options', 'topic.CA', 'topic.simplify-stream' and 'topic.stats-cleanup' into next * net/streams.py: Oops closing() lost by mistake moving the code * neubot/net: Pollable: rename closing() to closed() * net/pollers.py: Add to closed() the exception argument * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options', 'topic.CA', 'topic.simplify-stream', 'topic.stats-cleanup' and 'topic.adjust-pollable-api' into next * Makefile: Add version number to MacOSX application * Makefile: Allow to make a lite release * http/messages.py: Remove obsolete and unused code * http/utils.py: Remove some obsolete and unused code * http/handlers.py: Note that we might want to split the handler * simplify-stream: Revert all the changes in this branch * Simplify net module: Move SSL code in streams.py * Simplify net module: Move connect() and listen() in streams.py * Simplify net module: Copy code of test.py into streams.py. * Simplify net module: Bye bye neubot/net/test.py * Simplify net module: streams.py: import sys instead of from sys import ... * Simplify net module: Move all imports at the beginning of streams.py * Simplify net module: Define and use MAXBUF in streams.py * Simplify net module: In streams.py: Print throughput every second * Simplify net module: In streams.py: Avoid from..imports * Simplify net module: In streams.py: Cleanup Connector code * Simplify net module: In streams.py: Cleanup Listener code * Simplify net module: In streams.py: Cleanup Stream code * Simplify net module: In streams.py: Rewrite the main() func * Simplify net module: Empty connectors.py and listeners.py * Undo streams.py optimizations: Undo ISSENDING/ISRECEIVING * Undo streams.py optimizations: Undo delayed unset readable/writable * Rewrite Stream in streams.py: Use boolean variables and not flags * Rewrite Stream in streams.py: Linearize the code * Rewrite Stream in streams.py: More clever buffer usage, kill send_pos * Rewrite Stream in streams.py: Assume successful send * Rewrite Stream in streams.py: Group together some cosmetic changes * More Stream undos: Get rid of the set/unset paranoia * More Stream undos: We don't need the handleReadable/Writable dance * Change Pollable API: pollers.py: Rename closing() to closed() * Change Pollable API: streams.py: Rename closing() to closed() * Change Pollable API: Add to closed() the exception argument * topic.adjust-pollable-api: Revert all the changes in this branch * Merge branch 'topic.adjust-pollable-api' into next * Merge branch 'topic.simplify-stream' into next * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options', 'topic.CA', 'topic.simplify-stream', 'topic.stats-cleanup', 'topic.adjust-pollable-api', 'topic.release', 'topic.misc', 'topic.net.simplify' and 'topic.poller.improve-api' into next * neubot/debug.py: Re-organize comments * neubot/debug.py: The testing folder does not exist anymore * neubot/www: These are the sources of the new web user interface * neubot/www: js/libneubot.js: Make the plot symmetric * neubot/www: js/neubot.js: black magic to unbreak the tooltip * neubot/www: Edit neubot/ui.py to link to the new graphic * neubot/www: Disable plots in /index.html because they kill my browser * neubot/www: Install needed jqplot plugins into js/ * neubot/www: Move CSS snippets from index.html to style.css * neubot/www: Cleanup and reindent style.css * neubot/www: Cleanup all image folders * neubot/www: Move results.js into js/ folder * neubot/www: results.js: Change the way we print time * neubot/www: results.js: Shorter labels for prettier table * neubot/www: Delete all the unneeded files * neubot/www: style.css: Increase the page width * neubot/www: index.html: Include all needed jqplot plugins * neubot/www: results.html: Wrap the old page in the new style * neubot/www: Wide header * neubot/www: Cleanup after wide header patch * neubot/www: Add media property to CSS tags * neubot/www: Be readable by braille and nongraphic browsers too * neubot/www: fix location of favicon.ico * topic.www-new-gui: Revert everything in this branch * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next * neubot/www: index.html: Fix version number * tools/dbtool.py: Fix version number * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next * fake-db.py: improved fake rows generation * move fake-db.py to neubot/tools/dbgen.py * neubot/www: libneubot.js: Make sure we always use same time format * neubot/www: results.html: Unbreak the plots * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next * neubot/www: Note things that should be done * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next * neubot/www: small fixes for webui font size * Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next * neubot/tools: Directory for standalone tools * tools/dbtool.py: Standalone tool to analyze database * tools/dbtool.py: Hackish fix for the accented letter issue * tools/dbtool.py: Add command to count unique uuids per day * [tools] neubot/tools/dbtool.py: add __init__() to SpeedtestResult class * [tools] dbtool.py: Let the user decide treshold on -C * dbtool.py: check if database files exist before trying to open them * dbtool.py: add __init__() to Anonymizer, CityResolver and ASNResolver * tools/dbtool.py: Fix version number * AUTHORS: Give credit to patch contributors and translators * Revert the tree back to 0.3.2, so we can fast-forward it * Merge branch 'master' into exp-old-next * connector.py: Remove all commented out lines * connector.py: Fix import pack vs from pack..import * connector.py: Simplify message codes * connector.py: Collapse multiple empty lines * connector.py: Reindent and remove some comments * connector.py: Avoid pychecker warning * connector.py: Reorganize send path * connector.py: Reorganize close path * connector.py: Reorganize recv path * connector.py: Simplify send path * connector.py: Simplify initialization * handler.py: Delete purely emotive comments * handlers.py: Make sure we inherit from object * handler.py: Make sure we invoke handler's connection_lost() * handler.py: Now connector should not pass write() a buffer * connector.py: Simplify destructor * connector.py: Setting to None should be the same as del * connector.py: Propagate KeyboardInterrupt and SystemExit * connector.py: Make max_message_length a constant * connector.py: Remove unused parameters * connector.py: Cosmetic change: mv is_local locally_initiated * connector.py: Delay close when we are sending * streams.py: Allow to send() when we are already sending * streams.py: Move StreamSSL and StreamSocket before Stream * streams.py: SSLWrapper: s/ssl_sock/sock/ * streams.py: Change relation between Stream and Socket/SSLStream * streams.py: Allow to specify configuration parameters * streams.py: Consider that soclose() might raise * streams.py: Allow to encrypt/decrypt data using ARC4 * streams.py: Cosmetic changes to make the code more readable * streams.py: Stream/SSLWrapper: propagate exception to Stream * streams.py: More structured relation with protocol and parent * streams.py: Fork Connector and Listener * streams.py: More structured Connector and Listener * streams.py: Dispatch started_connecting() on EINPROGRESS only * streams.py: Cosmetic changes to increment readability * utils.py: Add speed_formatter * streams.py: Pull stream_formatter from neubot.utils * streams.py: Add connect() support for measuring RTT * streams.py: Alternate approach for measuring stats * streams.py: StreamVerboser: default log messages for stream * streams.py: Add Measurer and VerboserMeasurer * streams.py: Rewrite from scratch the test unit * streams.py: Reduce the number of pychecker warnings * Merge branch 'topic.stream.configure' into next * Merge branch 'topic.stream.more-structured-api' into next * Merge branch 'topic.stream.measurer' into next * Merge branch 'topic.stream.rewrite-main' into next * Merge branch 'topic.stream.multiwrite' into next * Merge branch 'topic.authors' into next * Merge branch 'topic.tools' into next * Merge branch 'pu.dbgen' into next * scripts: Directory with useful scripts * scripts: Move release.sh there and rename it relase * scripts/release: Use the new scripts/send_inplace helper * Makefile: Update copyright notice to new style * Makefile: Update some comments and remove other comments * Makefile: Take advantage of the new helpers in scripts/ * Makefile: simplify the code to make a release * Makefile: make app.zip: do not leave garbage around * Makefile: make deb: do not leave garbage around * Makefile: make release: don't need to remove garbage anymore * Makefile: support for testing and stable releases * debian: Support for stable/testing releases in neubot.list * scripts: Add update_apt script that updates APT info * Makefile: Use the new scripts/update_apt helper * www: Update with respect to possible neubot.js -> index.js rename * Merge branch 'topic.misc' into next * Merge branch 'topic.testing' into next * Merge branch 'topic.bittorrent' into next * Revert everything in this branch because it's not yet ready * Merge branch 'topic.tools' into next * Revert all the changes in the branch pu.dbgen * Re-apply some bits that I mistakenly removed from next * scripts: sed_inplace: don't clobber permissions * debian: Make sure apt likes our neubot.list * scripts: Make sure update_apt produces a valid Release file * Revert "More clever buffer usage, kill send_pos" * Release neubot/0.3.4 Neubot 0.3.3 [2011-01-11] * neubot/ui.py: Always start the database when running in server mode * database.py: query_results_functional(): New query API backend * neubot/ui.py: /api/results2: New query API * neubot/database.py: Make sure we don't pass unicode to lower layers * neubot/state.py: Augment state with neubot daemon's PID * neubot/state.py: Augment state with latest rendezvous's timestamp * neubot/database.py: use timestamp() instead of int(time()) * neubot/database.py: Don't use from..import for standard library * neubot/objgraph.py: Import v1.1b of objgraph * neubot/debug.py: Re-organize comments * neubot/debug.py: The testing folder does not exist anymore * neubot/options.py: Generic options parser for all modules * net/CA.py: Helper script to create certfiles for testing * Make sure we import Stats and SimpleStats from neubot.utils * http/clients.py: Zap an old comment * http/clients.py: Group imports at the beginning * http/servers.py: Group declarations at the beginning * utils.py: Let Stats and SimpleStats inherit from object * Makefile: Add version number to MacOSX application * Makefile: Allow to make a lite release * http/messages.py: Remove obsolete and unused code * http/utils.py: Remove some obsolete and unused code * http/handlers.py: Note that we might want to split the handler * Simplify net module: Move SSL code in streams.py * Simplify net module: Move connect() and listen() in streams.py * Simplify net module: Copy code of test.py into streams.py. * Simplify net module: Bye bye neubot/net/test.py * Simplify net module: streams.py: import sys instead of from sys import ... * Simplify net module: Move all imports at the beginning of streams.py * Simplify net module: Define and use MAXBUF in streams.py * Simplify net module: In streams.py: Print throughput every second * Simplify net module: In streams.py: Avoid from..imports * Simplify net module: In streams.py: Cleanup Connector code * Simplify net module: In streams.py: Cleanup Listener code * Simplify net module: In streams.py: Cleanup Stream code * Simplify net module: In streams.py: Rewrite the main() func * Simplify net module: Empty connectors.py and listeners.py * Undo streams.py optimizations: Undo ISSENDING/ISRECEIVING * Undo streams.py optimizations: Undo delayed unset readable/writable * Rewrite Stream in streams.py: Use boolean variables and not flags * Rewrite Stream in streams.py: Linearize the code * Rewrite Stream in streams.py: More clever buffer usage, kill send_pos * Rewrite Stream in streams.py: Assume successful send * Rewrite Stream in streams.py: Group together some cosmetic changes * More Stream undos: Get rid of the set/unset paranoia * More Stream undos: We don't need the handleReadable/Writable dance * Change Pollable API: pollers.py: Rename closing() to closed() * Change Pollable API: streams.py: Rename closing() to closed() * Change Pollable API: Add to closed() the exception argument * neubot/www: These are the sources of the new web user interface * neubot/www: js/libneubot.js: Make the plot symmetric * neubot/www: js/neubot.js: black magic to unbreak the tooltip * neubot/www: Edit neubot/ui.py to link to the new graphic * neubot/www: Disable plots in /index.html because they kill my browser * neubot/www: Install needed jqplot plugins into js/ * neubot/www: Move CSS snippets from index.html to style.css * neubot/www: Cleanup and reindent style.css * neubot/www: Cleanup all image folders * neubot/www: Move results.js into js/ folder * neubot/www: results.js: Change the way we print time * neubot/www: results.js: Shorter labels for prettier table * neubot/www: Delete all the unneeded files * neubot/www: style.css: Increase the page width * neubot/www: index.html: Include all needed jqplot plugins * neubot/www: results.html: Wrap the old page in the new style * neubot/www: Wide header * neubot/www: Cleanup after wide header patch * neubot/www: Add media property to CSS tags * neubot/www: Be readable by braille and nongraphic browsers too * neubot/www: fix location of favicon.ico * neubot/www: index.html: Fix version number * neubot/www: libneubot.js: Make sure we always use same time format * neubot/www: results.html: Unbreak the plots * neubot/www: Note things that should be done * neubot/www: small fixes for webui font size * Release neubot/0.3.3 Neubot 0.3.2 [2011-01-04] * MacOS/: move here neubot.app for MacOS * Makefile: add targets to create neubot.app and neubot.app.zip * MacOS: Remove private Makefile * MacOS: Move README into doc/ directory and rename it * MacOS/neubot: Improve copyright notice * pathnames.py: MacOS: do not hardcode '/Applications/neubot ...' * Makefile: Install icon for all Unix-like systems * statusicon.py: Use the scalable neubot icon * icons: Change the name of some icons * Makefile: remove debian-specific rules to install icon * statusicon: By default show the status icon * statusicon: Improve right-click menu labels * statusicon: cosmetic changes * statusicon: Make sure we don't from..import standard library * Makefile: install menu entries for all Unix-like OSes * Makefile: Remove debian-specific rules for menu entries * neubot/ui.py: notify text-ui when the daemon is down * neubot/log.py: Move system-dependent bits out of this file * neubot/log.py: make sure we don't from..import standard library * neubot/log.py: Add a very simple test unit * neubot/unix.py: make sure we use LOG_DAEMON * BUGS: official ML languages are english and italian * http/clients.py: Make sure we print download/upload speed stats * bin/neubot: Make sure Python >= 2.5 and < 3.0 * Make sure website URI is /-terminated * _unit_formatter(): Add space between unit and data * Globally replace bps with bits/s * neubot/speedtest.py: by default use two parallel connections * net/test.py: fix comment at the beginning of the file * net/streams.py: make sure we print exceptions correctly * neubot/notify.py: remove some debugging prints * neubot/notify.py: safer dispatching of events * neubot/notify.py: make needs_publish() more robust * README: add copyright notice * www: Improve copyright notice * statusicon: Improve copyright notice * win32: Improve copyright notice * bittorent: Improve copyright notice * http: Improve copyright notice * net: Improve copyright notice * neubot: Make sure all files have new/better notice * bin: Improve copyright notice * debian: Improve copyright notice * Finish improving copyright notice * www/results.js: oops upload and dowload labels were swapped * neubot/www: Add current version number to the web user interface * www/results.js: Make sure we plot all data points * www/neubot.js: propagate queue position information * net/pollers.py: Simplify task scheduler * net/pollers.py: Cosmetic changes * net/pollers.py: Get rid of Poller.get_ticks() globally * net/pollers.py: Surround stream.closing with try..except * net/pollers.py: Always treat SystemExit like KeyboardInterrupt * net/pollers.py: move Stats and SimpleStats into utils.py * net/pollers.py: Remove unused dispatch() method * net/pollers.py: Don't use from..import for standard library * net/pollers.py: Allow to break the loop cleanly * neubot/ui.py: Break cleanly out of the main loop * net/pollers.py: Add timestamping to PollerTask * rendezvous.py: On -S do not start a companion speedtest server * speedtest.py: Add -d command line option for -S mode * rendezvous.py: Notify state.py that connection failed * rendezvous.py: Do not wait for a deterministic amount of time * rendezvous.py: Give equal tratment to both test servers * rendezvous.py: Pass to state.py some timing information * neubot/state.py: Use "idle" instead of None to mark inactivity * neubot/speedtest.py: Move test server code into a separate mixin * neubot/speedtest.py: Move negotiator server code in a separate mixin * neubot/speedtest.py: Cosmetics after refactoring into mixins * neubot/speedtest.py: Hack to avoid client disconnection * neubot/speedtest.py: Improve queue algorithm * neubot/speedtest.py: Use connection_lost to improve queue algorithm * neubot/speedtest.py: Make sure first session's connection is not special * doc: Add documentation for SpeedtestServer * neubot/speedtest.py: Periodically log the queue length * Release neubot/0.3.2 Neubot 0.3.1 [2010-11-18] * [cleanups] remove unused code: prettyprint_exception * [cleanups] streams: remove commented out code * [fixes] ui: make sure -Dname=value works * [fixes] utils: Avoid PyChecker warning * [fixes] speedtest: send results through log.info() * [fixes] rendezvous: raise number of seconds between each rendezvous * [fixes] database: raise the value of MAXROWS * [icons] Add neubot icons * [icons] debian: Add and install SVG icon * [icons] statusicon: Use neubot icon * [macosx] log: use syslog wrapper instead of SysLogHandler * [macosx] main: MacOS X does not set $DISPLAY * [macosx] pathnames: Adjust WWW location * [macosx] App skeleton * [macosx] neubot.app: Quick and dirty Makefile to create the App * [rendezvous8080] rendezvous: Use port 8080 because 9773 might be blocked * [bittorent] bittorrent: initial experimental support for BitTorrent * [bittorrent] bittorrent: link with neubot * [www-misc] neubot.js: Make sure Chrome tab icon does not spin * [www-misc] neubot.js: do not bring browser on its knees * [www-misc] neubot.html: better links * [www-jqplot] www/jqplot: add jqplot sources * [www-jqplot] results: use jqplot and plot recent results * [webbrowser] main: make sure that browser opens but does not annoy * [webbrowser] statusicon: make sure that browser opens but does not annoy * [testing] release.sh: modified code that updates ChangeLog * [testing] Make-dist.bat: make sure we install images and jqplot * [testing] www/results.js: avoid IE8 parsing error * [testing] www/results.html: IE8 does not have Canvas * [testing] release.sh: removed useless and wrong piece of code * [testing] release.sh: simplify code to calculate next version number * [testing] make sure `neubot bittorrent' pseudo-test works * [testing] Makefile: allow user to write into dist/ * Release neubot/0.3.1 Neubot 0.3.0 [2010-11-02] * log: remove code that hijacks logging.foo() calls * release.sh: by default make a new patch release * README: up-to-date with http://www.neubot.org/about * BUGS: updated, providing much more information * INSTALL: updated * debian: control: update description etc * Update manual page merging from http://www.neubot.org/about * setup.py: Update description * ui: don't claim to be RESTful * win32: use new icon * neubot.nsi: remember to autostart neubot * neubot.nsi: start-neubot.exe after install (simmetry with APT) * win32: recomplied *.exe using the new neubot icon * net.connectors: propagate error if connect() times out * [www] neubot.css: cosmetics * [www] add favicon * [www] pages to display latest results * [www] link from neubot.html to results.html * [docs] README: update with /about * [docs] INSTALL: do not reference a dead link * [docs] debian: update with /about * [docs] manpage updated with /about * [docs] manpage typo * Release neubot/0.3.0 Neubot 0.2.8 [2010-10-19] * start-neubot-daemon: make sure it works once installed * speedtest: don't abort renegotiation on already closed connection * speedtest: don't linger negotiation if client does not hold a token * speedtest: make timeout algorithm more robust * start-neubot-daemon: don't assume neubot can re-execute self * main: statusicon: lazy import Gtk to avoid ugly warning * database: don't print a log message about auto-prune * etc/neubot/config: add configuration file * doc/manual.txt: new version of the manual using restructured text * doc: remove old documentation referring version 0.1 of neubot * man/man3: remove old manual page * Makefile: remove rules referencing pod * BUGS: Update the email address for reporting bugs * TODO: remove old entries from the file * updated the setup.py script * setup.py: this should fix a py2exe warning * update the neubot.nsi script * release.sh: remove many limitations of this script * README: update using bits of the manual page intro * Build.but: document how win32 build system works * move testing code into neubot.net and remove testing/ * rendezvous: add support for the second speedtest server * database: support for identifying each neubot with a random UUID * Revert "setup.py: this should fix a py2exe warning" * Update win32 build process after today's mini-hackathon * neubot.nsi: roll-out cleaner uninstall and reinstall * doc: rename manual page because we might want to add other manpages * Add menu entry to show status icon in the notification area * Makefile: make sure /etc/init.d/neubot perms are 0755 * neubot.js: print neubot states in grey when sleeping * Release neubot/0.2.8 Neubot 0.2.7 [2010-10-15] * Makefile: explain why we don't use sed -i * main: dohelp(): use stdout/stderr depending on context * INSTALL: reference the online documentation * bin: add start-neubot-daemon script * database: check sqlite3 file's existence and ownership * main: print more details if we can't spawn a subprocess * Make sure system and user directories exist * database: make sure GET /api/results will never return an empty body * Propagate and notify update information * speedtest: adjust the uri employed by default * utils: getpwnaml{,x}: factor out code to get user info * database: use getpwnamlx instead of duplicating code * pathnames: make sure the _neubot user owns /var/neubot * Release neubot/0.2.7 Neubot 0.2.6 [2010-10-12] * Makefile: don't assume pychecker provides --limit option * debug: The name might be None * notify: Reduce the interval between each periodic() * net.streams: Update the code * http.handlers: Bugfix queue length calculation * http.handlers: bufferize(): Allow also strings * http.handlers: Update the code * http.handler: Pass to Handler() a reference to the receiver * http.clients: Update the code * http.server: Update the code * http.servers: Avoid pychecker warning, rename 'time' variable * http.servers: Increase max-request-per-conn to help speedtest * net.streams: send: Reliable behavior if passed an unicode string * Help debugging adding explicit destructors * notify: Add RENEGOTIATE event for speedtest * notify: Attach a timestamp to each event * neubot.state: Track, export, and publish neubot state * state: Support to pass partial result to the client * state: Inform the user/client of an available update * database: Rewritten to use sqlite3 as backend * fake-db.py: Simple python script to help testing neubot.database * speedtest: Add SpeedtestServer and enhance SpeedtestClient * speedtest: Notify state changes to the state module * speedtest: Guarantee FIFO service and return queue position * speedtest: Tell the state module our position in the queue * speedtest: Pass the state module our partial results * speedtest: client mode: Adjust the default URI * speedtest: Integrate with (and borrow code from) database * speedtest: Rename variable to avoid pychecker warning * speedtest: Let rendezvous control the speedtest * speedtest: Import from the file name and not from the module name * speedtest: Make sure there are not circular dependencies * speedtest: Bugfix client-side negotiation * speedtest: Fix deadlock on client disconnection during test * config: Rewritten to add interface for UI * neubot/www: The static files part of our WebGUI * ui: Completely rewritten the user interface * rendezvous: Rewritten to use XML rather than JSON * rendezvous: Help debugging adding explicit destructors * Removed all the deprecated files * ui: redirect to /neubot.html if the request is for / * main: Rewritten and now referencing the new commands * bin/neubot: Simple startup script for neubot * utils: Do not import json * log: Add some missing bits when going in background * utils: Add the code to go in background * rendezvous: Add the code to go in background * main: Do NOT exchange by mistake an URI and a command * rendezvous: Use a default URI if no URI was provided * rendezvous: The client too must background by default * debian: The -b option is no longer available * INSTALL: The -b option is no longer available * setup.py: For win32 too use the new bin/neubot startup script * utils: Do not attempt to import pwd under Windows * database: Make sure connection always exists * The frozen executable does not support exit() * rendezvous: Make sure that -d works correctly * database: Make sure we print help on --help * pathnames: Provide system-dependent path names * debian: Update the content of the control file * debian: updated the fqdn in neubot.list * debian: add postinst the code to trust our pgp key * Makefile: Install bin/neubot instead of bin/unix/neubot * speedtest: Pass the client its real network address * speedtest: make sure we print stats before we cleanup * speedtest: average latency and time to connect * database: add command to delete all the results * speedtest: improve algorithm to calculate xfer speed * speedtest: make sure self.length always <= len(self.body) * speedtest: alternate approach for upload speed measurement * bin: removed the old commands for unix and win32 * Makefile: remove the unused target _docs * Makefile: make release: put the same content in deb and tarball * ui: add /api/version uri that returns neubot version * main: Without arguments try to do the right thing * main: Add the "help" internal command * ui: add /api/exit uri that exits from the program * main: implement start and stop commands * debian/neubot: use start and stop commands * ui: Make sure that the set command works as expected * rendezvous: Improve the way we publish state changes * utils: add XML_text(): join the text nodes child of an element node * ui: add code to track the state of the local neubot daemon * statusicon: Use ui.SimpleStateTracker to track the state * statusicon: make sure -n works as expected * statusicon: open browser on "activate" * debian: create entry into the GNOME menu * ui, pathnames: adjust the path where static files are installed * Makefile: make sure we install *.pyc with umask 022 * utils: become_daemon: use the first available unpriv user * Add a copy of the manual pages * debian: move files into directories to simplify makefile * Makefile: written in a more modular way and commented the code * speedtest: results += latency's MEAN instead of += N measurements * utils: add code to string{,io}-ify DOM * state: modify XML format, delegate work to helpers, rework the code * ui: update state tracker because XML file format changed * utils: add simple/stupid formatter for time units * speedtest: pass the web interface formatted units * www: updated again the web-pages * state: keep latest test results until we start next test * statusicon: by default detach from shell and run in background * ui: print error on 404 rather than debug message always * log: prefix "neubot: " when we're using syslog * pathnames: always ignore $HOME when running as root * Makefile: make release: chmod 644 stuff in dist * Build.bat: add web user interface files to dist/ * neubot.nsi: add *recursively* the content of dist/ * Release neubot/0.2.6 Neubot 0.2.5 [2010-09-15] * Globally replace Timer with SimpleStats * http.handlers: Add maximum-line-length check * Globally replace format_bytes() with unit_formatter() * statusicon: Zap redundant "del connection" statement * utils: Implement file_length() * http.utils: Add parse_range() * net.pollers: It was a mistake to remove catch-all clauses * net.pollers: Random updates and cosmetic changes * Globally remove deprecated register_func() * net.connectors: Cosmetic changes * net.listeners: Cosmetic changes * compat: Compatibility with Python2.5's deque() * log, database: Python2.5-compatible deque usage * net: Do not assume that the ssl module is available * net.streams: Avoid pychecker warning * http.handlers: Use from..import rather than import * Release neubot/0.2.5 Neubot 0.2.4 [2010-09-08] * network: Remove unused buffers module * http.utils: make sure make_filename() operates on pathquery * http.utils: make_filename() is now more readable * log: We don't want access-logs to be part of /logs * Makefile: Update commented-out rules to create installer using Wine * ui: Remove unused import statement * ui: UIConnection: Print the offending exception and its stacktrace * ui: UIServer: Use multi-line strings for HTML and JS templates * ui: UIServer: Handle toggle requests in / * ui: UIServer: Mechanism to pull XML updates * ui: UIServer: Don't leave an empty line before / and /neubot.js * ui: UIServer: Add backlink to /logs and /results * net.pollers: Do not assume an update every second * net.pollers: sched(): Bugfix scheduling algorithm * net: Add support for group-of-streams stats * net.pollers: Prepare SimpleStats to replace Timer * http.clients: Use SimpleStats rather than Timer * net.pollers: Better solution for 'delete while pending' * net.pollers: Remove some unused imports * doc: INSTALL: uninstall: Use /usr/local rather than /opt * speedtest: Wait for stage X to complete before we enter stage X+1 * speedtest: Speed-adaptive download/upload procedure * log: Add support for pretty-printing progress * speedtest: Print information on the operation in progress * speedtest: By default use a server of the neubot project * speedtest: Let the user decide the output format * http.handlers: Better protection vs. comet-after-close * http.clients: Make sure usage string is easier to understand * statusicon: Rewritten using httplib and threading * statusicon: Initial implementation of the popup menu * statusicon: Ubuntu has deprecated status-icon usage * notify: Increase interval between each check for pending events * main: Add a new speedtest command that invokes speedtest.main() * neubot: Make sure we employ safe_seek() in new code * Release neubot/0.2.4 Neubot 0.2.3 [2010-09-02] * http.utils: Remove deprecated parse_accept() * http.utils: Remove deprecated select_mime() * testing: Remove getter.py httpd.py publish.py wget.py * net.pollers: Stats: Do not weight the average value * http.servers: Use prettyprint() instead of prettyprinter() * http.utils: make_filename(): Make sure we don't loop forever * http.protocols: Avoid crash in case of comet-after-close * notify: Remove guards against comet-after-close * notify: Increase robustness of publishing algorithm * http.clients: Use prettyprint() instead of prettyprinter() * http.clients: We always need to bufferize standard input * http.clients: VerboseClient: Adjust comment before got_response * http.clients: Improve -I and usage of stdout/stderr for stats * ui: Make sure we print the program name on --help * ui: UIServer: Do not use ADDRESS and PORT directly * ui: dohelp(): By default use the standard error * ui: Implement the exit command into the shell * ui: Improve the output of the `help' command * ui: TestClient: Follow '303 See Other' redirection * ui: UIServer: Simple javascript support for tracking state * statusicon: It is wrong to append "." to sys.path * statusicon: Use 'from..import' rather than 'import' * statusicon: Provide some more comments * statusicon: Use SimpleClient rather than neubot.http.api * statusicon: Add support for command-line options * Makefile: make help: More compact help message * Makefile: make patches: Removed unused target * Makefile: make archive: Remove unused target * Makefile: [release+deb] Make the deb target private * Makefile: [release+deb] Group all the hidden targets together * Makefile: [release+deb] make _deb: Auto-calculate installed-size * Makefile: [release+deb] make _deb: Remember to cleanup * Makefile: [release+deb] make _archive: Don't create subdir * Makefile: [release+deb] make release: Invoke `make _deb' * Makefile: make release: Invoke make clean rather than rm -rf dist/ * Makefile: make release: Adjust verbose message * Makefile: make release: Do some work to update apt repository * Makefile: Add commented-out rules to create installer using Wine * release.sh: Script that automatically makes a new release * Release neubot/0.2.3 Neubot 0.2.2 [2010-08-30] * http.servers: Detect and handle comet-after-close * ui: It is wrong to append "." to sys.path * ui: Use dispatch table for known commands * ui: dohelp(): Adjust stdout/stderr usage * ui: Add 'version' command * ui: dohelp(): Make sure we sort commands by name * ui: Add quiet and verbose commands * ui: Rewrite the client part using SimpleClient * ui: In interactive mode we must catch all exceptions * ui: Process command line arguments * ui: Provide some more documentation comments * ui: Use uppercase for global variables * ui: Re-write UI server using Server and SimpleConnection * ui: Rewritten UIServer in order to rationalize its implementation * ui: Do not assume that UIServer will close the connection * ui: UIClient: Remember to flush() stdout when we follow * net.connectors: Update code and codying style * net.connectors: timeout when the delay equals the timeout * net.connectors: Add debug statements and implement unit testing * net.listeners.py: Update code and codying style * net.listeners: Add debug statements and implement unit testing * net.streams: Update code and codying style * http.clients: Import formatbytes() from neubot.net.pollers * http.servers: Import formatbytes() from neubot.net.pollers * http.servers: bytes shadows builtin, use nbytes instead * http.adaptors: Remove unused oadaptor class * http.clients: Add VerboseClient and improve main() * http.utils: make_filename(): Deal with name collisions * http.clients: Add support for dload/upload/head of multiple URIs * net.stream: Add debug statements and propagate changes * net.streams: Update .send_ticks after a partial send() * net.pollers: formatbytes(): Remove space between value and unit * speedtest: Test HTTP latency, download, and upload speed * speedtest: Use net.pollers enable/disable stats mechanism * net.pollers: Make sure that we export register_func * http.handlers: start_receiving(): Be careful before using stream * log: Add support for quiet() * net.pollers: Simple mechanism to print upload/dload stats * http.servers: Add support for POST because speedtest needs it Neubot 0.2.1 [2010-08-27] * http.servers: New module that implements HTTP server * http.utils: Add function to extract filename from URI * http.utils: Rename prettyprinter() to prettyprint() * http.clients: Remember to rewind response-body * http.handlers: Improve algorithm to split first-line * http.clients: Timer: Auto-reset on begin() * http.clients: formatbytes: Use floating point numbers * http.clients: USAGE: Better -s explanation * net.pollers: Always re-sched self.check_timeout() * http.clients: Fix for '-oFILE -o-' corner-case * http.clients: Fix for '-iFILE -i-' corner-case * notify: Use sched() rather than register_periodic() * notify: Use 'from..import' rather than 'import' * neubot.net: pollers: Measure average upload/dload speed * http.utils: Hide negotiate_mime() helpers * http.utils: Move all the imports at the beginning * http.clients: Support for download using two connections * http.clients: Avoid race between _do_send() and closing() * http.servers: Avoid race between constructors and handler * Careful error checking when seek(0) fails on a file object Neubot 0.2.0 [2010-08-23] * net.pollers: Explain why we break loop() regardless of tasks * http.utils: Add rules to decide the nextstate after headers * http.handlers: self.receiver might be None in close() * net.streams: cosmetics: Remove one-line comments * net.streams: cosmetics: Fix the comment before close() * net.streams: cosmetics: Add comment before set_readable etc * net.streams: cosmetics: Rewrite the comment in front of recv() * net.streams: cosmetics: Rename .isclosing to .isclosed * net.streams: cosmetics: Swap check and then/else accordingly * net.streams: cosmetics: Add comment before so*() methods * http.messages: Improve serialize-headers algorithm * http.messages: For now we don't want to export Message * http.messages: Use 'from ... import' rather than 'import' * http.messages: Move some to-be-removed fields out of Message * http.messages: Remove slightly-paranoid checks * http.api: Rewrite comment before compose() * http.api: compose_(): compose an already existing message * http.api: compose_(): Use keyword arguments * http: Move compose_() from api to messages * http.message: Put all imports at the beginning * http.messages: compose(): Sort COMPOSEARGS by key * http.messages: Improve 'content-length: 0' explanation * http.handlers: Do not start receiving automatically on attach() * http.clients: New module that implements HTTP client Neubot 0.1.9 [2010-08-18] * neubot.net: streams: notify() might invoke close() * neubot.net: export unregister_periodic from pollers * neubot.http: messages: Make the code PEP8-compliant * neubot.http: utils: Make the code PEP8-compliant * neubot.http: utils: Rename type variable because shadows builtin * neubot.http: utils: Rewrite select_mime() to silence pychecker * neubot.net: pollers: Remove .closing() from Pollable * neubot.net: pollers: Cosmetic changes * neubot.net: pollers: remove obsolete comment * neubot.net: pollers: stop when there is no I/O to dispatch * neubot.net: pollers: Make sure unsched() builds a 3-tuple * neubot.net: pollers: Increase interval between check_timeout() * neubot.net: pollers: Update why-we-are-careful comment * neubot.http: Add new sub-module: handlers.py * neubot.http: protocol: Use Handler rather than adaptor Neubot 0.1.8 [2010-08-14] * neubot.net: streams: Remove an obsolete comment * neubot.utils: Add support for keyword arguments * neubot.net: connectors: Use keyword arguments * neubot.net: listeners: Use keyword arguments * neubot.net: pollers: Implement a task scheduler into the poller * neubot.net: pollers: Modify the task scheduler to support periodic() * testing/httpd.py: Automatically prepend "." to sys.path * testing/wget.py: Automatically prepend "." to sys.path * neubot.net: pollers: Re-implement periodics, funcs with task scheduler * neubot.http: api: Chunks were disabled by mistake * neubot.net: pollers: Avoid invoking fileno() twice * neubot.net: streams: Optimize readable and writable management * neubot.http: protocols: Do not lower timeout for passiveclose * neubot.net: pollers: Remove 'Nothing to do' warning and sleep Neubot 0.1.7 [2010-08-04] * neubot.http: protocols.py: Catch a specific exception, not all * neubot.http: acceptors.py: Rm unneeded exception handling code * neubot.http: adaptors.py: Catch specific exceptions, not all * neubot.net: poller: Remove unneeded catch-all clauses * neubot.measure: Catch a specific exception, not all * neubot.negotiate: urlparse.urlsplit() should not raise exceptions * neubot.rendezvous: Catch a specific exception, not all * testing.publish: Catch a specific exception, not all * neubot.container: Don't need to special case KeyboardInterrupt * neubot.auto: Improve and comment exception handling * neubot.net: Export register_periodic * neubot.auto, neubot.measure: Make it possible to interrupt testing * neubot.notify: Publish/subscribe mechanism * neubot.ui: Export state change via comet * neubot.ui: Add follow command * neubot.statusicon: Use comet to track neubot state Neubot 0.1.6 [2010-08-03] * Makefile: sha256sum is not always available, so don't use it * bin/unix/neubot: Remember to enter in verbose mode if -v is specified * neubot.http: Send small messages using a single send() * neubot.config: Add 'force' variable to configuration * neubot.ui: Correct the methods allowed on "/enable" * neubot.ui: Export '/force' option via RESTful API * neubot.database: Simple work-around to file locking problem * neubot.http: print message before trying to send it * neubot.http: Bugfix MIME type negotiation * neubot.net: Allow running just one iteration of the poller loop * neubot.statusicon: Manage status icon in the notification area * neubot.auto: Roll-out a thread-less solution Neubot 0.1.5 [2010-08-01] * neubot.http: Add message-oriented API * neubot.http: Add code for MIME type negotiation * neubot.net: Avoid sleeping and warn when we sleep * neubot.config: Keep most configurable variables * neubot.database: Cache and allow to export recent measurements * neubot.auto: Make it possible to disable measurements * neubot.auto: Record the current state into a variable * neubot.auto: Don't test if rendez-vous is too slow * neubot.http: adaptor: Read files in bigger chunks to avoid slowdowns * neubot.ui: RESTful API for user interfaces attachment * neubot.auto: Start a thread for the UI Neubot 0.1.4 [2010-07-30] * neubot.net: streams.py: Deal with "continuous" I/O operations * neubot.net: streams.py: Remove the compat parameter from send, recv * neubot.net: streams.py: Block send(), recv(), close() if isclosing * neubot.log: Wrapper for Python logging module * bin: Install neubot.log as the default logger Neubot 0.1.3 [2010-07-29] * Makefile: don't assume we're in a GIT repo when installing * neubot: __init__.py: Import libraries before other modules * neubot.whitelist: Allow more than one peer per IP address * neubot.http: Add support for passive close() Neubot 0.1.2 [2010-07-22] * INSTALL: Fix a typo--Python instead of Neubot * neubot.debug: Trace functions "call" and "return" * neubot.net: Re-implementation of neubot.network * neubot.network: By default use the new neubot.net module * neubot.http: Use neubot.net instead of neubot.network Neubot 0.1.1 [2010-07-21] * neubot.whitelist: Temporarily disable white-listing * neubot.http: Raise the number of seconds before timeout * doc: Improve installation process under Ubuntu * doc: Change source file name for manpage * doc: incremental changes to manual page * debian: Initial support for automatic repository install Neubot 0.1.0 [2010-06-22] * Updated documentation * Added manual page for Unix * Improved INSTALL file * Added support for textual database * Improved Makefile * Improved Win32 setup * Adjusted the verbosity * By default be interactive * Full support for HEAD requests * Added timstamps to logs * Removed some deprecated code * Improved Unix startup procedure * Added support for "latency" measurements * Measuring "time to transfer" instead of "speed" * Bugfixed clock handling with Win32 * Improved client mode Neubot 0.0.6 [2010-06-07] * Add support for -V command line option. * Use PUT /http/1.0/ to negotiate measurements. * Add 'collecturi' to rendezvous response. * Add whitelist mechanism to control who can perform measurements. * Implement collection of measurements results. * Remove most of the deprecated code. * Add 'coordinate' command that runs the coordinator. * Move 'testing/' out of 'neubot/' directory. * Incremental improvements. * Bugfixes. Neubot 0.0.5 [2010-06-03] * Add support for creating Windows installer. * Add support for creating Debian package. * Remove deprecated file neubot/errors.py. * Make neubot/buffers.py PEP8-compliant. * Add support for version number comparison. * Syntactic sugar for more readable verbose logs. * neubot/container.py: Common container for servlet-like classes. * neubot/nrendezvous.py: New module implementing rendezvous. * neubot/negotiate.py: Module implementing negotiation. * neubot/measure.py: Module implementing http measurements. * neubot/main.py: Initial support for new-style commands. * neubot/auto.py: New-style command to run automatic client. * Makefile: Roll-out simplified _install command. * Makefile: Merge support for creating debian packages. * Makefile: Zap legacy install/uninstall code. * bin/unix/neubot: Explicitly require python-2.6. * bin/unix/neubot: Use `auto' as the default command. * bin/win32/neubot: Modified to invoke `auto' command. * Roll-out simple watchdog mechanism to avoid getting stuck. * By default install neubot below '/usr/local' Neubot 0.0.4 [2010-05-26] * neubot/utils.py * Add prettyprint_exception() function * network/pollers.py * Robust exception handler * Support for robust initialization * PEP8 compliant code * Fine grained exception handling in the core loop * Remove unused imports * Prepend underscore to private methods * Employ the new robust initialization mechanism * Update documentation * network/connections.py * Guard against unexpected behavior * Removed deprecated code * network/connections.py http/protocols.py * Allow getting socket and peer name * More verbose transparency on client and server side * neubot/servers.py * Do NOT close connection server side * bin/unix/neubot * Handle the INT signal properly * Add support for date http header Neubot 0.0.3 [2010-05-18] * bin/unix/neubot: By default be verbose rather than quiet * bin/unix/neubot: Revert: Create $HOME/.neubot if non-existent * http/utils.py: More flexible prettyprint approach * neubot/rendezvous.py: Parse rendez-vous JSON messages * neubot/clients.py: Client side rendez-vous (class simpleclient) * neubot/servers.py: Server side rendez-vous (class simpleserver) * application/coordinator.py: Run the coordinator server * application/_neubot.py: Periodically try the rendez-vous Neubot 0.0.2 [2010-05-14] * neubot/http/connectors.py: Client-side connector. * neubot/http/acceptors.py: Server-side acceptor. * http/clients.py: Marked as deprecated (use connector instead.) * bin/neubot neubot/main.py: Removed (now using neubot/application.) * bin/unix/neubot neubot/application: New improved startup procedure. * Makefile: Be more friendly in the install phase. * doc: Fully document the (now complete) neubot/http module. Neubot 0.0.1 [2010-05-07] * Makefile: Code to install/uninstall in Unix-like environments. * bin/neubot: Lookup neubot sources and launch it (Unix-only). * doc/: Pictures of neubot/network and neubot/http classes. * etc/init.d/neubot: Startup/shutdown script for Ubuntu. * neubot/http: Generic and client-side HTTP/1.1 support. * neubot/main.py: Logic to launch Neubot in Unix-like environments. * neubot/network: Support for nonblocking network I/O. * neubot/testing: Code to test neubot/network and neubot/http.