JdwpPacket

public final class JdwpPacket
extends Object

java.lang.Object
   ↳ com.android.tradefed.device.server.jdwp.chunkhandler.JdwpPacket


Ein JDWP-Paket, das sich am Anfang eines ByteBuffer befindet.

So können wir einen „Zeiger“ auf die Daten mit den Ergebnissen der Paketdecodierung umschließen.

Keiner der Vorgänge hier wird synchronisiert. Wenn mehrere Threads auf dieselben ByteBuffers zugreifen, ist eine externe Synchronisierung erforderlich.

Verwenden Sie den Konstruktor, um ein leeres Paket zu erstellen, oder „findPacket()“, um ein JdwpPacket um vorhandene Daten zu umschließen.

Zusammenfassung

Konstanten

int JDWP_HEADER_LEN

Öffentliche Konstruktoren

JdwpPacket(ByteBuffer buf)

Erstellen Sie ein neues, leeres Paket in „buf“.

Öffentliche Methoden

void consume()

JDWP-Paket nutzen

void copy(ByteBuffer into)

Hilfsfunktion zum Kopieren des Pakets in einen neuen Puffer.

static JdwpPacket findPacket(ByteBuffer buf)
static JdwpPacket findPacketHeader(ByteBuffer buf)
void finishPacket(int cmdSet, int cmd, int payloadLength)

Schließt ein mit newPacket() erstelltes Paket ab.

int getId()

Gibt die ID des Pakets zurück.

int getLength()

Gibt die Länge eines Pakets zurück.

static int getPacketLength(ByteBuffer buf)

Wenn „buf“ JdwpPackets enthält, sind die ersten 4 Byte die Länge des Pakets.

ByteBuffer getPayload()

Gibt einen Ausschnitt des Byte-Puffers zurück, der hinter dem JDWP-Header bis zum Anfang des Chunk-Headers positioniert ist.

boolean is(int cmdSet, int cmd)
boolean isEmpty()

Gibt „true“ zurück, wenn dieses JDWP-Paket keine Daten enthält.

boolean isError()

Gibt „true“ zurück, wenn dieses JDWP-Paket eine Antwort mit einem Fehlercode ungleich null ist.

boolean isReply()

Gibt „true“ zurück, wenn dieses JDWP-Paket als Antwort gekennzeichnet ist.

void log(String action)
void move(ByteBuffer buf)

Verschiebe die Paketdaten aus dem Puffer, auf dem wir uns befinden, in „buf“ an der aktuellen Position.

void setPayload(ByteBuffer buf)

Ersetzen Sie die Nutzlast des Pakets durch einen Puffer.

String toString()
void write(SocketChannel chan)

Schreibe unser Paket an „chan“.

Konstanten

JDWP_HEADER_LEN

public static final int JDWP_HEADER_LEN

Konstanter Wert: 11 (0x0000000b)

Öffentliche Konstruktoren

JdwpPacket

public JdwpPacket (ByteBuffer buf)

Erstellen Sie ein neues, leeres Paket in „buf“.

Parameter
buf ByteBuffer

Öffentliche Methoden

aufnehmen

public void consume ()

JDWP-Paket nutzen

Beim Ein- und Ausstieg befindet sich „position“ am Ende der Daten im Puffer.

Kopieren

public void copy (ByteBuffer into)

Hilfsfunktion zum Kopieren des Pakets in einen neuen Puffer.

Parameter
into ByteBuffer

findPacket

public static JdwpPacket findPacket (ByteBuffer buf)

Parameter
buf ByteBuffer

Returns
JdwpPacket

findPacketHeader

public static JdwpPacket findPacketHeader (ByteBuffer buf)

Parameter
buf ByteBuffer

Returns
JdwpPacket

finishPacket

public void finishPacket (int cmdSet, 
                int cmd, 
                int payloadLength)

Schließt ein mit newPacket() erstelltes Paket ab.

Dadurch wird immer ein Befehlspaket mit der nächsten Seriennummer in der Sequenz erstellt.

Wir müssen „payloadLength“ als Argument verwenden, da wir die Position im von „getPayload()“ zurückgegebenen „slice“ nicht sehen können. Wir könnten sie aus dem Chunk-Header herauslesen, aber es ist zulässig, dass ein JDWP-Paket mehr als einen Chunk enthält.

Beim Beenden verweist „position“ auf das Ende der Daten.

Parameter
cmdSet int

cmd int

payloadLength int

getId

public int getId ()

Gibt die ID des Pakets zurück. Bei einem Antwortpaket können wir so die Antwort der ursprünglichen Anfrage zuordnen.

Returns
int

getLength

public int getLength ()

Gibt die Länge eines Pakets zurück. Dazu gehört auch der Header. Ein leeres Paket ist also 11 Byte lang.

Returns
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

Wenn „buf“ JdwpPackets enthält, sind die ersten 4 Byte die Länge des Pakets. Diese Hilfsfunktion liest die ersten 4 Byte und prüft, ob die Länge mindestens der Größe des JDWP-Headers entspricht.

Parameter
buf ByteBuffer: Ein Puffer, der ein JDWP-Paket enthält.

Returns
int -1, wenn die Länge ungültig ist, andernfalls die Länge des Pakets.

getPayload

public ByteBuffer getPayload ()

Gibt einen Ausschnitt des Byte-Puffers zurück, der hinter dem JDWP-Header bis zum Anfang des Chunk-Headers positioniert ist. Das Limit des Puffers wird auf die Größe der Nutzlast festgelegt, wenn die Größe bekannt ist. Wenn es sich um ein Paket handelt, das gerade erstellt wird, wird das Limit auf das Ende des Puffers festgelegt.

Das Paket wird überhaupt nicht untersucht – funktioniert mit leeren Puffern.

Returns
ByteBuffer

is

public boolean is (int cmdSet, 
                int cmd)

Parameter
cmdSet int

cmd int

Returns
boolean

isEmpty

public boolean isEmpty ()

Gibt „true“ zurück, wenn dieses JDWP-Paket keine Daten enthält.

Returns
boolean

isError

public boolean isError ()

Gibt „true“ zurück, wenn dieses JDWP-Paket eine Antwort mit einem Fehlercode ungleich null ist.

Returns
boolean

isReply

public boolean isReply ()

Gibt „true“ zurück, wenn dieses JDWP-Paket als Antwort gekennzeichnet ist.

Returns
boolean

log

public void log (String action)

Parameter
action String

übertragen

public void move (ByteBuffer buf)

Verschiebe die Paketdaten aus dem Puffer, auf dem wir uns befinden, in „buf“ an der aktuellen Position.

Parameter
buf ByteBuffer

setPayload

public void setPayload (ByteBuffer buf)

Ersetzen Sie die Nutzlast des Pakets durch einen Puffer. Die aktuelle Position bleibt unverändert.

Parameter
buf ByteBuffer

toString

public String toString ()

Returns
String

für mich

public void write (SocketChannel chan)

Schreibe unser Paket an „chan“.

Das JDWP-Paket beginnt bei Offset 0 und endet bei mBuffer.position().

Parameter
chan SocketChannel