upload/download works seemingly
authorRyan <ry@tinyclouds.org>
Mon, 23 Feb 2009 20:53:03 +0000 (21:53 +0100)
committerRyan <ry@tinyclouds.org>
Mon, 23 Feb 2009 20:53:03 +0000 (21:53 +0100)
Makefile
count-hosts.js
server.cc

index 82d1d34..8396309 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ V8INC = $(HOME)/src/v8/include
 V8LIB = $(HOME)/src/v8/libv8.a
 
 CFLAGS = -g -I$(V8INC) -Ideps/oi -DHAVE_GNUTLS=0 -Ideps/ebb 
-LDFLAGS = -lev -pthread -lefence
+LDFLAGS = -lev -pthread -lefence
 
 ifdef EVDIR
        CFLAGS += -I$(EVDIR)/include
index d341d6d..caaf4a8 100644 (file)
@@ -5,12 +5,12 @@ function Process(request) {
   //  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");
@@ -22,6 +22,7 @@ function Process(request) {
   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");  
   //
 }
index 5cc8256..2d5257e 100644 (file)
--- a/server.cc
+++ b/server.cc
@@ -61,9 +61,10 @@ static void make_onBody_callback
 {
   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);
 
@@ -78,7 +79,7 @@ static void make_onBody_callback
     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());
@@ -121,21 +122,21 @@ static Handle<Value> RespondCallback
   // 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);
 
@@ -146,9 +147,7 @@ static Handle<Value> RespondCallback
 
 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;
 
@@ -208,7 +207,7 @@ static void on_headers_complete
               , 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
@@ -220,7 +219,7 @@ static void on_headers_complete
   // 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());
@@ -234,7 +233,7 @@ static void on_request_complete
 {
   HttpRequest *request = static_cast<HttpRequest*> (req->data);
 
-  //delete request;
+  make_onBody_callback(request, NULL, 0); // EOF
 }
 
 
@@ -244,7 +243,7 @@ static void on_body
   , size_t length
   )
 {
-  printf("on body %d\n", length);
+  //printf("on body %d\n", length);
 
   HttpRequest *request = static_cast<HttpRequest*> (req->data);
 
@@ -416,6 +415,7 @@ static Handle<Value> LogCallback
   String::Utf8Value value(arg);
 
   printf("Logged: %s\n", *value);
+  fflush(stdout);
 
   return v8::Undefined();
 }