JdwpPacket

public final class JdwpPacket
extends Object

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


Пакет JDWP, находящийся где-то в начале ByteBuffer.

Это позволяет нам обернуть «указатель» на данные результатами декодирования пакета.

Ни одна из операций здесь не синхронизирована. Если несколько потоков будут обращаться к одним и тем же байтовым буферам, потребуется внешняя синхронизация.

Используйте конструктор для создания пустого пакета или «findPacket()» для обертывания существующих данных в JdwpPacket.

Краткое содержание

Константы

int JDWP_HEADER_LEN

Публичные конструкторы

JdwpPacket (ByteBuffer buf)

Создайте новый пустой пакет в «buf».

Публичные методы

void consume ()

Использовать пакет JDWP.

void copy (ByteBuffer into)

Вспомогательная функция для копирования пакета в новый буфер.

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

Завершить пакет, созданный с помощью newPacket().

int getId ()

Верните идентификатор пакета.

int getLength ()

Возвращает длину пакета.

static int getPacketLength (ByteBuffer buf)

Если «buf» содержит JdwpPackets, первые 4 байта представляют собой длину пакета.

ByteBuffer getPayload ()

Возвращает фрагмент буфера байтов, расположенный после заголовка JDWP до начала заголовка фрагмента.

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

Возвращает «истина», если в этом пакете JDWP нет данных.

boolean isError ()

Возвращает «истина», если этот пакет JDWP является ответом с ненулевым кодом ошибки.

boolean isReply ()

Возвращает «истина», если этот пакет JDWP помечен как ответ.

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

«Перемещаем» пакетные данные из буфера, в котором мы сидим, в buf в текущей позиции.

void setPayload (ByteBuffer buf)

Заменить полезную нагрузку пакета буфером.

String toString ()
void write (SocketChannel chan)

Записываем наш пакет в "chan".

Константы

JDWP_HEADER_LEN

public static final int JDWP_HEADER_LEN

Постоянное значение: 11 (0x0000000b)

Публичные конструкторы

JdwpPacket

public JdwpPacket (ByteBuffer buf)

Создайте новый пустой пакет в «buf».

Параметры
buf ByteBuffer

Публичные методы

потреблять

public void consume ()

Использовать пакет JDWP.

При входе и выходе «позиция» находится в конце данных в буфере.

копия

public void copy (ByteBuffer into)

Вспомогательная функция для копирования пакета в новый буфер.

Параметры
into ByteBuffer

findPacket

public static JdwpPacket findPacket (ByteBuffer buf)

Параметры
buf ByteBuffer

Возврат
JdwpPacket

findPacketHeader

public static JdwpPacket findPacketHeader (ByteBuffer buf)

Параметры
buf ByteBuffer

Возврат
JdwpPacket

finishPacket

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

Завершить пакет, созданный с помощью newPacket().

При этом всегда создается командный пакет со следующим порядковым номером.

Нам приходится принимать "payloadLength" в качестве аргумента, поскольку мы не видим позицию в "срезе", возвращаемом getPayload(). Мы могли бы извлечь её из заголовка фрагмента, но в пакете JDWP может быть несколько фрагментов.

На выходе «позиция» указывает на конец данных.

Параметры
cmdSet int

cmd int

payloadLength int

получитьId

public int getId ()

Возвращает идентификатор пакета. Для ответного пакета это позволяет сопоставить ответ с исходным запросом.

Возврат
int

getLength

public int getLength ()

Возвращает длину пакета. Включая заголовок, поэтому пустой пакет имеет длину 11 байт.

Возврат
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

Если «buf» содержит JdwpPackets, первые 4 байта представляют собой длину пакета. Эта вспомогательная функция считывает первые 4 байта и проверяет, что длина не меньше размера заголовка JDWP.

Параметры
buf ByteBuffer : буфер, предположительно содержащий пакет jdwp.

Возврат
int -1, если длина недействительна, в противном случае — длина пакета.

получитьполезную нагрузку

public ByteBuffer getPayload ()

Возвращает фрагмент байтового буфера, расположенный после заголовка JDWP до начала заголовка фрагмента. Предел буфера будет установлен равным размеру полезной нагрузки, если он известен; если пакет находится в стадии формирования, предел будет установлен равным концу буфера.

Не проверяет пакет вообще — работает с пустыми буферами.

Возврат
ByteBuffer

является

public boolean is (int cmdSet, 
                int cmd)

Параметры
cmdSet int

cmd int

Возврат
boolean

isEmpty

public boolean isEmpty ()

Возвращает «истина», если в этом пакете JDWP нет данных.

Возврат
boolean

isError

public boolean isError ()

Возвращает «истина», если этот пакет JDWP является ответом с ненулевым кодом ошибки.

Возврат
boolean

isReply

public boolean isReply ()

Возвращает «истина», если этот пакет JDWP помечен как ответ.

Возврат
boolean

бревно

public void log (String action)

Параметры
action String

двигаться

public void move (ByteBuffer buf)

«Перемещаем» пакетные данные из буфера, в котором мы сидим, в buf в текущей позиции.

Параметры
buf ByteBuffer

setPayload

public void setPayload (ByteBuffer buf)

Заменить полезную нагрузку пакета буфером. Текущая позиция не изменилась.

Параметры
buf ByteBuffer

toString

public String toString ()

Возврат
String

писать

public void write (SocketChannel chan)

Записываем наш пакет в "chan".

Пакет JDWP начинается со смещения 0 и заканчивается в mBuffer.position().

Параметры
chan SocketChannel