| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 
							- 'use strict'
 
- var Server = require('./Server'),
 
- 	Connection = require('./Connection'),
 
- 	net = require('net'),
 
- 	tls = require('tls'),
 
- 	url = require('url')
 
- /**
 
-  * Create a WebSocket server
 
-  * @param {Object} [options] will be passed to net.createServer() or tls.createServer(), with the additional property 'secure' (a boolean)
 
-  * @param {Function} callback will be added as 'connection' listener
 
-  * @returns {Server}
 
-  */
 
- exports.createServer = function (options, callback) {
 
- 	if (typeof options === 'function' || !arguments.length) {
 
- 		return new Server(false, options)
 
- 	}
 
- 	return new Server(Boolean(options.secure), options, callback)
 
- }
 
- /**
 
-  * Create a WebSocket client
 
-  * @param {string} URL with the format 'ws://localhost:8000/chat' (the port can be ommited)
 
-  * @param {Object} [options] will be passed to net.connect() or tls.connect()
 
-  * @param {Function} callback will be added as 'connect' listener
 
-  * @returns {Connection}
 
-  */
 
- exports.connect = function (URL, options, callback) {
 
- 	var socket
 
- 	if (typeof options === 'function') {
 
- 		callback = options
 
- 		options = undefined
 
- 	}
 
- 	options = options || {}
 
- 	var connectionOptions = parseWSURL(URL)
 
- 	options.port = connectionOptions.port
 
- 	options.host = connectionOptions.host
 
- 	connectionOptions.extraHeaders = options.extraHeaders
 
- 	connectionOptions.protocols = options.protocols
 
- 	if (connectionOptions.secure) {
 
- 		socket = tls.connect(options)
 
- 	} else {
 
- 		socket = net.connect(options)
 
- 	}
 
- 	return new Connection(socket, connectionOptions, callback)
 
- }
 
- /**
 
-  * Set the minimum size of a pack of binary data to send in a single frame
 
-  * @param {number} bytes
 
-  */
 
- exports.setBinaryFragmentation = function (bytes) {
 
- 	Connection.binaryFragmentation = bytes
 
- }
 
- /**
 
-  * Set the maximum size the internal Buffer can grow, to avoid memory attacks
 
-  * @param {number} bytes
 
-  */
 
- exports.setMaxBufferLength = function (bytes) {
 
- 	Connection.maxBufferLength = bytes
 
- }
 
- /**
 
-  * Parse the WebSocket URL
 
-  * @param {string} URL
 
-  * @returns {Object}
 
-  * @private
 
-  */
 
- function parseWSURL(URL) {
 
- 	var parts, secure
 
- 	parts = url.parse(URL)
 
- 	parts.protocol = parts.protocol || 'ws:'
 
- 	if (parts.protocol === 'ws:') {
 
- 		secure = false
 
- 	} else if (parts.protocol === 'wss:') {
 
- 		secure = true
 
- 	} else {
 
- 		throw new Error('Invalid protocol ' + parts.protocol + '. It must be ws or wss')
 
- 	}
 
- 	parts.port = parts.port || (secure ? 443 : 80)
 
- 	parts.path = parts.path || '/'
 
- 	return {
 
- 		path: parts.path,
 
- 		port: parts.port,
 
- 		secure: secure,
 
- 		host: parts.hostname
 
- 	}
 
- }
 
 
  |