void SelectDrawWidget::BlockedChanged(Draw *draw) { SetBlocked(draw->GetDrawNo(), draw->GetBlocked()); #ifdef __WXMSW__ m_draws_wdg->SetFocus(); #endif }
QNetworkReply* DownloadManager::Download(QString urlString) { emit SetBlocked(true); isFinish = false; download = manager->get(QNetworkRequest(QUrl(urlString))); setValue(0); QObject::connect(download, SIGNAL(downloadProgress(qint64,qint64)),this, SLOT(DisplayDownloadProgress(qint64,qint64))); while(isFinish!=true) { QTest::qWait(250); } if(download->error()) return NULL; return download; }
void WUploadThread::DoUpload() { PRINT("WUploadThread::DoUpload\n"); if (fShutdownFlag && *fShutdownFlag) // Do we need to interrupt? { ConnectTimer(); return; } // Still connected? if (!IsInternalThreadRunning()) { ConnectTimer(); return; } // Small files get to bypass queue if (IsLocallyQueued()) { if ( (fFile && (fFileSize >= gWin->fSettings->GetMinQueuedSize())) || IsManuallyQueued() ) { // not yet fForced = false; WUploadEvent *lq = new WUploadEvent(WUploadEvent::FileQueued); if (lq) { SendReply(lq); } return; } fForced = true; // Set this here to avoid duplicate call to DoUpload() } // Recheck if IP is ignored or not // if (gWin->IsIgnoredIP(fStrRemoteIP) && !IsBlocked()) { SetBlocked(true); } if (IsBlocked()) { WUploadEvent *wue = new WUploadEvent(WUploadEvent::FileBlocked); if (wue) { if (fTimeLeft != -1) wue->SetTime(fTimeLeft); SendReply(wue); } return; } if (fStartTime == 0) fStartTime = GetRunTime64(); if (fFile) { MessageRef uref(GetMessageFromPool(WTransfer::TransferFileData)); if (uref()) { // think about doing this in a dynamic way (depending on connection) double dpps = GetPacketSize() * 1024.0; uint32 bufferSize = lrint(dpps); ByteBufferRef buf = GetByteBufferFromPool(bufferSize); uint8 * scratchBuffer = buf()->GetBuffer(); if (scratchBuffer == NULL) { _nobuffer(); return; } int32 numBytes = 0; numBytes = fFile->ReadBlock32(scratchBuffer, bufferSize); if (numBytes > 0) { buf()->SetNumBytes(numBytes, true); // munge mode switch (fMungeMode) { case WTransfer::MungeModeNone: { uref()->AddInt32("mm", WTransfer::MungeModeNone); break; } case WTransfer::MungeModeXOR: { for (int32 x = 0; x < numBytes; x++) scratchBuffer[x] ^= 0xFF; uref()->AddInt32("mm", WTransfer::MungeModeXOR); break; } default: { break; } } if (uref()->AddFlat("data", buf) == B_OK) { // possibly do checksums here uref()->AddInt32("chk", CalculateFileChecksum(buf)); // a little paranoia, due to file-resumes not working.... (TCP should handle this BUT...) SendMessageToSessions(uref); // NOTE: RequestOutputQueuesDrainedNotification() can recurse, so we need to update the offset before // calling it! fCurrentOffset += numBytes; if (fTunneled) { SignalUpload(); } else { MessageRef drain(GetMessageFromPool()); if (drain()) qmtt->RequestOutputQueuesDrainedNotification(drain); } WUploadEvent *update = new WUploadEvent(WUploadEvent::FileDataSent); if (update) { update->SetOffset(fCurrentOffset); update->SetSize(fFileSize); update->SetSent(numBytes); if (fCurrentOffset >= fFileSize) { update->SetDone(true); // file done! update->SetFile(SimplifyPath(fFileUl)); if (gWin->fSettings->GetUploads()) { SystemEvent( gWin, tr("%1 has finished downloading %2.").arg( GetRemoteUser() ).arg( SimplifyPath(fFileUl) ) ); } } SendReply(update); } return; } else { _nobuffer(); return; } } if (numBytes <= 0) { NextFile(); SignalUpload(); return; } } } else { while (!fFile) { if (fUploads.GetNumItems() != 0) { // grab the ref and remove it from the list fUploads.RemoveHead(fCurrentRef); fFileUl = MakeUploadPath(fCurrentRef); #ifdef _DEBUG // <*****@*****.**> 20021023, 20030702 -- Add additional debug message WString wul(fFileUl); PRINT("WUploadThread::DoUpload: filePath = %S\n", wul.getBuffer()); #endif fFile = new WFile(); Q_CHECK_PTR(fFile); if (!fFile->Open(fFileUl, QIODevice::ReadOnly)) // probably doesn't exist { delete fFile; fFile = NULL; fCurFile++; continue; // onward } // got our file! fFileSize = fFile->Size(); fCurrentOffset = 0; // from the start if (fCurrentRef()->FindInt64("secret:offset", fCurrentOffset) == B_OK) { if (!fFile->Seek(fCurrentOffset)) // <*****@*****.**> 20021026 { fFile->Seek(0); // this can't fail :) (I hope) fCurrentOffset = 0; } } // copy the message in our current file ref MessageRef headRef = fCurrentRef.Clone(); if (headRef()) { headRef()->what = WTransfer::TransferFileHeader; headRef()->AddInt64("beshare:StartOffset", fCurrentOffset); SendMessageToSessions(headRef); } fCurFile++; // Reset statistics InitTransferRate(); InitTransferETA(); WUploadEvent *started = new WUploadEvent(WUploadEvent::FileStarted); if (started) { started->SetFile(SimplifyPath(fFileUl)); started->SetStart(fCurrentOffset); started->SetSize(fFileSize); #ifdef _DEBUG started->SetSession(fRemoteSessionID); #endif SendReply(started); } if (gWin->fSettings->GetUploads()) { SystemEvent( gWin, tr("%1 is downloading %2.").arg( GetRemoteUser() ).arg( SimplifyPath(fFileUl) ) ); } // nested call SignalUpload(); return; } else { PRINT("No more files!\n"); fWaitingForUploadToFinish = true; SetFinished(true); if (fTunneled) { _OutputQueuesDrained(); } else { MessageRef drain(GetMessageFromPool()); if (drain()) qmtt->RequestOutputQueuesDrainedNotification(drain); } break; } } } }
void WUploadThread::MessageReceived(const MessageRef & msg, const String & /* sessionID */) { PRINT("WUploadThread::MessageReceived\n"); switch (msg()->what) { case WTransfer::TransferCommandPeerID: { PRINT("WUpload::TransferCommandPeerID\n"); const char *id = NULL; if (msg()->FindString("beshare:FromSession", id) == B_OK) { fRemoteSessionID = QString::fromUtf8(id); { const char *name = NULL; if (msg()->FindString("beshare:FromUserName", name) == B_OK) { QString user = QString::fromUtf8(name); if ((user.isEmpty()) || (fRemoteUser == fRemoteSessionID)) fRemoteUser = GetUserName(fRemoteSessionID); else fRemoteUser = user; } else { fRemoteUser = GetUserName(fRemoteSessionID); } } if (gWin->IsIgnored(fRemoteSessionID, true)) { SetBlocked(true); } WUploadEvent *ui = new WUploadEvent(WUploadEvent::UpdateUI); if (ui) { // ui->SetSession(id); SendReply(ui); } } bool c = false; if (!fTunneled && msg()->FindBool("unishare:supports_compression", c) == B_OK) { SetCompression(6); } double dpps = GetPacketSize() * 1024.0; int32 pps = lrint(dpps); if ((msg()->FindInt32("unishare:preferred_packet_size", pps) == B_OK) && (pps < lrint(dpps))) SetPacketSize((double) pps / 1024.0); break; } case WTransfer::TransferFileList: { // TransferFileList(msg); WMessageEvent *wme = new WMessageEvent(msg); if (wme) { QApplication::postEvent(this, wme); } break; } } }
bool WUploadThread::InitSession() { PRINT("WUploadThread::InitSession\n"); ThreadWorkerSessionRef limit(new ThreadWorkerSession()); // First check if IP is blacklisted or ignored // if (gWin->IsIgnoredIP(fStrRemoteIP)) { SetBlocked(true); } if (gWin->IsBlackListedIP(fStrRemoteIP) && (gWin->fSettings->GetBLLimit() != WSettings::LimitNone)) { limit()->SetGateway(AbstractMessageIOGatewayRef(new MessageIOGateway())); SetRate(WSettings::ConvertToBytes(gWin->fSettings->GetBLLimit()), limit); } else if (gWin->fSettings->GetULLimit() != WSettings::LimitNone) { limit()->SetGateway(AbstractMessageIOGatewayRef(new MessageIOGateway())); SetRate(WSettings::ConvertToBytes(gWin->fSettings->GetULLimit()), limit); } if (fTunneled) { WUploadEvent *wue = new WUploadEvent(WUploadEvent::ConnectInProgress); if (wue) { SendReply(wue); } return true; } else if (fAccept) { // <*****@*****.**> 20021026 muscle::ip_address sRemoteIP = ResolveAddress(fStrRemoteIP); if (qmtt->AddNewConnectSession(sRemoteIP, (uint16)fPort, limit) != B_OK) { WUploadEvent *fail = new WUploadEvent(WUploadEvent::ConnectFailed); if (fail) { fail->SetError( QT_TR_NOOP( "Couldn't create new connect session!" ) ); SendReply(fail); } return false; } } else { if (qmtt->AddNewSession(fSocket, limit) != B_OK) { WUploadEvent *fail = new WUploadEvent(WUploadEvent::ConnectFailed); if (fail) { fail->SetError( QT_TR_NOOP( "Could not init session!" ) ); SendReply(fail); } return false; } } // // We should have a session created now // if (qmtt->StartInternalThread() == B_OK) { WUploadEvent *wue = new WUploadEvent(WUploadEvent::ConnectInProgress); if (wue) { SendReply(wue); } CTimer->start(60000, true); return true; } WUploadEvent *fail = new WUploadEvent(WUploadEvent::ConnectFailed); if (fail) { fail->SetError( QT_TR_NOOP( "Could not start internal thread!" ) ); SendReply(fail); } return false; }
void WUploadThread::BlockedTimer() { SetBlocked(false); fTimeLeft = 0; }
/* ** deliver_it ** Attempt to send a sequence of bytes to the connection. ** Returns ** ** < 0 Some fatal error occurred, (but not EWOULDBLOCK). ** This return is a request to close the socket and ** clean up the link. ** ** >= 0 No real error occurred, returns the number of ** bytes actually transferred. EWOULDBLOCK and other ** possibly similar conditions should be mapped to ** zero return. Upper level routine will have to ** decide what to do with those unwritten bytes... ** ** *NOTE* alarm calls have been preserved, so this should ** work equally well whether blocking or non-blocking ** mode is used... ** ** *NOTE* I nuked 'em. At the load of current ircd servers ** you can't run with stuff that blocks. And we don't. */ int deliver_it(aClient *cptr, char *str, int len) { int retval; aClient *acpt = cptr->listener; #ifdef DEBUGMODE writecalls++; #endif #ifdef VMS retval = netwrite(cptr->fd, str, len); #else if (IsDead(cptr) || (!IsServer(cptr) && !IsPerson(cptr) && !IsHandshake(cptr) #ifdef USE_SSL && !IsSSLHandshake(cptr) #endif && !IsUnknown(cptr))) { str[len] = '\0'; sendto_ops ("* * * DEBUG ERROR * * * !!! Calling deliver_it() for %s, status %d %s, with message: %s", cptr->name, cptr->status, IsDead(cptr) ? "DEAD" : "", str); return -1; } #ifdef USE_SSL if (cptr->flags & FLAGS_SSL) retval = ircd_SSL_write(cptr, str, len); else #endif retval = send(cptr->fd, str, len, 0); /* ** Convert WOULDBLOCK to a return of "0 bytes moved". This ** should occur only if socket was non-blocking. Note, that ** all is Ok, if the 'write' just returns '0' instead of an ** error and errno=EWOULDBLOCK. ** ** ...now, would this work on VMS too? --msa */ # ifndef _WIN32 if (retval < 0 && (errno == EWOULDBLOCK || errno == EAGAIN || errno == ENOBUFS)) # else if (retval < 0 && (WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAENOBUFS)) # endif { retval = 0; SetBlocked(cptr); } else if (retval > 0) { ClearBlocked(cptr); } #endif #ifdef DEBUGMODE if (retval < 0) { writeb[0]++; Debug((DEBUG_ERROR, "write error (%s) to %s", STRERROR(ERRNO), cptr->name)); } else if (retval == 0) writeb[1]++; else if (retval < 16) writeb[2]++; else if (retval < 32) writeb[3]++; else if (retval < 64) writeb[4]++; else if (retval < 128) writeb[5]++; else if (retval < 256) writeb[6]++; else if (retval < 512) writeb[7]++; else if (retval < 1024) writeb[8]++; else writeb[9]++; #endif if (retval > 0) { cptr->sendB += retval; me.sendB += retval; if (cptr->sendB > 1023) { cptr->sendK += (cptr->sendB >> 10); cptr->sendB &= 0x03ff; /* 2^10 = 1024, 3ff = 1023 */ }
void DownloadManager::FinishedDownload(QNetworkReply* reply) { isFinish = true; emit SetBlocked(false); QObject::disconnect(download, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(DisplayDownloadProgress(qint64,qint64))); }