void CGroupClient::cutMessageFromBuffer() { QByteArray rest; if (currentMessageLen == 0) { int index = buffer.indexOf(' '); if (index == -1) { print_debug(DEBUG_GROUP, "Incoming buffer contains broken message"); // zap the buffer in this case, and hope for the best buffer.clear(); return; } QByteArray len = buffer.left(index); currentMessageLen = len.toInt(); // print_debug(DEBUG_GROUP, "Incoming buffer length: %i, incoming message length %i", // buffer.size(), currentMessageLen); rest = buffer.right( buffer.size() - index - 1); buffer = rest; if (buffer.size() == currentMessageLen) cutMessageFromBuffer(); return; } // print_debug(DEBUG_GROUP, "cutting off one message case"); getParent()->incomingData(this, buffer.left(currentMessageLen)); rest = buffer.right( buffer.size() - currentMessageLen); buffer = rest; currentMessageLen = 0; }
void CGroupClient::cutMessageFromBuffer() { QByteArray rest; if (currentMessageLen == 0) { int index = buffer.indexOf(' '); QString len = buffer.left(index + 1); currentMessageLen = len.toInt(); // qDebug( "Incoming buffer length: %i, incoming message length %i", // buffer.size(), currentMessageLen); rest = buffer.right( buffer.size() - index - 1); buffer = rest; if (buffer.size() == currentMessageLen) cutMessageFromBuffer(); //printf("returning from cutMessageFromBuffer\r\n"); return; } // qDebug( "cutting off one message case"); getParent()->incomingData(this, buffer.left(currentMessageLen)); rest = buffer.right( buffer.size() - currentMessageLen); buffer = rest; currentMessageLen = 0; }
void CGroupClient::dataIncoming() { QByteArray message; QByteArray rest; // print_debug(DEBUG_GROUP, "Incoming Data [conn %i, IP: %s]", socketDescriptor(), // (const char *) peerAddress().toString().toLocal8Bit() ); QByteArray tmp = readAll(); buffer += tmp; // print_debug(DEBUG_GROUP, "RAW data buffer: %s", (const char *) buffer); while ( currentMessageLen < buffer.size()) { // print_debug(DEBUG_GROUP, "in data-receiving cycle, buffer %s", (const char *) buffer); cutMessageFromBuffer(); } }