92 lines
2.2 KiB
Java
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);
|
|
}
|
|
}
|