mqtt stuff added
This commit is contained in:
144
node_modules/mqtt/lib/connect/index.js
generated
vendored
Normal file
144
node_modules/mqtt/lib/connect/index.js
generated
vendored
Normal file
@ -0,0 +1,144 @@
|
||||
'use strict'
|
||||
|
||||
var MqttClient = require('../client')
|
||||
var Store = require('../store')
|
||||
var url = require('url')
|
||||
var xtend = require('xtend')
|
||||
var protocols = {}
|
||||
|
||||
if (process.title !== 'browser') {
|
||||
protocols.mqtt = require('./tcp')
|
||||
protocols.tcp = require('./tcp')
|
||||
protocols.ssl = require('./tls')
|
||||
protocols.tls = require('./tls')
|
||||
protocols.mqtts = require('./tls')
|
||||
} else {
|
||||
protocols.wx = require('./wx')
|
||||
protocols.wxs = require('./wx')
|
||||
}
|
||||
|
||||
protocols.ws = require('./ws')
|
||||
protocols.wss = require('./ws')
|
||||
|
||||
/**
|
||||
* Parse the auth attribute and merge username and password in the options object.
|
||||
*
|
||||
* @param {Object} [opts] option object
|
||||
*/
|
||||
function parseAuthOptions (opts) {
|
||||
var matches
|
||||
if (opts.auth) {
|
||||
matches = opts.auth.match(/^(.+):(.+)$/)
|
||||
if (matches) {
|
||||
opts.username = matches[1]
|
||||
opts.password = matches[2]
|
||||
} else {
|
||||
opts.username = opts.auth
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* connect - connect to an MQTT broker.
|
||||
*
|
||||
* @param {String} [brokerUrl] - url of the broker, optional
|
||||
* @param {Object} opts - see MqttClient#constructor
|
||||
*/
|
||||
function connect (brokerUrl, opts) {
|
||||
if ((typeof brokerUrl === 'object') && !opts) {
|
||||
opts = brokerUrl
|
||||
brokerUrl = null
|
||||
}
|
||||
|
||||
opts = opts || {}
|
||||
|
||||
if (brokerUrl) {
|
||||
var parsed = url.parse(brokerUrl, true)
|
||||
if (parsed.port != null) {
|
||||
parsed.port = Number(parsed.port)
|
||||
}
|
||||
|
||||
opts = xtend(parsed, opts)
|
||||
|
||||
if (opts.protocol === null) {
|
||||
throw new Error('Missing protocol')
|
||||
}
|
||||
opts.protocol = opts.protocol.replace(/:$/, '')
|
||||
}
|
||||
|
||||
// merge in the auth options if supplied
|
||||
parseAuthOptions(opts)
|
||||
|
||||
// support clientId passed in the query string of the url
|
||||
if (opts.query && typeof opts.query.clientId === 'string') {
|
||||
opts.clientId = opts.query.clientId
|
||||
}
|
||||
|
||||
if (opts.cert && opts.key) {
|
||||
if (opts.protocol) {
|
||||
if (['mqtts', 'wss', 'wxs'].indexOf(opts.protocol) === -1) {
|
||||
switch (opts.protocol) {
|
||||
case 'mqtt':
|
||||
opts.protocol = 'mqtts'
|
||||
break
|
||||
case 'ws':
|
||||
opts.protocol = 'wss'
|
||||
break
|
||||
case 'wx':
|
||||
opts.protocol = 'wxs'
|
||||
break
|
||||
default:
|
||||
throw new Error('Unknown protocol for secure connection: "' + opts.protocol + '"!')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// don't know what protocol he want to use, mqtts or wss
|
||||
throw new Error('Missing secure protocol key')
|
||||
}
|
||||
}
|
||||
|
||||
if (!protocols[opts.protocol]) {
|
||||
var isSecure = ['mqtts', 'wss'].indexOf(opts.protocol) !== -1
|
||||
opts.protocol = [
|
||||
'mqtt',
|
||||
'mqtts',
|
||||
'ws',
|
||||
'wss',
|
||||
'wx',
|
||||
'wxs'
|
||||
].filter(function (key, index) {
|
||||
if (isSecure && index % 2 === 0) {
|
||||
// Skip insecure protocols when requesting a secure one.
|
||||
return false
|
||||
}
|
||||
return (typeof protocols[key] === 'function')
|
||||
})[0]
|
||||
}
|
||||
|
||||
if (opts.clean === false && !opts.clientId) {
|
||||
throw new Error('Missing clientId for unclean clients')
|
||||
}
|
||||
|
||||
function wrapper (client) {
|
||||
if (opts.servers) {
|
||||
if (!client._reconnectCount || client._reconnectCount === opts.servers.length) {
|
||||
client._reconnectCount = 0
|
||||
}
|
||||
|
||||
opts.host = opts.servers[client._reconnectCount].host
|
||||
opts.port = opts.servers[client._reconnectCount].port
|
||||
opts.hostname = opts.host
|
||||
|
||||
client._reconnectCount++
|
||||
}
|
||||
|
||||
return protocols[opts.protocol](client, opts)
|
||||
}
|
||||
|
||||
return new MqttClient(wrapper, opts)
|
||||
}
|
||||
|
||||
module.exports = connect
|
||||
module.exports.connect = connect
|
||||
module.exports.MqttClient = MqttClient
|
||||
module.exports.Store = Store
|
Reference in New Issue
Block a user