Can someone tell me if this works for a checksum routine?
Thanks
Code:LOCAL u_short nic_internet_checksum( /* _FUNC */ u_short *pAddr, int len ) { int nLeft = len; int sum = 0; u_short *w = pAddr; u_short answer; while (nLeft > 1) { sum += *w++; nLeft -= 2; if (sum > 1073741824) { sum = (sum >> 16) + (sum & 0xffff); } } if (nLeft == 1) sum += 0 | ((*(u_char *) w) << 8); sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); answer = sum; return (~answer & 0xffff); }




Reply With Quote