about summary refs log tree commit homepage
path: root/ext/http11/http11.c
DateCommit message (Collapse)
2009-02-25rename http11 => unicorn/http11
Avoid conflicting with existing (and future) Mongrel installs in case either changes. Of course, this also allows us more freedom to experiment and break the API if needed... However, I'm only planning on making minor changes to remove the amount of C code we have to maintain and possibly some minor performance improvements.
2009-02-20http11: set SERVER_NAME env regardless of Host: header
The Rack spec requires it. So we'll just set it to "localhost" if we're dealing with HTTP/1.0 clients that omit the "Host:" header.
2009-02-19http11: don't bother defining SERVER_SOFTWARE
It was mistakenly set to false before, which breaks Rack::Lint. As the Rack SPEC doesn't require it, don't bother setting it at all and save a few bytes of memory.
2009-02-09s/Mongrel/Unicorn/g
Avoid conflicting with existing Mongrel libraries since we'll be incompatible and break things w/o disrupting Mongrel installations.
2009-01-31No more special params hash.
2008-03-08ext/http11: memoize X-Forwarded-For + X-Real-IP headers keys
While these headers are not in RFCs, they are commonly set by proxies and having proxies in front of Mongrel is a popular deployment configuration. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@994 19e92222-5c0b-0410-8929-a290d50e31e9
2008-03-06ext/http11: remove strchr() and scary comment regarding it
Replace it with memchr(3) instead, which works on a buffer with a predetermined length, so we don't have to worry about strange versions of Ruby which don't null-terminate strings. memchr() is used several times in the MRI source code itself (without compatibility definitions), so it should be portable to all platforms MRI runs on. Additionally, we now tolerate null bytes in the Host header and can still parse ports in them correctly if anybody sends them :) If it matters, it is also theoretically faster as it doesn't need to check for a '\0' terminator. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@993 19e92222-5c0b-0410-8929-a290d50e31e9
2008-03-06ext/http11: optimistically optimize setting of common headers
Most HTTP traffic will send a small, common subset of headers. For these, we can avoid recreating RString objects and instead use predefined, frozen RString objects. This results in a ~22% speed improvement in header parsing for common cases where clients send the headers we have predefined, frozen objects for. Additionally, new parser tests have been added to ensure the optimizations work (for MRI). There is an optional qsort(3) and bsearch(3) dependency to improve average lookup time for the frozen strings; but it's not enabled due to portability concerns. The linear search performance is acceptable, and can be hand-optimized for the most frequently seen headers by putting those first. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@992 19e92222-5c0b-0410-8929-a290d50e31e9
2008-03-06ext/http11: define "HTTP_" with CPP as a constant instead of a Ruby global
This reduces line-wrapping and makes code easier to read as well as slightly improving performance by avoiding variable/pointer dereferencing overhead. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@991 19e92222-5c0b-0410-8929-a290d50e31e9
2008-03-06ext/http11: modify the C Ragel parser to upper-snake-case headers in-place
This is based on Zed's suggestion and helps take complexity out of the hand-written C code, allowing memcpy() to be used instead. Zed Shaw wrote in <20080303044659.5a550c19.zedshaw@zedshaw.com>: > * Also, now that I think about it, if you don't care that the original > string is modified in place then you can just have ragel do all of this > as it goes. Simply modify the parser to have it do this transform on > the header chars using the existing pointer. That'd probably be > alright since people don't usually keep the input headers around when > using the mongrel parser. I don't have a working Java runtime, so I've only made the bare minimum modification to the http11_parser.java.rl file which allows Ragel to still work with it. All the other Java parts are untouched and whatever upper-casing routine was used before continues to be used now. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@990 19e92222-5c0b-0410-8929-a290d50e31e9
2008-03-02http11: ~6% performance increase in header parsing
Allocate one string object and avoid appending to it causing it to be resized. Additionally, optimize the string toupper copy so that it's done in a single pass. Also, use an inline, locale-independent toupper() implementation which should be more predictable for users with exotic locales (HTTP header names are always ASCII). The following test script was used: require 'mongrel' include Mongrel parser = HttpParser.new req = "GET /ruby HTTP/1.1\r\n" \ "User-Agent: curl/7.12.3\r\n" \ "Host: bogomips.org\r\n" \ "Accept: */*\r\n" \ "\r\n".freeze hash = Hash.new 100000.times do parser.execute(hash, req, 0) parser.reset hash.clear end git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@989 19e92222-5c0b-0410-8929-a290d50e31e9
2008-01-02trunk version # targets 1.2
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@944 19e92222-5c0b-0410-8929-a290d50e31e9
2007-12-16New Mongrel.log is verified working for Mongrel Handler, Rails and Merb.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@916 19e92222-5c0b-0410-8929-a290d50e31e9
2007-12-11Added compatibility for ruby1.9. Changes made:
* changed RSTRING(temp)->ptr to STRING_PTR(temp) (new macro available since ruby 1.8.6) * changed RSTRING(data)->len to RSTRING_LEN(data) (new macro available since ruby 1.8.6) * added ifndef conditions to check if macros STRING_PTR and STRING_LEN. If do not defined, create them. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@895 19e92222-5c0b-0410-8929-a290d50e31e9
2007-11-12ugh
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@878 19e92222-5c0b-0410-8929-a290d50e31e9
2007-10-27had no idea the version was hardcoded in the C extension somewhere
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@806 19e92222-5c0b-0410-8929-a290d50e31e9
2007-10-26revert trunk to 1.1
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@744 19e92222-5c0b-0410-8929-a290d50e31e9
2007-10-26reverts for 1.0.2
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@741 19e92222-5c0b-0410-8929-a290d50e31e9
2007-10-22pure ruby URIClassifier passes on C and JRuby both; now time to profile and ↵
see if it's worth keeping git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@722 19e92222-5c0b-0410-8929-a290d50e31e9
2007-10-15fix #14086
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@650 19e92222-5c0b-0410-8929-a290d50e31e9
2007-09-16Getting ready for mongrel 1.0.2 - site and versions update. Did I forget to ↵
change something? git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@588 19e92222-5c0b-0410-8929-a290d50e31e9
2007-09-13After some discussion with tst upstream author (Peter A friend), he changed ↵
the tst library to meet mongrel needs, and he also close the bug upstream :D So we are in sync with his source code and bug 10279 is closed with this commit. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@586 19e92222-5c0b-0410-8929-a290d50e31e9
2007-08-19Switched to C-Style comments in http11.c so that it will now compile in ↵
Solaris 2.9. [#11728] git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@570 19e92222-5c0b-0410-8929-a290d50e31e9
2007-01-23Site update, version bump for the 1.0.1 release
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@509 19e92222-5c0b-0410-8929-a290d50e31e9
2006-12-20Version change because rubygems can't handle 1.0-rc1 so must be 1.0
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@482 19e92222-5c0b-0410-8929-a290d50e31e9
2006-12-16Whitelist for headers which can be duplicated.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@470 19e92222-5c0b-0410-8929-a290d50e31e9
2006-12-15Version number bump to 0.3.19
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@465 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-25Version bump to 0.3.18
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@418 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-25Version bump to 0.3.17.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@414 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-25Removed experimental mime carving (in branch now).
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@413 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-25A few tweaks to bmhsearch prior to the branch out.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@408 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-20Removed restriction on edge case for begging string not being repetitive.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@393 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-17Version number bump.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@390 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-17More fully tested BMH with extensive fuzzing test.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@388 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-15Version bump to 0.3.15
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@385 19e92222-5c0b-0410-8929-a290d50e31e9
2006-11-15Implemented fast BMH incremental search class for new MIME carving.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@381 19e92222-5c0b-0410-8929-a290d50e31e9
2006-10-24Fixes --group and --user options.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@362 19e92222-5c0b-0410-8929-a290d50e31e9
2006-10-03slight tweak to make everything add up for allowed lengths
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@355 19e92222-5c0b-0410-8929-a290d50e31e9
2006-09-22Mongrel 0.3.13.5 version bump. Final commit of changes from 0.3.13.4. I've ↵
been ultra bad about commits. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@349 19e92222-5c0b-0410-8929-a290d50e31e9
2006-08-08Fixes the differences between mongrel and webrick around request URI, ↵
path_info, etc. Adds REQUEST_PATH to disambiguate the whole problem as well. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@311 19e92222-5c0b-0410-8929-a290d50e31e9
2006-08-06Increased URI length to 1024, removed ; that cause Sun C problems.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@306 19e92222-5c0b-0410-8929-a290d50e31e9
2006-07-13Backport of HttpRequest enhancements from 0.4. Patch to specify --prefix ↵
from Scott Laird. Fix for ids not working with GC. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@292 19e92222-5c0b-0410-8929-a290d50e31e9
2006-07-01Invalid type on ID could cause meltdown.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@275 19e92222-5c0b-0410-8929-a290d50e31e9
2006-06-30Documentation update and sync with latest code.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@269 19e92222-5c0b-0410-8929-a290d50e31e9
2006-06-30Ruby license applied to all files
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@267 19e92222-5c0b-0410-8929-a290d50e31e9
2006-06-30Switched Mongrel to Ruby license.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@265 19e92222-5c0b-0410-8929-a290d50e31e9
2006-06-24Fixes for more blocking mongrels, allows changing user:group after socket ↵
binding. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@256 19e92222-5c0b-0410-8929-a290d50e31e9
2006-06-23Refactor reaping dead threads. Slight change to license header to make it ↵
clearer. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@255 19e92222-5c0b-0410-8929-a290d50e31e9
2006-06-21Version bump, news announce.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@252 19e92222-5c0b-0410-8929-a290d50e31e9
2006-05-21LGPL preamble on all source files.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@203 19e92222-5c0b-0410-8929-a290d50e31e9