PaymentSession.smali

.class public Lorg/bitcoinj/protocols/payments/PaymentSession;
.super Ljava/lang/Object;
.source "PaymentSession.java"


# static fields
.field private static executor:Lcom/google/common/util/concurrent/ad;


# instance fields
.field private params:Lorg/bitcoinj/core/NetworkParameters;

.field private paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

.field private paymentRequest:Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;

.field public final pkiVerificationData:Lorg/bitcoinj/protocols/payments/PaymentProtocol$PkiVerificationData;

.field private totalValue:Lorg/bitcoinj/core/Coin;


# direct methods
.method static constructor <clinit>()V
    .registers 1

    .prologue
    .line 70
    sget-object v0, Lorg/bitcoinj/utils/Threading;->THREAD_POOL:Lcom/google/common/util/concurrent/ad;

    sput-object v0, Lorg/bitcoinj/protocols/payments/PaymentSession;->executor:Lcom/google/common/util/concurrent/ad;

    return-void
.end method

.method public constructor <init>(Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;)V
    .registers 4

    .prologue
    .line 189
    const/4 v0, 0x1

    const/4 v1, 0x0

    invoke-direct {p0, p1, v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentSession;-><init>(Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;ZLorg/bitcoinj/crypto/TrustStoreLoader;)V

    .line 190
    return-void
.end method

.method public constructor <init>(Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;Z)V
    .registers 4

    .prologue
    .line 197
    const/4 v0, 0x0

    invoke-direct {p0, p1, p2, v0}, Lorg/bitcoinj/protocols/payments/PaymentSession;-><init>(Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;ZLorg/bitcoinj/crypto/TrustStoreLoader;)V

    .line 198
    return-void
.end method

.method public constructor <init>(Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;ZLorg/bitcoinj/crypto/TrustStoreLoader;)V
    .registers 6

    .prologue
    .line 205
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 74
    sget-object v0, Lorg/bitcoinj/core/Coin;->ZERO:Lorg/bitcoinj/core/Coin;

    iput-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->totalValue:Lorg/bitcoinj/core/Coin;

    .line 206
    if-eqz p3, :cond_19

    .line 207
    :goto_9
    invoke-direct {p0, p1}, Lorg/bitcoinj/protocols/payments/PaymentSession;->parsePaymentRequest(Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;)V

    .line 208
    if-eqz p2, :cond_2d

    .line 210
    :try_start_e
    invoke-interface {p3}, Lorg/bitcoinj/crypto/TrustStoreLoader;->getKeyStore()Ljava/security/KeyStore;

    move-result-object v0

    invoke-static {p1, v0}, Lorg/bitcoinj/protocols/payments/PaymentProtocol;->verifyPaymentRequestPki(Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;Ljava/security/KeyStore;)Lorg/bitcoinj/protocols/payments/PaymentProtocol$PkiVerificationData;

    move-result-object v0

    iput-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->pkiVerificationData:Lorg/bitcoinj/protocols/payments/PaymentProtocol$PkiVerificationData;
    :try_end_18
    .catch Ljava/io/IOException; {:try_start_e .. :try_end_18} :catch_1f
    .catch Ljava/security/KeyStoreException; {:try_start_e .. :try_end_18} :catch_26

    .line 219
    :goto_18
    return-void

    .line 206
    :cond_19
    new-instance p3, Lorg/bitcoinj/crypto/TrustStoreLoader$DefaultTrustStoreLoader;

    invoke-direct {p3}, Lorg/bitcoinj/crypto/TrustStoreLoader$DefaultTrustStoreLoader;-><init>()V

    goto :goto_9

    .line 211
    :catch_1f
    move-exception v0

    .line 212
    new-instance v1, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;

    invoke-direct {v1, v0}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;-><init>(Ljava/lang/Exception;)V

    throw v1

    .line 213
    :catch_26
    move-exception v0

    .line 214
    new-instance v1, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;

    invoke-direct {v1, v0}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;-><init>(Ljava/lang/Exception;)V

    throw v1

    .line 217
    :cond_2d
    const/4 v0, 0x0

    iput-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->pkiVerificationData:Lorg/bitcoinj/protocols/payments/PaymentProtocol$PkiVerificationData;

    goto :goto_18
.end method

.method public static createFromBitcoinUri(Lorg/bitcoinj/uri/BitcoinURI;)Lcom/google/common/util/concurrent/y;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Lorg/bitcoinj/uri/BitcoinURI;",
            ")",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentSession;",
            ">;"
        }
    .end annotation

    .prologue
    .line 92
    const/4 v0, 0x1

    const/4 v1, 0x0

    invoke-static {p0, v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentSession;->createFromBitcoinUri(Lorg/bitcoinj/uri/BitcoinURI;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;

    move-result-object v0

    return-object v0
.end method

.method public static createFromBitcoinUri(Lorg/bitcoinj/uri/BitcoinURI;Z)Lcom/google/common/util/concurrent/y;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Lorg/bitcoinj/uri/BitcoinURI;",
            "Z)",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentSession;",
            ">;"
        }
    .end annotation

    .prologue
    .line 105
    const/4 v0, 0x0

    invoke-static {p0, p1, v0}, Lorg/bitcoinj/protocols/payments/PaymentSession;->createFromBitcoinUri(Lorg/bitcoinj/uri/BitcoinURI;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;

    move-result-object v0

    return-object v0
.end method

.method public static createFromBitcoinUri(Lorg/bitcoinj/uri/BitcoinURI;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;
    .registers 6
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Lorg/bitcoinj/uri/BitcoinURI;",
            "Z",
            "Lorg/bitcoinj/crypto/TrustStoreLoader;",
            ")",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentSession;",
            ">;"
        }
    .end annotation

    .prologue
    .line 119
    invoke-virtual {p0}, Lorg/bitcoinj/uri/BitcoinURI;->getPaymentRequestUrl()Ljava/lang/String;

    move-result-object v0

    .line 120
    if-nez v0, :cond_1b

    .line 121
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "No payment request URL (r= parameter) in BitcoinURI "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL;-><init>(Ljava/lang/String;)V

    throw v0

    .line 123
    :cond_1b
    :try_start_1b
    new-instance v1, Ljava/net/URI;

    invoke-direct {v1, v0}, Ljava/net/URI;-><init>(Ljava/lang/String;)V

    invoke-static {v1, p1, p2}, Lorg/bitcoinj/protocols/payments/PaymentSession;->fetchPaymentRequest(Ljava/net/URI;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;
    :try_end_23
    .catch Ljava/net/URISyntaxException; {:try_start_1b .. :try_end_23} :catch_25

    move-result-object v0

    return-object v0

    .line 124
    :catch_25
    move-exception v0

    .line 125
    new-instance v1, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL;

    invoke-direct {v1, v0}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL;-><init>(Ljava/lang/Exception;)V

    throw v1
.end method

.method public static createFromUrl(Ljava/lang/String;)Lcom/google/common/util/concurrent/y;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/String;",
            ")",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentSession;",
            ">;"
        }
    .end annotation

    .prologue
    .line 137
    const/4 v0, 0x1

    const/4 v1, 0x0

    invoke-static {p0, v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentSession;->createFromUrl(Ljava/lang/String;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;

    move-result-object v0

    return-object v0
.end method

.method public static createFromUrl(Ljava/lang/String;Z)Lcom/google/common/util/concurrent/y;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/String;",
            "Z)",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentSession;",
            ">;"
        }
    .end annotation

    .prologue
    .line 149
    const/4 v0, 0x0

    invoke-static {p0, p1, v0}, Lorg/bitcoinj/protocols/payments/PaymentSession;->createFromUrl(Ljava/lang/String;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;

    move-result-object v0

    return-object v0
.end method

.method public static createFromUrl(Ljava/lang/String;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;
    .registers 5
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/String;",
            "Z",
            "Lorg/bitcoinj/crypto/TrustStoreLoader;",
            ")",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentSession;",
            ">;"
        }
    .end annotation

    .prologue
    .line 162
    if-nez p0, :cond_a

    .line 163
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL;

    const-string v1, "null paymentRequestUrl"

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL;-><init>(Ljava/lang/String;)V

    throw v0

    .line 165
    :cond_a
    :try_start_a
    new-instance v0, Ljava/net/URI;

    invoke-direct {v0, p0}, Ljava/net/URI;-><init>(Ljava/lang/String;)V

    invoke-static {v0, p1, p2}, Lorg/bitcoinj/protocols/payments/PaymentSession;->fetchPaymentRequest(Ljava/net/URI;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;
    :try_end_12
    .catch Ljava/net/URISyntaxException; {:try_start_a .. :try_end_12} :catch_14

    move-result-object v0

    return-object v0

    .line 166
    :catch_14
    move-exception v0

    .line 167
    new-instance v1, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL;

    invoke-direct {v1, v0}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentRequestURL;-><init>(Ljava/lang/Exception;)V

    throw v1
.end method

.method private static fetchPaymentRequest(Ljava/net/URI;ZLorg/bitcoinj/crypto/TrustStoreLoader;)Lcom/google/common/util/concurrent/y;
    .registers 5
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/net/URI;",
            "Z",
            "Lorg/bitcoinj/crypto/TrustStoreLoader;",
            ")",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentSession;",
            ">;"
        }
    .end annotation

    .prologue
    .line 172
    sget-object v0, Lorg/bitcoinj/protocols/payments/PaymentSession;->executor:Lcom/google/common/util/concurrent/ad;

    new-instance v1, Lorg/bitcoinj/protocols/payments/PaymentSession$1;

    invoke-direct {v1, p0, p1, p2}, Lorg/bitcoinj/protocols/payments/PaymentSession$1;-><init>(Ljava/net/URI;ZLorg/bitcoinj/crypto/TrustStoreLoader;)V

    invoke-interface {v0, v1}, Lcom/google/common/util/concurrent/ad;->b(Ljava/util/concurrent/Callable;)Lcom/google/common/util/concurrent/y;

    move-result-object v0

    return-object v0
.end method

.method private parsePaymentRequest(Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;)V
    .registers 8

    .prologue
    .line 383
    if-nez p1, :cond_11

    .line 384
    :try_start_2
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;

    const-string v1, "request cannot be null"

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;-><init>(Ljava/lang/String;)V

    throw v0
    :try_end_a
    .catch Lcom/google/protobuf/InvalidProtocolBufferException; {:try_start_2 .. :try_end_a} :catch_a

    .line 409
    :catch_a
    move-exception v0

    .line 410
    new-instance v1, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;

    invoke-direct {v1, v0}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;-><init>(Ljava/lang/Exception;)V

    throw v1

    .line 385
    :cond_11
    :try_start_11
    invoke-virtual {p1}, Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;->getPaymentDetailsVersion()I

    move-result v0

    const/4 v1, 0x1

    if-eq v0, v1, :cond_31

    .line 386
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidVersion;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Version 1 required. Received version "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {p1}, Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;->getPaymentDetailsVersion()I

    move-result v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidVersion;-><init>(Ljava/lang/String;)V

    throw v0

    .line 387
    :cond_31
    iput-object p1, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentRequest:Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;

    .line 388
    invoke-virtual {p1}, Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;->hasSerializedPaymentDetails()Z

    move-result v0

    if-nez v0, :cond_41

    .line 389
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;

    const-string v1, "No PaymentDetails"

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 390
    :cond_41
    invoke-static {}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->newBuilder()Lorg/bitcoin/protocols/payments/Protos$PaymentDetails$Builder;

    move-result-object v0

    invoke-virtual {p1}, Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;->getSerializedPaymentDetails()Lcom/google/protobuf/ByteString;

    move-result-object v1

    invoke-virtual {v0, v1}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails$Builder;->mergeFrom(Lcom/google/protobuf/ByteString;)Lcom/google/protobuf/AbstractMessage$Builder;

    move-result-object v0

    check-cast v0, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails$Builder;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails$Builder;->build()Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    move-result-object v0

    iput-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    .line 391
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    if-nez v0, :cond_61

    .line 392
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;

    const-string v1, "Invalid PaymentDetails"

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 393
    :cond_61
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->hasNetwork()Z

    move-result v0

    if-nez v0, :cond_8e

    .line 394
    invoke-static {}, Lorg/bitcoinj/params/MainNetParams;->get()Lorg/bitcoinj/params/MainNetParams;

    move-result-object v0

    iput-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    .line 397
    :goto_6f
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    if-nez v0, :cond_9b

    .line 398
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidNetwork;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Invalid network "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    iget-object v2, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v2}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getNetwork()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidNetwork;-><init>(Ljava/lang/String;)V

    throw v0

    .line 396
    :cond_8e
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getNetwork()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Lorg/bitcoinj/core/NetworkParameters;->fromPmtProtocolID(Ljava/lang/String;)Lorg/bitcoinj/core/NetworkParameters;

    move-result-object v0

    iput-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    goto :goto_6f

    .line 399
    :cond_9b
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getOutputsCount()I

    move-result v0

    if-gtz v0, :cond_ab

    .line 400
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidOutputs;

    const-string v1, "No outputs"

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidOutputs;-><init>(Ljava/lang/String;)V

    throw v0

    .line 401
    :cond_ab
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getOutputsList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :cond_b5
    :goto_b5
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_d8

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoin/protocols/payments/Protos$Output;

    .line 402
    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$Output;->hasAmount()Z

    move-result v2

    if-eqz v2, :cond_b5

    .line 403
    iget-object v2, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->totalValue:Lorg/bitcoinj/core/Coin;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$Output;->getAmount()J

    move-result-wide v4

    invoke-static {v4, v5}, Lorg/bitcoinj/core/Coin;->valueOf(J)Lorg/bitcoinj/core/Coin;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Coin;->add(Lorg/bitcoinj/core/Coin;)Lorg/bitcoinj/core/Coin;

    move-result-object v0

    iput-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->totalValue:Lorg/bitcoinj/core/Coin;

    goto :goto_b5

    .line 407
    :cond_d8
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    invoke-virtual {v0}, Lorg/bitcoinj/core/NetworkParameters;->hasMaxMoney()Z

    move-result v0

    if-eqz v0, :cond_f6

    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->totalValue:Lorg/bitcoinj/core/Coin;

    iget-object v1, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    invoke-virtual {v1}, Lorg/bitcoinj/core/NetworkParameters;->getMaxMoney()Lorg/bitcoinj/core/Coin;

    move-result-object v1

    invoke-virtual {v0, v1}, Lorg/bitcoinj/core/Coin;->compareTo(Lorg/bitcoinj/core/Coin;)I

    move-result v0

    if-lez v0, :cond_f6

    .line 408
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidOutputs;

    const-string v1, "The outputs are way too big."

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidOutputs;-><init>(Ljava/lang/String;)V

    throw v0
    :try_end_f6
    .catch Lcom/google/protobuf/InvalidProtocolBufferException; {:try_start_11 .. :try_end_f6} :catch_a

    .line 411
    :cond_f6
    return-void
.end method


# virtual methods
.method public getDate()Ljava/util/Date;
    .registers 7

    .prologue
    .line 254
    new-instance v0, Ljava/util/Date;

    iget-object v1, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v1}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getTime()J

    move-result-wide v2

    const-wide/16 v4, 0x3e8

    mul-long/2addr v2, v4

    invoke-direct {v0, v2, v3}, Ljava/util/Date;-><init>(J)V

    return-object v0
.end method

.method public getExpires()Ljava/util/Date;
    .registers 7

    .prologue
    .line 261
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->hasExpires()Z

    move-result v0

    if-eqz v0, :cond_17

    .line 262
    new-instance v0, Ljava/util/Date;

    iget-object v1, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v1}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getExpires()J

    move-result-wide v2

    const-wide/16 v4, 0x3e8

    mul-long/2addr v2, v4

    invoke-direct {v0, v2, v3}, Ljava/util/Date;-><init>(J)V

    .line 264
    :goto_16
    return-object v0

    :cond_17
    const/4 v0, 0x0

    goto :goto_16
.end method

.method public getMemo()Ljava/lang/String;
    .registers 2

    .prologue
    .line 237
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->hasMemo()Z

    move-result v0

    if-eqz v0, :cond_f

    .line 238
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getMemo()Ljava/lang/String;

    move-result-object v0

    .line 240
    :goto_e
    return-object v0

    :cond_f
    const/4 v0, 0x0

    goto :goto_e
.end method

.method public getMerchantData()[B
    .registers 2

    .prologue
    .line 289
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->hasMerchantData()Z

    move-result v0

    if-eqz v0, :cond_13

    .line 290
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getMerchantData()Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v0}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v0

    .line 292
    :goto_12
    return-object v0

    :cond_13
    const/4 v0, 0x0

    goto :goto_12
.end method

.method public getNetworkParameters()Lorg/bitcoinj/core/NetworkParameters;
    .registers 2

    .prologue
    .line 421
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    return-object v0
.end method

.method public getOutputs()Ljava/util/List;
    .registers 7
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "()",
            "Ljava/util/List",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentProtocol$Output;",
            ">;"
        }
    .end annotation

    .prologue
    .line 225
    new-instance v2, Ljava/util/ArrayList;

    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getOutputsCount()I

    move-result v0

    invoke-direct {v2, v0}, Ljava/util/ArrayList;-><init>(I)V

    .line 226
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getOutputsList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v3

    :goto_15
    invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_42

    invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoin/protocols/payments/Protos$Output;

    .line 227
    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$Output;->hasAmount()Z

    move-result v1

    if-eqz v1, :cond_40

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$Output;->getAmount()J

    move-result-wide v4

    invoke-static {v4, v5}, Lorg/bitcoinj/core/Coin;->valueOf(J)Lorg/bitcoinj/core/Coin;

    move-result-object v1

    .line 228
    :goto_2f
    new-instance v4, Lorg/bitcoinj/protocols/payments/PaymentProtocol$Output;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$Output;->getScript()Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v0}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v0

    invoke-direct {v4, v1, v0}, Lorg/bitcoinj/protocols/payments/PaymentProtocol$Output;-><init>(Lorg/bitcoinj/core/Coin;[B)V

    invoke-interface {v2, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    goto :goto_15

    .line 227
    :cond_40
    const/4 v1, 0x0

    goto :goto_2f

    .line 230
    :cond_42
    return-object v2
.end method

.method public getPayment(Ljava/util/List;Lorg/bitcoinj/core/Address;Ljava/lang/String;)Lorg/bitcoin/protocols/payments/Protos$Payment;
    .registers 7
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/util/List",
            "<",
            "Lorg/bitcoinj/core/Transaction;",
            ">;",
            "Lorg/bitcoinj/core/Address;",
            "Ljava/lang/String;",
            ")",
            "Lorg/bitcoin/protocols/payments/Protos$Payment;"
        }
    .end annotation

    .prologue
    .line 344
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->hasPaymentUrl()Z

    move-result v0

    if-eqz v0, :cond_3b

    .line 345
    invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :cond_c
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_30

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/Transaction;

    .line 346
    invoke-virtual {v0}, Lorg/bitcoinj/core/Transaction;->getParams()Lorg/bitcoinj/core/NetworkParameters;

    move-result-object v0

    iget-object v2, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    invoke-virtual {v0, v2}, Lorg/bitcoinj/core/NetworkParameters;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-nez v0, :cond_c

    .line 347
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidNetwork;

    iget-object v1, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    invoke-virtual {v1}, Lorg/bitcoinj/core/NetworkParameters;->getPaymentProtocolId()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidNetwork;-><init>(Ljava/lang/String;)V

    throw v0

    .line 348
    :cond_30
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->totalValue:Lorg/bitcoinj/core/Coin;

    invoke-virtual {p0}, Lorg/bitcoinj/protocols/payments/PaymentSession;->getMerchantData()[B

    move-result-object v1

    invoke-static {p1, v0, p2, p3, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocol;->createPaymentMessage(Ljava/util/List;Lorg/bitcoinj/core/Coin;Lorg/bitcoinj/core/Address;Ljava/lang/String;[B)Lorg/bitcoin/protocols/payments/Protos$Payment;

    move-result-object v0

    .line 350
    :goto_3a
    return-object v0

    :cond_3b
    const/4 v0, 0x0

    goto :goto_3a
.end method

.method public getPaymentDetails()Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;
    .registers 2

    .prologue
    .line 431
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    return-object v0
.end method

.method public getPaymentRequest()Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;
    .registers 2

    .prologue
    .line 426
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentRequest:Lorg/bitcoin/protocols/payments/Protos$PaymentRequest;

    return-object v0
.end method

.method public getPaymentUrl()Ljava/lang/String;
    .registers 2

    .prologue
    .line 280
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->hasPaymentUrl()Z

    move-result v0

    if-eqz v0, :cond_f

    .line 281
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getPaymentUrl()Ljava/lang/String;

    move-result-object v0

    .line 282
    :goto_e
    return-object v0

    :cond_f
    const/4 v0, 0x0

    goto :goto_e
.end method

.method public getSendRequest()Lorg/bitcoinj/wallet/SendRequest;
    .registers 9

    .prologue
    .line 299
    new-instance v1, Lorg/bitcoinj/core/Transaction;

    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    invoke-direct {v1, v0}, Lorg/bitcoinj/core/Transaction;-><init>(Lorg/bitcoinj/core/NetworkParameters;)V

    .line 300
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getOutputsList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v2

    :goto_11
    invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_38

    invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoin/protocols/payments/Protos$Output;

    .line 301
    new-instance v3, Lorg/bitcoinj/core/TransactionOutput;

    iget-object v4, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->params:Lorg/bitcoinj/core/NetworkParameters;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$Output;->getAmount()J

    move-result-wide v6

    invoke-static {v6, v7}, Lorg/bitcoinj/core/Coin;->valueOf(J)Lorg/bitcoinj/core/Coin;

    move-result-object v5

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$Output;->getScript()Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v0}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v0

    invoke-direct {v3, v4, v1, v5, v0}, Lorg/bitcoinj/core/TransactionOutput;-><init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/core/Coin;[B)V

    invoke-virtual {v1, v3}, Lorg/bitcoinj/core/Transaction;->addOutput(Lorg/bitcoinj/core/TransactionOutput;)Lorg/bitcoinj/core/TransactionOutput;

    goto :goto_11

    .line 302
    :cond_38
    invoke-static {v1}, Lorg/bitcoinj/wallet/SendRequest;->forTx(Lorg/bitcoinj/core/Transaction;)Lorg/bitcoinj/wallet/SendRequest;

    move-result-object v0

    iget-object v1, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0, v1}, Lorg/bitcoinj/wallet/SendRequest;->fromPaymentDetails(Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;)Lorg/bitcoinj/wallet/SendRequest;

    move-result-object v0

    return-object v0
.end method

.method public getValue()Lorg/bitcoinj/core/Coin;
    .registers 2

    .prologue
    .line 247
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->totalValue:Lorg/bitcoinj/core/Coin;

    return-object v0
.end method

.method public isExpired()Z
    .registers 5

    .prologue
    .line 271
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v0}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->hasExpires()Z

    move-result v0

    if-eqz v0, :cond_1b

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

    const-wide/16 v2, 0x3e8

    div-long/2addr v0, v2

    iget-object v2, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v2}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getExpires()J

    move-result-wide v2

    cmp-long v0, v0, v2

    if-lez v0, :cond_1b

    const/4 v0, 0x1

    :goto_1a
    return v0

    :cond_1b
    const/4 v0, 0x0

    goto :goto_1a
.end method

.method protected sendPayment(Ljava/net/URL;Lorg/bitcoin/protocols/payments/Protos$Payment;)Lcom/google/common/util/concurrent/y;
    .registers 5
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/net/URL;",
            "Lorg/bitcoin/protocols/payments/Protos$Payment;",
            ")",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentProtocol$Ack;",
            ">;"
        }
    .end annotation

    .prologue
    .line 356
    sget-object v0, Lorg/bitcoinj/protocols/payments/PaymentSession;->executor:Lcom/google/common/util/concurrent/ad;

    new-instance v1, Lorg/bitcoinj/protocols/payments/PaymentSession$2;

    invoke-direct {v1, p0, p1, p2}, Lorg/bitcoinj/protocols/payments/PaymentSession$2;-><init>(Lorg/bitcoinj/protocols/payments/PaymentSession;Ljava/net/URL;Lorg/bitcoin/protocols/payments/Protos$Payment;)V

    invoke-interface {v0, v1}, Lcom/google/common/util/concurrent/ad;->b(Ljava/util/concurrent/Callable;)Lcom/google/common/util/concurrent/y;

    move-result-object v0

    return-object v0
.end method

.method public sendPayment(Ljava/util/List;Lorg/bitcoinj/core/Address;Ljava/lang/String;)Lcom/google/common/util/concurrent/y;
    .registers 7
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/util/List",
            "<",
            "Lorg/bitcoinj/core/Transaction;",
            ">;",
            "Lorg/bitcoinj/core/Address;",
            "Ljava/lang/String;",
            ")",
            "Lcom/google/common/util/concurrent/y",
            "<",
            "Lorg/bitcoinj/protocols/payments/PaymentProtocol$Ack;",
            ">;"
        }
    .end annotation

    .prologue
    .line 319
    invoke-virtual {p0, p1, p2, p3}, Lorg/bitcoinj/protocols/payments/PaymentSession;->getPayment(Ljava/util/List;Lorg/bitcoinj/core/Address;Ljava/lang/String;)Lorg/bitcoin/protocols/payments/Protos$Payment;

    move-result-object v0

    .line 320
    if-nez v0, :cond_8

    .line 321
    const/4 v0, 0x0

    .line 330
    :goto_7
    return-object v0

    .line 322
    :cond_8
    invoke-virtual {p0}, Lorg/bitcoinj/protocols/payments/PaymentSession;->isExpired()Z

    move-result v1

    if-eqz v1, :cond_16

    .line 323
    new-instance v0, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$Expired;

    const-string v1, "PaymentRequest is expired"

    invoke-direct {v0, v1}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$Expired;-><init>(Ljava/lang/String;)V

    throw v0

    .line 326
    :cond_16
    :try_start_16
    new-instance v1, Ljava/net/URL;

    iget-object v2, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->paymentDetails:Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;

    invoke-virtual {v2}, Lorg/bitcoin/protocols/payments/Protos$PaymentDetails;->getPaymentUrl()Ljava/lang/String;

    move-result-object v2

    invoke-direct {v1, v2}, Ljava/net/URL;-><init>(Ljava/lang/String;)V
    :try_end_21
    .catch Ljava/net/MalformedURLException; {:try_start_16 .. :try_end_21} :catch_26

    .line 330
    invoke-virtual {p0, v1, v0}, Lorg/bitcoinj/protocols/payments/PaymentSession;->sendPayment(Ljava/net/URL;Lorg/bitcoin/protocols/payments/Protos$Payment;)Lcom/google/common/util/concurrent/y;

    move-result-object v0

    goto :goto_7

    .line 327
    :catch_26
    move-exception v0

    .line 328
    new-instance v1, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentURL;

    invoke-direct {v1, v0}, Lorg/bitcoinj/protocols/payments/PaymentProtocolException$InvalidPaymentURL;-><init>(Ljava/lang/Exception;)V

    throw v1
.end method

.method public verifyPki()Lorg/bitcoinj/protocols/payments/PaymentProtocol$PkiVerificationData;
    .registers 2

    .prologue
    .line 416
    iget-object v0, p0, Lorg/bitcoinj/protocols/payments/PaymentSession;->pkiVerificationData:Lorg/bitcoinj/protocols/payments/PaymentProtocol$PkiVerificationData;

    return-object v0
.end method