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