// request.headers => { "Content-Length": "123" }
// request.http_version => "1.1"
//
- log("Processing " + request.path + ". method: " + request.method);
+ //log("Processing " + request.path + ". method: " + request.method);
// sends null on the last chunk.
request.onBody = function (chunk) {
- log("got chunk length: " + chunk.length.toString(16) );
if(chunk) {
+ //log( "got chunk length: " + chunk.length.toString() );
this.respond(chunk.length.toString(16) + "\r\n" + chunk + "\r\n");
} else {
this.respond("0\r\n\r\n");
request.respond("Content-Type: text-plain\r\n");
request.respond("Transfer-Encoding: chunked\r\n");
request.respond("\r\n");
+ request.respond("0\r\n\r\n");
//request.respond("Content-Length: 6\r\n\r\nhello\n");
//
}
{
HandleScope handle_scope;
+
Handle<Object> obj = request->js_object;
// XXX don't always allocate onBody strings
- Handle<Value> onBody_val = obj->Get(String::New("onBody"));
+ Handle<Value> onBody_val = request->js_object->Get(String::NewSymbol("onBody"));
if (!onBody_val->IsFunction()) return;
Handle<Function> onBody = Handle<Function>::Cast(onBody_val);
argv[0] = Null();
}
- Handle<Value> result = onBody->Call(obj, argc, argv);
+ Handle<Value> result = onBody->Call(request->js_object, argc, argv);
if (result.IsEmpty()) {
String::Utf8Value error(try_catch.Exception());
// keep-alive it's possible that one response can return before the last
// one has been sent!!!
- printf("response called\n");
+ //printf("response called\n");
if(arg == Null()) {
- printf("response got null\n");
- //delete request;
+ //printf("response got null\n");
+ delete request;
} else {
Handle<String> s = arg->ToString();
- printf("response called len %d\n", s->Length());
+ //printf("response called len %d\n", s->Length());
oi_buf *buf = oi_buf_new2(s->Length());
- s->WriteAscii(buf->base, s->Length());
+ s->WriteAscii(buf->base, 0, s->Length());
oi_socket_write(&request->connection.socket, buf);
HttpRequest::~HttpRequest ()
{
- //make_onBody_callback(this, NULL, 0); // EOF
-
- printf("request is being destructed\n");
+ //printf("request is being destructed\n");
connection.socket.on_drain = oi_socket_close;
, GetMethodString(request->parser_info.method)
);
- Persistent<Object> js_object = Persistent<Object>::New(result);
+ request->js_object = Persistent<Object>::New(result);
// Enter this processor's context so all the remaining operations
// take place there
// Invoke the process function, giving the global object as 'this'
// and one argument, the request.
const int argc = 1;
- Handle<Value> argv[argc] = { js_object };
+ Handle<Value> argv[argc] = { request->js_object };
Handle<Value> r = process_->Call(context_->Global(), argc, argv);
if (r.IsEmpty()) {
String::Utf8Value error(try_catch.Exception());
{
HttpRequest *request = static_cast<HttpRequest*> (req->data);
- //delete request;
+ make_onBody_callback(request, NULL, 0); // EOF
}
, size_t length
)
{
- printf("on body %d\n", length);
+ //printf("on body %d\n", length);
HttpRequest *request = static_cast<HttpRequest*> (req->data);
String::Utf8Value value(arg);
printf("Logged: %s\n", *value);
+ fflush(stdout);
return v8::Undefined();
}