3 // var s = require('net').createStream(25, 'smtp.example.com');
4 // s.on('connect', function() {
5 // require('starttls')(s, options, function() {
6 // if (!s.authorized) {
11 // s.end("hello world\n");
16 module
.exports
= function starttls(socket
, options
, cb
) {
18 var sslcontext
= require('crypto').createCredentials(options
);
20 var pair
= require('tls').createSecurePair(sslcontext
, false);
22 var cleartext
= pipe(pair
, socket
);
24 pair
.on('secure', function() {
25 var verifyError
= pair
.ssl
.verifyError();
28 cleartext
.authorized
= false;
29 cleartext
.authorizationError
= verifyError
;
31 cleartext
.authorized
= true;
37 cleartext
._controlReleased
= true;
42 function pipe(pair
, socket
) {
43 pair
.encrypted
.pipe(socket
);
44 socket
.pipe(pair
.encrypted
);
47 var cleartext
= pair
.cleartext
;
48 cleartext
.socket
= socket
;
49 cleartext
.encrypted
= pair
.encrypted
;
50 cleartext
.authorized
= false;
53 if (cleartext
._controlReleased
) {
54 cleartext
.emit('error', e
);
59 socket
.removeListener('error', onerror
);
60 socket
.removeListener('close', onclose
);
63 socket
.on('error', onerror
);
64 socket
.on('close', onclose
);