JdwpPacket

public final class JdwpPacket
extends Object

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


ByteBuffer のどこかの先頭にある 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()

パケットの ID を返します。

int getLength()

パケットの長さを返します。

static int getPacketLength(ByteBuffer buf)

「buf」に JdwpPackets が含まれている場合、最初の 4 バイトはパケットの長さです。

ByteBuffer getPayload()

JDWP ヘッダーの後に位置するバイトバッファのスライスをチャンク ヘッダーの先頭に返します。

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

この JDWP パケットにデータがない場合は「true」を返します。

boolean isError()

この JDWP パケットがゼロ以外のエラーコードを含む返信である場合は「true」を返します。

boolean isReply()

この JDWP パケットが返信としてタグ付けされている場合は「true」を返します。

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

パブリック メソッド

consume

public void consume ()

JDWP パケットを消費します。

エントリと終了時に、「position」はバッファ内のデータの末尾にあります。

コピー

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() で作成されたパケットを終了します。

これにより、常にコマンド パケットが作成され、シーケンス内の次のシリアル番号が使用されます。

getPayload() から返された「スライス」の位置を確認できないため、「payloadLength」を引数として取得する必要があります。チャンク ヘッダーから取得することもできますが、JDWP パケットに複数のチャンクが存在することは合法です。

終了時に、「position」はデータの末尾を指します。

パラメータ
cmdSet int

cmd int

payloadLength int

getId

public int getId ()

パケットの ID を返します。返信パケットの場合、これにより返信を元のリクエストと照合できます。

戻り値
int

getLength

public int getLength ()

パケットの長さを返します。ヘッダーも含まれるため、空のパケットの長さは 11 バイトです。

戻り値
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

「buf」に JdwpPackets が含まれている場合、最初の 4 バイトはパケットの長さです。このヘルパー関数は最初の 4 バイトを読み取り、長さが JDWP ヘッダーのサイズ以上であることを検証します。

パラメータ
buf ByteBuffer: jdwp パケットを含むと想定されるバッファ。

戻り値
int 長さが無効な場合は -1、それ以外の場合はパケットの長さ。

getPayload

public ByteBuffer getPayload ()

JDWP ヘッダーの後に位置するバイトバッファのスライスをチャンク ヘッダーの先頭まで返します。サイズがわかっている場合は、バッファの上限がペイロードのサイズに設定されます。構築中のパケットの場合は、バッファの末尾に設定されます。

パケットをまったく調べません。空のバッファで動作します。

戻り値
ByteBuffer

is

public boolean is (int cmdSet, 
                int cmd)

パラメータ
cmdSet int

cmd int

戻り値
boolean

isEmpty

public boolean isEmpty ()

この JDWP パケットにデータがない場合は「true」を返します。

戻り値
boolean

isError

public boolean isError ()

この JDWP パケットがゼロ以外のエラーコードを含む返信である場合は「true」を返します。

戻り値
boolean

isReply

public boolean isReply ()

この JDWP パケットが返信としてタグ付けされている場合は「true」を返します。

戻り値
boolean

log

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