'use strict';

var util = require('util');
var net = require('net');

function Socket(parent, options) {
  net.Socket.call(this, options);

  var state = {};

  this._spdyState = state;

  state.parent = parent;

  this.servername = parent.servername;
  this.npnProtocol = parent.npnProtocol;
  this.alpnProtocol = parent.alpnProtocol;
  this.authorized = parent.authorized;
  this.authorizationError = parent.authorizationError;
  this.encrypted = true;
}
util.inherits(Socket, net.Socket);

module.exports = Socket;

var methods = [
  'renegotiate', 'setMaxSendFragment', 'getTLSTicket', 'setServername',
  'setSession', 'getPeerCertificate', 'getSession', 'isSessionReused',
  'getCipher', 'getEphemeralKeyInfo'
];

methods.forEach(function(method) {
  Socket.prototype[method] = function methodWrap() {
    var parent = this._spdyState.parent;
    return parent[method].apply(parent, arguments);
  };
});
