mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-10-04 19:42:01 +08:00
add Packet: LpPacket
This commit is contained in:
1 parent
472821754a
commit
69315b0b74
3 files changed
+224
-16
No files matched your search
@@ -1,8 +1,8 @@
|
||||
package component;
|
||||
|
||||
import encoding.Block;
|
||||
import encoding.Encoder;
|
||||
import encoding.IEncodingAble;
|
||||
import com.sun.org.apache.regexp.internal.RE;
|
||||
import encoding.*;
|
||||
import packet.LpPacket;
|
||||
|
||||
/*
|
||||
* @Author: Wang Feng
|
||||
@@ -13,9 +13,43 @@ import encoding.IEncodingAble;
|
||||
*/
|
||||
public class LpPacketHeader implements TlvComponentBase, IEncodingAble {
|
||||
// 成员变量
|
||||
private LpPacketFragmentId lpPacketFragmentId;
|
||||
private LpPacketFragmentNum lpPacketFragmentNum;
|
||||
private LpPacketFragmentSeq lpPacketFragmentSeq;
|
||||
private LpPacketFragmentId lpPacketFragmentId=new LpPacketFragmentId();
|
||||
private LpPacketFragmentNum lpPacketFragmentNum=new LpPacketFragmentNum();
|
||||
private LpPacketFragmentSeq lpPacketFragmentSeq=new LpPacketFragmentSeq();
|
||||
|
||||
public LpPacketHeader(){
|
||||
}
|
||||
|
||||
public LpPacketHeader(LpPacketFragmentId id,
|
||||
LpPacketFragmentNum num,LpPacketFragmentSeq seq){
|
||||
this.lpPacketFragmentId=id;
|
||||
this.lpPacketFragmentNum=num;
|
||||
this.lpPacketFragmentSeq=seq;
|
||||
}
|
||||
|
||||
public LpPacketFragmentId getLpPacketFragmentId() {
|
||||
return lpPacketFragmentId;
|
||||
}
|
||||
|
||||
public void setLpPacketFragmentId(LpPacketFragmentId lpPacketFragmentId) {
|
||||
this.lpPacketFragmentId = lpPacketFragmentId;
|
||||
}
|
||||
|
||||
public LpPacketFragmentNum getLpPacketFragmentNum() {
|
||||
return lpPacketFragmentNum;
|
||||
}
|
||||
|
||||
public void setLpPacketFragmentNum(LpPacketFragmentNum lpPacketFragmentNum) {
|
||||
this.lpPacketFragmentNum = lpPacketFragmentNum;
|
||||
}
|
||||
|
||||
public LpPacketFragmentSeq getLpPacketFragmentSeq() {
|
||||
return lpPacketFragmentSeq;
|
||||
}
|
||||
|
||||
public void setLpPacketFragmentSeq(LpPacketFragmentSeq lpPacketFragmentSeq) {
|
||||
this.lpPacketFragmentSeq = lpPacketFragmentSeq;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 LpPacketHeader 线速编码为一个 TLV
|
||||
@@ -24,7 +58,48 @@ public class LpPacketHeader implements TlvComponentBase, IEncodingAble {
|
||||
*/
|
||||
@Override
|
||||
public int wireEncode(Encoder encoder) throws ComponentException {
|
||||
try{
|
||||
int totalLength=0;
|
||||
// 编码 TLV-VALUE
|
||||
// seq
|
||||
int tmpLen=this.lpPacketFragmentSeq.wireEncode(encoder);
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
|
||||
// num
|
||||
tmpLen=this.lpPacketFragmentNum.wireEncode(encoder);
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
|
||||
// id
|
||||
tmpLen=this.lpPacketFragmentId.wireEncode(encoder);
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
|
||||
// 编码 TLV-LENGTH
|
||||
tmpLen=encoder.prependVarNumber(new VlInt(totalLength));
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
|
||||
// 编码 TLV-TYPE
|
||||
tmpLen=encoder.prependVarNumber(new VlInt(TLV.TlvLpPacketHeader));
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
|
||||
return totalLength;
|
||||
} catch (EncoderException e) {
|
||||
throw new ComponentException("LpPacketHeader.wireEncode: "+e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -34,6 +109,43 @@ public class LpPacketHeader implements TlvComponentBase, IEncodingAble {
|
||||
*/
|
||||
@Override
|
||||
public boolean wireDecode(Block block) throws ComponentException {
|
||||
try {
|
||||
// 检查 Type 是否正确
|
||||
if (!TLV.expectType(block.getType(), new VlInt(TLV.TlvLpPacketHeader))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 解析子组件
|
||||
if(!block.parseSubElements()){
|
||||
return false;
|
||||
}
|
||||
|
||||
ElementContainer elementContainer=block.getSubElements();
|
||||
for (int i = 0; i < elementContainer.length(); i++) {
|
||||
Block newBlock=elementContainer.getBlock(i);
|
||||
int type=newBlock.getType().getVlIntValue2Int();
|
||||
switch (type){
|
||||
case TLV.TlvLpPacketFragmentId:
|
||||
if(!this.lpPacketFragmentId.wireDecode(newBlock)){
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case TLV.TlvLpPacketFragmentNum:
|
||||
if(!this.lpPacketFragmentNum.wireDecode(newBlock)){
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case TLV.TlvLpPacketFragmentSeq:
|
||||
if(!this.lpPacketFragmentSeq.wireDecode(newBlock)){
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (VlIntException | BlockException e) {
|
||||
throw new ComponentException("LpPacketHeader.wireDecode: "+e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -39,16 +39,16 @@ import encoding.*;
|
||||
public class Interest implements InteractWithField, IEncodingAble {
|
||||
public MINPacket minPacket=new MINPacket();
|
||||
public CanBePrefix canBePrefix=new CanBePrefix();
|
||||
private MustBeRefresh mustBeRefresh=new MustBeRefresh();
|
||||
private InterestLifeTime interestLifeTime=new InterestLifeTime();
|
||||
private Nonce nonce=new Nonce();
|
||||
private HopLimit hopLimit=new HopLimit();
|
||||
private Payload payload=new Payload();
|
||||
private CongestionMark congestionMark=new CongestionMark();
|
||||
private TTL ttl=new TTL();
|
||||
private NackHeader nackHeader=new NackHeader();
|
||||
public MustBeRefresh mustBeRefresh=new MustBeRefresh();
|
||||
public InterestLifeTime interestLifeTime=new InterestLifeTime();
|
||||
public Nonce nonce=new Nonce();
|
||||
public HopLimit hopLimit=new HopLimit();
|
||||
public Payload payload=new Payload();
|
||||
public CongestionMark congestionMark=new CongestionMark();
|
||||
public TTL ttl=new TTL();
|
||||
public NackHeader nackHeader=new NackHeader();
|
||||
|
||||
private Identifier name=new Identifier();
|
||||
public Identifier name=new Identifier();
|
||||
|
||||
/**
|
||||
* 获取内容兴趣包的名字
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
package packet;
|
||||
|
||||
import component.ComponentException;
|
||||
import component.LpPacketHeader;
|
||||
import component.Payload;
|
||||
import encoding.*;
|
||||
|
||||
/*
|
||||
* @Author: Wang Feng
|
||||
* @Description:
|
||||
@@ -7,5 +12,96 @@ package packet;
|
||||
* @Date: 17:33 2021/4/2
|
||||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||||
*/
|
||||
public class LpPacket {
|
||||
public class LpPacket implements IEncodingAble {
|
||||
public LpPacketHeader lpPacketHeader=new LpPacketHeader();
|
||||
public Payload payload=new Payload();
|
||||
|
||||
/**
|
||||
* 将 LpPacket 线速编码为一个 TLV
|
||||
* @param encoder
|
||||
* @return
|
||||
* @throws ComponentException
|
||||
* @throws PacketException
|
||||
*/
|
||||
@Override
|
||||
public int wireEncode(Encoder encoder) throws PacketException {
|
||||
try {
|
||||
int totalLength = 0;
|
||||
// 编码 TLV-VALUE
|
||||
// LpHeader
|
||||
int tmpLen = this.lpPacketHeader.wireEncode(encoder);
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
// Fragment
|
||||
tmpLen = this.payload.wireEncode(encoder);
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
|
||||
// 编码 TLV-LENGTH
|
||||
tmpLen = encoder.prependVarNumber(new VlInt(totalLength));
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
|
||||
// 编码 TLV-TYPE
|
||||
tmpLen = encoder.prependVarNumber(new VlInt(TLV.TlvLpPacket));
|
||||
if(tmpLen<=0){
|
||||
return -1;
|
||||
}
|
||||
totalLength+=tmpLen;
|
||||
|
||||
return totalLength;
|
||||
} catch (ComponentException | EncoderException e) {
|
||||
throw new PacketException("LpPacket.wireEncode: "+e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 Block TLV 中解码出一个 LpPacket
|
||||
* @param block
|
||||
* @return
|
||||
* @throws ComponentException
|
||||
* @throws PacketException
|
||||
*/
|
||||
@Override
|
||||
public boolean wireDecode(Block block) throws PacketException {
|
||||
try {
|
||||
// 检查 Type 是否正确
|
||||
if (!TLV.expectType(block.getType(), new VlInt(TLV.TlvLpPacket))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 解析子组件
|
||||
if(!block.parseSubElements()){
|
||||
return false;
|
||||
}
|
||||
|
||||
ElementContainer elementContainer=block.getSubElements();
|
||||
for (int i = 0; i < elementContainer.length(); i++) {
|
||||
Block newBlock=elementContainer.getBlock(i);
|
||||
int type=newBlock.getType().getVlIntValue2Int();
|
||||
switch (type){
|
||||
case TLV.TlvLpPacketHeader:
|
||||
if(!this.lpPacketHeader.wireDecode(newBlock)){
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case TLV.TlvPayload:
|
||||
if(!this.payload.wireDecode(newBlock)){
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (VlIntException | BlockException | ComponentException e) {
|
||||
throw new PacketException("LpPacket.wireDecode: "+e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user