From 0f6863efe26168437bff3a7612c5f53948e0dd74 Mon Sep 17 00:00:00 2001 From: free will <2647778488@qq.com> Date: Tue, 2 Mar 2021 00:23:58 +0800 Subject: [PATCH] writing VlInt ... --- .../min-dev-java/encoding/Block.class | Bin 0 -> 258 bytes .../min-dev-java/encoding/TLV.class | Bin 0 -> 1808 bytes .../min-dev-java/encoding/VlInt.class | Bin 0 -> 838 bytes src/encoding/Block.java | 5 + src/encoding/TLV.java | 67 ++++++++ src/encoding/VlInt.java | 144 ++++++++++++++++++ src/encoding/VlInt_V1.java | 39 +++++ 7 files changed, 255 insertions(+) create mode 100644 out/production/min-dev-java/encoding/Block.class create mode 100644 out/production/min-dev-java/encoding/TLV.class create mode 100644 out/production/min-dev-java/encoding/VlInt.class create mode 100644 src/encoding/Block.java create mode 100644 src/encoding/TLV.java create mode 100644 src/encoding/VlInt.java create mode 100644 src/encoding/VlInt_V1.java diff --git a/out/production/min-dev-java/encoding/Block.class b/out/production/min-dev-java/encoding/Block.class new file mode 100644 index 0000000000000000000000000000000000000000..cc21f48ba2b22c83bbeb7872dde6fbdbeab89a8b GIT binary patch literal 258 zcmY+8%?`m(5QWcFf2jJ2H?YG(H+IB=#HwLI>~F6dF4db+?--{*@dMCoWTQhXJEl&bs2*LRo0-K9n|2nBh*3!5}1F)ARO>1L7+Y-V~ko1WJH z%AY*PAN*NC@ri)=XYjL!@9c!+(sO$D^mFIV?A)2V?Y;kh_>qWa>GlK-)6E=xlcQUL zCTj6oVAf=;8-he2XsTdMCzU3x%ebqCF@*%}L{?cwcU4*pN(I|)TjNGX1?}b|MQLP9 zwUtTT=$N2wd^9M#XwI(|G?1m6S|tlw#SJ%dLeLK6S9QzCw412@z)3;dF;G#mv1HDwpFy`YFGwUbvjtR7Gij(rH0^29xHcX{p3^JN@x9e)eF0D0kJGUQIZp zDa;;>x{WJAyIu+oPN*qp|E3|6VyytrM0K)rYWW=v*2E3CoOzi_xBSYcbLn5qPySr` z2Nsy7brXKx6t8WpW*2$SZ~mIv2yG-&o4Dlrz6Z*3BepWThhO}?6{ML{t#yV1^ zZhKiJf+jI13sm*DxG>jg_z7)GM+-7iLGNZOs*QfR+-PJA{p07kZks&udJ_XRP5&ehZ#k=jvQn76`{%v10-=4p64^A30?^Dg)m=2zj}%&)dXPG~SKVd!x zpJ)CQzQBADzQpYEFEhLRIcAq%V4jDsFfYKLF)zXa^Hum7a|joiOYjnN8UCEPg3c4J tXYu?39hlFI|3pW>C-Gg@l65@C5GFL@mv~NQzmL*a^fe^tI-Wyx<2g8xP-p-E literal 0 HcmV?d00001 diff --git a/out/production/min-dev-java/encoding/VlInt.class b/out/production/min-dev-java/encoding/VlInt.class new file mode 100644 index 0000000000000000000000000000000000000000..63578d498ef84575847e64232a520d3a6b4d340a GIT binary patch literal 838 zcmah{ZEF)j5Ps%z?d8t1t?8TE_)_aj5;bRH^Qj^dK~O>!QUax)Hp!B1xfi)^g#IiA zTTt)^_@l(xO+GXw;vVeH%+5SB&&>S(^WztQU9M9scxTXNpOzZguohlA|A74qjMs@h$s>IIBKgAd&-f__Xvxx zRI2oALZMRa5!|=gklmL%DwX@=q%ZRW(T~|u>SO~E_e8FYJ~g`fSe+79Ix-z(LzRvq zo0DPPM5vV0R*oi#W5JJIowLuL%_H&=N3PC!=E}R-I3LJ&$|Ro9sGIUb+(3!2HjfHn zv(cP;Ow_Xw%UJR7JVYH4VW-(@{O=H`72*XN9-1LuVwbQq%afVgQY^WT{S!IRg!RgN z#+O{XXQx^w-12N}0w(?{i#~CCG&f0#gj-k;!y%zQg}XYr>c0lMYD=0$BY2+;cFZH0 zsc%v=PXyb%U?K0G!{2o*S&3U_|77|Oo)&9w;IagiY8Rl|PdJCA!Uf##Somsv*Z4Ne z2}W}{e%(qo0vp(5&BsmLnxcKcf<-HT!=lCV7|RMp7S7?HBe;sYg)NjX;g)fmEnu87 I-wy8l1)w6ch5!Hn literal 0 HcmV?d00001 diff --git a/src/encoding/Block.java b/src/encoding/Block.java new file mode 100644 index 0000000..fa857db --- /dev/null +++ b/src/encoding/Block.java @@ -0,0 +1,5 @@ +package encoding; + +public class Block { + +} diff --git a/src/encoding/TLV.java b/src/encoding/TLV.java new file mode 100644 index 0000000..9c029c4 --- /dev/null +++ b/src/encoding/TLV.java @@ -0,0 +1,67 @@ +package encoding; + +/* + * @Author: Wang Feng + * @Description: + * @Version: 1.0.0 + * @Date: 17:54 2021/3/1 + * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 + */ +public class TLV { + ////// 一级:网络分组级别TLV号分配(0 ~ 49) + public static final int TlvInvalid = 0; // 无效包 + public static final int TlvPacketMINCommon = 5; // 通用MIN包 + public static final int TlvPacketMINManagement = 6; // MIN管理包 + public static final int TlvPacketMINIP = 7; // MIN支持IP包 + + ////// 二级:网络包分区TLV号分配 (50 ~ 99) + public static final int TlvIdentifierField = 50; // 目的标识区 + public static final int TlvSignatureField = 51; // 数字签名区 + public static final int TlvReadOnlyField = 52; // 只读数据区 + public static final int TlvMutableField = 53; // 可变数据区 + public static final int TlvMutableProtectField = 54; // 可变数据区中的保护区 + public static final int TlvMutableDangerousField = 55; // 可变数据区中的非受保护区 + + ////// 组件 (100 -> 500) + // 标识分配 + public static final int TlvIdentifierComponent = 100; // 标识名称组件 + public static final int TlvIdentifier = 101; // 标识 + public static final int TlvIdentifierCommon = 102; // 身份标识 + public static final int TlvIdentifierContentInterest = 103; // 内容兴趣标识 + public static final int TlvIdentifierContentData = 104; // 内容数据标识 + + // 数字签名 + public static final int TlvSignatureValue = 200; // 签名值 + public static final int TlvSignatureInfo = 201; // 签名参数 + public static final int TlvSignatureType = 202; // 签名类型 + public static final int TlvKeyLocator = 203; // 指示证书或公钥的位置 + + public static final int TlvPayload = 204; // 网络包负载 + public static final int TlvCanBePrefix = 205; // 是否可以被较长的数据包前缀匹配 + public static final int TlvMustBeRefresh = 206; // 是否强制只拉取新鲜的数据 + public static final int TlvInterestLifeTime = 207; // 兴趣包生存期 + public static final int TlvNonce = 208; // 随机数 + public static final int TlvHopLimit = 209; // 跳数限制 + public static final int TlvFreshnessPeriod = 210; // 数据包新鲜时间 + public static final int TlvCongestionMark = 211; // 拥塞标记 + public static final int TlvTTL = 212; // Time to live + public static final int TlvNackHeader = 213; // Nack header + + // 管理通信协议 + public static final int TlvSliceNumber = 211; // 分片数量 + public static final int TlvSliceSize = 212; // 分片大小 + public static final int TlvTlvLogicFaceId = 213; // 逻辑接口id + public static final int TlvRemoteAddr = 214; // 源端地址 + public static final int TlvLocalAddr = 215; // 本地地址 + public static final int TlvMtu = 216; // 最大传输单元 + public static final int TlvRet = 217; // bool类型,成功或失败 + public static final int TlvOrigin = 218; // + public static final int TlvCost = 219; // 链路开销 + public static final int TlvExpires = 220; // LogicFace超时时间,-1为不超时(never) + + // 目前已分配的最大的Tlv值,第一轮分配的最大值为500,超过该值则断定为不合法 + // TODO: 目前TLV值的分配,第一轮分配都在500以内,如果以后分配更高值时,需要修改此处的限制 + public static final int MaxTlvNum = 500; + +// public void ReadVarNumber +} diff --git a/src/encoding/VlInt.java b/src/encoding/VlInt.java new file mode 100644 index 0000000..c14a661 --- /dev/null +++ b/src/encoding/VlInt.java @@ -0,0 +1,144 @@ +package encoding; + +import java.math.BigInteger; + +import static java.lang.Math.pow; + +/* + * @Author: Wang Feng + * @Description:变长无符号整型,用于表示TLV中的T和L + * @Version: 1.0.0 + * @Date: 18:13 2021/3/1 + * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 + */ +public class VlInt { + // 实际传输的数据 + private byte[] VlIntBytes; + // 变长整数表示的真实数值 + private BigInteger VlIntValue; + + /** + * 测量一个变长整型实际用几个字节表示 + * @return + */ + public int SizeOfVarNumber(){ + return SizeOfVarNumber(this.VlIntValue); + } + private static int SizeOfVarNumber(BigInteger bigInteger){ + if(bigInteger.compareTo(BigInteger.valueOf(Long.parseLong("241"))) < 0){ + return 1; + }else if(bigInteger.compareTo(BigInteger.valueOf( + new Double(pow(2, 16)).longValue())) < 0){ + return 3; + }else if(bigInteger.compareTo(BigInteger.valueOf( + new Double(pow(2, 32)).longValue())) < 0){ + return 5; + }else{ //MIN1.0中,VlInt的size最大为9 + return 9; + } + } + + public VlInt(byte[] bytes){ + this.VlIntBytes=bytes; + this.VlIntValue=vlintBytes2bigInteger(bytes); + } + + public VlInt(BigInteger bigInteger){ + this.VlIntValue=bigInteger; + this.VlIntBytes=bigInteger2vlintBytes(bigInteger); + } + + // 传入一个变长无符号字节数组byte[],将它解析成一个VlInt + public VlInt createVlInt(byte[] bytes){ + return new VlInt(bytes); + } + + // 传入一个BigInteger,将它解析成一个VlInt + public VlInt createVlIntByBigInteger(BigInteger bigInteger){ + return new VlInt(bigInteger); + } + + // 传入一个int,将它解析成一个VlInt + + // 传入一个long,将它解析成一个VlInt + + // 将vlint转为一个int输出:需要判断size是不是小于4(1 or 3) + public Integer getVlIntValue2Int(){ + if(this.SizeOfVarNumber()<4){ + return VlIntValue.intValue(); + } + return null; + } + + // 将vlint转为一个long输出:需要判断size是不是小于8(5) + public Long getVlIntValue2Long(){ + if(this.SizeOfVarNumber()<8){ + return VlIntValue.longValue(); + } + return null; + } + + // 将vlint转为一个biginteger输出:需要判断size是不是等于9(9) + public BigInteger getVlIntValue(){ + if(this.SizeOfVarNumber()>=9){ + return VlIntValue; + } + return null; + } + + // 判断vlint是否与某个int值相等 + public boolean isEqual(Integer vlint){ + return isEqual(vlint.intValue()); + } + public boolean isEqual(int vlint){ + if(VlIntValue.compareTo(new BigInteger(String.valueOf(vlint)))==0){ + return true; + } + return false; + } + + // 判断vlint是否与某个long值相等 + + // 将BigInteger转为byte[按照变长无符号整数方式转] + private byte[] bigInteger2vlintBytes(BigInteger bigInteger){ + byte[] vlintbytes; + if(SizeOfVarNumber(bigInteger)==1){ + vlintbytes=new byte[1]; + //... + }else if(SizeOfVarNumber(bigInteger)==3){ + vlintbytes=new byte[3]; + //... + }else if(SizeOfVarNumber(bigInteger)==5){ + vlintbytes=new byte[5]; + //... + }else{ + vlintbytes=new byte[9]; + //... + } + return vlintbytes; + } + + // 将变长无符号整数数组转为BigInteger + private BigInteger vlintBytes2bigInteger(byte[] vlIntBytes){ + BigInteger vlintValue=null; + if(vlIntBytes.length==1){ + + }else if(vlIntBytes.length==3){ + + }else if(vlIntBytes.length==5){ + + }else if(vlIntBytes.length==9){ + + }else{ + return null; + } + return vlintValue; + } + + // 测试 + public static void main(String[] args){ + BigInteger bigInteger=new BigInteger("3"); + + System.out.println(bigInteger); + } +} diff --git a/src/encoding/VlInt_V1.java b/src/encoding/VlInt_V1.java new file mode 100644 index 0000000..755e5b4 --- /dev/null +++ b/src/encoding/VlInt_V1.java @@ -0,0 +1,39 @@ +package encoding; + +import static java.lang.Math.pow; + +/* + * @Author: Wang Feng + * @Description:变长无符号整型,用于表示TLV中的T和L + * @Version: 1.0.0 + * @Date: 22:58 2021/3/1 + * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 + */ +public class VlInt_V1 { + + // 实际传输的数据 + private byte[] VlIntByte; + // 变长整数表示的真实数值: + // MIN1.0最大为(2^64-1) + private double VlIntValue; + + // 传入一个变长无符号字节数组byte[],将它解析成一个VlInt + + // 传入一个int,将它解析成一个VlInt + + // 将vlint转为一个int输出 + + /** + * 测量一个变长整型实际用几个字节表示 + * @return int + */ + public int SizeOfVarNumber(){ + if(VlIntValue<241){ + return 1; + }else if(VlIntValue