Dev Log
 Free Media
 Bob's Gallery
 Links & Resources


 Kana Quizzer
 Keybinding Util
 Model Gallery


 Release Notes

Arm Release Notes


4/28/12 - version 1.4.5 (e249dc8)
Software isn't perfect and arm is no exception. This is a bugfix release that corrects most issues that users have reported over the last several months. This does not include any new features, but includes changes that are important for continued interoperability with tor.

  • fix: unrecognized authentication methods (like 'SAFECOOKIE') would make arm crash (caught by E)
  • fix: providing users a log message when DisableDebuggerAttachment breaks us
  • fix: crashing issue when parsing tor log entries from leap years (fix by Sebastian, ticket)
  • fix: major terminal glitches related to the import of the readline module (caught by Stephan Seitz)
  • fix: adding OSX (and probably BSD) support for pwd lookups (thanks to Sebastian, ticket)
  • fix: unnecessary validation warnings for DirReqStatistics with new tor versions (caught by Sebastian, ticket)
  • fix: better validation for path component of circuit-staus output (ticket)
  • fix: checking that the auth cookie is 32 bytes before reading (caught by rransom, ticket)
  • fix: tor process detection on Mac/FreeBSD/OpenBSD broken due to different variant of ps (caught thanks to a test system from Jordi Espasa Clofent)
  • fix: using only lsof for OpenBSD connection queries (caught thanks to a test system from Jordi Espasa Clofent)
  • fix: torrc validation was case sensitive (caught by koolfy, thanks to help from Runa, ticket)
  • fix: torrc validation warned of special deb Logging default (caught by koolfy, thanks to help from Sebastian and Runa, ticket)
  • fix: snapshot handler had buggy path handling (caught by Jeff Bonner, ticket)
  • fix: specifying python version requirement in rpm dependencies (caught by unSpawn, thanks to help from Juan Orti Alcaine)
  • fix: proc utils didn't account for big-endian architectures (caught by swalker, ticket)
  • fix: 'enter' on the connection page was mislabeled (patch by twilde, ticket)
  • fix: reproduced an ACS failure, noting it in the README and adding a config option to partly work around it (thanks to help from rransom)
  • fix: circuit listing would fail to be updated if connection information was unavailable
  • fix: errors in checking the auth cookie size prevented alternate authentication methods from being attempted

9/25/11 - version 1.4.4 (881c67a)
Besides the normal bug fixes and minor features, this release introduces the control port interpretor. This is a new page or standalone prompt that gives raw control port access with several usability improvements (tab completion, history, irc style help, interpretor commands, etc).

  • added: control port interpretor which provides...
    • tab completion
    • history scrollback
    • /help option which provides usage information for all of the tor/interpretor commands and tor configuration options
    • /info option for querying relay information via fingerprint, nickname, or IP address
    • /find option which searches the backlog for the given regex
    • /events option which displays any events that we've listened for
    • /write option which dumps the interpretor backlog to a file
  • added: control socket support (feature request by dererk, ticket)
  • added: optional system wide torrc integration (thanks to ioerror, ticket)
  • added: dialog for guards, bridges, and exits with exit port usage and client locales (feature request by waltman and ioerror)
  • added: configuration editor for the gui interface (implemented by krkhan)
  • added: notice that warns the user against running tor or arm as root
  • change: doing a manual redraw when the user presses ctrl+L (ticket)
  • change: moving download location to so downloads will have ssl (suggested by arma)
  • change: rewrite of the descriptor popup, cleaning up the code and minor performance improvements
  • fix: preventing arm from starting if there's a running tor instance that we can't connect to
  • fix: when the config-text GETINFO option was unavailable we'd write a blank torrc (caught by Runa)
  • fix: appending path prefix to auth cookie path (caught by sid77)
  • fix: skipping log parsing if misformatted (caught by Sjon)
  • fix: incorrect armrc path in man page (caught by dererk)
  • fix: trying all authentication methods rather than just the first (caught by arma, ticket)
  • fix: toning down the warning when all connection resolvers fail (suggested by Sebastian)
  • fix: quitting wizard when the user presses 'q' instead of just esc (suggested by monochromec, ticket)
  • fix: quitting could cause unclean curses shutdown
  • fix: relay address fetching would ignore default values at shutdown, causing a stacktrace
  • fix: concurrency bug could crash arm if a CIRC event occurs while caching attached relays
  • fix: crashing issue from use of an uninitialized buffer when paused with accounting stats
  • fix: periodically redrawing content to prevent weird terminal glitches from persisting
  • fix: pressing 'enter' on config panel when never attached to tor would crash
  • fix: hotkey for saving the torrc conflicted with the relay setup wizard
  • fix: avoiding catch-all during controller init
  • fix: listener wasn't registering GUARD events
  • fix: dropping nonexistent ORCONN attributes
  • fix: clarifying the missing torrc message
  • fix (9/29/11, edcde43): dropping gtk/cagraph requirements (caught by monochromec, vinc3nt, and Bill White)
  • fix (9/29/11, edcde43): crash from esc in interpretor panel prompt (caught by Sebastian, ticket)
  • fix (9/29/11, edcde43): deduplicating 'Circuit build timeout' and 'looks like we don't need to wait so long' messages (patch by StrangeCharm, ticket)
  • fix (9/29/11, edcde43): forcing redraw on ctrl+L reguardless of need (caught by np, ticket)

7/17/11 - version 1.4.3 (6cf4836)
This completes the codebase refactoring project that's been a year in the works and provides numerous performance and usability improvements. Most notably this includes a setup wizard for new relays, menuing interface, gui prototype, substantial performance improvements, and support for Mac OSX.

  • added: relay setup wizard for autogenerating a torrc configuration
  • added: menu interface with all of arm's functionality (thanks to help from krkhan)
  • added: option for reconnecting to tor if it's been shut down and restarted
  • added: fetching the download and upload bandwidth totals from Tor if it's available
  • added: option for requesting a new identity
  • added: file descriptor usage in the header panel when running low
  • added: logging a notice when file descriptor usage is high
  • added: making interface components optionally excludeable
  • added: reintroduced the descriptor popup for the new connection panel
  • added: moved arm's codebase to git, with helper scripts to replace svn:externals and export
  • added: option for overriding all displayed color
  • change: renaming our process from "python src/ <args>" to "arm <args>" (thanks to help from ioerror)
  • change: hiding connection init latency, dropping arm's startup time from 0.84 seconds to 0.14 (83% improvement)
  • change: using blank space to display the nickname for circuit connections
  • change: dropping the file descriptor popup (it was both unused and inaccurate)
  • change: dropping deprecated connection panel from the codebase
  • change: using SAVECONF rather than writing directly when able
  • change: closing all message prompts when a key is pressed
  • change: using a more intuitive mode toggling for resizing the graph
  • change: added summaries for new tor config options
  • fix: avoiding mass memory allocation in torctl, lowering arm's perceived base memory footprint by 2.5 MB (12%) (ticket)
  • fix: fixing shutdown concurrency in torctl, lowering arm's shutdown time from a second to being almost instantaneous (ticket)
  • fix: sighups that caused tor to crash would also crash torctl and arm (ticket)
  • fix: crash when connecting to tor's socks port rather than control port (ticket)
  • fix: shutting down torctl zombie connections to the control port (ticket)
  • fix: moving connection component negotiation into torctl (ticket)
  • fix: all pid resolution was failing on macs, causing much of arm's functionality to fail
  • fix: dropping straight to lsof on macs to avoid fallback process, which was both lengthy and raised warnings
  • fix: misparsing circuit paths for Tor < (caught by asn)
  • fix: pressing enter on an empty connection page caused crash (caught by asn, ticket)
  • fix: edited config entries weren't displaying their new value
  • fix: ns/desc lookup failures could crash descriptor popup (caught by asn)
  • fix: autogenerated Nickname field caused a torrc validation false positive
  • fix: crashing issue when querying locales with an unavailable geoip file
  • fix: misparsing config option types for some older tor versions
  • fix: stacktrace from unjoined thread at shutdown
  • fix: intermediate graphing bounds were either inaccurate or missing
  • fix: man page typo (caught by tagnaq)
  • fix: --debug flag broke if config-text unavailable (caught by trogdor)
  • fix: man page had author's hard coded home rather than ~ (caught by kuhkatz)
  • fix: dropping remaining addfstr usage from the codebase
  • fix: indicating when tor's shut down in client mode
  • fix: miscropping strings that broke on their first word, causing alignment issues in the config panel
  • fix: cropping whitespace-only strings could crash
  • fix: display was cropped by an extra cell
  • fix: utilizing extra horizontal space for the configuration value field if wide
  • fix: providing a more descriptive controller password prompt (suggestion by weasel)
  • fix: fallback configuration descriptions weren't being installed (caught by ioerror)
  • fix: daemons weren't being shut down on keyboard interrupt, causing occasional stacktrace

4/4/11 - version 1.4.2 (r24555)
This release chiefly consists of a fully reimplemented connection panel. Besides being a sane, maintainable implementation this includes numerous new features and improvements like full circuit paths, applications involved for local connections, and better type identification.

  • added: full rewrite of the connection panel, providing:
    • listing the full paths involved in active circuits
    • identification of socks, hidden service, and controller applications (arm, vidalia, polipo, etc)
    • identification of exit connections with the common usage for the port they're using
    • display of the local -> internal -> external address when room is available (original patch by Fabian Keil)
    • better accuracy and performance in identifying client and directory connections
    • marking the uptimes for initial connections (arm only tracks connection uptimes since starting, so these entries are just minimum durations)
    • lazily loading the initial IP -> fingerprint mappings to improve the startup time
    • using the circuit-status to disambiguating multiple relays on the same IP address
    • smarter space utilization, filling in smaller columns if there isn't room for higher priority but larger entries
    • connection details popup changes:
      • using the consensus exit policies rather than the longer descriptor versions when available
      • displaying connection details no longer freezes the rest of the display
      • detail panel uses the full screen width and is dynamically resizable
      • more resilient to missing descriptors
  • change: hiding most tor config values by default (idea by arma)
  • change: dropping warning suggesting that users set the FetchUselessDescriptors option (suggestion by Sebastian and others)
  • change: always starting the bandwidth field from zero rather than using the state file total, which only contains the last day's worth of data (thanks to guilhem)
  • change: suggesting authentication and giving steps for it in the readme (suggestion by Sebastian)
  • change: caching config display lines, which reduces the CPU usage when scrolling by around 40%
  • change: added summaries for the remaining tor configuration options
  • change: using a dedicated enum class rather than tuple sets
  • fix: torrc validation requires 'GETINFO config-text' which was introduced in Tor verison (caught by Sjon, talion, and torland, ticket)
  • fix: off-by-one issue with the displayed line numbers for torrc errors (caught by Sjon)
  • fix: bin function wasn't available before python 2.6 (caught by Paul Menzel)
  • fix: mis-parsing family entries when there's no entry after the comma (caught by StrangeCharm, ticket)
  • fix: preventing SOCKS and CONTROL connections from being expanded (patch by Fabian Keil)
  • fix: disabling name resolution for application queries to avoid leaking to resolvers (patch by Fabian Keil)
  • fix: reversing src and dst addresses of SOCKS and CONTROL connections (caught by Fabian Keil)
  • fix: changing the 'APPLICATION' type to 'SOCKS' since the previous label was too long (caught by Fabian Keil)
  • fix: crashing issue from unknown relay nicknames (caught by krkhan)
  • fix: concurrency bug occasionally causing "syshook" stacktraces when shutting down
  • fix: header panel displayed the wrong IP address if it changed since we first started (ticket)
  • fix: unchecked OSError could cause us to crash when making directories (for instance if there was a permissions issue)
  • fix: the availability check for bsd resolvers was broken, probably causing resolution to fail for a few seconds on that platform
  • fix: dropping the pointless 'Log notice stdout' entry provided by config-text queries (ticket)
  • fix: taking DirServer and AlternateDirAuthority into account when determining the directory authorities
  • fix: consuming a little extra space in the connection panel when scrollbars aren't visible
  • fix: dropping the deprecated 'features.config.descriptions.persistPath' config option
  • fix: failed connection attempts to the control port were generating zombie connections (ticket)
  • fix: concurrency bug in joining on the TorCtl thread when tor shut down
  • fix: the 'startup.dataDirectory' config option was being ignored
  • fix: recognizing the proper private ip ranges of the 172.* block
  • fix: missing 'is default' option from config sort ordering
  • fix (4/4/11, r24562): hidden service parsing issue when there's multiple spaces in the HiddenServicePort opition (caught by Nicolas Pouillard)
  • fix (4/6/11, r24570): missing new connection components from installations (caught by Anthony Basile)
  • fix (4/13/11, r24613): failed requests for our flags cause a syntax error (caught by qbi)

1/7/11 - version 1.4.1 (r24054)
Platform specific enhancements including BSD compatibility and vastly improved performance on Linux.

  • added: querying the proc contents when able for tor resource and connection samplings to *greatly* reduce arm's resource usage (many thanks to psutil)
  • added: vastly improved BSD compatibility, thanks to patches by Fabian Keil
    • pid resolution via pgrep (all platforms) and sockstat (bsd only)
    • connection resolution via sockstat (all platforms) and procstat (bsd only)
    • autodetecting the path prefix for FreeBSD jails
  • added: displaying summaries of the options on the configuration panel (idea by Sebastian)
  • added: arm cpu usage to the header panel and logs (with an estimate for system call usages)
  • added: testing script for checking connection resolution performance, connection dumps, and the glyph demo
  • added: option to dump arm debug logs (better failsafe option)
  • change: incrementing the uptime field of the header panel each second
  • change: centralizing arm resources in ~/.arm (suggested by Sebastian and also thanks to feedback from rransom)
  • change: using exponential backoff of ps/proc resource resolutions when calls fail or tor isn't running
  • change: reordered resolvers by order of performance
  • change: when tor's man page is unavailable falling back to descriptions provided with arm (often the case with tbb, caught by NightMonkey and idea partly by rransom)
  • change: dropping support for graphing of custom ps attributes (feature was never used, kinda pointless, and incompatible with the proc enhancement)
  • fix: providing proper cpu samplings rather than an average over the life of the process
  • fix: expanding relative paths for the authentication cookie (mostly a problem for tbb instances)
  • fix: crashing error when querying hidden service parameters (caught by StrangeCharm, fixed by katmagic and chiiph)
  • fix: initially built diff differed from rebuilt version since it was missing the pycompat (caught by weasel)
  • fix: startup script wasn't handling unusual paths, such as with spaces and dashes (caught by weasel)
  • fix: startup script was forking the final process instead of calling exec (caught by weasel)
  • fix: log entries weren't being bracketed by date dividers when no scroll bars were visible (caught thanks to twur)
  • fix: workaround for config-text providing Log entries regardless of if it matches the default (caught thanks to Trystero)
  • fix: config validation mistakenly thought that Tor stripped spaces from CSV getconf responses (caught by murble)
  • fix: presenting a text input field with python 2.5 would crash (caught by murble)
  • fix: reloading torrc contents when a sighup is issued (caught by StrangeCharm)
  • fix: modifying lsof resolution to work with additional platforms (patch by Fabian Keil)
  • fix: dropping the locale for internal connections (patch by Fabian Keil)
  • fix: labeling connections to our socks port as being client connections (caught by Fabian Keil)
  • fix: skipping internal -> external address translation when the external address is private (caught by Fabian Keil)
  • fix: suppressing superfluous lsof warnings (patch by Hans Schnehl)
  • fix: when the pid was unavailable some resolvers failed to work
  • fix: including udp connection results (needed since exits proxy dns traffic)
  • fix: crashing issue when nickname was undefined but displayed on the connection panel
  • fix: concurrency issue caused the first connection resolution to often not have the pid
  • fix: connection resolution wasn't finding results if tor was running under a different name
  • fix: brought all Linux connection resolvers into parity (established tcp connections only)
  • fix: commands with quoted pipes were being mis-parsed by the sysTools' call function
  • change (1/11/11, r24064): including platform, python version, and arm/tor configurations in debug dumps
  • fix (1/11/11, r24064): properly parse the ps field when displaying decimal seconds (patch by Fabian)
  • fix (1/11/11, r24064): error when initial resource lookups fail (caught by Trystero)
  • fix (1/12/11, r24075): decimal seconds in the ps uptime field were being misparsed (patch by Fabian)
  • fix (1/15/11, r24092): adding a --docPath argument to help Gentoo ebuilds (Gentoo Ticket #349792)

11/27/10 - version 1.4.0 (r23873)
Introducing a new page for managing tor's configuration, along with several other improvements.

  • added: editor for the tor configuration, providing:
    • a simple method for setting config values and saving the new torrc
    • descriptions and usage information for the tor configuration options, fetched from its man page
    • color and bolding to indication option categories and if they're default or custom values
    • sorting by any of the config attributes
  • change: numerous revisions in preparation for being included in debian, thanks to weasel
    • moved deb/rpm build resources out of the source repository and added helper scripts
    • moved the arm install location to /usr/share/arm
    • purging the autogenerated egg file from the deb build
    • using temporary file utility for man page compression to avoid potential security issues (thanks to asn)
    • including dh_pysupport flag so it'll recognize the private python module (thanks to Emilio Pozuelo Monfort)
    • small revisions to several bits of debian metadata
  • change: full rewrite of the config panel, providing:
    • added: scrollbar and scrolling by displayed content rather than line numbers
    • added: checking for torrc entries that are pointless due to matching the default value
    • added: validation warning when custom entries are missing from the torrc
    • added: handling for the multiline torrc entry support that was added in tor
    • change: simplified and expanded on the config display and validation (performance improvements, human friendly units for torrc corrections, etc)
    • fix: torrc validation didn't recognize 'second' and 'byte' arguments
    • fix: scrolling was buggy if comments were being stripped
    • fix: more helpful messages for validation errors
    • fix: unnecessary whitespace was being stripped
  • added: INFO level logging for the arm startup time
  • change: removing all references to the controller password after we've connected to tor (request by ioerror)
  • change: using curses.textpad to improve text fields (supports arrow keys, emacs keybindings, etc)
  • change: revised the arm config interface (simplified and expanded to include maps)
  • fix: verbose logging was causing the application to freeze due to an n^2 deduplication implementation, disabling this feature for now when it takes too long (caught by NightMonkey)
  • fix: wasn't loading the settings.cfg if starting starter from the src directory (caught by NightMonkey)
  • fix: displaying empty conf contents caused crashes when calling math.log10(0) (caught by NightMonkey)
  • fix: persisting results from scraping the man page to greatly reduce startup time (idea by nickm)
  • fix: path for the sample armrc was wrong in the man page (caught by weasel)
  • fix: the arm starter was only executable from the arm directory
  • fix: not all worker threads were daemons, causing the process to persist in a broken state after exceptions and when quitting via ctrl+c
  • fix: custom armrcs resulted in the parsing config options being unavailable
  • fix: rounding error in rendering the scrollbar, causing it to shrink a line when at the bottom
  • fix: crashing issue when the '' config value was undefined and the stats graph was displayed
  • fix: making the interface more resilient to being resized while popups are visible
  • fix: log panel wasn't respecting the prepopulate* log level config options
  • fix: off by one error when wrapping lines in the log panel
  • fix (11/30/10, r23882): install script was failing to make the temporary directory for the compressed man page
  • fix (11/30/10, r23882): a torrc validation log entries had a typo

10/6/10 - version 1.3.7 (r23439)
Numerous improvements, most notably being an expanded log panel, installer, and deb/rpm builds.

  • added: installation/removal scripts and man page (thanks to kaner)
  • added: scripts and resources for making deb and rpm releases (thanks to ioerror, and also requested by helmut)
  • added: path prefix option for chroot jails (requested by asn)
  • added: customizable graph size (requested by voidzero)
  • added: incremental y-axis measurements to the graph (requested by voidzero)
  • added: caching for static GETINFO parameter
  • added: logging for the refresh rate metric
  • change: full rewrite of the log panel, providing:
    • dividers for the date, bordering all events that occurred on the same day
    • hiding duplicate log entries (feature request by asn)
    • coalescing updates if they're numerous, such as running at the DEBUG runlevel
    • providing a notice if tor supports event types that arm doesn't, and logging them as the 'UNKNOWN' type
    • condensing the label for runlevel event ranges further if they're identical for multiple types
    • options for:
      • saving logged events to a file, either via snapshots or running persistence
      • presenting torctl events of arbitrary runlevels
      • clearing the event log
      • maximum lines displayed from individual log entries
      • cropping based on time (requested by voidzero)
    • numerous performance improvements (for log prepopulation, determining the content length, caching for helper functions, etc)
    • minor bug fixes including:
      • added handling for BUILDTIMEOUT_SET events
      • dropping brackets from label if no events are being logged
      • merging tor and arm backlogs according to timestamps
      • regex matches were failing for multiline log entries
  • change: using PidFile entry to fetch pid if available (idea by arma)
  • change: dropping irrelevant information from the header when not running as a relay
  • change: updated torctl version to the current git head release
  • change: measuring by bits for transfer rates (config can set it back to bytes)
  • change: home/end keys jump to start/end of all scroll areas (request by dun)
  • change: trimmed last couple letters off downloaded/uploaded labels (requested by asn)
  • change: dropping the 'frequentRefresh' parameter in favor of just doing refreshes when there's new graph stats available
  • fix: shifting bandwidth prepopulation by a sampling interval to account for tor's internal behavior (thanks to voidzero, nickm, arma, and Sebastian)
  • fix: making rdns resolution disabled by defaut due to possible connection disclosure to upstream resolver (thanks to Sebastian)
  • fix: skipping bandwidth prepopulation if not running as a relay (caught by arma)
  • fix: bandwidth stats above the graph weren't getting reset by sighups (caught by voidzero)
  • fix: config and connection panels were failing to parse a torrc with tabs (caught by voidzero)
  • fix: remapping torrc aliases so GETCONF calls don't fail (caught by voidzero)
  • fix: crashing error in bandwidth panel for wide screen displays (caught by cjb)
  • fix: changing debian arch to all rather than any (suggestion by murb)
  • fix: had case sensitive check for the torrc logging types (caught by asn)
  • fix: crashing error when ExitPolicy was undefined (caught by asn)
  • fix: dumping a stacktrace to /tmp and exiting immediately if exceptions are raised while redrawing
  • fix: connection panel failed to handle family entries identified by its nickname
  • fix: race condition between heartbeat detection and getting the first BW event
  • fix: refreshing after popups to make the interface seem more responsive
  • fix: crashing and minor display issues if orport was left unset
  • fix (10/7/10, r23463): crashing from type issue in the graph panel (caught by tomb)

6/7/10 - version 1.3.6 (r22617)
Rewrite of the first third of the interface, providing vastly improved performance, maintainability, and a few very nice features. This improved the refresh rate (which is also related to system resource usage) from 30ms to 4ms (an 87% improvement).

  • added: settings are fetched from an optional armrc (update rates, controller password, caching, runlevels, etc)
  • added: system tools util providing simplified usage, suppression of leaks to stdout, logging, and optional caching
  • added: wrapper for accessing TorCtl providing:
    • client side caching for commonly fetched relay information (fingerprint, descriptor, etc)
    • singleton accessor and convenience functions, simplifying interface code
    • wrapper allowing reattachment to new controllers (ie, arm still works if tor's stopped then restarted - still in the works)
  • change: full rewrite of the header panel, providing:
    • notice for when tor's disconnected (with time-stamp)
    • lightweight redrawing (smarter caching and moved updating into a daemon thread)
    • more graceful handling of tiny displays
  • change: rewrite of graph panel and related stats, providing:
    • prepopulation of bandwidth information from the state file if possible
    • observed and measured bandwidth stats (requested by arma)
    • graph can be configured to display any numeric ps stat
    • third option for graphing bounds (restricting to both local minima and maxima)
    • substantially reduced redraw rate and making use of cached ps parameters (reducing call volume)
  • fix: preventing 'command unavailable' error messages from going to stdout, which disrupts the display (caught by sid77)
  • fix: removed -p option due to being a gaping security problem (caught by ioerror and nickm)
  • fix: crashing issue if TorCtl reports TorCtlClosed before the first refresh (caught by Tas)
  • fix: preventing the connection panel from initiating or resetting while in blind mode (caught by micah)
  • fix: ss resolution wasn't specifying the use of numeric ports (caught by data)
  • fix: parsing error when ExitPolicy is undefined (caught by Paul Menzel)
  • fix: revised sleep pattern used for threads, greatly reducing the time it takes to quit
  • fix: bug in defaulting the connection resolver to something predetermined to be available
  • fix: stopping connection resolution (and related failover message) when tor's stopped
  • fix: crashing issue when trying to resolve addresses without network connectivity
  • fix: forgot to join on connection resolver when quitting
  • fix: revised calculation for effective bandwidth rate to take MaxAdvertisedBandwidth into account
  • fix (8/7/10, r22820): connection panel was incorrectly parsing multi-line exit policies

4/8/10 - version 1.3.5 (r22148)
Utility and service rewrite (refactored roughly a third of the codebase, including revised APIs and much better documentation).

  • added: centralized logging utility for handling arm events, simplifying several parts of the interface
  • added: rewrote connection resolver, including:
    • fallback support for 'ss' and 'lsof' (requested by dun, John Case, and Christopher Davis)
    • readjusts resolution rate if calls prove burdensome
    • ui option for selecting mode of resolution
  • added: rewrote hostname resolver, including:
    • optional resolution via socket module (seems worse so disabled by default... pity)
    • non-blocking thread safety
    • extra error info
  • change: revised curses wrapper utilities (plus some hacks of the interface to accommodate it)
  • fix: issuing resets via RELOAD signal rather than sighup (thanks to Sebastian for pointing this out)
  • fix: taking into account potential None values when running get_option on arbitrary values (caught by pipe and enki)
  • fix: crashing problem if use_default_colors() calls failed (caught by sid77)
  • fix: removed workaround for mysterious torrc validation bug (was accidentally already fixed - thanks to dun for lending a test environment)
  • fix: size and time labels weren't doing integer truncation (rounding was unintended and frustratingly difficult to get rid of)
  • fix: hack to prevent log panel from drawing before being positioned
  • fix: arm crashed if torrc was an empty file
  • fix: wasn't consistently bolding help keys
  • fix (4/9/10, r22160): crashing issue from malformed display string
  • fix (4/10/10, r22169): crashing issue when failing to find event types
3/7/10 - version 1.3.4 (r21852)
Weekend bugfix bundle.

  • added: returned option to reload torrc and added option to issue a sighup
  • fix: header panel wasn't interpreting multi-line exit policies (caught by dun)
  • fix: substantial display bug when stripping comments and torrc is bigger than the panel (caught by Paul Menzel)
  • fix: deb specific hack for estimating the file descriptor limit was broken (caught by Paul Menzel)
  • fix: skip printing stack trace in case of keyboard interrupt
  • fix: updated listing of directory authorities (for tor version
  • fix: several uncaught exceptions when the network consensus couldn't be fetched
  • fix: torrc comment stripping wasn't removing comments on the same lines as commands
  • fix: torrc validation was failing under some conditions for CSV values (like ExitPolicy)
  • fix (3/9/10, r21888): initializing error when processing family connections (caught by dun)
  • fix (4/7/10, r22134): scrubbing wrong data for inbound connections (caught by waltman)

2/27/10 - version 1.3.3 (r21772)
Hiding client/exit information to address privacy concerns and fixes for numerous issues brought up in irc.

  • added: scrubbing connection details of possible client and exit connections
  • change: providing file descriptions in README, updated known issues and future plans in TODO
  • change: added precision for bandwidth cap and burst if uneven values (requested by mete1989)
  • fix: HiddenService* parameters fetched via a special option (caught by dun, karsten, and grumpy3)
  • fix: workaround for os specific torrc validation bug - unfortunately haven't managed to repro yet so no fix (caught by grumpy3, Tas, and dun)
  • fix: checking for python curses bindings at startup (caught by dun)
  • fix: import error - TorCtl and socket missing from (caught by grumpy3)
  • fix: showing external ip in connection panel rather than local nat address (caught by mete1989)
  • fix: raised minimum width at which graph stats are displayed beside label (caught by dun)
  • fix: wasn't treating "accept *" and "reject *" as catch-all policies
  • fix: wasn't resizing graph panel properly in case of a sighup

2/14/10 - version 1.3.2 (r21646)
Refactoring goodness and bug fixes.

  • change: revised curses utilities to further simplify interface implementations
  • change: substantial layout changes (adding util and init packages) and including a copy of the gpl
  • fix: bug with handing of DST for accounting's 'Time to reset' (patch provided by waltman)
  • fix: header and connection panels weren't accounting for having ORListenAddress set (caught by waltman)
  • fix: crashing bug when shrank too much for scrollbars to be drawn
  • fix: couple system commands weren't redirecting their stderr to /dev/null

2/7/10 - version 1.3.1 (r21580)
Had enough of a siesta - getting back into development beginning with a rewrite if the starter.

  • added: made authentication a little smarter, using PROTOCOLINFO to autodetect authentication type and cookie location
  • change: made 'blind mode' (disables connection queries) a startup option rather than flag in source (request by Sebastian)
  • change: all log events (including arm) are now set via character flags, with TorCtl events log as their own toggleable type
  • change: starting log label with runlevel events, condensing if logging a range
  • change: simplifying command line parsing via getopt
  • fix: blind mode now prevents all netstats (including connection counts and halting resolver thread), improving performance

11/29/09 - version 1.3.0 (r21062)
Weekend bugfix bundle.

  • added: most commands can be immediately executed from the help page (feature request by arma)
  • fix: truncating header's version fields if too long (caught by hexa)
  • fix: file descriptor dialog now provides a wider variety of error messages in case of failure
  • fix: offset issue in connections listing when scroll bar was visible
  • fix: removing family connections from listing when control port is closed
  • fix: preventing TorCtl startup issues from going to stdout (duplicates warnings)

11/8/09 - version 1.2.2 (r20927)
This will be the last update for a while since I'm about to start a new job.

  • added: including family relays on connections listing
  • added: file descriptors dialog (stats and scrollable listing)
  • change: logs warning if torrc fails to load
  • fix: size and time labels used in torrc are expanded for validation
  • fix: duplicate torrc entries weren't being detected if not erroneous
  • fix: crashing issue when cleaning up hostname cache
  • fix: stretching connection lines to fill full screen

10/21/09 - version 1.2.1 (r20814)
Substantial bundle of changes including torrc validation, improved arm event logging, and numerous bug fixes.

  • added: verifies loaded torrc consistency against tor's actual state (gives warning and providing corrections)
  • added: checks for torrc entries that are irrelevant due to duplication (gives notices and highlights)
  • added: log provides TorCtl events (hack... so ugly...)
  • added: option for logging runlevel events of arm, tor, or both
  • added: ARM-DEBUG event for netstat query time
  • added: providing progress bar when resolving a batch of hostnames
  • change: providing prompt notice when tor's control port is closed
  • fix: limiting pre-loaded events to this tor instance
  • fix: limits log entries used to pre-load events (big logs caused issue with startup time)
  • fix: properly closing TorCtl when quitting (was occasionally screwing up terminal)
  • fix: at several points TorCtlClosed exceptions were uncaught, causing crashes when tor was closed
  • fix: netstat and geoip failures were being noisy when tor quits
  • fix: bug in tracking connection counts if tor quits when paused
  • fix: sighup wasn't resetting all relevant internal variables
  • fix: pausing bypassed connection sorting

10/16/09 - version 1.2.0 (r20798)
Resolving a few small issues that bugged me.

  • change: using log file to pre-populate events if available
  • change: asks for confirmation when quitting
  • change: provides warning when tor's descriptors won't be updated
  • change: event log now allows for multi-line messages
  • fix: occasional crashing error concerning connection cache when paused
  • fix: issue with tracking connection times when paused or not visible

9/28/09 - version 1.1.3 (r20678)
More issues discussed on irc.

  • fix: made netstat lookups a best-effort service, separate from draw thread (caught by arma and StrangeCharm)
  • fix: using ps as final fallback if otherwise unable to determine pid (suggested by Sebastian)
  • fix: appends tor's pwd if torrc path is relative (caught by arma)

9/27/09 - version 1.1.2 (r20674)
Few issues discussed on irc.

  • added: changelog and cleaned up todo documents (requested by arma)
  • added: option in to disable connection panel (feature request by Sebastian)
  • fix: failed to work on osx and bsd due to crashes after failed system calls (caught by Sebastian and Christopher Davis)
  • fix: reloading static data in bandwidth panel after HUP (caught by hexa)
  • fix: couple alignment issues with the connection listings

9/23/09 - version 1.1.1 (r20655)
Bundle of semi-low hanging fruit, including a few issues discussed on irc.

  • added: showing extra parameters in connection listings if room's available
  • added: identifying directory server connections
  • change: providing an error message if running an incompatible python version (issue spotted by arma)
  • change: giving arm a version to help in bug reports
  • change: minor tweak to the wording of a faq entry (requested by Sebastian)
  • fix: wasn't accounting for RelayBandwidthRate/Burst in effective bandwidth (caught by hexa and arma)
  • fix: timing issue when shutting down (caught by arma)
  • fix: couple issues with connection time being tracked when paused
  • fix: preserving old results when netstat fails

9/6/09 - r20493
Several substantial features (last tasks for arm's todo list).

  • added: scroll bars for connections listing and event log
  • added: made log scrollable (feature request by StrangeCharm)
  • added: regular expression filtering for log (feature request by StrangeCharm)
  • added: connection uptimes (time since connection was first made)
  • added: identifying client from server connections and providing popup for client circuits
  • added: graph for system resource usage (cpu/memory)
  • change: removed cursor toggling option for connection page
  • fix: minor display issue when changing event types

8/22/09 - r20354
Several fixes and changes, mostly concerning the graph panel and making better use of screen real estate.

  • added: labeled the graph's x-axis and reordered the information with changes omitted for small (tty sized) terminals (feature request by StrangeCharm)
  • added: doubling up contents of header panel in case of wide screens to take advantage of added space
  • added: exit policy to header if a wide display
  • change: added precision for bandwidth measurements
  • change: using "orconn-status" info to eliminated ambiguity in identifying inbound connection fingerprints (clever idea, but had very little impact)
  • fix: when sighup signal is received reloads torrc and internal state (caught by StrangeCharm)
  • fix: probable resolution of nasty concurrent bug concerning access to connection cache
  • fix: minor issues concerning connection panel including graph widths and miscalculating local maxima
  • fix: short circuits fingerprint cache when looking up localhost descriptor (preventing lookup failures)
  • fix: minor issues with connection panel and description popups when no connections are available
  • fix: descriptor popup wasn't determining if the first visible line belonged to an encryption block
  • fix: made interface more resilient against arbitrary resizing (such as during popups)

8/17/09 - r20331
Work done over this last week.

  • added: popup for raw consensus description
  • added: total bandwidth measurement (feature request by StrangeCharm)
  • added: connection entry for lookup of local consensus data
  • change: widened graphs to utilize full screen width (clever idea by StrangeCharm)
  • change: preserving runtime and pid when shutting down
  • change: few tweaks to the readme
  • fix: joining on worker daemon threads to exit gracefully (had a noisy race condition)
  • fix: using BW events to keep connection count graph in sync with bandwidth graph
  • fix: can now support graphs of multiple sizes

8/8/09 - r20233
Rewrote graph panel so it can handle any real time statistics.

  • added: option to graph connection counts (feature request by phobos)
  • added: custom graph bounds (global or local maxima)

Announced the project on the or-talk mailing list today which spurred an interview with Brenno Winter (who works on the cleverly named Little Sister project). The interview is available here.

8/3/09 - r20210
Added start of a faq to the readme in preparation for announcement on or-talk.

7/30/09 - r20198
Work done over the trip.

  • added: customizable update interval for bandwidth graph (feature request by StrangeCharm)
  • change: noted new project page in the readme (
  • change: added word wrapping to conf panel
  • change: added function for custom popup menus
  • change: logs error message when required event types are unsupported rather than throwing an exception
  • change: using different screenshot images
  • fix: resolved issue that caused monitor to think tor was resumed when quit
  • fix: bug with panel utility's resize detection
  • fix: resorts connections after NEWDESC and NEWCONSENSUS events
  • fix: forgetting to to resume monitor at multiple points after a temporary pause
  • fix: minor refactoring based on suggestions from pylint (unused imports and such)

7/22/09 - r20115
Another small grab bag update.

  • added: version status to header panel
  • change: noted "Common *nix commands including: ps, pidof, host, and netstat" among requirements in readme
  • change: took some tricks from Mike's ConsensusTracker to further improve match rate
  • fix: type mismatch that greatly diminished fingerprint matching
  • fix: accidentally used idhash rather than idhex for fingerprints when updating cache with the contents of a NEWDESC event

7/21/09 - r20100
Quick fixes based on discussion on irc.

  • change: provides warning when geoip database is unavailable (thanks to SwissTorExit and karsten)
  • fix: missing import for the socket module

7/20/09 - r20096, r20097, r20098
Couple fixes so arm plays nicely in the case of multiple running tor instances.

  • fix: can now deal with multiple tor instances: checks pid of process with the open control port
  • fix: if only one tor process is running use that pid (netstat fails if running as a different user

7/19/09 - r20087, r20090
Last substantial feature on my to-do list.

  • added: connections can be selected to view consensus details (very spiffy!)
  • added: listing selection is by menu rather than cycling
  • fix: couple bugs, the most interesting being when netstat can't resolve a connections listing (spotted by phobos)

7/18/09 - r20078, r20079
Miscellaneous fix and feature batch.

  • added: relay's flags to the header
  • added: listing by relay nickname
  • added: additional event aliases and option for NEWCONSENSUS
  • added (phobos): screenshot of arm in action so people can see what it looks like
  • change: use constant "Listing" label for sorting rather than current view
  • change: removed 'reload torrc' option (deceptive and useless)
  • fix: updates cached consensus mappings with NEWDESC and NEWCONSENSUS events

7/14/09 - r20016
Resolved a few quick bugs:

  • fix: added fingerprint lookup cache to resolve substantial performance issue
  • fix: hostname resolution progress accounts for newly added entries (no more negative progress)
  • fix: resolved bug that prevented arm from starting if too small
  • fix: ordering issue when sorting unresolved ip addresses

7/11/09 - r19975
Connections panel can now list by IP, hostname, or fingerprint: reverse resolution was easy, but comparing three different implementations and making it non-blocking with a pausable thread-pool backend? Not so much.

7/8/09 - r19953, r19957
Just got back from Toorcamp. Preliminary connection page and miscellaneous additions.

  • added: basic connection listing page (using netstat results)
  • added: connection listing now has user configurable sort functionality (it's actually pretty spiffy: supports secondary and tertiary sub-keys)
  • added: 'addfstr' to util which allows for embedded formatting tags (VERY helpful)
  • added: help shows page's current settings
  • added: made bandwidth panel toggleable
  • added: avg bandwidth to bottom of panel
  • fix: prevented header from being paused on page change
  • fix: prevented bandwidth accounting events from being lost when paused

6/14/09 - r19716
Decently big batch of feature additions and bug fixes.

  • added: second page that presents torrc with syntax highlighting, optional comment stripping, etc
  • added: ps sampling (cpu/memory usage, pid, and uptime)
  • added: help popup with page controls
  • fix: corrected issue that caused periodic refreshing to fail
  • fix: accounting reset time takes into account DST
  • fix: make accounting input and header pausable

6/10/09 - r19708, r19709
Couple quick changes.

  • change: removed '--path-to-torctl' startup option
  • fix: accounting 'time to reset' now includes gmt to local conversion

6/7/09 - r19646, r19655, r19656
Couple features.

  • added: svn external inclusion of TorCtl
  • added: bandwidth panel now displays accounting data if set

6/6/09 - r19636, r19637
Quick change based on discussion on irc.

  • added: command line argument to specify location of TorCtl without changing Python path first (feature request by phobos)

6/5/09 - r19629
Substantial refactoring changes.

  • change: switched from a functional to an OO implementation which further simplified the controller: as an added plus this should make adding additional 'pages' trivial
  • change: offloaded resizing to the curses wrapper
  • fix: dealt with another curses wtf bug where panels wouldn't repaint unless done in a specific order

6/4/09 - r19626
Tested and corrected formatting for all event types except STREAM and STREAM_BW (not sure how to make those occur...).

6/2/09 - r19615, r19619, r19620
Introduced layer of abstraction from curses, simplifying its use and greatly improving reliability.

  • added: introduced wrapper to hide curses ugliness which greatly simplified interface code
  • added: notice when relay's been silent for five seconds (based on BW events so probably due to Tor being closed), another idea by karsten
  • changed: unchecked events have stubs to present information and provide debugging information in case of type mismatch
  • fix: all problems with resizing: it's now rock solid

5/29/09 - r19580, r19594
Fixes for several rather sinister reliability problems:

  • added: allows logged events to be changed while running (suggested feature by karsten) and experimenting with a more modular design
  • fix: added non-blocking reentrant locks to fix concurrency errors that caused chaotic terminal glitches (such as switching to a Chinese character set)
  • fix: now fully handles resizing (including vertical)
  • fix: using new capabilities in TorCtl including cookie authentication and disabling logging
  • fix: bandwidth graph bug when paused
  • fix: occasionally refreshes static content in case of graphical hiccups
  • fix: added workaround for obscure curses caching bug that prevented portions of the screen from being redrawn
  • fix: bug preventing initialization if too small

5/25/09 - r19567
Few small tweaks including:

  • added: tiny shell script to alias starting
  • added: more informative error message if TorCtl isn't available
  • change: defaultly logged events
  • change: make inclusion of 'unknown' events toggleable

5/24/09 - r19548, r19549, r19550, r19551
Initial version of arm (terminal relay status monitor). Repository set up by arma.

  • fix: bug concerning undefined exit policy
  • fix: resolved issue that prevented monitor from functioning in terminals without curs_set support