package com.netifera.platform.net.packets.util;
import java.nio.ByteBuffer;
public class PacketChecksum {
public static int rawSum(ByteBuffer buffer) {
int sum = 0;
while(buffer.remaining() > 1) {
sum += (((buffer.get() & 0xFF) << 8) | (buffer.get() & 0xFF) & 0xFFFF);
}
if(buffer.remaining() == 1) {
sum += ((buffer.get() & 0xFF) << 8);
}
return sum;
}
public static int reduceSum(int sum) {
while(sum > 0xFFFF) {
sum = (sum & 0xFFFF) + (sum >>> 16);
}
return (~sum & 0xFFFF);
}
public static int checksum(ByteBuffer buffer) {
return reduceSum( rawSum(buffer) );
}
}