Esempio n. 1
0
 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])