// Richiesta connessione TCP in ingresso void DuktoProtocol::newIncomingConnection() { // Verifica presenza connessione pendente if (!mTcpServer->hasPendingConnections()) return; // Recupero connessione QTcpSocket *s = mTcpServer->nextPendingConnection(); // Se sto già ricevendo o inviando, rifiuto la connessione if (mIsReceiving || mIsSending) { s->close(); return; } // Aggiornamento interfaccia grafica receiveFileStart(s->peerAddress().toString()); // Impostazione socket TCP corrente mCurrentSocket = s; // Attesa header della connessione (timeout 10 sec) if (!s->waitForReadyRead(10000)) { // Non ho ricevuto l'header della connessione, chiudo mCurrentSocket->close(); delete mCurrentSocket; mCurrentSocket = NULL; return; } // Registrazione gestori eventi socket connect(mCurrentSocket, SIGNAL(readyRead()), this, SLOT(readNewData()), Qt::DirectConnection); connect(mCurrentSocket, SIGNAL(disconnected()), this, SLOT(closedConnectionTmp()), Qt::QueuedConnection); // Inizializzazione variabili mIsReceiving = true; mTotalReceivedData = 0; mElementSize = -1; mReceivedFiles = new QStringList(); mRootFolderName = ""; mRootFolderRenamed = ""; mReceivingText = false; mRecvStatus = FILENAME; // -- Lettura header generale -- // Numero entità da ricevere mCurrentSocket->read((char*) &mElementsToReceiveCount, sizeof(qint64)); // Dimensione totale mCurrentSocket->read((char*) &mTotalSize, sizeof(qint64)); // Inizio lettura dati sui file readNewData(); }
// Richiesta connessione TCP in ingresso void DuktoProtocol::newIncomingConnection() { // Recieve connection QTcpSocket* s = mTcpServer->nextPendingConnection(); if(s == NULL) return; // If we are already recieving or sending // Pending header connection (timeout 10 sec) if ((mIsReceiving | mIsSending) || !s->waitForReadyRead(10000)) { s->close(); delete s; return; } // Update GUI receiveFileStart(s->peerAddress().toString()); // set current TCP socket mCurrentSocket = s; // Register socket's event handlers connect(mCurrentSocket, SIGNAL(readyRead()), this, SLOT(readNewData()), Qt::DirectConnection); connect(mCurrentSocket, SIGNAL(disconnected()), this, SLOT(closedConnectionTmp()), Qt::QueuedConnection); // Initialize variables mIsReceiving = true; mTotalReceivedData = 0; mElementSize = -1; mReceivedFiles = new QStringList(); mRootFolderName.clear(); mRootFolderRenamed.clear(); mReceivingText = false; mRecvStatus = FILENAME; // -- Reading General header -- // Entities number to receive mCurrentSocket->read((char*) &mElementsToReceiveCount, sizeof(qint64)); // total size mCurrentSocket->read((char*) &mTotalSize, sizeof(qint64)); // Start reading data on file readNewData(); }