Skip to content

Commit 4a625e7

Browse files
committed
feat: add DeviceDiscoveryRequest model
Signed-off-by: wei <[email protected]>
1 parent 7e1bc04 commit 4a625e7

File tree

8 files changed

+241
-0
lines changed

8 files changed

+241
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package iot.github.protocol.mdtp.common.model;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import lombok.Data;
5+
6+
import java.util.UUID;
7+
8+
@Data
9+
public abstract class AbstractMessageBody {
10+
private short messageBodyHeader;
11+
12+
public void setMessageBodyHeader(MessageType messageType, ServiceGroup serviceGroup, DiscoveryServiceCode serviceCode) {
13+
this.messageBodyHeader = 0;
14+
15+
this.messageBodyHeader |= (short) (messageType.getCode() & 0b111);
16+
17+
this.messageBodyHeader |= (short) ((serviceGroup.getCode() & 0b1111111) << 3);
18+
19+
this.messageBodyHeader |= (short) ((serviceCode.getCode() & 0b111111) << 10);
20+
}
21+
22+
public short generateRequestId() {
23+
UUID uuid = UUID.randomUUID();
24+
return (short) (uuid.getLeastSignificantBits() & 0xFFFF);
25+
}
26+
27+
public ByteBuf toByteBuf(ByteBuf buffer) {
28+
buffer.writeShort(messageBodyHeader);
29+
return buffer;
30+
}
31+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package iot.github.protocol.mdtp.common.model;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import io.netty.buffer.Unpooled;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
9+
import java.nio.ByteBuffer;
10+
11+
@Data
12+
@AllArgsConstructor
13+
@NoArgsConstructor
14+
public class CDATHeader {
15+
16+
private byte formatType;
17+
18+
private byte protocolVersion;
19+
20+
private short messageLength;
21+
22+
private long timestamp;
23+
24+
private byte flags;
25+
26+
private Integer sequenceNumber;
27+
28+
private Integer logicalChannelId;
29+
30+
public ByteBuf toByteBuf(ByteBuf buffer) {
31+
buffer.writeByte(formatType);
32+
buffer.writeByte(protocolVersion);
33+
buffer.writeShort(messageLength);
34+
buffer.writeLong(timestamp);
35+
buffer.writeByte(flags);
36+
buffer.writeInt(sequenceNumber);
37+
buffer.writeInt(logicalChannelId);
38+
return buffer;
39+
}
40+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package iot.github.protocol.mdtp.common.model;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import lombok.Data;
5+
6+
7+
@Data
8+
public class DeviceDiscoveryRequest extends AbstractMessageBody {
9+
private short requestId;
10+
11+
private byte mask;
12+
13+
private byte deviceTypeCount;
14+
15+
private int[] deviceTypes;
16+
17+
public ByteBuf toByteBuf(ByteBuf buffer) {
18+
super.toByteBuf(buffer);
19+
buffer.writeShort(requestId);
20+
buffer.writeByte(mask);
21+
buffer.writeByte(deviceTypeCount);
22+
for (int deviceType : deviceTypes) {
23+
buffer.writeInt(deviceType);
24+
}
25+
return buffer;
26+
}
27+
28+
public static DeviceDiscoveryRequest fromByteBuf(ByteBuf data) {
29+
DeviceDiscoveryRequest request = new DeviceDiscoveryRequest();
30+
request.requestId = data.readShort();
31+
request.mask = data.readByte();
32+
request.deviceTypeCount = data.readByte();
33+
34+
int length = request.deviceTypeCount;
35+
request.deviceTypes = new int[length];
36+
for (int i = 0; i < length; i++) {
37+
request.deviceTypes[i] = data.readInt();
38+
}
39+
return request;
40+
}
41+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package iot.github.protocol.mdtp.common.model;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import lombok.Data;
5+
6+
@Data
7+
public class DeviceDiscoveryResponse {
8+
private short messageHeader;
9+
10+
private short requestId;
11+
12+
private short responseId;
13+
14+
private byte mask;
15+
16+
private byte deviceStatus;
17+
18+
private byte addressCount;
19+
20+
private String[] addresses;
21+
22+
private short port;
23+
24+
private int deviceType;
25+
26+
private byte[] uniqueId;
27+
28+
private String deviceName;
29+
30+
public ByteBuf toByteBuf(ByteBuf buffer) {
31+
buffer.writeShort(messageHeader);
32+
buffer.writeShort(requestId);
33+
buffer.writeShort(responseId);
34+
buffer.writeByte(mask);
35+
buffer.writeByte(deviceStatus);
36+
buffer.writeByte(addressCount);
37+
38+
for (String address : addresses) {
39+
byte[] addressBytes = address.getBytes();
40+
buffer.writeBytes(addressBytes);
41+
}
42+
43+
buffer.writeShort(port);
44+
buffer.writeInt(deviceType);
45+
46+
if (uniqueId != null) {
47+
buffer.writeBytes(uniqueId);
48+
}
49+
50+
if (deviceName != null) {
51+
byte[] nameBytes = deviceName.getBytes();
52+
buffer.writeBytes(nameBytes);
53+
}
54+
55+
return buffer;
56+
}
57+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package iot.github.protocol.mdtp.common.model;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import lombok.Data;
5+
6+
@Data
7+
public class MdtpPacket {
8+
9+
private CDATHeader header;
10+
11+
private SecurityHeader securityHeader;
12+
13+
private AbstractMessageBody body;
14+
15+
private Signature signature;
16+
17+
public ByteBuf toByteBuf(ByteBuf buffer) {
18+
header.toByteBuf(buffer);
19+
if (securityHeader != null) {
20+
securityHeader.toByteBuf(buffer);
21+
}
22+
if (body != null) {
23+
body.toByteBuf(buffer);
24+
}
25+
return buffer;
26+
}
27+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package iot.github.protocol.mdtp.common.model;
2+
3+
public enum MessageType {
4+
REQUEST(0),
5+
6+
RESPONSE(1),
7+
8+
NOTIFY(2);
9+
10+
private final int code;
11+
12+
MessageType(int code) {
13+
this.code = code;
14+
}
15+
16+
public int getCode() {
17+
return code;
18+
}
19+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package iot.github.protocol.mdtp.common.model;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import lombok.Data;
5+
6+
@Data
7+
public class SecurityHeader {
8+
private byte[] encryptionData;
9+
10+
public ByteBuf toByteBuf(ByteBuf buffer) {
11+
for (int data : encryptionData) {
12+
buffer.writeInt(data);
13+
}
14+
return buffer;
15+
}
16+
17+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package iot.github.protocol.mdtp.common.model;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class Signature {
7+
private byte[] signatureData;
8+
9+
}

0 commit comments

Comments
 (0)