Date | Commit message (Collapse) |
|
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.
|
|
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.
|
|
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.
|
|
Avoid conflicting with existing Mongrel libraries since
we'll be incompatible and break things w/o disrupting
Mongrel installations.
|
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@944 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@916 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
* 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
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@878 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@806 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@744 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@741 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
see if it's worth keeping
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@722 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@650 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
change something?
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@588 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
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
|
|
Solaris 2.9. [#11728]
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@570 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@509 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@482 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@470 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@465 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@418 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@414 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@413 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@408 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@393 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@390 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@388 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@385 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@381 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@362 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@355 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
been ultra bad about commits.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@349 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
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
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@306 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
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
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@275 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@269 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@267 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@265 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
binding.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@256 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
clearer.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@255 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@252 19e92222-5c0b-0410-8929-a290d50e31e9
|
|
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@203 19e92222-5c0b-0410-8929-a290d50e31e9
|