mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-10-04 19:42:01 +08:00
update Packet method: doDataField & add lf: LogicFace
This commit is contained in:
1 parent
7a3bbbc1a8
commit
0dc6bb3165
5 files changed
+305
-73
No files matched your search
@@ -1,5 +1,6 @@
|
||||
package packet;
|
||||
|
||||
import com.sun.xml.internal.ws.api.message.Packet;
|
||||
import component.*;
|
||||
import encoding.*;
|
||||
|
||||
@@ -51,6 +52,18 @@ public class CPacket implements InteractWithField, IEncodingAble {
|
||||
this.ttl=ttl;
|
||||
}
|
||||
|
||||
public CPacket createCPacketByMINPacket(MINPacket minPacket) throws PacketException {
|
||||
try {
|
||||
CPacket cPacket=new CPacket();
|
||||
if(!cPacket.doExtraDataFromFields(minPacket)){
|
||||
return null;
|
||||
}
|
||||
return cPacket;
|
||||
} catch (PacketException e) {
|
||||
throw new PacketException("CPacket.createCPacketByMINPacket: "+e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取源标识
|
||||
* @return
|
||||
@@ -123,48 +136,45 @@ public class CPacket implements InteractWithField, IEncodingAble {
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 CPacket 的各项属性填充到 MINPacket 中定义的对应分区当中
|
||||
* 将 CPacket 的各项属性填充到目标 MINPacket 中定义的对应分区当中
|
||||
*
|
||||
* @return
|
||||
* @Description: // 1. 主要填充标识区、只读区和可变区
|
||||
*/
|
||||
@Override
|
||||
public boolean fillDataToFields() throws PacketException {
|
||||
public boolean doFillDataToFields(MINPacket minPacket) throws PacketException {
|
||||
try {
|
||||
// 可变区 => 受保护区(无)
|
||||
|
||||
// 填充可变区 => 非受保护区
|
||||
// 首先清除所有的Block
|
||||
this.minPacket.mutableField.mutableDangerousField.clearBlocks();
|
||||
minPacket.mutableField.mutableDangerousField.clearBlocks();
|
||||
Block block = new SelfEncodingBase().selfWireEncode(this.ttl);
|
||||
if (block == null) {
|
||||
System.out.println("err 1");
|
||||
return false;
|
||||
}
|
||||
this.minPacket.mutableField.mutableDangerousField.addBlock(block);
|
||||
minPacket.mutableField.mutableDangerousField.addBlock(block);
|
||||
|
||||
// 填充只读区
|
||||
// 首先清除所有的Block
|
||||
this.minPacket.readOnlyField.clearBlocks();
|
||||
minPacket.readOnlyField.clearBlocks();
|
||||
block = new SelfEncodingBase().selfWireEncode(this.payload);
|
||||
if (block == null) {
|
||||
System.out.println("err 2");
|
||||
return false;
|
||||
}
|
||||
this.minPacket.readOnlyField.addBlock(block);
|
||||
minPacket.readOnlyField.addBlock(block);
|
||||
|
||||
// 填充标识区
|
||||
// 首先清除所有的标识
|
||||
if((this.srcIdentifier==null)||(this.dstIdentifier==null)){
|
||||
throw new PacketException("CPacket.fillDataToFields: SrcIdentifier or DstIdentifier is null.");
|
||||
}
|
||||
this.minPacket.identifierField.clearIdentifiers();
|
||||
minPacket.identifierField.clearIdentifiers();
|
||||
IdentifierWrapper srcIdentifierWrapper =
|
||||
new IdentifierWrapper(new VlInt(TLV.TlvIdentifierCommon),this.srcIdentifier);
|
||||
IdentifierWrapper dstIdentifierWrapper =
|
||||
new IdentifierWrapper(new VlInt(TLV.TlvIdentifierCommon),this.dstIdentifier);
|
||||
this.minPacket.identifierField.addIdentifier(srcIdentifierWrapper);
|
||||
this.minPacket.identifierField.addIdentifier(dstIdentifierWrapper);
|
||||
minPacket.identifierField.addIdentifier(srcIdentifierWrapper);
|
||||
minPacket.identifierField.addIdentifier(dstIdentifierWrapper);
|
||||
|
||||
return true;
|
||||
} catch (EncoderException | BlockException | ComponentException e) {
|
||||
@@ -173,15 +183,23 @@ public class CPacket implements InteractWithField, IEncodingAble {
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 MINPacket 的分区当中提取出 CPacket 的各项属性
|
||||
* 将 CPacket 的各项属性填充到 MINPacket 中定义的对应分区当中
|
||||
* @return
|
||||
* @throws PacketException
|
||||
*/
|
||||
public boolean fillDataToFields() throws PacketException {
|
||||
return this.doFillDataToFields(this.minPacket);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从指定的 MINPacket 的分区当中提取出 CPacket 的各项属性
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean extraDataFromFields() throws PacketException {
|
||||
public boolean doExtraDataFromFields(MINPacket minPacket) throws PacketException {
|
||||
try {
|
||||
// 提取 Payload
|
||||
Block payloadBlock = this.minPacket.readOnlyField.getBlockByType(new VlInt(TLV.TlvPayload));
|
||||
Block payloadBlock = minPacket.readOnlyField.getBlockByType(new VlInt(TLV.TlvPayload));
|
||||
if (payloadBlock == null) {
|
||||
return false;
|
||||
}
|
||||
@@ -190,7 +208,7 @@ public class CPacket implements InteractWithField, IEncodingAble {
|
||||
}
|
||||
|
||||
// 提取 TTL
|
||||
Block ttlBlock = this.minPacket.mutableField.mutableDangerousField.getBlockByType(new VlInt(TLV.TlvTTL));
|
||||
Block ttlBlock = minPacket.mutableField.mutableDangerousField.getBlockByType(new VlInt(TLV.TlvTTL));
|
||||
if (ttlBlock == null) {
|
||||
return false;
|
||||
}
|
||||
@@ -199,11 +217,11 @@ public class CPacket implements InteractWithField, IEncodingAble {
|
||||
}
|
||||
|
||||
// 提取标识
|
||||
IdentifierWrapper srcIdentifierWrapper = this.minPacket.identifierField.getIdentifier(0);
|
||||
IdentifierWrapper srcIdentifierWrapper = minPacket.identifierField.getIdentifier(0);
|
||||
if (srcIdentifierWrapper == null) {
|
||||
return false;
|
||||
}
|
||||
IdentifierWrapper dstIdentifierWrapper = this.minPacket.identifierField.getIdentifier(1);
|
||||
IdentifierWrapper dstIdentifierWrapper = minPacket.identifierField.getIdentifier(1);
|
||||
if (dstIdentifierWrapper == null) {
|
||||
return false;
|
||||
}
|
||||
@@ -216,6 +234,15 @@ public class CPacket implements InteractWithField, IEncodingAble {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 MINPacket 的分区当中提取出 CPacket 的各项属性
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean extraDataFromFields() throws PacketException {
|
||||
return this.doExtraDataFromFields(this.minPacket);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 CPacket 编码成 TLV
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user