parent
a7f3412b5d
commit
9bdcb814ab
@ -1,180 +1,194 @@ |
||||
var Protocol = function() { |
||||
var self = this; |
||||
|
||||
var getInfo = function() { |
||||
var info = {}; |
||||
info.key = getString(); |
||||
info.value = getString(); |
||||
return info; |
||||
var WeeChatProtocol = function() { |
||||
var self = this; |
||||
|
||||
var getInfo = function() { |
||||
var info = {}; |
||||
info.key = getString(); |
||||
info.value = getString(); |
||||
|
||||
return info; |
||||
}; |
||||
|
||||
var getHdata = function() { |
||||
var paths; |
||||
var count; |
||||
var objs = []; |
||||
var hpath = getString(); |
||||
|
||||
keys = getString().split(','); |
||||
paths = hpath.split('/'); |
||||
count = getInt(); |
||||
|
||||
keys = keys.map(function(key) { |
||||
return key.split(':'); |
||||
}); |
||||
|
||||
for (var i = 0; i < count; i++) { |
||||
var tmp = {}; |
||||
|
||||
tmp.pointers = paths.map(function(path) { |
||||
return getPointer(); |
||||
}); |
||||
keys.forEach(function(key) { |
||||
tmp[key[0]] = runType(key[1]); |
||||
}); |
||||
objs.push(tmp); |
||||
}; |
||||
|
||||
var getHdata = function() { |
||||
var paths; |
||||
var count; |
||||
var objs = []; |
||||
var hpath = getString(); |
||||
return objs; |
||||
}; |
||||
|
||||
function getPointer() { |
||||
var l = getChar(); |
||||
var pointer = getSlice(l) |
||||
var parsed_data = new Uint8Array(pointer); |
||||
|
||||
return _uiatos(parsed_data); |
||||
}; |
||||
|
||||
keys = getString().split(','); |
||||
paths = hpath.split('/'); |
||||
count = getInt(); |
||||
var _uiatos = function(uia) { |
||||
var _str = []; |
||||
for (var c = 0; c < uia.length; c++) { |
||||
_str[c] = String.fromCharCode(uia[c]); |
||||
} |
||||
|
||||
return decodeURIComponent(escape(_str.join(""))); |
||||
}; |
||||
|
||||
var getInt = function() { |
||||
var parsed_data = new Uint8Array(getSlice(4)); |
||||
var i = ((parsed_data[0] & 0xff) << 24) | ((parsed_data[1] & 0xff) << 16) | ((parsed_data[2] & 0xff) << 8) | (parsed_data[3] & 0xff); |
||||
|
||||
return i; |
||||
}; |
||||
|
||||
keys = keys.map(function(key) { |
||||
return key.split(':'); |
||||
}); |
||||
var i; |
||||
for (i = 0; i < count; i++) { |
||||
var tmp = {}; |
||||
var getChar = function() { |
||||
var parsed_data = new Uint8Array(getSlice(1)); |
||||
|
||||
tmp.pointers = paths.map(function(path) { |
||||
return getPointer(); |
||||
}); |
||||
return parsed_data[0]; |
||||
}; |
||||
|
||||
keys.forEach(function(key) { |
||||
tmp[key[0]] = runType(key[1]); |
||||
}); |
||||
objs.push(tmp); |
||||
}; |
||||
return objs; |
||||
}; |
||||
var getString = function() { |
||||
var l = getInt(); |
||||
|
||||
function getPointer() { |
||||
var l = getChar(); |
||||
if (l > 0) { |
||||
var s = getSlice(l); |
||||
var parsed_data = new Uint8Array(s); |
||||
|
||||
var pointer = getSlice(l) |
||||
var parsed_data = new Uint8Array(pointer); |
||||
return _uiatos(parsed_data); |
||||
} |
||||
|
||||
}; |
||||
return ""; |
||||
}; |
||||
|
||||
var _uiatos =function(uia) { |
||||
var _str = []; |
||||
for (var c = 0; c < uia.length; c++) { |
||||
_str[c] = String.fromCharCode(uia[c]); |
||||
} |
||||
return decodeURIComponent(escape(_str.join(""))); |
||||
}; |
||||
var getSlice = function(length) { |
||||
var slice = self.data.slice(0,length); |
||||
|
||||
var getInt = function() { |
||||
var parsed_data = new Uint8Array(getSlice(4)); |
||||
var i = ((parsed_data[0] & 0xff) << 24) | ((parsed_data[1] & 0xff) << 16) | ((parsed_data[2] & 0xff) << 8) | (parsed_data[3] & 0xff); |
||||
return i; |
||||
self.data = self.data.slice(length); |
||||
|
||||
}; |
||||
return slice; |
||||
}; |
||||
|
||||
var getChar = function() { |
||||
var parsed_data = new Uint8Array(getSlice(1)); |
||||
return parsed_data[0]; |
||||
}; |
||||
var getType = function() { |
||||
var t = getSlice(3); |
||||
|
||||
var getString = function() { |
||||
var l = getInt(); |
||||
if (l > 0) { |
||||
var s = getSlice(l); |
||||
var parsed_data = new Uint8Array(s); |
||||
return _uiatos(parsed_data); |
||||
} |
||||
return ""; |
||||
}; |
||||
return _uiatos(new Uint8Array(t)); |
||||
}; |
||||
|
||||
var getSlice = function(length) { |
||||
var slice = self.data.slice(0,length); |
||||
self.data = self.data.slice(length); |
||||
return slice; |
||||
}; |
||||
var runType = function(type) { |
||||
if (type in types) { |
||||
return types[type](); |
||||
} |
||||
}; |
||||
|
||||
var getType = function() { |
||||
var t = getSlice(3); |
||||
return _uiatos(new Uint8Array(t)); |
||||
}; |
||||
var getHeader = function() { |
||||
var len = getInt(); |
||||
var comp = getChar(); |
||||
|
||||
var runType = function(type) { |
||||
if (type in types) { |
||||
return types[type](); |
||||
} |
||||
0; |
||||
return { |
||||
length: len, |
||||
compression: comp, |
||||
}; |
||||
}; |
||||
|
||||
var getHeader = function() { |
||||
return { |
||||
length: getInt(), |
||||
compression: getChar(), |
||||
} |
||||
}; |
||||
var getId = function() { |
||||
return getString(); |
||||
} |
||||
|
||||
var getId = function() { |
||||
return getString(); |
||||
} |
||||
var getObject = function() { |
||||
var type = getType(); |
||||
|
||||
var getObject = function() { |
||||
var type = getType(); |
||||
if (type) { |
||||
return object = { |
||||
type: type, |
||||
content: runType(type), |
||||
} |
||||
if (type) { |
||||
return object = { |
||||
type: type, |
||||
content: runType(type), |
||||
} |
||||
} |
||||
} |
||||
|
||||
self.parse = function(data) { |
||||
self.setData(data); |
||||
var header = getHeader(); |
||||
var id = getId(); |
||||
var objects = []; |
||||
var object = getObject(); |
||||
while(object) { |
||||
objects.push(object); |
||||
object = getObject(); |
||||
} |
||||
return { |
||||
header: header, |
||||
id: id, |
||||
objects: objects,
|
||||
} |
||||
self.parse = function(data) { |
||||
self.setData(data); |
||||
|
||||
var header = getHeader(); |
||||
var id = getId(); |
||||
var objects = []; |
||||
var object = getObject(); |
||||
|
||||
while(object) { |
||||
objects.push(object); |
||||
object = getObject(); |
||||
} |
||||
|
||||
self.setData = function (data) { |
||||
self.data = data; |
||||
return { |
||||
header: header, |
||||
id: id, |
||||
objects: objects, |
||||
}; |
||||
} |
||||
|
||||
self.setData = function (data) { |
||||
self.data = data; |
||||
}; |
||||
|
||||
function array() { |
||||
var type; |
||||
var count; |
||||
var values; |
||||
|
||||
function array() { |
||||
var type; |
||||
var count; |
||||
var values; |
||||
|
||||
type = getType(); |
||||
count = getInt(); |
||||
values = []; |
||||
var i; |
||||
for (i = 0; i < count; i++) { |
||||
values.push(runType(type)); |
||||
}; |
||||
return values; |
||||
} |
||||
|
||||
var types = { |
||||
chr: getChar, |
||||
"int": getInt, |
||||
str: getString, |
||||
inf: getInfo, |
||||
hda: getHdata, |
||||
ptr: getPointer, |
||||
lon: getPointer, |
||||
tim: getPointer, |
||||
buf: getString, |
||||
arr: array |
||||
type = getType(); |
||||
count = getInt(); |
||||
values = []; |
||||
|
||||
for (var i = 0; i < count; i++) { |
||||
values.push(runType(type)); |
||||
}; |
||||
|
||||
return values; |
||||
} |
||||
|
||||
var types = { |
||||
chr: getChar, |
||||
"int": getInt, |
||||
str: getString, |
||||
inf: getInfo, |
||||
hda: getHdata, |
||||
ptr: getPointer, |
||||
lon: getPointer, |
||||
tim: getPointer, |
||||
buf: getString, |
||||
arr: array |
||||
}; |
||||
|
||||
//TODO: IMPLEMENT THIS STUFF
|
||||
// chr: this.getChar,
|
||||
// 'int': getInt,
|
||||
// hacks
|
||||
// hacks
|
||||
|
||||
// hacks
|
||||
// hacks
|
||||
// htb: getHashtable,
|
||||
// inf: Protocol.getInfo,
|
||||
// inl: getInfolist,
|
||||
|
||||
// },
|
||||
|
||||
} |
||||
}; |
||||
|
Loading…
Reference in new issue