Skip to content

Commit 791198d

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

File tree

12 files changed

+323
-2
lines changed

12 files changed

+323
-2
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.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: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.github.protocol.mdtp.common.model;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
9+
@Data
10+
@AllArgsConstructor
11+
@NoArgsConstructor
12+
public class CDATHeader {
13+
14+
private byte formatType;
15+
16+
private byte protocolVersion;
17+
18+
private short messageLength;
19+
20+
private long timestamp;
21+
22+
private byte flags;
23+
24+
private Integer sequenceNumber;
25+
26+
private Integer logicalChannelId;
27+
28+
public ByteBuf toByteBuf(ByteBuf buffer) {
29+
buffer.writeByte(formatType);
30+
buffer.writeByte(protocolVersion);
31+
buffer.writeShort(messageLength);
32+
buffer.writeLong(timestamp);
33+
buffer.writeByte(flags);
34+
buffer.writeInt(sequenceNumber);
35+
buffer.writeInt(logicalChannelId);
36+
return buffer;
37+
}
38+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.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: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package io.github.protocol.mdtp.common.model;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import lombok.Data;
5+
6+
import java.nio.charset.StandardCharsets;
7+
8+
@Data
9+
public class DeviceDiscoveryResponse {
10+
private short messageHeader;
11+
12+
private short requestId;
13+
14+
private short responseId;
15+
16+
private byte mask;
17+
18+
private byte deviceStatus;
19+
20+
private byte addressCount;
21+
22+
private String[] addresses;
23+
24+
private short port;
25+
26+
private int deviceType;
27+
28+
private byte[] uniqueId;
29+
30+
private String deviceName;
31+
32+
public ByteBuf toByteBuf(ByteBuf buffer) {
33+
buffer.writeShort(messageHeader);
34+
buffer.writeShort(requestId);
35+
buffer.writeShort(responseId);
36+
buffer.writeByte(mask);
37+
buffer.writeByte(deviceStatus);
38+
buffer.writeByte(addressCount);
39+
40+
for (String address : addresses) {
41+
byte[] addressBytes = address.getBytes(StandardCharsets.UTF_8);
42+
buffer.writeBytes(addressBytes);
43+
}
44+
45+
buffer.writeShort(port);
46+
buffer.writeInt(deviceType);
47+
48+
if (uniqueId != null) {
49+
buffer.writeBytes(uniqueId);
50+
}
51+
52+
if (deviceName != null) {
53+
byte[] nameBytes = deviceName.getBytes(StandardCharsets.UTF_8);
54+
buffer.writeBytes(nameBytes);
55+
}
56+
57+
return buffer;
58+
}
59+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package iot.github.protocol.mdtp.common.model;
1+
package io.github.protocol.mdtp.common.model;
22

33
import lombok.Getter;
44

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.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 io.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 io.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+
}

mdtp-common/src/main/java/iot/github/protocol/mdtp/common/model/ServiceGroup.java renamed to mdtp-common/src/main/java/io/github/protocol/mdtp/common/model/ServiceGroup.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package iot.github.protocol.mdtp.common.model;
1+
package io.github.protocol.mdtp.common.model;
22

33
import lombok.Getter;
44

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.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)