using v8::Local;
using v8::Object;
using v8::String;
+using v8::Uint32;
using v8::Value;
const uint32_t kOnHeaders = 0;
int name##_(const char* at, size_t length)
-// Call this function only when there is a valid HandleScope on the stack
-// somewhere.
-inline Local<String> MethodToString(Environment* env, uint32_t method) {
- // XXX(bnoordhuis) Predicated on the observation that 99.9% of all HTTP
- // requests are either GET, HEAD or POST. I threw in DELETE and PUT for
- // good measure.
- switch (method) {
- case HTTP_DELETE: return env->DELETE_string();
- case HTTP_GET: return env->GET_string();
- case HTTP_HEAD: return env->HEAD_string();
- case HTTP_POST: return env->POST_string();
- case HTTP_PUT: return env->PUT_string();
- }
-
- switch (method) {
-#define V(num, name, string) \
- case HTTP_ ## name: \
- return FIXED_ONE_BYTE_STRING(node_isolate, #string);
- HTTP_METHOD_MAP(V)
-#undef V
- }
-
- // Unreachable, http_parser parses only a restricted set of request methods.
- return FIXED_ONE_BYTE_STRING(node_isolate, "UNKNOWN_METHOD");
-}
-
-
// helper class for the Parser
struct StringPtr {
StringPtr() {
// METHOD
if (parser_.type == HTTP_REQUEST) {
message_info->Set(env()->method_string(),
- MethodToString(env(), parser_.method));
+ Uint32::NewFromUnsigned(parser_.method));
}
// STATUS
var REQUEST = HTTPParser.REQUEST;
var RESPONSE = HTTPParser.RESPONSE;
+var methods = HTTPParser.methods;
+
var kOnHeaders = HTTPParser.kOnHeaders | 0;
var kOnHeadersComplete = HTTPParser.kOnHeadersComplete | 0;
var kOnBody = HTTPParser.kOnBody | 0;
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'GET');
+ assert.equal(info.method, methods.indexOf('GET'));
assert.equal(info.url || parser.url, '/hello');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 1);
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'POST');
+ assert.equal(info.method, methods.indexOf('POST'));
assert.equal(info.url || parser.url, '/it');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 1);
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'GET');
+ assert.equal(info.method, methods.indexOf('GET'));
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 0);
assert.deepEqual(info.headers || parser.headers,
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'GET');
+ assert.equal(info.method, methods.indexOf('GET'));
assert.equal(info.url || parser.url, '/foo/bar/baz?quux=42#1337');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 0);
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'POST');
+ assert.equal(info.method, methods.indexOf('POST'));
assert.equal(info.url || parser.url, '/it');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 1);
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'POST');
+ assert.equal(info.method, methods.indexOf('POST'));
assert.equal(info.url || parser.url, '/it');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 1);
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'POST');
+ assert.equal(info.method, methods.indexOf('POST'));
assert.equal(info.url || parser.url, '/it');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 1);
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'POST');
+ assert.equal(info.method, methods.indexOf('POST'));
assert.equal(info.url || parser.url, '/helpme');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 1);
var parser = newParser(REQUEST);
parser[kOnHeadersComplete] = mustCall(function(info) {
- assert.equal(info.method, 'POST');
+ assert.equal(info.method, methods.indexOf('POST'));
assert.equal(info.url || parser.url, '/it');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 1);
'pong');
function onHeadersComplete1(info) {
- assert.equal(info.method, 'PUT');
+ assert.equal(info.method, methods.indexOf('PUT'));
assert.equal(info.url, '/this');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 1);
};
function onHeadersComplete2(info) {
- assert.equal(info.method, 'POST');
+ assert.equal(info.method, methods.indexOf('POST'));
assert.equal(info.url, '/that');
assert.equal(info.versionMajor, 1);
assert.equal(info.versionMinor, 0);