Merge pull request #31 from mgechev/master

Cookies and byte order
This commit is contained in:
Andrey Sidorov 2013-06-01 15:42:38 -07:00
commit be8079d540
2 changed files with 26 additions and 21 deletions

View file

@ -9,6 +9,14 @@ function parseXauth( buf )
{
var offset = 0;
var auth = [];
var cookieProperties = ['address', 'display', 'authName', 'authData'];
function handleCookieProperty(property) {
var length = buf.unpack('n', offset)[0];
offset += 2;
cookie[property] = buf.unpackString(length, offset);
offset += length;
}
while (offset < buf.length)
{
@ -22,29 +30,17 @@ function parseXauth( buf )
0: 'Internet',
1: 'DECnet',
2: 'Chaos',
5: 'ServerInterpreted',
5: 'ServerInterpreted',
6: 'InternetV6'
};
cookie.type = buf.unpack('n')[0];
if (!typeToName[cookie.type]) {
console.warn('Unknown address type');
}
offset += 2;
// TODO: rewrite following using loop (16bits length + string data)
var addressLen = buf.unpack('n', offset)[0];
offset += 2;
cookie.address = buf.unpackString(addressLen, offset);
offset += addressLen;
var displayNumLen = buf.unpack('n', offset)[0];
offset += 2;
cookie.display = buf.unpackString(displayNumLen, offset);
offset += displayNumLen;
var authNameLen = buf.unpack('n', offset)[0];
offset += 2;
cookie.authName = buf.unpackString(authNameLen, offset);
offset += authNameLen;
var authDataLen = buf.unpack('n', offset)[0];
offset += 2;
cookie.authData = buf.unpackString(authDataLen, offset);
offset += authDataLen;
auth.push(cookie);
//JSHint becomes angry when handleCookieProperty is declared inside loop
cookieProperties.forEach(handleCookieProperty);
auth.push(cookie);
}
return auth;
}
@ -92,4 +88,4 @@ module.exports = function( display, host, cb )
// throw 'No auth cookie matching display=' + display + ' and host=' + host;
cb( '', '' );
});
}
};

View file

@ -180,10 +180,19 @@ bl.unpack('C', function(res) {
}
function getByteOrder() {
var isLittleEndian = ((new Uint32Array((new Uint8Array([1,2,3,4])).buffer))[0] === 0x04030201);
if (isLittleEndian) {
return 'l'.charCodeAt(0);
} else {
return 'B'.charCodeAt(0);
}
}
function writeClientHello(stream, displayNum, authHost)
{
getAuthString( displayNum, authHost, function( authType, authData ) {
var byte_order = 'l'.charCodeAt(0); // TODO: byteorder!!!
var byte_order = getByteOrder();
var protocol_major = 11; // TODO: config? env?
var protocol_minor = 0;
stream.pack(