diff --git a/src/main/java/packet/CPacket.java b/src/main/java/packet/CPacket.java index 4ae8dbb..d493e2c 100644 --- a/src/main/java/packet/CPacket.java +++ b/src/main/java/packet/CPacket.java @@ -57,7 +57,31 @@ public class CPacket implements InteractWithField, IEncodingAble { // 填充可变区 => 非受保护区 // 首先清除所有的Block this.minPacket.mutableField.mutableDangerousField.clearBlocks(); -// Block block + Block block=new SelfEncodingBase().selfWireEncode(this.ttl); + if(block==null){ + return false; + } + this.minPacket.mutableField.mutableDangerousField.addBlock(block); + + // 填充只读区 + // 首先清除所有的Block + this.minPacket.readOnlyField.clearBlocks(); + block=new SelfEncodingBase().selfWireEncode(this.payload); + if(block==null){ + return false; + } + this.minPacket.readOnlyField.addBlock(block); + + // 填充标识区 + // 首先清除所有的标识 + this.minPacket.identifierField.clearIdentifiers(); + IdentifierWrapper identifierWrapper= + new IdentifierWrapper().createCommonIdentifierByString(this.flatIdentifier); + if(identifierWrapper==null){ + return false; + } + this.minPacket.identifierField.addIdentifier(identifierWrapper); + return true; } @@ -98,13 +122,74 @@ public class CPacket implements InteractWithField, IEncodingAble { return true; } + /** + * 将 CPacket 编码成 TLV + * @param encoder + * @return + */ @Override public int wireEncode(Encoder encoder) { - return 0; + // 首先将属性填充到分区当中 + if(!this.fillDataToFields()){ + return 0; + } + + // 指定包类型 + this.minPacket.packetType=new VlInt(TLV.TlvPacketMINCommon); + + return this.minPacket.wireEncode(encoder); } + /** + * 从 TLV Block 中解码出一个 CPacket + * @param block + * @return + */ @Override public boolean wireDecode(Block block) { - return false; + if(!this.minPacket.wireDecode(block)){ + return false; + } + return this.extraDataFromFields(); + } + + /** + * 展示平面标识 + * @return + */ + public String toUri(){ + return this.flatIdentifier; + } + + /** + * 设置推式包的平面标识,eg: asdfsvnjweivnjsdcs + * @param identifier + */ + public void setIdentifier(String identifier){ + this.flatIdentifier=identifier; + } + + /** + * 获取推式包的平面标识 + * @return + */ + public String getIdentifier(){ + return this.flatIdentifier; + } + + /** + * 得到 TTL + * @return + */ + public TTL getTtl() { + return ttl; + } + + /** + * 设置 TTL + * @param ttl + */ + public void setTtl(TTL ttl) { + this.ttl = ttl; } }