Currently writing a synchronization mechanism over HTTP, I started to build my server on NodeJS, which looked like a good solution.
So Ok, I can get GET and HEAD methods working. But as soon as I try to use non standard methods, for example "SYNC". Here's the code:
var http = require("http");
var server = http.createServer(function (req, res) {
res.writeHead(200);
res.end(req.method);
});
server.listen(8080);
Looks alright... let's telnet this, issue a GET and then a SYNC request
mylaptop:~ aob$ telnet localhost 8080
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 200 OK
Connection: keep-alive
Transfer-Encoding: chunked
3
GET
0
SYNC / HTTP/1.1
Connection closed by foreign host.
Any idea on how I can get SYNC to work ?
You would have to patch node in order to add arbitrary methods. See the relevant source lines:
static inline Persistent<String>
method_to_str(unsigned short m) {
switch (m) {
case HTTP_DELETE: return delete_sym;
case HTTP_GET: return get_sym;
case HTTP_HEAD: return head_sym;
case HTTP_POST: return post_sym;
case HTTP_PUT: return put_sym;
case HTTP_CONNECT: return connect_sym;
case HTTP_OPTIONS: return options_sym;
case HTTP_TRACE: return trace_sym;
case HTTP_PATCH: return patch_sym;
case HTTP_COPY: return copy_sym;
case HTTP_LOCK: return lock_sym;
case HTTP_MKCOL: return mkcol_sym;
case HTTP_MOVE: return move_sym;
case HTTP_PROPFIND: return propfind_sym;
case HTTP_PROPPATCH: return proppatch_sym;
case HTTP_UNLOCK: return unlock_sym;
case HTTP_REPORT: return report_sym;
case HTTP_MKACTIVITY: return mkactivity_sym;
case HTTP_CHECKOUT: return checkout_sym;
case HTTP_MERGE: return merge_sym;
case HTTP_MSEARCH: return msearch_sym;
case HTTP_NOTIFY: return notify_sym;
case HTTP_SUBSCRIBE: return subscribe_sym;
case HTTP_UNSUBSCRIBE:return unsubscribe_sym;
default: return unknown_method_sym;
}
}