void SshServer::slot_IncommingData() { QSslSocket* sslSocket = qobject_cast<QSslSocket*>(sender()); if( 0 == sslSocket ) return; logInfo( this, sslSocket->readAll(), true ); }
void SslServer::readyReadPrivate() { QSslSocket *socket = qobject_cast<QSslSocket*>(sender()); if (!socket) return; QByteArray *m_buffer = &m_buffer_hash[socket]; qint32 &m_size = m_size_hash[socket]; while (socket->bytesAvailable() > 0) { m_buffer->append(socket->readAll()); while ((m_size == 0 && m_buffer->size() >= 4) || (m_size > 0 && m_buffer->size() >= m_size)) { if (m_size == 0 && m_buffer->size() >= 4) { m_size = getValue<qint32>(m_buffer->mid(0, 4)); m_buffer->remove(0, 4); if (m_size < 0 || m_size > MAX_NETWORK_CHUNK_SIZE) { socket->abort(); return; } } if (m_size > 0 && m_buffer->size() >= m_size) { QByteArray data = m_buffer->mid(0, m_size); m_buffer->remove(0, m_size); m_size = 0; QHostAddress host = socket->peerAddress(); qintptr descriptor = socket->socketDescriptor(); PeerData pd; pd.data = data; pd.host = host; pd.descriptor = descriptor; QMetaObject::invokeMethod(this, "process", Qt::QueuedConnection, Q_ARG(PeerData, pd)); } } } }