示例#1
0
    def settleCommitIncoming(self, msg):
        #TODO: receive token, and check it!

        log.log("Payer: received settleCommit -> committed")
        self.state = self.states.committed

        return self.__removeTimeouts() + \
        [
         messages.SetEvent(event=messages.SetEvent.events.paymentFinished)
        ]
示例#2
0
    def haveNoRouteOutgoing(self, transactionID, isPayerSide):
        self.state = self.states.cancelled

        return self.__removeTimeouts() + \
        [
        messages.OutboundMessage(localID = messages.payerLocalID, message = \
         messages.Cancel()
        ),
        messages.SetEvent(event=messages.SetEvent.events.paymentFinished)
        ]
示例#3
0
    def msg_receipt(self, msg):
        log.log("PayerLink: Received payment receipt")

        self.amount = msg.amount
        self.receipt = msg.receipt
        self.transactionID = msg.transactionID
        self.meetingPointID = msg.meetingPoints[
            0]  #TODO: more intelligent choice
        self.state = self.states.hasReceipt

        return [
            messages.SetEvent(event=messages.SetEvent.events.receiptReceived)
        ]
示例#4
0
    def msg_timeout(self, msg):
        if self.state == self.states.initial and msg.state == self.states.initial:
            #Receipt time-out
            log.log("Payer: receipt time-out -> cancelled")
            self.state = self.states.cancelled
            return self.__removeTimeouts() + \
            [
             messages.SetEvent(event=messages.SetEvent.events.receiptReceived)
            ]

        elif self.state == self.states.receivedRequestCommit and msg.state == self.states.receivedRequestCommit:
            #settleCommit time-out: assume settled anyway, since we've received the commit token
            log.log("Payer: settleCommit time-out -> committed")
            self.state = self.states.committed
            return self.__removeTimeouts() + \
            [
             messages.SetEvent(event=messages.SetEvent.events.paymentFinished)
            ]

        log.log("Payer: time-out of state %s no longer applicable: we are now in state %s" % \
         (msg.state, self.state))

        return []
示例#5
0
    def msg_cancel(self, msg):
        log.log("Payer: Cancel received")
        if self.state not in (self.states.confirmed,
                              self.states.hasPayerRoute):
            raise Exception(
             "msg_cancel should not be called in state %s" % \
              self.state
             )

        self.state = self.states.cancelled

        return self.__removeTimeouts() + \
        [
         messages.CancelRoute(transactionID=self.transactionID, isPayerSide=True),
         messages.SetEvent(event=messages.SetEvent.events.paymentFinished)
        ]
示例#6
0
    def settleRollbackOutgoing(self, msg):
        if self.state != self.states.locked:
            raise Exception(
             "settleRollbackOutgoing should not be called in state %s" % \
              self.state
             )

        log.log("Payer: received settleRollback -> cancelled")
        self.state = self.states.cancelled

        return self.__removeTimeouts() + \
        [
        messages.OutboundMessage(localID = messages.payerLocalID, message = \
         messages.Cancel()
        ),
        messages.SetEvent(event=messages.SetEvent.events.paymentFinished)
        ]
示例#7
0
    def msg_confirm(self, msg):
        log.log("PayerLink: Received confirm: %s" % str(msg.agreement))

        if self.state != self.states.hasReceipt:
            raise Exception(
             "msg_confirm should not be called in state %s" % \
              self.state
             )

        ret = []

        if msg.agreement:
            self.state = self.states.confirmed

            ret = \
            [
            messages.OutboundMessage(localID = messages.payerLocalID, message = \
             messages.Confirm(meetingPointID=self.meetingPointID)
            ),
            messages.MakeRoute( #This will start the transaction routing
             ID=messages.payerLocalID,
             routingContext=self.routingContext,
             amount=self.amount,
             transactionID=self.transactionID,
             startTime=None, #Will be received from the payee side
             endTime=None, #Will be received from the payee side
             meetingPointID=self.meetingPointID,
             isPayerSide=True
             )
            ]

        else:
            self.state = self.states.cancelled

            ret = self.__removeTimeouts() + \
            [
            messages.OutboundMessage(localID = messages.payerLocalID, message = \
             messages.Cancel()
            ),
            messages.SetEvent(event=messages.SetEvent.events.paymentFinished)
            ]

        return ret