muxing...
This commit is contained in:
		
							parent
							
								
									7216611463
								
							
						
					
					
						commit
						191a62ad3d
					
				
							
								
								
									
										88
									
								
								mux-tcp.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								mux-tcp.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,88 @@ | |||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | var net = require('net'); | ||||||
|  | var tls = require('tls'); | ||||||
|  | var http = require('http'); | ||||||
|  | var tlsOpts = require('localhost.daplie.com-certificates').merge({}); | ||||||
|  | var Duplex = require('stream').Duplex; | ||||||
|  | var httpServer = http.createServer(function (req, res) { | ||||||
|  |   res.end('Hello, World!'); | ||||||
|  | }); | ||||||
|  | var tcp3000 = net.createServer(); | ||||||
|  | 
 | ||||||
|  | tcp3000.listen(3000, function () { | ||||||
|  |   console.log('listening on 3000'); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | var tls3000 = tls.createServer(tlsOpts, function (tlsSocket) { | ||||||
|  |   httpServer.emit('connection', tlsSocket); | ||||||
|  |   /* | ||||||
|  |   tlsSocket.on('data', function (chunk) { | ||||||
|  |     console.log('chunk', chunk.byteLength); | ||||||
|  |   }); | ||||||
|  |   */ | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | tcp3000.on('connection', function (socket) { | ||||||
|  |   // this works when I put it here, but I don't know if it's tls yet here
 | ||||||
|  |   // httpsServer.emit('connection', socket);
 | ||||||
|  |   //tls3000.emit('connection', socket);
 | ||||||
|  | 
 | ||||||
|  |   //var tlsSocket = new tls.TLSSocket(socket, { secureContext: tls.createSecureContext(tlsOpts) });
 | ||||||
|  |   //tlsSocket.on('data', function (chunk) {
 | ||||||
|  |   //  console.log('dummy', chunk.byteLength);
 | ||||||
|  |   //});
 | ||||||
|  | 
 | ||||||
|  |   //return;
 | ||||||
|  |   socket.once('data', function (chunk) { | ||||||
|  |     if (/http\/1/i.test(chunk.toString())) { | ||||||
|  | 
 | ||||||
|  |       console.log("looks like http, continue"); | ||||||
|  | 
 | ||||||
|  |       // this works as expected
 | ||||||
|  |       httpServer.emit('connection', socket); | ||||||
|  | 
 | ||||||
|  |     } else { | ||||||
|  | 
 | ||||||
|  |       console.log("doesn't look like http, try tls"); | ||||||
|  | 
 | ||||||
|  |       // none of these methods work:
 | ||||||
|  |       // httpsServer.emit('connection', socket);  // this didn't work
 | ||||||
|  |       // tlsServer.emit('connection', socket);    // this didn't work either
 | ||||||
|  |       var myDuplex = new Duplex(); | ||||||
|  |       myDuplex._write = function (chunk, encoding, cb) { | ||||||
|  |         console.log('_write', chunk.byteLength); | ||||||
|  |         socket.write(chunk, encoding); | ||||||
|  |         cb(); | ||||||
|  |       }; | ||||||
|  |       myDuplex._read = function (size) { | ||||||
|  |         console.log('_read'); | ||||||
|  |         var x = socket.read(size); | ||||||
|  |         if (x) { | ||||||
|  |           console.log('_read', size); | ||||||
|  |           this.push(x); | ||||||
|  |         } | ||||||
|  |       }; | ||||||
|  |       socket.on('data', function (chunk) { | ||||||
|  |         console.log('socket data', chunk.byteLength); | ||||||
|  |         myDuplex.push(chunk); | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       tls3000.emit('connection', myDuplex); | ||||||
|  |       //var tlsSocket = new tls.TLSSocket(myDuplex, { secureContext: tls.createSecureContext(tlsOpts) });
 | ||||||
|  |       /* | ||||||
|  |       var tlsSocket = new tls.TLSSocket(socket, { secureContext: tls.createSecureContext(tlsOpts) }); | ||||||
|  |       tlsSocket.on('data', function (chunk) { | ||||||
|  |         console.log('tls chunk', chunk.byteLength); | ||||||
|  |       }); | ||||||
|  |       */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     socket.unshift(chunk); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  | }); | ||||||
							
								
								
									
										13
									
								
								serve.js
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								serve.js
									
									
									
									
									
								
							| @ -189,4 +189,17 @@ function socketToId(socket) { | |||||||
|   server5443.listen(5443, function () { |   server5443.listen(5443, function () { | ||||||
|     console.log('listening on 5443'); |     console.log('listening on 5443'); | ||||||
|   }); |   }); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   var http80 = require('http').createServer(); | ||||||
|  |   http80.on('request', function (req, res) { | ||||||
|  |     res.end('Happy Day!'); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   var server80 = net.createServer(function (client) { | ||||||
|  |     http80.emit('connection', client); | ||||||
|  |   }); | ||||||
|  |   server80.listen(80, function () { | ||||||
|  |     console.log('listening on 80'); | ||||||
|  |   }); | ||||||
| //});
 | //});
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user