Ejemplo n.º 1
0
            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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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()