def sendFileSlot(self, addr, fileToSend, other_tcp_port, isData): addr = convert_string(addr) if isData: fileToSend = str(fileToSend) ds = DataSenderThread.sendData(addr, other_tcp_port, fileToSend, getCoreLogger(), parent=self) else: fileToSend = str(fileToSend).decode("utf-8") ds = DataSenderThread.sendSingleFile(addr, other_tcp_port, fileToSend, getCoreLogger(), parent=self) ds.finished.connect(ds.deleteLater) ds.start()
def _processAckSlot(self, peerID, peerIP, value): try: answerDict = json.loads(value) if not type(answerDict) is dict: self.logger.warning(u"answerDict is no dict.") return except: self.logger.exception(u"Could not parse answer dict.") return if not u"id" in answerDict: self.logger.warning(u"answerDict does not contain transfer ID.") return if not u"port" in answerDict: self.logger.warning(u"answerDict does not contain port.") return transferID = answerDict[u"id"] port = answerDict[u"port"] outData = self._outgoing.get(transferID, None) if outData is None: self.logger.warning(u"Received ACK for transfer that I don't know of or that already timed out.") return elif type(outData) is DataSenderThread: self.logger.warning(u"Received ACK for transfer that is already running.") return targetID, paths, sendDict, _time = outData if targetID != peerID: self.logger.warning(u"Received ACK from peer that I wasn't sending to.") return outThread = DataSenderThread.send(peerIP, port, paths, sendDict, self.logger, parent=self) outThread.transferCanceled.connect(self._transferCanceled) outThread.errorOnTransfer.connect(self._removeUpload) outThread.successfullyTransferred.connect(self._removeUpload) outThread.finished.connect(outThread.deleteLater) outThread.setUserData((peerID, transferID)) self._outgoing[transferID] = outThread outThread.start() self.outgoingTransferStarted.emit(transferID, outThread)
def _sendFilesToPeerSlot(self, toSend, peerID, transferID=None): if transferID is None: isRetry = False transferID = self._getNextID() else: isRetry = True if type(toSend) in (str, unicode): toSend = [toSend] elif type(toSend) is not list: self.logger.error("toSend must be path of list of paths") return # TODO separate preparation phase sendDict = DataSenderThread.prepareSending(toSend, compression=self._compression) self._outgoing[transferID] = (peerID, toSend, sendDict, time()) self.startOutgoingTransfer.emit(transferID, peerID, toSend, self._downloadDir, sendDict[u"count"], sendDict[u"size"], isRetry) sendDict[u"id"] = transferID get_server().call("HELO_FT %s" % json.dumps(sendDict), peerIDs=[peerID])