zbencode
Version:
Bencoding for bittorrent
44 lines (37 loc) • 874 B
JavaScript
module.exports = bencode
function bencode (input) {
var encoder = get_encoder(input)
return encoder(input)
}
var types = {
'[object String]': bencode_string,
'[object Object]': bencode_dict,
'[object Array]': bencode_list,
'[object Number]': bencode_integer
}
function get_encoder (input) {
var type = Object.prototype.toString.call(input)
return types[type]
}
function bencode_list (array) {
var list = 'l'
var parts = array.map(bencode)
return list.concat(parts.join(''), 'e')
}
function bencode_dict (object) {
var dict = 'd'
var keys = Object.keys(object)
keys.sort()
keys.forEach(function (key) {
dict += bencode(key)
dict += bencode(object[key])
})
dict += 'e'
return dict
}
function bencode_string (string) {
return string.length + ':' + string
}
function bencode_integer (integer) {
return 'i' + integer + 'e'
}