updated comments
[barrytmp.git] / src / protocol.cc
blobe6e7d9b0bd2dabc819a9de179bb93e9d5239d69f
1 ///
2 /// \file protocol.cc
3 /// USB Blackberry bulk protocol API
4 ///
6 /*
7 Copyright (C) 2005-2008, 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 BadSize bs(btohs(p->size), packet.GetSize(), requiredsize);
44 eout(bs.what());
45 eout(packet);
46 throw bs;
50 unsigned int GetSize(const Data &packet)
52 CheckSize(packet, 4);
54 // when packets are larger than 0xFFFF bytes, packet->size is no
55 // longer reliable, so we go with the Data class size
56 if( packet.GetSize() > 0xFFFF ) {
57 return packet.GetSize();
59 else {
60 const Packet *p = (const Packet *) packet.GetData();
61 return btohs(p->size);
65 }} // namespace Barry::Protocol