Files
KLALB/src/org/kne/cloud/network/klalb/KLALBInputStream.java
T
2024-01-30 16:54:09 +08:00

92 lines
2.2 KiB
Java

package org.kne.cloud.network.klalb;
import static org.kne.cloud.network.klalb.KLALBPacket.*;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StreamCorruptedException;
import java.net.Inet6Address;
public class KLALBInputStream extends DataInputStream {
public KLALBInputStream(InputStream in) throws IOException {
super(in);
byte[]b=new byte[5];
readFully(b);
String s=new String(b,"ascii");
if(!s.equals("KLALB")) {
throw new StreamCorruptedException("no KLALB format");
}
int bv=readInt();
int sv=readInt();
if(bv!=2)
throw new StreamCorruptedException("remote version is V"+bv+"."+sv+",not V2.0");
}
public KLALBPacket readPacket() throws IOException {
return readKLALBPacketFromStream(this);
}
public static KLALBPacket readKLALBPacketFromStream(DataInputStream in) throws IOException {
int type=in.read();
if(type==-1) {
return null;
}
KLALBPacket klp;
switch(type) {
case PING:klp=new PINGPacket();
klp.readFromStream(in);
return klp;
case PONG:
klp=new PONGPacket();
klp.readFromStream(in);
return klp;
case SYNT:
klp=new SYNTPacket();
klp.readFromStream(in);
return klp;
case SACKT:
klp=new SACKTPacket();
klp.readFromStream(in);
return klp;
case RST:
klp=new RSTPacket();
klp.readFromStream(in);
return klp;
case DATAT:
klp=new DATATPacket();
klp.readFromStream(in);
return klp;
case ACKT:
klp=new ACKTPacket();
klp.readFromStream(in);
return klp;
case VADDR:
klp=new VADDRPacket();
klp.readFromStream(in);
return klp;
case ADDLINES:
klp=new ADDLINESPacket();
klp.readFromStream(in);
return klp;
case NACKT:
klp=new NACKTPacket();
klp.readFromStream(in);
return klp;
case TEST:
klp=new TESTPacket();
klp.readFromStream(in);
return klp;
case VADDRACK:
klp=new VADDRACKPacket();
klp.readFromStream(in);
return klp;
case VADDRREQ:
klp=new VADDRREQPacket();
klp.readFromStream(in);
return klp;
}
throw new StreamCorruptedException("unknown package type:"+type);
}
}