Files
KLALB/src/org/kne/cloud/network/klalb/IPv6OverKLALBPacket.java
T
2025-11-15 11:08:16 +08:00

77 lines
1.8 KiB
Java

package org.kne.cloud.network.klalb;
import java.io.EOFException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import org.kne.cloud.network.ipv6.IPv6Packet;
public class IPv6OverKLALBPacket extends KLALBPacket {
private static final int HEADER_LENGTH=9;
@Override
public long getTotalLength() {
return HEADER_LENGTH+ipv6Packet.getTotalLength();
}
private IPv6Packet ipv6Packet;
public IPv6OverKLALBPacket(IPv6Packet ipv6Packet) {
super(IPV6OVERKLALB,HEADER_LENGTH);
klalbHeader.putLong((int) ipv6Packet.getTotalLength());
this.ipv6Packet=ipv6Packet;
}
public IPv6OverKLALBPacket() {
super(IPV6OVERKLALB,HEADER_LENGTH);
this.ipv6Packet=new IPv6Packet();
}
public IPv6OverKLALBPacket(ByteBuffer bb) {
super(bb,HEADER_LENGTH);
this.ipv6Packet=new IPv6Packet();
}
public IPv6Packet getIPv6Packet() {
return ipv6Packet;
}
/*@Override
public String toString() {
return "IPv6OverKLALBPacket "+ipv6Packet.getSourceAddress().getHostAddress()+"->"+ipv6Packet.getDestinationAddress().getHostAddress()+" type:"+ipv6Packet.getPayload().getProtocolNumber()+"["+getSize()+"]";
}*/
public long getSize() {
return ipv6Packet.getTotalLength();
}
@Override
public String toString() {
return "IPv6OverKLALBPacket [ipv6Packet=" + ipv6Packet + "]";
}
@Override
public void writeToChannel(WritableByteChannel dto) throws IOException {
klalbHeader.putLong(1, ipv6Packet.getTotalLength());
super.writeToChannel(dto);
ipv6Packet.writeToChannel(dto);
}
@Override
public void readFromChannel(ReadableByteChannel din,long length) throws IOException {
super.readFromChannel(din,length);
ipv6Packet.readFromChannel(din, klalbHeader.getLong(1));
}
}