void QMQTT::Network::onSocketReadReady() { quint8 header = 0; int bytesRemaining = 0; int bytesRead = 0; QDataStream in(_socket); QDataStream out(&_buffer); while(!_socket->atEnd()) { if(bytesRemaining == 0) { in >> header; bytesRemaining = readRemainingLength(in); } QByteArray data; data.resize(bytesRemaining); bytesRead = in.readRawData(data.data(), data.size()); bytesRemaining -= bytesRead; out.writeRawData(data.data(), bytesRead); if(bytesRemaining == 0) { _buffer.reset(); Frame frame(header, _buffer.buffer()); _buffer.buffer().clear(); emit received(frame); } }
void QMQTT::Network::onSocketReadReady() { while(!_socket->atEnd()) { if(_bytesRemaining == 0) { _socket->getChar(reinterpret_cast<char *>(&_header)); _bytesRemaining = readRemainingLength(); } QByteArray data = _socket->read(_bytesRemaining); _buffer.append(data); _bytesRemaining -= data.size(); if(_bytesRemaining == 0) { Frame frame(_header, _buffer); _buffer.clear(); emit received(frame); } } }
void QMQTT::SslNetwork::onSocketReadReady() { QIODevice *ioDevice = _socket->ioDevice(); while(!ioDevice->atEnd()) { if(_bytesRemaining == 0) { if (!ioDevice->getChar(reinterpret_cast<char *>(&_header))) { // malformed packet emit error(QAbstractSocket::OperationError); ioDevice->close(); return; } _bytesRemaining = readRemainingLength(); if (_bytesRemaining < 0) { // malformed remaining length emit error(QAbstractSocket::OperationError); ioDevice->close(); return; } } QByteArray data = ioDevice->read(_bytesRemaining); _buffer.append(data); _bytesRemaining -= data.size(); if(_bytesRemaining == 0) { Frame frame(_header, _buffer); _buffer.clear(); emit received(frame); } } }