String.prototype.toJSON = function () { return "\"" + this.replace(/\"/g, '\\"') + "\""; } Number.prototype.toJSON = function () { return ""+this; } EvBuffer.prototype.toJSON = function () { return "\"EvBuffer\""; } Object.prototype.toJSON = function () { var ret = new Array(); for (var key in this) if (typeof(this[key])!="function") { ret.push('"'+key+'"'+":"+this[key].toJSON()); } return '{'+ret.join(',')+'}'; } TRANSLATE["info"] = function (evbuf) { var obj = evbuf.toObject(); var hash = evbuf.md5hash(); obj["hash"] = hash; return obj; } TRANSLATE["pieces"] = function (evbuf) { var hex = evbuf.toHex(); var arr = hex.split2strings(40); } TRANSLATE["peers"] = function (evbuf) { if (evbuf[0]=='d') return evbuf.toObject(); evbuf.shift(); evbuf.pop(); var arr = evbuf.split2int16(); var ret = []; while (arr.length>0) { var obj = {}; obj.port = arr.pop(); obj.ip = arr.pop() | arr.pop() << 16; ret.push(obj); } return ret; } function test_json (obj) { print(obj.toJSON); } print ("js init OK"); var buf = ReadFile("torrents/test.torrent"); //new EvBuffer("kikan"); var torrent = EvBuffer2Object(buf,TRANSLATE); print (torrent.toJSON()); var tracker = torrent.announce; var hash = torrent.info.hash; var url = new URL(tracker + "?" + info_hash+"="+urlencode(hash)+"&"+ "port=6881&uploaded=0&downloaded=0&"+ "left=0&event=starting&numwant=10"); function on_success (request) { print(request.responseText); } function on_error (request) { print(request.errorMessage); } var req = new HTTPRequest("GET",url); // FIX var Session = { swarms : { '12345678901234567890' : { peers : { 'CL876543210987654321' : { address : { ip : '127.0.0.1', port : 1234 }, in_requests : [[0,0,1<<14]], out_requests : [[0,0,1<<14]], in_bytes : 0, out_bytes : 0 } } inprogress_pieces : { '0' : {} } } } }; function TorrentSmellExtension (swarm) { var prev = swarm.onPieceCompletion; swarm.onPieceCompletion = function (piece) { var peer = swarm.peers['peer']; peer.smells2do++; peer.connection.send(BT_EXTENDED,peer.extensionIndex('smell'),peer.smells); if (arguments.callee.next) arguments.callee.next(); } swarm.onPieceCompletion.next = prev; } function bt_success (btcon) { btcon.send(BT_INTERESTED); btcon.send(BT_REQUEST,0,0,1<<14); } var btcon = new BTConnection('127.0.0.1',1234,'12345678901234567890',bt_success,bt_error);