| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | 
							- '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 };
 
 
  |