node.http.Server = function (RequestHandler, options) {
if (!(this instanceof node.http.Server))
throw Error("Constructor called as a function");
+ var server = this;
function ConnectionHandler (connection) {
// An array of responses for each connection. In pipelined connections
res.should_keep_alive = this.should_keep_alive;
- return RequestHandler(req, res);
+ return RequestHandler.apply(server, [req, res]);
};
this.onBody = function (chunk) {
new node.http.LowLevelServer(ConnectionHandler, options);
};
-node.http.Client = function (port, host, options) {
- var connection = new node.http.LowLevelClient(options);
+node.http.Client = function (port, host) {
+ var connection = new node.http.LowLevelClient();
var requests = [];
function ClientRequest (method, uri, header_lines) {
}
connection.onConnect = function () {
- puts("HTTP CLIENT: connected");
+ //node.debug("HTTP CLIENT: connected");
requests[0].flush();
};
connection.onDisconnect = function () {
+ //node.debug("HTTP CLIENT: disconnect");
// If there are more requests to handle, reconnect.
if (requests.length > 0) {
- puts("HTTP CLIENT: reconnecting");
- connection.connect(port, host);
+ //node.debug("HTTP CLIENT: reconnecting");
+ this.connect(port, host);
}
};
#define TIMEOUT_SYMBOL String::NewSymbol("timeout")
#define SERVER_SYMBOL String::NewSymbol("server")
-#define PROTOCOL_SYMBOL String::NewSymbol("protocol")
+#define PROTOCOL_SYMBOL String::NewSymbol("protocol")
#define CONNECTION_HANDLER_SYMBOL String::NewSymbol("connection_handler")
#define READY_STATE_SYMBOL String::NewSymbol("readyState")
NODE_SET_PROTOTYPE_METHOD(constructor_template, "fullClose", FullClose);
NODE_SET_PROTOTYPE_METHOD(constructor_template, "forceClose", ForceClose);
- constructor_template->PrototypeTemplate()->SetAccessor(
+ constructor_template->InstanceTemplate()->SetAccessor(
ENCODING_SYMBOL,
EncodingGetter,
EncodingSetter);
- constructor_template->PrototypeTemplate()->SetAccessor(
+ constructor_template->InstanceTemplate()->SetAccessor(
READY_STATE_SYMBOL,
ReadyStateGetter);
);
connection->Attach();
-
return Undefined();
}
--- /dev/null
+include("mjsunit");
+
+var port = 8000;
+
+function onLoad() {
+
+ var request_number = 0;
+
+ new node.http.Server(function (req, res) {
+ var server = this;
+ req.id = request_number++;
+
+ if (req.id == 0) {
+ puts("get req");
+ assertEquals("GET", req.method);
+ assertEquals("/hello", req.uri.path);
+ }
+
+ if (req.id == 1) {
+ puts("post req");
+ assertEquals("POST", req.method);
+ assertEquals("/quit", req.uri.path);
+ server.close();
+ puts("server closed");
+ }
+
+ setTimeout(function () {
+ res.sendHeader(200, [["Content-Type", "text/plain"]]);
+ res.sendBody(req.uri.path);
+ res.finish();
+ }, 1);
+
+ }).listen(port);
+
+ var c = new node.tcp.Connection();
+ var req_sent = 0;
+ c.onConnect = function () {
+ puts("send get");
+ c.send( "GET /hello HTTP/1.1\r\n\r\n" );
+ req_sent += 1;
+ };
+ var total = "";
+
+ c.onReceive = function (chunk) {
+ total += chunk.encodeUtf8();
+ puts("total: " + JSON.stringify(total));
+
+ if ( req_sent == 1) {
+ puts("send post");
+ c.send("POST /quit HTTP/1.1\r\n\r\n");
+ c.close();
+ req_sent += 1;
+ }
+ };
+
+ c.onDisconnect = function () {
+ puts("client disocnnected");
+
+ var hello = new RegExp("/hello");
+ assertTrue(hello.exec(total) != null);
+
+ var quit = new RegExp("/quit");
+ assertTrue(quit.exec(total) != null);
+ };
+
+ c.connect(port);
+}
};
client.connect(port);
+ assertEquals("closed", client.readyState);
}
+++ /dev/null
-new node.http.Server(function (req, res) {
- puts("got req to " + req.uri.path);
- setTimeout(function () {
- res.sendHeader(200, [["Content-Type", "text/plain"]]);
- res.sendBody(JSON.stringify(req.uri));
- res.finish();
- }, 1);
-}).listen(8000, "localhost");