porting 1.4.4 rev. 1929, 1939 (SF# 3552680 et. al)

This commit is contained in:
Aleksandar Fabijanic
2012-08-23 04:27:50 +00:00
parent 91b3ca4421
commit ae45a2d311
6 changed files with 54 additions and 10 deletions

View File

@@ -118,9 +118,28 @@ int WebSocketImpl::sendBytes(const void* buffer, int length, int flags)
int WebSocketImpl::receiveBytes(void* buffer, int length, int)
{
char header[MAX_HEADER_LENGTH];
int n = _pStreamSocketImpl->receiveBytes(header, MAX_HEADER_LENGTH);
int n = _pStreamSocketImpl->receiveBytes(header, 2);
if (n == 1)
{
n += _pStreamSocketImpl->receiveBytes(header + 1, 1);
}
if (n == 2)
{
Poco::UInt8 lengthByte = static_cast<Poco::UInt8>(header[1]) & 0x7f;
if (lengthByte + 2 < MAX_HEADER_LENGTH)
{
n = _pStreamSocketImpl->receiveBytes(header + 2, lengthByte);
}
else
{
n = _pStreamSocketImpl->receiveBytes(header + 2, MAX_HEADER_LENGTH - 2);
}
}
else throw WebSocketException("Incomplete frame received", WebSocket::WS_ERR_INCOMPLETE_FRAME);
if (n > 0)
{
n += 2;
Poco::MemoryInputStream istr(header, n);
Poco::BinaryReader reader(istr, Poco::BinaryReader::NETWORK_BYTE_ORDER);
Poco::UInt8 flags;