UDPTransport.smali

.class public Lorg/spongycastle/crypto/tls/UDPTransport;
.super Ljava/lang/Object;
.source "UDPTransport.java"

# interfaces
.implements Lorg/spongycastle/crypto/tls/DatagramTransport;


# static fields
.field protected static final MAX_IP_OVERHEAD:I = 0x54

.field protected static final MIN_IP_OVERHEAD:I = 0x14

.field protected static final UDP_OVERHEAD:I = 0x8


# instance fields
.field protected final receiveLimit:I

.field protected final sendLimit:I

.field protected final socket:Ljava/net/DatagramSocket;


# direct methods
.method public constructor <init>(Ljava/net/DatagramSocket;I)V
    .registers 5

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

    .line 20
    invoke-virtual {p1}, Ljava/net/DatagramSocket;->isBound()Z

    move-result v0

    if-eqz v0, :cond_f

    invoke-virtual {p1}, Ljava/net/DatagramSocket;->isConnected()Z

    move-result v0

    if-nez v0, :cond_17

    .line 22
    :cond_f
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "\'socket\' must be bound and connected"

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

    throw v0

    .line 25
    :cond_17
    iput-object p1, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->socket:Ljava/net/DatagramSocket;

    .line 29
    add-int/lit8 v0, p2, -0x14

    add-int/lit8 v0, v0, -0x8

    iput v0, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->receiveLimit:I

    .line 30
    add-int/lit8 v0, p2, -0x54

    add-int/lit8 v0, v0, -0x8

    iput v0, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->sendLimit:I

    .line 31
    return-void
.end method


# virtual methods
.method public close()V
    .registers 2

    .prologue
    .line 73
    iget-object v0, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->socket:Ljava/net/DatagramSocket;

    invoke-virtual {v0}, Ljava/net/DatagramSocket;->close()V

    .line 74
    return-void
.end method

.method public getReceiveLimit()I
    .registers 2

    .prologue
    .line 35
    iget v0, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->receiveLimit:I

    return v0
.end method

.method public getSendLimit()I
    .registers 2

    .prologue
    .line 41
    iget v0, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->sendLimit:I

    return v0
.end method

.method public receive([BIII)I
    .registers 7

    .prologue
    .line 47
    iget-object v0, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->socket:Ljava/net/DatagramSocket;

    invoke-virtual {v0, p4}, Ljava/net/DatagramSocket;->setSoTimeout(I)V

    .line 48
    new-instance v0, Ljava/net/DatagramPacket;

    invoke-direct {v0, p1, p2, p3}, Ljava/net/DatagramPacket;-><init>([BII)V

    .line 49
    iget-object v1, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->socket:Ljava/net/DatagramSocket;

    invoke-virtual {v1, v0}, Ljava/net/DatagramSocket;->receive(Ljava/net/DatagramPacket;)V

    .line 50
    invoke-virtual {v0}, Ljava/net/DatagramPacket;->getLength()I

    move-result v0

    return v0
.end method

.method public send([BII)V
    .registers 6

    .prologue
    .line 56
    invoke-virtual {p0}, Lorg/spongycastle/crypto/tls/UDPTransport;->getSendLimit()I

    move-result v0

    if-le p3, v0, :cond_e

    .line 63
    new-instance v0, Lorg/spongycastle/crypto/tls/TlsFatalAlert;

    const/16 v1, 0x50

    invoke-direct {v0, v1}, Lorg/spongycastle/crypto/tls/TlsFatalAlert;-><init>(S)V

    throw v0

    .line 66
    :cond_e
    new-instance v0, Ljava/net/DatagramPacket;

    invoke-direct {v0, p1, p2, p3}, Ljava/net/DatagramPacket;-><init>([BII)V

    .line 67
    iget-object v1, p0, Lorg/spongycastle/crypto/tls/UDPTransport;->socket:Ljava/net/DatagramSocket;

    invoke-virtual {v1, v0}, Ljava/net/DatagramSocket;->send(Ljava/net/DatagramPacket;)V

    .line 68
    return-void
.end method