--- rspfd.c.orig Thu Nov 2 12:18:50 2000 +++ rspfd.c Thu Nov 2 13:34:49 2000 @@ -530,7 +530,7 @@ * Check the RRH's checksum, with pseudo header and host byte order */ - if (rspf_check((unsigned char*)rrh, length, saddr ,daddr) != rrh->checksum && !wrong_version) { + if ((rspf_check((unsigned char*)rrh, length, saddr ,daddr)) && !wrong_version) { Notice("Bad checksum. Received %#3x ", rrh->checksum); rrh->checksum = 0; Notice("Required %#3x.\n", rspf_check((unsigned char*)rrh, length, saddr, daddr)); @@ -673,34 +673,34 @@ { unsigned long sum; unsigned short *sp; - int i; - sp = (unsigned short*)rh; + sp = (unsigned short *)rh; /* Zero the checksum */ sum = 0; /* Source address */ sum += (saddr & 0xffff); - sum += (saddr >> 16 ) & 0xffff; + sum += (saddr >> 16 ); sum += (daddr & 0xffff); - sum += (daddr >> 16) & 0xffff; + sum += (daddr >> 16); sum += IPPROTO_UDP; while (len > 1 ) { - sum += *(unsigned short*)rh++; + sum += *sp; + sp++; len -= 2; } /* If there is a left-over byte, add that */ - if (len > 0) - sum += *(unsigned char*)rh; + if (len == 1) + sum += *sp & 0xff; /* Fold 32-bit sum to 16 bits */ while (sum >> 16) sum = (sum & 0xffff) + (sum >> 16); - return (unsigned short)(~sum & 0xffff); + return (~(sum & 0xffff)); }