UNPKG

nxkit

Version:

This is a collection of tools, independent of any other libraries

68 lines (67 loc) 2.89 kB
"use strict"; /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2015, xuewen.chu * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of xuewen.chu nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL xuewen.chu BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ Object.defineProperty(exports, "__esModule", { value: true }); const conv_1 = require("./conv"); const querystring = require("querystring"); const protocol_versions = { '7': conv_1.WSConversation, '8': conv_1.WSConversation, '9': conv_1.WSConversation, '10': conv_1.WSConversation, '11': conv_1.WSConversation, '12': conv_1.WSConversation, '13': conv_1.WSConversation, '14': conv_1.WSConversation, '15': conv_1.WSConversation, '16': conv_1.WSConversation, '17': conv_1.WSConversation, }; /** * @func upgrade() create websocket * @arg {http.ServerRequest} req * @arg {Buffer} upgradeHead * @ret {Conversation} */ function upgrade(req, upgradeHead) { var mat = decodeURI(req.url || '').match(/\?(.+)/); var params = querystring.parse(mat ? mat[1] : ''); var bind_services = params.bind_services || ''; var version = req.headers['sec-websocket-version']; if (version) { var klass = protocol_versions[version]; if (klass) { return new klass(req, upgradeHead, bind_services); } } req.socket.destroy(); console.warn('Unrecognized websocket protocol header'); } exports.default = upgrade;