1'use strict'; 2const common = require('../common'); 3 4if (!common.hasCrypto) 5 common.skip('missing crypto'); 6 7const fixtures = require('../common/fixtures'); 8 9const net = require('net'); 10const stream = require('stream'); 11const tls = require('tls'); 12 13const server = tls.createServer({ 14 key: fixtures.readKey('agent1-key.pem'), 15 cert: fixtures.readKey('agent1-cert.pem') 16}, common.mustCall(function(c) { 17 console.log('new client'); 18 19 c.resume(); 20 c.end('ohai'); 21})).listen(0, common.mustCall(function() { 22 const raw = net.connect(this.address().port); 23 24 let pending = false; 25 raw.on('readable', function() { 26 if (pending) 27 p._read(); 28 }); 29 30 raw.on('end', function() { 31 p.push(null); 32 }); 33 34 const p = new stream.Duplex({ 35 read: function read() { 36 pending = false; 37 38 const chunk = raw.read(); 39 if (chunk) { 40 console.log('read', chunk); 41 this.push(chunk); 42 } else { 43 pending = true; 44 } 45 }, 46 write: function write(data, enc, cb) { 47 console.log('write', data, enc); 48 raw.write(data, enc, cb); 49 } 50 }); 51 52 const socket = tls.connect({ 53 socket: p, 54 rejectUnauthorized: false 55 }, common.mustCall(function() { 56 console.log('client secure'); 57 58 socket.resume(); 59 socket.end('hello'); 60 })); 61 62 socket.once('close', function() { 63 console.log('client close'); 64 server.close(); 65 }); 66})); 67