diff options
author | RaindropsSys <contact@minteck.org> | 2023-05-12 16:43:04 +0200 |
---|---|---|
committer | RaindropsSys <contact@minteck.org> | 2023-05-12 16:43:04 +0200 |
commit | 0e4f6cea6a4f8d1f860ded405a66f9fca9d93d96 (patch) | |
tree | f8dcad460d9120442e23c8c567ba246eed39f71a /includes/external/pair/node_modules/ws/lib/subprotocol.js | |
parent | 761c84c0c17c04113608a20e8401270023741c7e (diff) | |
download | pluralconnect-0e4f6cea6a4f8d1f860ded405a66f9fca9d93d96.tar.gz pluralconnect-0e4f6cea6a4f8d1f860ded405a66f9fca9d93d96.tar.bz2 pluralconnect-0e4f6cea6a4f8d1f860ded405a66f9fca9d93d96.zip |
Updated 5 files and added 29 files (automated)
Diffstat (limited to 'includes/external/pair/node_modules/ws/lib/subprotocol.js')
-rw-r--r-- | includes/external/pair/node_modules/ws/lib/subprotocol.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/includes/external/pair/node_modules/ws/lib/subprotocol.js b/includes/external/pair/node_modules/ws/lib/subprotocol.js new file mode 100644 index 0000000..d4381e8 --- /dev/null +++ b/includes/external/pair/node_modules/ws/lib/subprotocol.js @@ -0,0 +1,62 @@ +'use strict'; + +const { tokenChars } = require('./validation'); + +/** + * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names. + * + * @param {String} header The field value of the header + * @return {Set} The subprotocol names + * @public + */ +function parse(header) { + const protocols = new Set(); + let start = -1; + let end = -1; + let i = 0; + + for (i; i < header.length; i++) { + const code = header.charCodeAt(i); + + if (end === -1 && tokenChars[code] === 1) { + if (start === -1) start = i; + } else if ( + i !== 0 && + (code === 0x20 /* ' ' */ || code === 0x09) /* '\t' */ + ) { + if (end === -1 && start !== -1) end = i; + } else if (code === 0x2c /* ',' */) { + if (start === -1) { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + + if (end === -1) end = i; + + const protocol = header.slice(start, end); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + start = end = -1; + } else { + throw new SyntaxError(`Unexpected character at index ${i}`); + } + } + + if (start === -1 || end !== -1) { + throw new SyntaxError('Unexpected end of input'); + } + + const protocol = header.slice(start, i); + + if (protocols.has(protocol)) { + throw new SyntaxError(`The "${protocol}" subprotocol is duplicated`); + } + + protocols.add(protocol); + return protocols; +} + +module.exports = { parse }; |