NetworkPackets.IPPacket.GenerateChecksum C# (CSharp) Method

GenerateChecksum() public static method

Generates an 16-bit IP (UDP, TCP) checksum based upon header and optional extra memory blocks placed into args.
public static GenerateChecksum ( MemBlock header ) : ushort
header MemBlock The Header to base the checksum on.
return ushort
    public static ushort GenerateChecksum(MemBlock header, params Object[] args) {
      int value = 0;
      int length = header.Length;

      for(int i = 0; i < length; i+=2) {
        byte first = header[i];
        byte second =  (length == i + 1) ? (byte) 0 : header[i+1];
        value += second + (first << 8);
      }

      for(int j = 0; j < args.Length; j++) {
        MemBlock tmp = (MemBlock) args[j];
        length = tmp.Length;
        for(int i = 0; i < length; i+=2) {
          byte first = tmp[i];
          byte second =  (length == i + 1) ? (byte) 0 : tmp[i+1];
          value += second + (first << 8);
        }
      }

      while(value >> 16 > 0) {
        value = (value & 0xFFFF) + (value >> 16);
      }

      return (ushort) (~value & 0xFFFF);
    }

Usage Example

Ejemplo n.º 1
0
        public IcmpPacket(Types type, short id, short seq_num)
        {
            Type           = type;
            Identifier     = id;
            SequenceNumber = seq_num;
            Code           = (byte)0;

            byte[] msg  = new byte[64];
            Random rand = new Random();

            rand.NextBytes(msg);
            msg[0] = (byte)type;
            msg[1] = Code;
            msg[2] = (byte)0;
            msg[3] = (byte)0;


            NumberSerializer.WriteShort(Identifier, msg, 4);
            NumberSerializer.WriteShort(SequenceNumber, msg, 6);

            short checksum = (short)IPPacket.GenerateChecksum(MemBlock.Reference(msg));

            NumberSerializer.WriteShort(checksum, msg, 2);

            _icpacket = MemBlock.Reference(msg);
            _packet   = MemBlock.Reference(msg);
        }
All Usage Examples Of NetworkPackets.IPPacket::GenerateChecksum