package org.kne.cloud.network.klalb; import static org.kne.cloud.network.klalb.KLALBPacket.*; 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 synchronized KLALBPacket readPacket() throws IOException { int type=read(); if(type==-1) { throw new EOFException(); } KLALBPacket klp; switch(type) { case PING:klp=new PINGPacket(); klp.readFromStream(this); return klp; case PONG: klp=new PONGPacket(); klp.readFromStream(this); return klp; case SYNT: klp=new SYNTPacket(); klp.readFromStream(this); return klp; case SACKT: klp=new SACKTPacket(); klp.readFromStream(this); return klp; case RST: klp=new RSTPacket(); klp.readFromStream(this); return klp; case DATAT: klp=new DATATPacket(); klp.readFromStream(this); return klp; case ACKT: klp=new ACKTPacket(); klp.readFromStream(this); return klp; case VADDR: klp=new VADDRPacket(); klp.readFromStream(this); return klp; case LINES: klp=new LINESPacket(); klp.readFromStream(this); return klp; } throw new StreamCorruptedException("unknown package type:"+type); } }