void DuktoProtocol::sendMetaData() { // Header // - N. entità (file, cartelle, ecc...) // - Dimensione totale // - Nome primo file // - Dimensione primo (e unico) file (-1 per una cartella) QByteArray header; qint64 tmp; // N. entità tmp = mFilesToSend->count(); header.append((char*) &tmp, sizeof(tmp)); // Dimensione totale mTotalSize = computeTotalSize(mFilesToSend); header.append((char*) &mTotalSize, sizeof(mTotalSize)); // Primo elemento header.append(nextElementHeader()); // Invio header mCurrentSocket->write(header); // Inizializzazione variabili mTotalSize += header.size(); mSentData = 0; mSentBuffer = 0; // Aggiornamento interfaccia utente updateStatus(); }
void DuktoProtocol::sendData(qint64 b) { QByteArray d; // Aggiornamento statistiche mSentData += b; updateStatus(); // Verifica se tutti i dati messi nel buffer // sono stati inviati mSentBuffer -= b; // Se ci sono altri dati da inviare, attendo // che vengano inviati if (mSentBuffer > 0) return; // Se si tratta di un invio testuale, butto dentro // tutto il testo if ((!mTextToSend.isEmpty()) && (mFilesToSend.at(mFileCounter - 1) == "___DUKTO___TEXT___")) { d.append(mTextToSend.toUtf8().data()); mCurrentSocket->write(d); mSentBuffer = d.size(); mTextToSend.clear(); return; } // Se il file corrente non è ancora terminato // invio una nuova parte del file if (mCurrentFile) d = mCurrentFile->read(10000); if (d.size() > 0) { mCurrentSocket->write(d); mSentBuffer = d.size(); return; } // Altrimenti chiudo il file e passo al prossimo d.append(nextElementHeader()); // Non ci sono altri file da inviare? if (d.size() == 0) { closeCurrentTransfer(); return; } // Invio l'header insime al primo chunk di file mTotalSize += d.size(); if (mCurrentFile) d.append(mCurrentFile->read(10000)); mCurrentSocket->write(d); mSentBuffer += d.size(); return; }
void DuktoProtocol::sendMetaData() { // Impostazione buffer di invio #if defined(Q_OS_WIN) int v = 49152; ::setsockopt(mCurrentSocket->socketDescriptor(), SOL_SOCKET, SO_SNDBUF, (char*)&v, sizeof(v)); #endif // Header // - N. entità (file, cartelle, ecc...) // - Dimensione totale // - Nome primo file // - Dimensione primo (e unico) file (-1 per una cartella) QByteArray header; qint64 tmp; // N. entità tmp = mFilesToSend.count(); header.append((char*) &tmp, sizeof(tmp)); // Dimensione totale mTotalSize = computeTotalSize(mFilesToSend); header.append((char*) &mTotalSize, sizeof(mTotalSize)); // Primo elemento header.append(nextElementHeader()); // Invio header mCurrentSocket->write(header); // Inizializzazione variabili mTotalSize += header.size(); mSentData = 0; mSentBuffer = 0; // Aggiornamento interfaccia utente updateStatus(); }