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 |