mirror of
https://github.com/danbulant/koa-plugins
synced 2026-05-19 12:18:46 +00:00
38 lines
1.3 KiB
JavaScript
38 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
var parsePair = function(msgData, start){
|
|
if(msgData.length - start < 1) throw new Error('Unexpected server message: illegal key pair format.');
|
|
var keyLen = msgData.readUInt8(start, true);
|
|
if(keyLen > 127) {
|
|
if(msgData.length - start < 4) throw new Error('Unexpected server message: illegal key pair format.');
|
|
keyLen = (msgData.readInt32BE(start, true) & 0x7fffffff);
|
|
start += 4;
|
|
} else {
|
|
start++;
|
|
}
|
|
if(msgData.length - start < 1) throw new Error('Unexpected server message: illegal key pair format.');
|
|
var valueLen = msgData.readUInt8(start, true);
|
|
if(valueLen > 127) {
|
|
if(msgData.length - start < 4) throw new Error('Unexpected server message: illegal key pair format.');
|
|
valueLen = (msgData.readInt32BE(start, true) & 0x7fffffff);
|
|
start = start + 4;
|
|
} else {
|
|
start++;
|
|
}
|
|
if(msgData.length - start < keyLen + valueLen) throw new Error('Unexpected server message: illegal key pair format.');
|
|
return {
|
|
key: msgData.toString('utf8', start, start + keyLen),
|
|
value: msgData.toString('utf8', start + keyLen, start + keyLen + valueLen),
|
|
end: start + keyLen + valueLen
|
|
};
|
|
};
|
|
|
|
module.exports = function(msgData){
|
|
var res = {};
|
|
for(var pos = 0; pos < msgData.length;) {
|
|
var pair = parsePair(msgData, pos);
|
|
res[pair.key] = pair.value;
|
|
pos = pair.end;
|
|
}
|
|
return res;
|
|
};
|