Capuchin Readme

From reSIProcate
Jump to navigation Jump to search

This is Repro.[edit]

The current release of Repro is 0.2 (Capuchin) RC1, based on version 6030 of the reSIProcate repository.

There have been many, many changes since the 0.1 builds.

At the Feb 16-18 coding session (and the weeks leading to it), we pushed to polish repro for this release. The changes made include

  • A reworked Request Processor chain that allows multiple processors to bookmark and post timers. Implemented general q-value processing, parallel forking to targets of equal q-value, sequential forking between different q-values. Added command-line control of this q-value processing
  • Implementing Trusted Node Access Control Lists (ACLs) for incoming, paying attention to either source IP address or the peer's certificate provided during TLS connections
  • Responding correctly to OPTIONS when Max-Forwards runs out
  • Made it possible to change the Web Administration account's password
  • Version information is available from the command line, and contained in the HTTP Server header field
  • Tightened up forwarding of stray responses. Repro will not forward non-200/INVITE responses without a matching transaction. (200/INVITEs will be stopped once we correct the INVITE transaction to keep state long enough to do so correctly)
  • Better handling of Security exceptions when processing Identity. Identity-Info is no longer added unless Identity can be
  • Moving TCP reuse code into a general SetTargetConnection request processor (monkey) in preparation for future outbound/connection-reuse work
  • Turning off digest challenges for BYE.
  • More graceful exit when startup conditions are broken (can't aquire ports, start webserver, reach database)
  • Memory usage scrub: removed many issues
    • removed a static initialization order bug that was not expressing itself well on most platforms
    • cleaning up after popt
    • handling some edge cases in ares
    • fixed some inappropriate use of non-existant header field values
    • better protection against Berkeley database files containing junk or malicious content
    • proper cleanup of SipMessage memory when handling stray responses and other edge conditions
    • removal of leak in the Security framework
  • Assert scrub/Code review
    • Started the process of removing asserts in the codepath of information taken from the wire or other external sources. We've made significant progress on this task, but more attention is needed still.
  • Started the infrastructure for general decoration of outgoing messages to support improved record-routing behavior in the future. (Proper handling of record-route when traversing a TLS/UDP boundary is still incomplete in this release. A branch has been formed to finish this effort.)
  • Added release building tools for RedHat-like Linuxes, Debian, and Microsoft Windows
  • Implemented correct clean and distclean targets for the entire resiprocate tree. Improved efficiency of clean (the system doesn't build dependencies just to delete them now)
  • Added --recursive-redirect option to specify that repro should recurse on 3xx reponses
  • Created a man page, added significant documentation to the tree and the wiki
  • Improved the test framework for repro
    • Added many tests to the tfm repro sanityTests
    • Made tfm work under Windows
    • Added BADTEST and BUGTEST macros to help organize tests we know are bad (the test itself is broken), or a test that highlights a known bug in repro.
    • Started to better organize the tests
    • Made the tfm output easer to mechanically digest

There have also been many improvements in the reSIProcate stack since the 0.1 builds. Please see the subversion logs for details. At the highest level, this release of repro takes advantage of:

  • improved non-INVITE transaction handling
  • improved RFC 3263 DNS failover, along with caching of failures to avoid the Non-INVITE failure trap