function _readHeader(response, expect) { assert.ok(response); var len = ctype.ruint32(response, 'big', 0); var type = ctype.ruint8(response, 'big', 4); return (expect === type ? len : -1); }
function readNext(buffer, offset) { var len = ctype.ruint32(buffer, 'big', offset); offset += 4; var newOffset = offset + len; return { data: buffer.slice(offset, newOffset), offset: newOffset }; }
function _readString(buffer, offset) { assert.ok(buffer); assert.ok(offset !== undefined); var i = 0; var len = ctype.ruint32(buffer, 'big', offset); offset += 4; var str = new Buffer(len); buffer.copy(str, 0, offset, offset + len); return str; }
socket.on('data', function(data) { gotdata = true; socket.end(); var len = ctype.ruint32(data, 'big', 0); if (len !== data.length - 4) { return callback(new InvalidProtocolError('Expected length: ' + len + ' but got: ' + data.length)); } var type = ctype.ruint8(data, 'big', 4); if (type !== messageType) { return callback(new InvalidProtocolError('Expected message type: ' + messageType + ' but got: ' + type)); } return parseResponse(data.slice(5)); });
function identitiesAnswer(response) { assert.ok(response); var numKeys = ctype.ruint32(response, 'big', 0); var offset = 4; var keys = []; for (var i = 0; i < numKeys; i++) { var key = _readString(response, offset); offset += 4 + key.length; var comment = _readString(response, offset); offset += 4 + comment.length; var type = _readString(key, 0); keys.push({ type: type.toString('ascii'), ssh_key: key.toString('base64'), comment: comment.toString('utf8'), _raw: key }); } return callback(null, keys); }