Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "TCPIPchecksum.h"
00020
00021 #if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32) && !defined(__CYGWIN__) && !defined(_WIN64)
00022 #include <netinet/in.h>
00023 #endif
00024
00025 uint16_t TCPIPchecksum::_checksum(const void *addr, unsigned int count)
00026 {
00027 uint32_t sum = 0;
00028
00029 while (count > 1)
00030 {
00031 sum += *((const uint16_t *&)addr)++;
00032 if (sum & 0x80000000)
00033 sum = (sum & 0xFFFF) + (sum >> 16);
00034 count -= 2;
00035 }
00036
00037 if (count)
00038 sum += *(const uint8_t *)addr;
00039
00040 while (sum >> 16)
00041 sum = (sum & 0xFFFF) + (sum >> 16);
00042
00043 return (uint16_t)sum;
00044 }