Add request method. (How could that be missing still?)
authorRyan <ry@tinyclouds.org>
Tue, 19 May 2009 12:46:07 +0000 (14:46 +0200)
committerRyan <ry@tinyclouds.org>
Tue, 19 May 2009 12:46:07 +0000 (14:46 +0200)
src/http.cc

index 203c05f..be0f478 100644 (file)
@@ -21,6 +21,7 @@
 #define ON_BODY_SYMBOL              String::NewSymbol("onBody")
 #define ON_MESSAGE_COMPLETE_SYMBOL  String::NewSymbol("onMessageComplete")
 
+#define METHOD_SYMBOL               String::NewSymbol("method")
 #define STATUS_CODE_SYMBOL          String::NewSymbol("status_code")
 #define HTTP_VERSION_SYMBOL         String::NewSymbol("http_version")
 #define SHOULD_KEEP_ALIVE_SYMBOL    String::NewSymbol("should_keep_alive")
@@ -135,6 +136,28 @@ DEFINE_PARSER_CALLBACK(on_uri,          ON_URI_SYMBOL)
 DEFINE_PARSER_CALLBACK(on_header_field, ON_HEADER_FIELD_SYMBOL)
 DEFINE_PARSER_CALLBACK(on_header_value, ON_HEADER_VALUE_SYMBOL)
 
+static Local<String>
+GetMethod (int method)
+{
+  switch (method) {
+    case HTTP_COPY:       return String::NewSymbol("COPY");
+    case HTTP_DELETE:     return String::NewSymbol("DELETE");
+    case HTTP_GET:        return String::NewSymbol("GET");
+    case HTTP_HEAD:       return String::NewSymbol("HEAD");
+    case HTTP_LOCK:       return String::NewSymbol("LOCK");
+    case HTTP_MKCOL:      return String::NewSymbol("MKCOL");
+    case HTTP_MOVE:       return String::NewSymbol("MOVE");
+    case HTTP_OPTIONS:    return String::NewSymbol("OPTIONS");
+    case HTTP_POST:       return String::NewSymbol("POST");
+    case HTTP_PROPFIND:   return String::NewSymbol("PROPFIND");
+    case HTTP_PROPPATCH:  return String::NewSymbol("PROPPATCH");
+    case HTTP_PUT:        return String::NewSymbol("PUT");
+    case HTTP_TRACE:      return String::NewSymbol("TRACE");
+    case HTTP_UNLOCK:     return String::NewSymbol("UNLOCK");
+  }
+  return Local<String>();
+}
+
 int
 HTTPConnection::on_headers_complete (http_parser *parser)
 {
@@ -145,6 +168,9 @@ HTTPConnection::on_headers_complete (http_parser *parser)
     connection->handle_->GetHiddenValue(MESSAGE_HANDLER_SYMBOL);
   Local<Object> message_handler = message_handler_v->ToObject();
 
+  // METHOD 
+  message_handler->Set(METHOD_SYMBOL, GetMethod(connection->parser_.method));
+
   // STATUS 
   message_handler->Set(STATUS_CODE_SYMBOL, 
       Integer::New(connection->parser_.status_code));