JdwpPacket

public final class JdwpPacket
extends Object

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


Paquete JDWP, ubicado al comienzo de un ByteBuffer en algún lugar.

Esto nos permite encapsular un "puntero" a los datos con los resultados de la decodificación del paquete.

Ninguna de las operaciones aquí está sincronizada. Si varios subprocesos accederán a los mismos ByteBuffers, se requerirá una sincronización externa.

Usa el constructor para crear un paquete vacío o "findPacket()" para encapsular un JdwpPacket alrededor de datos existentes.

Resumen

Constantes

int JDWP_HEADER_LEN

Constructores públicos

JdwpPacket(ByteBuffer buf)

Crea un paquete nuevo y vacío en "buf".

Métodos públicos

void consume()

Consume el paquete JDWP.

void copy(ByteBuffer into)

Función auxiliar para copiar el paquete en un búfer nuevo.

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

Finaliza un paquete creado con newPacket().

int getId()

Devuelve el ID del paquete.

int getLength()

Devuelve la longitud de un paquete.

static int getPacketLength(ByteBuffer buf)

Cuando "buf" contiene JdwpPackets, los primeros 4 bytes son la longitud del paquete.

ByteBuffer getPayload()

Devuelve un segmento del búfer de bytes, ubicado después del encabezado de JDWP y hasta el inicio del encabezado del fragmento.

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

Devuelve "true" si este paquete JDWP no tiene datos.

boolean isError()

Devuelve "true" si este paquete JDWP es una respuesta con un código de error distinto de cero.

boolean isReply()

Devuelve "true" si este paquete JDWP está etiquetado como respuesta.

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

"Mueve" los datos del paquete del búfer en el que estamos y colócalos en buf en la posición actual.

void setPayload(ByteBuffer buf)

Reemplaza la carga útil del paquete por un búfer.

String toString()
void write(SocketChannel chan)

Escribe nuestro paquete en "chan".

Constantes

JDWP_HEADER_LEN

public static final int JDWP_HEADER_LEN

Valor constante: 11 (0x0000000b)

Constructores públicos

JdwpPacket

public JdwpPacket (ByteBuffer buf)

Crea un paquete nuevo y vacío en "buf".

Parámetros
buf ByteBuffer

Métodos públicos

consume

public void consume ()

Consume el paquete JDWP.

Al entrar y salir, la "posición" se encuentra al final de los datos en el búfer.

texto

public void copy (ByteBuffer into)

Función auxiliar para copiar el paquete en un búfer nuevo.

Parámetros
into ByteBuffer

findPacket

public static JdwpPacket findPacket (ByteBuffer buf)

Parámetros
buf ByteBuffer

Muestra
JdwpPacket

findPacketHeader

public static JdwpPacket findPacketHeader (ByteBuffer buf)

Parámetros
buf ByteBuffer

Muestra
JdwpPacket

finishPacket

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

Finaliza un paquete creado con newPacket().

Esto siempre crea un paquete de comandos, con el siguiente número de serie en secuencia.

Tenemos que tomar "payloadLength" como argumento porque no podemos ver la posición en el "slice" que devuelve getPayload(). Podríamos extraerlo del encabezado del fragmento, pero es legal que haya más de un fragmento en un paquete JDWP.

Al salir, "position" apunta al final de los datos.

Parámetros
cmdSet int

cmd int

payloadLength int

getId

public int getId ()

Devuelve el ID del paquete. En el caso de un paquete de respuesta, esto nos permite hacer coincidir la respuesta con la solicitud original.

Muestra
int

getLength

public int getLength ()

Devuelve la longitud de un paquete. Esto incluye el encabezado, por lo que un paquete vacío tiene 11 bytes de longitud.

Muestra
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

Cuando "buf" contiene JdwpPackets, los primeros 4 bytes son la longitud del paquete. Esta función auxiliar lee los primeros 4 bytes y valida que la longitud sea al menos el tamaño del encabezado de JDWP.

Parámetros
buf ByteBuffer: Es un búfer que se supone que contiene un paquete JDWP.

Muestra
int Devuelve -1 si la longitud no es válida; de lo contrario, devuelve la longitud del paquete.

getPayload

public ByteBuffer getPayload ()

Devuelve un segmento del búfer de bytes, ubicado después del encabezado de JDWP y hasta el inicio del encabezado del fragmento. El límite del búfer se establecerá en el tamaño de la carga útil si se conoce el tamaño. Si se trata de un paquete en construcción, el límite se establecerá en el final del búfer.

No examina el paquete en absoluto; funciona en búferes vacíos.

Muestra
ByteBuffer

is

public boolean is (int cmdSet, 
                int cmd)

Parámetros
cmdSet int

cmd int

Muestra
boolean

isEmpty

public boolean isEmpty ()

Devuelve "true" si este paquete JDWP no tiene datos.

Muestra
boolean

isError

public boolean isError ()

Devuelve "true" si este paquete JDWP es una respuesta con un código de error distinto de cero.

Muestra
boolean

isReply

public boolean isReply ()

Devuelve "true" si este paquete JDWP está etiquetado como respuesta.

Muestra
boolean

log

public void log (String action)

Parámetros
action String

transferir

public void move (ByteBuffer buf)

"Mueve" los datos del paquete del búfer en el que estamos y colócalos en buf en la posición actual.

Parámetros
buf ByteBuffer

setPayload

public void setPayload (ByteBuffer buf)

Reemplaza la carga útil del paquete por un búfer. La posición actual no cambió.

Parámetros
buf ByteBuffer

toString

public String toString ()

Muestra
String

a escribir

public void write (SocketChannel chan)

Escribe nuestro paquete en "chan".

El paquete JDWP comienza en el desplazamiento 0 y termina en mBuffer.position().

Parámetros
chan SocketChannel