- build system tweaks for opensync-plugin, and added a buildgen.sh for it
[barry.git] / src / protocol.cc
blob74431ac821e1a89945d3700777eaa7b0d58b2231
1 ///
2 /// \file protocol.cc
3 /// USB Blackberry bulk protocol API
4 ///
6 /*
7 Copyright (C) 2005-2007, Net Direct Inc. (http://www.netdirect.ca/)
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
22 #include "protocol.h"
23 #include "protostructs.h"
24 #include "data.h"
25 #include "endian.h"
26 #include "error.h"
27 #include "debug.h"
29 #include <sstream>
31 namespace Barry { namespace Protocol {
33 void CheckSize(const Data &packet, size_t requiredsize)
35 const Packet *p = (const Packet *) packet.GetData();
37 // when packets are larger than 0xFFFF bytes, packet->size is no
38 // longer reliable, so we go with the Data class size
39 if( (btohs(p->size) != packet.GetSize() && packet.GetSize() <= 0xFFFF) ||
40 packet.GetSize() < requiredsize )
43 std::ostringstream oss;
44 oss << "Bad packet size. Packet: " << btohs(p->size)
45 << ". DataSize(): " << packet.GetSize()
46 << ". Required size: " << requiredsize;
47 eout(oss.str());
48 eout(packet);
49 throw Error(oss.str());
53 unsigned int GetSize(const Data &packet)
55 CheckSize(packet, 4);
57 // when packets are larger than 0xFFFF bytes, packet->size is no
58 // longer reliable, so we go with the Data class size
59 if( packet.GetSize() > 0xFFFF ) {
60 return packet.GetSize();
62 else {
63 const Packet *p = (const Packet *) packet.GetData();
64 return btohs(p->size);
68 }} // namespace Barry::Protocol