JdwpPacket

public final class JdwpPacket
extends Object

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


Um pacote JDWP, localizado no início de um ByteBuffer em algum lugar.

Isso nos permite encapsular um "ponteiro" para os dados com os resultados da decodificação do pacote.

Nenhuma das operações aqui está sincronizada. Se várias linhas de execução acessarem os mesmos ByteBuffers, será necessária uma sincronização externa.

Use o construtor para criar um pacote vazio ou "findPacket()" para encapsular um JdwpPacket em torno de dados atuais.

Resumo

Constantes

int JDWP_HEADER_LEN

Construtores públicos

JdwpPacket(ByteBuffer buf)

Crie um pacote vazio em "buf".

Métodos públicos

void consume()

Consuma o pacote JDWP.

void copy(ByteBuffer into)

Função auxiliar para copiar o pacote em um novo buffer.

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

Conclui um pacote criado com newPacket().

int getId()

Retorna o ID do pacote.

int getLength()

Retorna o comprimento de um pacote.

static int getPacketLength(ByteBuffer buf)

Quando o "buf" contém JdwpPackets, os primeiros quatro bytes são o comprimento do pacote.

ByteBuffer getPayload()

Retorna uma fração do buffer de bytes, posicionada após o cabeçalho JDWP até o início do cabeçalho do bloco.

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

Retorna "true" se este pacote JDWP não tiver dados.

boolean isError()

Retorna "true" se este pacote JDWP for uma resposta com um código de erro diferente de zero.

boolean isReply()

Retorna "true" se este pacote JDWP estiver marcado como uma resposta.

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

"Mova" os dados do pacote para fora do buffer em que estamos e para buf na posição atual.

void setPayload(ByteBuffer buf)

Substitua a carga útil do pacote por um buffer.

String toString()
void write(SocketChannel chan)

Escreva nosso pacote em "chan".

Constantes

JDWP_HEADER_LEN

public static final int JDWP_HEADER_LEN

Valor da constante: 11 (0x0000000b)

Construtores públicos

JdwpPacket

public JdwpPacket (ByteBuffer buf)

Crie um pacote vazio em "buf".

Parâmetros
buf ByteBuffer

Métodos públicos

consume

public void consume ()

Consuma o pacote JDWP.

Na entrada e na saída, "position" está no final dos dados no buffer.

copiar

public void copy (ByteBuffer into)

Função auxiliar para copiar o pacote em um novo buffer.

Parâmetros
into ByteBuffer

findPacket

public static JdwpPacket findPacket (ByteBuffer buf)

Parâmetros
buf ByteBuffer

Retorna
JdwpPacket

findPacketHeader

public static JdwpPacket findPacketHeader (ByteBuffer buf)

Parâmetros
buf ByteBuffer

Retorna
JdwpPacket

finishPacket

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

Conclui um pacote criado com newPacket().

Isso sempre cria um pacote de comando com o próximo número de série na sequência.

Precisamos usar "payloadLength" como argumento porque não podemos ver a posição na "slice" retornada por getPayload(). Poderíamos extrair isso do cabeçalho do bloco, mas é legal que haja mais de um bloco em um pacote JDWP.

Ao sair, "position" aponta para o final dos dados.

Parâmetros
cmdSet int

cmd int

payloadLength int

getId

public int getId ()

Retorna o ID do pacote. Para um pacote de resposta, isso permite que a resposta seja correspondida à solicitação original.

Retorna
int

getLength

public int getLength ()

Retorna o comprimento de um pacote. Isso inclui o cabeçalho, então um pacote vazio tem 11 bytes de comprimento.

Retorna
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

Quando o "buf" contém JdwpPackets, os primeiros quatro bytes são o comprimento do pacote. Essa função auxiliar lê os primeiros quatro bytes e valida se o comprimento é pelo menos o tamanho do cabeçalho JDWP.

Parâmetros
buf ByteBuffer: um buffer que se supõe conter um pacote jdwp.

Retorna
int -1 se o comprimento for inválido. Caso contrário, o comprimento do pacote.

getPayload

public ByteBuffer getPayload ()

Retorna uma fração do buffer de bytes, posicionada após o cabeçalho JDWP até o início do cabeçalho do bloco. O limite do buffer será definido como o tamanho do payload se ele for conhecido. Se este for um pacote em construção, o limite será definido como o final do buffer.

Não examina o pacote e funciona em buffers vazios.

Retorna
ByteBuffer

is

public boolean is (int cmdSet, 
                int cmd)

Parâmetros
cmdSet int

cmd int

Retorna
boolean

isEmpty

public boolean isEmpty ()

Retorna "true" se este pacote JDWP não tiver dados.

Retorna
boolean

isError

public boolean isError ()

Retorna "true" se este pacote JDWP for uma resposta com um código de erro diferente de zero.

Retorna
boolean

isReply

public boolean isReply ()

Retorna "true" se este pacote JDWP estiver marcado como uma resposta.

Retorna
boolean

log

public void log (String action)

Parâmetros
action String

mover

public void move (ByteBuffer buf)

"Mova" os dados do pacote para fora do buffer em que estamos e para buf na posição atual.

Parâmetros
buf ByteBuffer

setPayload

public void setPayload (ByteBuffer buf)

Substitua a carga útil do pacote por um buffer. A posição atual não muda.

Parâmetros
buf ByteBuffer

toString

public String toString ()

Retorna
String

escrever

public void write (SocketChannel chan)

Escreva nosso pacote em "chan".

O pacote JDWP começa no deslocamento 0 e termina em mBuffer.position().

Parâmetros
chan SocketChannel