|
| 1 | + |
| 2 | + |
| 3 | + |
| 4 | + |
| 5 | + var fs = require('fs'); |
| 6 | + var https = require('https'); |
| 7 | + var crypto = require('crypto'); |
| 8 | + |
| 9 | + var magic = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'; |
| 10 | + var hdrs = 'HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: '; |
| 11 | + |
| 12 | + var key = fs.readFileSync('key.pem'); |
| 13 | + var cert = fs.readFileSync('cert.pem'); |
| 14 | + |
| 15 | + var server = https.createServer({key,cert}).listen(8443); |
| 16 | + console.log(`listening 127.0.0.1:8443`); |
| 17 | + server.on('request',(req,res)=>{ |
| 18 | + |
| 19 | + if(req.url!='/'){ |
| 20 | + res.writeHead(404).end('not found'); |
| 21 | + return; |
| 22 | + } |
| 23 | + res.writeHead(200).end('helloworld'); |
| 24 | + |
| 25 | + }); |
| 26 | + |
| 27 | + server.on('upgrade', (req,socket)=>{ |
| 28 | + |
| 29 | + var key = req.headers['sec-websocket-key']; |
| 30 | + var accept = crypto.createHash('sha1').update(key+magic).digest('base64'); |
| 31 | + socket.write(hdrs+accept+'\r\n\r\n'); |
| 32 | + |
| 33 | + socket.on('data',buf=>{ |
| 34 | + |
| 35 | + var len = buf[1]&0x7f; |
| 36 | + var mask = buf.slice(2,6); |
| 37 | + var data = buf.slice(6,6+len).map((b,i)=>b^mask[i%4]); |
| 38 | + var msg = Buffer.from(data).toString(); |
| 39 | + console.log('Received:', msg); |
| 40 | + var reply = Buffer.from(msg); |
| 41 | + var hdr = Buffer.from([0x81,reply.length]); |
| 42 | + var frame = Buffer.concat([hdr,reply]); |
| 43 | + socket.write(frame); |
| 44 | + |
| 45 | + }); |
| 46 | + }); |
| 47 | + |
| 48 | + |
| 49 | + |
0 commit comments