Skip to content

Commit 27e3883

Browse files
committed
feat: 🎸 add reason codes
1 parent e196944 commit 27e3883

File tree

5 files changed

+68
-32
lines changed

5 files changed

+68
-32
lines changed

‎src/MqttDecoder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {BufferList} from './BufferList';
2-
import {ERROR, PACKET_TYPE} from './enums';
2+
import {REASON, PACKET_TYPE} from './enums';
33
import {PacketConnack, parseConnack} from './packets/connack';
44
import {PacketConnect} from './packets/connect';
55
import {PacketPublish} from './packets/publish';
@@ -217,10 +217,10 @@ export class MqttDecoder {
217217
case PACKET_TYPE.PINGRESP: return new PacketPingresp(b, l);
218218
case PACKET_TYPE.DISCONNECT: return parseDisconnect(b, l, buf, this.version);
219219
case PACKET_TYPE.AUTH: return parseAuth(b, l, buf, this.version);
220-
default: throw ERROR.MALFORMED_PACKET;
220+
default: throw REASON.MalformedPacket;
221221
}
222222
} catch (error) {
223-
throw ERROR.MALFORMED_PACKET;
223+
throw REASON.ProtocolError;
224224
}
225225
}
226226
}

‎src/__tests__/MqttDecoder.spec.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {MqttDecoder} from '../MqttDecoder';
22
import {connect, connectAck, connectWithClientId, publish3111} from './util';
3-
import {ERROR, PACKET_TYPE, PROPERTY} from '../enums';
3+
import {REASON, PACKET_TYPE, PROPERTY} from '../enums';
44
import {PacketConnect} from '../packets/connect';
55
import {PacketConnack} from '../packets/connack';
66
import {PacketPublish} from '../packets/publish';
@@ -28,7 +28,7 @@ it('throws on invalid command', () => {
2828
try {
2929
decoder.parse();
3030
} catch (err) { error = err; }
31-
expect(error).toBe(ERROR.MALFORMED_PACKET);
31+
expect(error).toBe(REASON.ProtocolError);
3232
});
3333

3434
it('throws on invalid CONNECT packet', () => {
@@ -43,7 +43,7 @@ it('throws on invalid CONNECT packet', () => {
4343
try {
4444
decoder.parse();
4545
} catch (err) { error = err; }
46-
expect(error).toBe(ERROR.MALFORMED_PACKET);
46+
expect(error).toBe(REASON.ProtocolError);
4747
});
4848

4949
it('throws on invalid Protocol ID', () => {
@@ -64,7 +64,7 @@ it('throws on invalid Protocol ID', () => {
6464
try {
6565
decoder.parse();
6666
} catch (err) { error = err; }
67-
expect(error).toBe(ERROR.MALFORMED_PACKET);
67+
expect(error).toBe(REASON.ProtocolError);
6868
});
6969

7070
it('throws on unknown property', () => {
@@ -90,7 +90,7 @@ it('throws on unknown property', () => {
9090
try {
9191
decoder.parse();
9292
} catch (err) { error = err; }
93-
expect(error).toBe(ERROR.MALFORMED_PACKET);
93+
expect(error).toBe(REASON.ProtocolError);
9494
});
9595

9696
describe('CONNECT', () => {
@@ -688,7 +688,7 @@ describe('CONNECT', () => {
688688
try {
689689
decoder.parse();
690690
} catch (err) { error = err; }
691-
expect(error).toBe(ERROR.MALFORMED_PACKET);
691+
expect(error).toBe(REASON.ProtocolError);
692692
});
693693

694694
it('throws on missing Protocol Version', () => {
@@ -702,7 +702,7 @@ describe('CONNECT', () => {
702702
try {
703703
decoder.parse();
704704
} catch (err) { error = err; }
705-
expect(error).toBe(ERROR.MALFORMED_PACKET);
705+
expect(error).toBe(REASON.ProtocolError);
706706
});
707707

708708
it('throws on missing Keep-alive', () => {
@@ -718,7 +718,7 @@ describe('CONNECT', () => {
718718
try {
719719
decoder.parse();
720720
} catch (err) { error = err; }
721-
expect(error).toBe(ERROR.MALFORMED_PACKET);
721+
expect(error).toBe(REASON.ProtocolError);
722722
});
723723

724724
it('throws on missing Client ID', () => {
@@ -735,7 +735,7 @@ describe('CONNECT', () => {
735735
try {
736736
decoder.parse();
737737
} catch (err) { error = err; }
738-
expect(error).toBe(ERROR.MALFORMED_PACKET);
738+
expect(error).toBe(REASON.ProtocolError);
739739
});
740740

741741
it('throws on missing Will Topic', () => {
@@ -754,7 +754,7 @@ describe('CONNECT', () => {
754754
try {
755755
decoder.parse();
756756
} catch (err) { error = err; }
757-
expect(error).toBe(ERROR.MALFORMED_PACKET);
757+
expect(error).toBe(REASON.ProtocolError);
758758
});
759759

760760
it('throws on invalid Will Payload', () => {
@@ -775,7 +775,7 @@ describe('CONNECT', () => {
775775
try {
776776
decoder.parse();
777777
} catch (err) { error = err; }
778-
expect(error).toBe(ERROR.MALFORMED_PACKET);
778+
expect(error).toBe(REASON.ProtocolError);
779779
});
780780

781781
it('throws on invalid User Name', () => {
@@ -798,7 +798,7 @@ describe('CONNECT', () => {
798798
try {
799799
decoder.parse();
800800
} catch (err) { error = err; }
801-
expect(error).toBe(ERROR.MALFORMED_PACKET);
801+
expect(error).toBe(REASON.ProtocolError);
802802
});
803803

804804
it('throws on invalid Password', () => {
@@ -823,7 +823,7 @@ describe('CONNECT', () => {
823823
try {
824824
decoder.parse();
825825
} catch (err) { error = err; }
826-
expect(error).toBe(ERROR.MALFORMED_PACKET);
826+
expect(error).toBe(REASON.ProtocolError);
827827
});
828828
});
829829

‎src/enums.ts

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,6 @@ export const enum PACKET_TYPE {
1717
AUTH = 15,
1818
}
1919

20-
export const enum ERROR {
21-
MALFORMED_PACKET = 0x81, // Malformed Packet
22-
PROTOCOL_ERROR = 0x82, // Protocol Error
23-
RECEIVE_MAX_EXCEEDED = 0x93, // Receive Maximum exceeded
24-
PACKET_TOO_LARGE = 0x95, // Packet too large
25-
RETAIN_NOT_SUPPORTED = 0x9a, // Retain not supported
26-
QOS_NOT_SUPPORTED = 0x9b, // QoS not supported
27-
SHARED_SUB_NOT_SUPPORTED = 0x9e, // Shared Subscriptions not supported
28-
SUB_IDS_NOT_SUPPORTED = 0xa1, // Subscription Identifiers not supported
29-
WILDCARD_SUBS_NOT_SUPPORTED = 0xa2, // Wildcard Subscriptions not supported
30-
}
31-
3220
export const enum PROPERTY {
3321
PayloadFormatIndicator = 1,
3422
MessageExpiryInterval = 2,
@@ -58,3 +46,51 @@ export const enum PROPERTY {
5846
SubscriptionIdentifierAvailable = 41,
5947
SharedSubscriptionAvailable = 42,
6048
}
49+
50+
export const enum REASON {
51+
Success = 0x00,
52+
NormalDisconnection = 0x00,
53+
GrantedQoS0 = 0x00,
54+
GrantedQoS1 = 0x01,
55+
GrantedQoS2 = 0x02,
56+
DisconnectWithWillMessage = 0x04,
57+
NoMatchingSubscribers = 0x10,
58+
NoSubscriptionExisted = 0x11,
59+
ContinueAuthentication = 0x18,
60+
ReAuthenticate = 0x19,
61+
UnspecifiedError = 0x80,
62+
MalformedPacket = 0x81,
63+
ProtocolError = 0x82,
64+
ImplementationSpecificError = 0x83,
65+
UnsupportedProtocolVersion = 0x84,
66+
ClientIdentifierNotValid = 0x85,
67+
BadUserNameOrPassword = 0x86,
68+
NotAuthorized = 0x87,
69+
ServerUnavailable = 0x88,
70+
ServerBusy = 0x89,
71+
Banned = 0x8A,
72+
ServerShuttingDown = 0x8B,
73+
BadAuthenticationMethod = 0x8C,
74+
KeepAliveTimeout = 0x8D,
75+
SessionTakenOver = 0x8E,
76+
TopicFilterInvalid = 0x8F,
77+
TopicNameInvalid = 0x90,
78+
PacketIdentifierInUse = 0x91,
79+
PacketIdentifierNotFound = 0x92,
80+
ReceiveMaximumExceeded = 0x93,
81+
TopicAliasInvalid = 0x94,
82+
PacketTooLarge = 0x95,
83+
MessageRateTooHigh = 0x96,
84+
QuotaExceeded = 0x97,
85+
AdministrativeAction = 0x98,
86+
PayloadFormatInvalid = 0x99,
87+
RetainNotSupported = 0x9A,
88+
QoSNotSupported = 0x9B,
89+
UseAnotherServer = 0x9C,
90+
ServerMoved = 0x9D,
91+
SharedSubscriptionsNotSupported = 0x9E,
92+
ConnectionRateExceeded = 0x9F,
93+
MaximumConnectTime = 0xA0,
94+
SubscriptionIdentifiersNotSupported = 0xA1,
95+
WildcardSubscriptionsNotSupported = 0xA2,
96+
}

‎src/util/parseProps/v1.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {ERROR, PROPERTY} from '../../enums';
1+
import {REASON, PROPERTY} from '../../enums';
22
import {BufferLike, Properties} from '../../types';
33
import {parseBinary, parseVarInt} from '../parse';
44

@@ -73,7 +73,7 @@ export const parseProps = (data: BufferLike, offset: number): [props: Properties
7373
break;
7474
}
7575
default: {
76-
throw ERROR.MALFORMED_PACKET;
76+
throw REASON.MalformedPacket;
7777
}
7878
}
7979
}

‎src/util/parseProps/v2.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {ERROR, PROPERTY} from '../../enums';
1+
import {REASON, PROPERTY} from '../../enums';
22
import {BufferLike, Properties} from '../../types';
33
import {parseBinary, parseVarInt} from '../parse';
44

@@ -96,7 +96,7 @@ export const parseProps = (data: BufferLike, offset: number): [props: Properties
9696
break;
9797
}
9898
default: {
99-
throw ERROR.MALFORMED_PACKET;
99+
throw REASON.MalformedPacket;
100100
}
101101
}
102102
}

0 commit comments

Comments
 (0)