def after_data_prep_send(ack = None): allData = self.data_buffer.read() self._close_data_buffer() msg = P2PMessage.P2PDataMessage(self.version) if self.version == P2P.Version.V1: msg.Header.Flags = P2P.Flags.Data msg.Header.AckSessionId = random.randint(50, sys.maxint) else: msg.Header.TFCombination = P2P.TFCombination.MsnObject | P2P.TFCombination.First msg.Header.PackageNumber = packNum msg.InnerBody = allData if self.version == P2P.Version.V1: log.info("Sending data message for (V1) %r", self) self.SendMessage(msg, success = lambda ack: self.OnTransferFinished()) else: log.info("Sending data message for (V2) %r", self) def after_data_send(ack = None): rak = P2PMessage.P2PMessage(self.version) rak.SetRAK() log.info("Sending RAK message for (V2). rak = %r, app = %r", rak, self) self.SendMessage(rak, success = lambda ack: self.OnTransferFinished()) self.SendMessage(msg, success = after_data_send)
def Start(self): if not super(P2PActivity, self).Start(): return False if not self.sending: return if not self.ActivityData: return self.ActivityData += u'\0' urlLength = len(self.ActivityData.encode('utf-16-le')) prepData = P2PMessage.P2PDataMessage(self.version) if self.version == P2P.Version.V1: header = '\x80\0\0\0' else: header = '\x80\x3f\x14\x05' data = ''+header data += struct.pack('<H', 8) data += struct.pack('<I', urlLength) data += self.ActivityData.encode('utf-16-le') prepData.InnerBody = urlData if self.version == P2P.Version.V2: prepData.Header.TFCombination = P2P.TFCombination.First self.SendMessage(prepData)
def Start(self): if not super(ObjectTransfer, self).Start(): return False # if self.Remote.DirectBridge is None: # log.error("Don't have a direct bridge (MSNObject)") # return False if self.sending: log.info("Starting send for %r", self) self.P2PSession.Bridge.packageNumber += 1 packNum = self.P2PSession.Bridge.packageNumber prepData = P2PMessage.P2PDataMessage(self.version) prepData.WritePreparationBytes() if self.version == P2P.Version.V2: prepData.Header.TFCombination = P2P.TFCombination.First def after_data_prep_send(ack = None): allData = self.data_buffer.read() self._close_data_buffer() msg = P2PMessage.P2PDataMessage(self.version) if self.version == P2P.Version.V1: msg.Header.Flags = P2P.Flags.Data msg.Header.AckSessionId = random.randint(50, sys.maxint) else: msg.Header.TFCombination = P2P.TFCombination.MsnObject | P2P.TFCombination.First msg.Header.PackageNumber = packNum msg.InnerBody = allData if self.version == P2P.Version.V1: log.info("Sending data message for (V1) %r", self) self.SendMessage(msg, success = lambda ack: self.OnTransferFinished()) else: log.info("Sending data message for (V2) %r", self) def after_data_send(ack = None): rak = P2PMessage.P2PMessage(self.version) rak.SetRAK() log.info("Sending RAK message for (V2). rak = %r, app = %r", rak, self) self.SendMessage(rak, success = lambda ack: self.OnTransferFinished()) self.SendMessage(msg, success = after_data_send) log.info("Sending data prep message for %r", self) self.SendMessage(prepData, after_send = after_data_prep_send) else: log.info("Starting receive for %r", self) self.data_buffer = io.BytesIO()