1 #include "ClientReadBuffer.H"
2 #include "ClientChannel.H"
3 #include "util.H"
4
5
6
locateMessage(const unsigned char * start,const unsigned char * end,unsigned int & headerLength,unsigned int & dataLength,unsigned int & trailerLength)7 int ClientReadBuffer::locateMessage(const unsigned char *start,
8 const unsigned char *end,
9 unsigned int &headerLength,
10 unsigned int &dataLength,
11 unsigned int &trailerLength)
12 {
13 unsigned int size = end - start;
14
15 if (size < 4)
16 return 0;
17 if (firstMessage_)
18 {
19 if (size < 12)
20 return 0;
21 if (*start == 0x42)
22 bigEndian_ = 1;
23 else
24 bigEndian_ = 0;
25 channel_->setBigEndian(bigEndian_);
26 dataLength = 12 + RoundUp4(GetUINT(start + 6, bigEndian_)) +
27 RoundUp4(GetUINT(start + 8, bigEndian_));
28 }
29 else
30 {
31 dataLength = (GetUINT(start + 2, bigEndian_) << 2);
32 }
33
34 if (size < dataLength)
35 return 0;
36
37 firstMessage_ = 0;
38 headerLength = 0;
39 trailerLength = 0;
40 return 1;
41 }
42