parent
d4b760fc04
commit
f5869438b7
@ -0,0 +1,121 @@ |
||||
var Protocol = function() { |
||||
var self = this; |
||||
var getInfo = function() { |
||||
var info = {}; |
||||
info.key = getString(); |
||||
info.value = getString(); |
||||
return info; |
||||
}; |
||||
|
||||
var types = { |
||||
chr: getChar, |
||||
"int": getInt, |
||||
"str": getString, |
||||
"inf": getInfo, |
||||
}; |
||||
//TODO: IMPLEMENT THIS STUFF
|
||||
// chr: this.getChar,
|
||||
// 'int': getInt,
|
||||
// hacks
|
||||
// lon: getPointer,
|
||||
// str: getString,
|
||||
// buf: getBuffer,
|
||||
// ptr: getPointer,
|
||||
// hacks
|
||||
// tim: getPointer,
|
||||
// htb: getHashtable,
|
||||
// hda: getHdata,
|
||||
// inf: Protocol.getInfo,
|
||||
// inl: getInfolist,
|
||||
// arr: array
|
||||
// },
|
||||
|
||||
var _uiatos =function(uia) { |
||||
var _str = []; |
||||
for (var c = 0; c < uia.length; c++) { |
||||
_str[c] = String.fromCharCode(uia[c]); |
||||
} |
||||
return _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; |
||||
|
||||
}; |
||||
|
||||
var getChar = function() { |
||||
var parsed_data = new Uint8Array(getSlice(1)); |
||||
return parsed_data[0]; |
||||
} |
||||
|
||||
var getString = function() { |
||||
var l = getInt(); |
||||
if (l > 0) { |
||||
var s = getSlice(l); |
||||
var parsed_data = new Uint8Array(s); |
||||
return _uiatos(parsed_data); |
||||
} |
||||
return ""; |
||||
}; |
||||
|
||||
var getSlice = function(length) { |
||||
var slice = self.data.slice(0,length); |
||||
self.data = self.data.slice(length); |
||||
return slice; |
||||
}; |
||||
|
||||
var getType = function() { |
||||
var t = getSlice(3); |
||||
return _uiatos(new Uint8Array(t)); |
||||
}; |
||||
|
||||
var runType = function(type) { |
||||
if (type in types) { |
||||
return types[type](); |
||||
} |
||||
0; |
||||
}; |
||||
|
||||
var getHeader = function() { |
||||
return { |
||||
length: getInt(), |
||||
compression: getChar(), |
||||
} |
||||
}; |
||||
|
||||
var getId = function() { |
||||
return getString(); |
||||
} |
||||
|
||||
var getObject = function() { |
||||
var type = getType(); |
||||
if (type) { |
||||
return object = { |
||||
type: type, |
||||
content: runType(type), |
||||
} |
||||
} |
||||
} |
||||
|
||||
self.parse = function() { |
||||
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.setData = function (data) { |
||||
self.data = data; |
||||
}; |
||||
} |
Loading…
Reference in new issue