@@ -2,7 +2,7 @@ import {BufferList} from './BufferList';
2
2
import { ERROR , PACKET_TYPE } from './enums' ;
3
3
import { PacketConnack , parseConnack } from './packets/connack' ;
4
4
import { PacketConnect , parseConnect } from './packets/connect' ;
5
- import { PacketPublish , parsePublish } from './packets/publish' ;
5
+ import { PacketPublish } from './packets/publish' ;
6
6
import { PacketPuback , parsePuback } from './packets/puback' ;
7
7
import { PacketPubrec , parsePubrec } from './packets/pubrec' ;
8
8
import { PacketPubrel , parsePubrel } from './packets/pubrel' ;
@@ -15,17 +15,14 @@ import {PacketPingreq} from './packets/pingreq';
15
15
import { PacketPingresp } from './packets/pingresp' ;
16
16
import { PacketDisconnect , parseDisconnect } from './packets/disconnect' ;
17
17
import { PacketAuth , parseAuth } from './packets/auth' ;
18
- import { parseBinary , parseProps } from './util/parse' ;
19
- import { Properties } from './types' ;
18
+ import { parseBinary , parseProps } from './util/parse' ;
19
+ import { Properties } from './types' ;
20
20
21
21
const enum DECODER_STATE {
22
22
HEADER = 0 ,
23
23
DATA = 1 ,
24
24
}
25
25
26
- const parsers = new Map ( ) ;
27
- parsers . set ( PACKET_TYPE . PUBLISH , parsePublish ) ;
28
-
29
26
export class MqttDecoder {
30
27
/** Keeps track of which part message framing are we in. */
31
28
private state : DECODER_STATE = DECODER_STATE . HEADER ;
@@ -126,15 +123,14 @@ export class MqttDecoder {
126
123
127
124
if ( this . state !== DECODER_STATE . DATA ) return ;
128
125
129
- const { l : length } = this ;
126
+ const { b , l } = this ;
130
127
let offset = this . offset ;
131
- const end = offset + length ;
132
- if ( list . length < end ) return ;
128
+ const packetEndOffset = offset + l ;
129
+ if ( list . length < packetEndOffset ) return ;
133
130
134
131
this . state = DECODER_STATE . HEADER ;
135
132
this . offset = 0 ;
136
133
137
- const { b, l} = this ;
138
134
const type : PACKET_TYPE = ( b >> 4 ) as PACKET_TYPE ;
139
135
switch ( type ) {
140
136
case PACKET_TYPE . PUBLISH : {
@@ -151,80 +147,80 @@ export class MqttDecoder {
151
147
p = props ;
152
148
offset += size ;
153
149
}
154
- const d = list . slice ( offset , list . length ) ;
150
+ const d = list . slice ( offset , packetEndOffset ) ;
155
151
const t = topic . toString ( 'utf8' ) ;
156
- list . consume ( end ) ;
152
+ list . consume ( packetEndOffset ) ;
157
153
return new PacketPublish ( b , l , t , i , p , d ) ;
158
154
}
159
155
case PACKET_TYPE . CONNECT : {
160
156
const packet = parseConnect ( b , l , list , offset ) ;
161
157
this . version = packet . v ;
162
- list . consume ( end ) ;
158
+ list . consume ( packetEndOffset ) ;
163
159
return packet ;
164
160
}
165
161
case PACKET_TYPE . CONNACK : {
166
162
const packet = parseConnack ( b , l , list , this . version , offset ) ;
167
- list . consume ( end ) ;
163
+ list . consume ( packetEndOffset ) ;
168
164
return packet ;
169
165
}
170
166
case PACKET_TYPE . PUBACK : {
171
167
const packet = parsePuback ( b , l , list , this . version , offset ) ;
172
- list . consume ( end ) ;
168
+ list . consume ( packetEndOffset ) ;
173
169
return packet ;
174
170
}
175
171
case PACKET_TYPE . PUBREC : {
176
172
const packet = parsePubrec ( b , l , list , this . version , offset ) ;
177
- list . consume ( end ) ;
173
+ list . consume ( packetEndOffset ) ;
178
174
return packet ;
179
175
}
180
176
case PACKET_TYPE . PUBREL : {
181
177
const packet = parsePubrel ( b , l , list , this . version , offset ) ;
182
- list . consume ( end ) ;
178
+ list . consume ( packetEndOffset ) ;
183
179
return packet ;
184
180
}
185
181
case PACKET_TYPE . PUBCOMP : {
186
182
const packet = parsePubcomp ( b , l , list , this . version , offset ) ;
187
- list . consume ( end ) ;
183
+ list . consume ( packetEndOffset ) ;
188
184
return packet ;
189
185
}
190
186
case PACKET_TYPE . SUBSCRIBE : {
191
187
const packet = parseSubscribe ( b , l , list , this . version , offset ) ;
192
- list . consume ( end ) ;
188
+ list . consume ( packetEndOffset ) ;
193
189
return packet ;
194
190
}
195
191
case PACKET_TYPE . SUBACK : {
196
192
const packet = parseSuback ( b , l , list , this . version , offset ) ;
197
- list . consume ( end ) ;
193
+ list . consume ( packetEndOffset ) ;
198
194
return packet ;
199
195
}
200
196
case PACKET_TYPE . UNSUBSCRIBE : {
201
197
const packet = parseUnsubscribe ( b , l , list , this . version , offset ) ;
202
- list . consume ( end ) ;
198
+ list . consume ( packetEndOffset ) ;
203
199
return packet ;
204
200
}
205
201
case PACKET_TYPE . UNSUBACK : {
206
202
const packet = parseUnsuback ( b , l , list , this . version , offset ) ;
207
- list . consume ( end ) ;
203
+ list . consume ( packetEndOffset ) ;
208
204
return packet ;
209
205
}
210
206
case PACKET_TYPE . PINGREQ : {
211
207
const packet = new PacketPingreq ( b , l ) ;
212
- list . consume ( end ) ;
208
+ list . consume ( packetEndOffset ) ;
213
209
return packet ;
214
210
}
215
211
case PACKET_TYPE . PINGRESP : {
216
212
const packet = new PacketPingresp ( b , l ) ;
217
- list . consume ( end ) ;
213
+ list . consume ( packetEndOffset ) ;
218
214
return packet ;
219
215
}
220
216
case PACKET_TYPE . DISCONNECT : {
221
217
const packet = parseDisconnect ( b , l , list , this . version , offset ) ;
222
- list . consume ( end ) ;
218
+ list . consume ( packetEndOffset ) ;
223
219
return packet ;
224
220
}
225
221
case PACKET_TYPE . AUTH : {
226
222
const packet = parseAuth ( b , l , list , this . version , offset ) ;
227
- list . consume ( end ) ;
223
+ list . consume ( packetEndOffset ) ;
228
224
return packet ;
229
225
}
230
226
default : throw ERROR . MALFORMED_PACKET ;
0 commit comments