libutil++  1.9.3
 All Classes Functions Variables
Packet.cpp
1 /*
2 ** libutil++
3 ** $Id: Packet.cpp 1653 2016-02-28 19:54:59Z sella $
4 ** Copyright (c) 2011-2016 Digital Genesis, LLC. All Rights Reserved.
5 ** Released under the LGPL Version 2.1 License.
6 ** http://www.digitalgenesis.com
7 */
8 
9 static const char rcsid[] __attribute__((used)) = "$Id: Packet.cpp 1653 2016-02-28 19:54:59Z sella $";
10 
11 #include "Packet.h"
12 
13 using namespace sella::util;
14 
15 uint8_t Packet::csum(uint8_t *buf, int bytes) throw () {
16  uint16_t *buf16 = (uint16_t*) buf;
17  uint32_t sum;
18 
19  for (sum = 0; bytes > 0; bytes -= 2) {
20  sum += *buf16++;
21  }
22 
23  sum = (sum >> 16) + (sum & 0xffff);
24  sum += (sum >> 16);
25 
26  return ~sum;
27 }
28 
29 uint16_t Packet::csum(uint16_t *buf, int words) throw () {
30  uint32_t sum;
31 
32  for (sum = 0; words > 0; words--) {
33  sum += *buf++;
34  }
35 
36  sum = (sum >> 16) + (sum & 0xffff);
37  sum += (sum >> 16);
38 
39  return ~sum;
40 }
41 
42 /*
43 ** vim: noet ts=3 sw=3
44 */