JdwpPacket

public final class JdwpPacket
extends Object

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


Paket JDWP, yang berada di awal ByteBuffer di suatu tempat.

Hal ini memungkinkan kita membungkus "pointer" ke data dengan hasil decoding paket.

Tidak ada operasi di sini yang disinkronkan. Jika beberapa thread akan mengakses ByteBuffer yang sama, sinkronisasi eksternal akan diperlukan.

Gunakan konstruktor untuk membuat paket kosong, atau "findPacket()" untuk membungkus JdwpPacket di sekitar data yang ada.

Ringkasan

Konstanta

int JDWP_HEADER_LEN

Konstruktor publik

JdwpPacket(ByteBuffer buf)

Buat paket kosong baru, di "buf".

Metode publik

void consume()

Gunakan paket JDWP.

void copy(ByteBuffer into)

Fungsi bantuan untuk menyalin paket ke dalam buffer baru.

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

Selesaikan paket yang dibuat dengan newPacket().

int getId()

Menampilkan ID paket.

int getLength()

Menampilkan panjang paket.

static int getPacketLength(ByteBuffer buf)

Jika "buf" berisi JdwpPacket, 4 byte pertama adalah panjang paket.

ByteBuffer getPayload()

Menampilkan slice buffer byte, yang diposisikan setelah header JDWP ke awal header chunk.

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

Menampilkan "true" jika paket JDWP ini tidak memiliki data.

boolean isError()

Menampilkan "true" jika paket JDWP ini adalah respons dengan kode error bukan nol.

boolean isReply()

Menampilkan "true" jika paket JDWP ini diberi tag sebagai balasan.

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

"Pindahkan" data paket dari buffer yang kita gunakan ke buf di posisi saat ini.

void setPayload(ByteBuffer buf)

Ganti payload paket dengan buffer.

String toString()
void write(SocketChannel chan)

Tulis paket kami ke "chan".

Konstanta

JDWP_HEADER_LEN

public static final int JDWP_HEADER_LEN

Nilai Konstanta: 11 (0x0000000b)

Konstruktor publik

JdwpPacket

public JdwpPacket (ByteBuffer buf)

Buat paket kosong baru, di "buf".

Parameter
buf ByteBuffer

Metode publik

pakai

public void consume ()

Gunakan paket JDWP.

Saat masuk dan keluar, "posisi" berada di akhir data dalam buffer.

salin

public void copy (ByteBuffer into)

Fungsi bantuan untuk menyalin paket ke dalam buffer baru.

Parameter
into ByteBuffer

findPacket

public static JdwpPacket findPacket (ByteBuffer buf)

Parameter
buf ByteBuffer

Hasil
JdwpPacket

findPacketHeader

public static JdwpPacket findPacketHeader (ByteBuffer buf)

Parameter
buf ByteBuffer

Hasil
JdwpPacket

finishPacket

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

Selesaikan paket yang dibuat dengan newPacket().

Perintah ini selalu membuat paket perintah, dengan nomor seri berikutnya secara berurutan.

Kita harus menggunakan "payloadLength" sebagai argumen karena kita tidak dapat melihat posisi dalam "slice" yang ditampilkan oleh getPayload(). Kita dapat mengambilnya dari header chunk, tetapi boleh saja ada lebih dari satu chunk dalam paket JDWP.

Saat keluar, "position" mengarah ke akhir data.

Parameter
cmdSet int

cmd int

payloadLength int

getId

public int getId ()

Menampilkan ID paket. Untuk paket respons, hal ini memungkinkan kita mencocokkan respons dengan permintaan asli.

Hasil
int

getLength

public int getLength ()

Menampilkan panjang paket. Ini mencakup header, sehingga paket kosong berukuran 11 byte.

Hasil
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

Jika "buf" berisi JdwpPacket, 4 byte pertama adalah panjang paket. Fungsi bantuan ini membaca 4 byte pertama dan memvalidasi bahwa panjangnya setidaknya sebesar ukuran header JDWP.

Parameter
buf ByteBuffer: buffer yang diasumsikan berisi paket jdwp.

Hasil
int -1 jika panjang tidak valid, atau panjang paket.

getPayload

public ByteBuffer getPayload ()

Menampilkan slice buffer byte, yang diposisikan setelah header JDWP ke awal header chunk. Batas buffer akan ditetapkan ke ukuran payload jika ukurannya diketahui; jika ini adalah paket yang sedang dibuat, batas akan ditetapkan ke akhir buffer.

Tidak memeriksa paket sama sekali -- berfungsi pada buffer kosong.

Hasil
ByteBuffer

is

public boolean is (int cmdSet, 
                int cmd)

Parameter
cmdSet int

cmd int

Hasil
boolean

isEmpty

public boolean isEmpty ()

Menampilkan "true" jika paket JDWP ini tidak memiliki data.

Hasil
boolean

isError

public boolean isError ()

Menampilkan "true" jika paket JDWP ini adalah balasan dengan kode error bukan nol.

Hasil
boolean

isReply

public boolean isReply ()

Menampilkan "true" jika paket JDWP ini ditandai sebagai balasan.

Hasil
boolean

log

public void log (String action)

Parameter
action String

pindahkan

public void move (ByteBuffer buf)

"Pindahkan" data paket dari buffer yang kita gunakan ke buf di posisi saat ini.

Parameter
buf ByteBuffer

setPayload

public void setPayload (ByteBuffer buf)

Ganti payload paket dengan buffer. Posisi saat ini tidak berubah.

Parameter
buf ByteBuffer

toString

public String toString ()

Hasil
String

menulis

public void write (SocketChannel chan)

Tulis paket kami ke "chan".

Paket JDWP dimulai pada offset 0 dan berakhir pada mBuffer.position().

Parameter
chan SocketChannel