JdwpPacket

public final class JdwpPacket
extends Object

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


Paquet JDWP situé au début d'un ByteBuffer.

Cela nous permet d'encapsuler un "pointeur" vers les données avec les résultats du décodage du paquet.

Aucune des opérations ici n'est synchronisée. Si plusieurs threads accèdent aux mêmes ByteBuffers, une synchronisation externe sera nécessaire.

Utilisez le constructeur pour créer un paquet vide ou "findPacket()" pour encapsuler un JdwpPacket autour des données existantes.

Résumé

Constantes

int JDWP_HEADER_LEN

Constructeurs publics

JdwpPacket(ByteBuffer buf)

Créez un paquet vide dans "buf".

Méthodes publiques

void consume()

Consommez le paquet JDWP.

void copy(ByteBuffer into)

Fonction d'assistance permettant de copier le paquet dans un nouveau tampon.

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

Termine un paquet créé avec newPacket().

int getId()

Renvoie l'ID du paquet.

int getLength()

Renvoie la longueur d'un paquet.

static int getPacketLength(ByteBuffer buf)

Lorsque "buf" contient des JdwpPackets, les quatre premiers octets correspondent à la longueur du paquet.

ByteBuffer getPayload()

Renvoie une tranche du tampon d'octets, positionnée après l'en-tête JDWP et avant l'en-tête de bloc.

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

Renvoie "true" si ce paquet JDWP ne contient aucune donnée.

boolean isError()

Renvoie "true" si ce paquet JDWP est une réponse avec un code d'erreur non nul.

boolean isReply()

Renvoie "true" si ce paquet JDWP est marqué comme réponse.

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

"Déplace" les données de paquets hors du tampon sur lequel nous nous trouvons et dans buf à la position actuelle.

void setPayload(ByteBuffer buf)

Remplacez la charge utile du package par un tampon.

String toString()
void write(SocketChannel chan)

Écris notre paquet à "chan".

Constantes

JDWP_HEADER_LEN

public static final int JDWP_HEADER_LEN

Valeur constante : 11 (0x0000000b)

Constructeurs publics

JdwpPacket

public JdwpPacket (ByteBuffer buf)

Créez un paquet vide dans "buf".

Paramètres
buf ByteBuffer

Méthodes publiques

consommer

public void consume ()

Consommez le paquet JDWP.

À l'entrée et à la sortie, la "position" se trouve à la fin des données du tampon.

copier

public void copy (ByteBuffer into)

Fonction d'assistance permettant de copier le paquet dans un nouveau tampon.

Paramètres
into ByteBuffer

findPacket

public static JdwpPacket findPacket (ByteBuffer buf)

Paramètres
buf ByteBuffer

Renvoie
JdwpPacket

findPacketHeader

public static JdwpPacket findPacketHeader (ByteBuffer buf)

Paramètres
buf ByteBuffer

Renvoie
JdwpPacket

finishPacket

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

Termine un paquet créé avec newPacket().

Cette commande crée toujours un paquet de commandes, avec le numéro de série suivant dans la séquence.

Nous devons prendre "payloadLength" comme argument, car nous ne pouvons pas voir la position dans la "tranche" renvoyée par getPayload(). Nous pourrions l'extraire de l'en-tête du bloc, mais il est légal qu'il y ait plus d'un bloc dans un paquet JDWP.

À la sortie, "position" pointe vers la fin des données.

Paramètres
cmdSet int

cmd int

payloadLength int

getId

public int getId ()

Renvoie l'ID du paquet. Pour un paquet de réponse, cela nous permet de faire correspondre la réponse à la requête d'origine.

Renvoie
int

getLength

public int getLength ()

Renvoie la longueur d'un paquet. Cela inclut l'en-tête. Un paquet vide fait donc 11 octets.

Renvoie
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

Lorsque "buf" contient des JdwpPackets, les quatre premiers octets correspondent à la longueur du paquet. Cette fonction d'assistance lit les quatre premiers octets et vérifie que la longueur est au moins égale à la taille de l'en-tête JDWP.

Paramètres
buf ByteBuffer : un tampon censé contenir un paquet JDWP.

Renvoie
int -1 si la longueur n'est pas valide, sinon la longueur du paquet.

getPayload

public ByteBuffer getPayload ()

Renvoie une tranche du tampon d'octets, positionnée après l'en-tête JDWP et avant l'en-tête de bloc. La limite du tampon sera définie sur la taille de la charge utile si la taille est connue. S'il s'agit d'un paquet en cours de construction, la limite sera définie sur la fin du tampon.

N'examine pas du tout le paquet : fonctionne sur des tampons vides.

Renvoie
ByteBuffer

is

public boolean is (int cmdSet, 
                int cmd)

Paramètres
cmdSet int

cmd int

Renvoie
boolean

isEmpty

public boolean isEmpty ()

Renvoie "true" si ce paquet JDWP ne contient aucune donnée.

Renvoie
boolean

isError

public boolean isError ()

Renvoie "true" si ce paquet JDWP est une réponse avec un code d'erreur non nul.

Renvoie
boolean

isReply

public boolean isReply ()

Renvoie "true" si ce paquet JDWP est marqué comme réponse.

Renvoie
boolean

log

public void log (String action)

Paramètres
action String

déplacer

public void move (ByteBuffer buf)

"Déplace" les données de paquets hors du tampon sur lequel nous nous trouvons et dans buf à la position actuelle.

Paramètres
buf ByteBuffer

setPayload

public void setPayload (ByteBuffer buf)

Remplacez la charge utile du package par un tampon. La position actuelle reste inchangée.

Paramètres
buf ByteBuffer

toString

public String toString ()

Renvoie
String

à écrire

public void write (SocketChannel chan)

Écris notre paquet à "chan".

Le paquet JDWP commence au décalage 0 et se termine à mBuffer.position().

Paramètres
chan SocketChannel