in digital-shadow/demo-car/js/aws-iot/aws-iot.js [10530:10615]
Parser.prototype._parseConnect = function () {
var protocolId // constants id
, clientId // Client id
, topic // Will topic
, payload // Will payload
, password // Password
, username // Username
, flags = {}
, packet = this.packet
protocolId = this._parseString()
if (protocolId === null)
return this._emitError(new Error('cannot parse protocol id'))
if (protocolId != 'MQTT' && protocolId != 'MQIsdp') {
return this._emitError(new Error('invalid protocol id'))
}
packet.protocolId = protocolId
if(this._pos >= this._list.length)
return this._emitError(new Error('packet too short'))
packet.protocolVersion = this._list.readUInt8(this._pos)
if(packet.protocolVersion != 3 && packet.protocolVersion != 4) {
return this._emitError(new Error('invalid protocol version'))
}
this._pos++
if(this._pos >= this._list.length)
return this._emitError(new Error('packet too short'))
flags.username = (this._list.readUInt8(this._pos) & constants.USERNAME_MASK)
flags.password = (this._list.readUInt8(this._pos) & constants.PASSWORD_MASK)
flags.will = (this._list.readUInt8(this._pos) & constants.WILL_FLAG_MASK)
if (flags.will) {
packet.will = {}
packet.will.retain = (this._list.readUInt8(this._pos) & constants.WILL_RETAIN_MASK) !== 0
packet.will.qos = (this._list.readUInt8(this._pos) &
constants.WILL_QOS_MASK) >> constants.WILL_QOS_SHIFT
}
packet.clean = (this._list.readUInt8(this._pos) & constants.CLEAN_SESSION_MASK) !== 0
this._pos++
packet.keepalive = this._parseNum()
if(packet.keepalive === -1)
return this._emitError(new Error('packet too short'))
clientId = this._parseString()
if(clientId === null)
return this._emitError(new Error('packet too short'))
packet.clientId = clientId
if (flags.will) {
topic = this._parseString()
if (topic === null)
return this._emitError(new Error('cannot parse will topic'))
packet.will.topic = topic
payload = this._parseBuffer()
if (payload === null)
return this._emitError(new Error('cannot parse will payload'))
packet.will.payload = payload
}
if (flags.username) {
username = this._parseString()
if(username === null)
return this._emitError(new Error('cannot parse username'))
packet.username = username
}
if(flags.password) {
password = this._parseBuffer()
if(password === null)
return this._emitError(new Error('cannot parse username'))
packet.password = password
}
return packet
}