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);
}
Exemple #2
0
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);
  }