00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef JDWPTRANSPORT_H
00013 #define JDWPTRANSPORT_H
00014
00015 #include "jni.h"
00016
00017 enum {
00018 JDWPTRANSPORT_VERSION_1_0 = 0x00010000
00019 };
00020
00021 #ifdef __cplusplus
00022 extern "C" {
00023 #endif
00024
00025 struct jdwpTransportNativeInterface_;
00026
00027 struct _jdwpTransportEnv;
00028
00029 #ifdef __cplusplus
00030 typedef _jdwpTransportEnv jdwpTransportEnv;
00031 #else
00032 typedef const struct jdwpTransportNativeInterface_ *jdwpTransportEnv;
00033 #endif
00034
00035
00036
00037
00038
00039 typedef enum {
00040 JDWPTRANSPORT_ERROR_NONE = 0,
00041 JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT = 103,
00042 JDWPTRANSPORT_ERROR_OUT_OF_MEMORY = 110,
00043 JDWPTRANSPORT_ERROR_INTERNAL = 113,
00044 JDWPTRANSPORT_ERROR_ILLEGAL_STATE = 201,
00045 JDWPTRANSPORT_ERROR_IO_ERROR = 202,
00046 JDWPTRANSPORT_ERROR_TIMEOUT = 203,
00047 JDWPTRANSPORT_ERROR_MSG_NOT_AVAILABLE = 204
00048 } jdwpTransportError;
00049
00050
00051
00052
00053
00054 typedef struct {
00055 unsigned int can_timeout_attach :1;
00056 unsigned int can_timeout_accept :1;
00057 unsigned int can_timeout_handshake :1;
00058 unsigned int reserved3 :1;
00059 unsigned int reserved4 :1;
00060 unsigned int reserved5 :1;
00061 unsigned int reserved6 :1;
00062 unsigned int reserved7 :1;
00063 unsigned int reserved8 :1;
00064 unsigned int reserved9 :1;
00065 unsigned int reserved10 :1;
00066 unsigned int reserved11 :1;
00067 unsigned int reserved12 :1;
00068 unsigned int reserved13 :1;
00069 unsigned int reserved14 :1;
00070 unsigned int reserved15 :1;
00071 } JDWPTransportCapabilities;
00072
00073
00074
00075
00076
00077
00078
00079
00080 enum {
00081 JDWPTRANSPORT_FLAGS_NONE = 0x0,
00082 JDWPTRANSPORT_FLAGS_REPLY = 0x80
00083 };
00084
00085 typedef struct {
00086 jint len;
00087 jint id;
00088 jbyte flags;
00089 jbyte cmdSet;
00090 jbyte cmd;
00091 jbyte *data;
00092 } jdwpCmdPacket;
00093
00094 typedef struct {
00095 jint len;
00096 jint id;
00097 jbyte flags;
00098 jshort errorCode;
00099 jbyte *data;
00100 } jdwpReplyPacket;
00101
00102 typedef struct {
00103 union {
00104 jdwpCmdPacket cmd;
00105 jdwpReplyPacket reply;
00106 } type;
00107 } jdwpPacket;
00108
00109
00110
00111
00112 typedef struct jdwpTransportCallback {
00113 void *(*alloc)(jint numBytes);
00114 void (*free)(void *buffer);
00115 } jdwpTransportCallback;
00116
00117 typedef jint (JNICALL *jdwpTransport_OnLoad_t)(JavaVM *jvm,
00118 jdwpTransportCallback *callback,
00119 jint version,
00120 jdwpTransportEnv** env);
00121
00122
00123
00124
00125
00126 struct jdwpTransportNativeInterface_ {
00127
00128 void *reserved1;
00129
00130
00131 jdwpTransportError (JNICALL *GetCapabilities)(jdwpTransportEnv* env,
00132 JDWPTransportCapabilities *capabilities_ptr);
00133
00134
00135 jdwpTransportError (JNICALL *Attach)(jdwpTransportEnv* env,
00136 const char* address,
00137 jlong attach_timeout,
00138 jlong handshake_timeout);
00139
00140
00141 jdwpTransportError (JNICALL *StartListening)(jdwpTransportEnv* env,
00142 const char* address,
00143 char** actual_address);
00144
00145
00146 jdwpTransportError (JNICALL *StopListening)(jdwpTransportEnv* env);
00147
00148
00149 jdwpTransportError (JNICALL *Accept)(jdwpTransportEnv* env,
00150 jlong accept_timeout,
00151 jlong handshake_timeout);
00152
00153
00154 jboolean (JNICALL *IsOpen)(jdwpTransportEnv* env);
00155
00156
00157 jdwpTransportError (JNICALL *Close)(jdwpTransportEnv* env);
00158
00159
00160 jdwpTransportError (JNICALL *ReadPacket)(jdwpTransportEnv* env,
00161 jdwpPacket *pkt);
00162
00163
00164 jdwpTransportError (JNICALL *WritePacket)(jdwpTransportEnv* env,
00165 const jdwpPacket* pkt);
00166
00167
00168 jdwpTransportError (JNICALL *GetLastError)(jdwpTransportEnv* env,
00169 char** error);
00170
00171 };
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182 struct _jdwpTransportEnv {
00183 const struct jdwpTransportNativeInterface_ *functions;
00184 #ifdef __cplusplus
00185
00186 jdwpTransportError GetCapabilities(JDWPTransportCapabilities *capabilities_ptr) {
00187 return functions->GetCapabilities(this, capabilities_ptr);
00188 }
00189
00190 jdwpTransportError Attach(const char* address, jlong attach_timeout,
00191 jlong handshake_timeout) {
00192 return functions->Attach(this, address, attach_timeout, handshake_timeout);
00193 }
00194
00195 jdwpTransportError StartListening(const char* address,
00196 char** actual_address) {
00197 return functions->StartListening(this, address, actual_address);
00198 }
00199
00200 jdwpTransportError StopListening(void) {
00201 return functions->StopListening(this);
00202 }
00203
00204 jdwpTransportError Accept(jlong accept_timeout, jlong handshake_timeout) {
00205 return functions->Accept(this, accept_timeout, handshake_timeout);
00206 }
00207
00208 jboolean IsOpen(void) {
00209 return functions->IsOpen(this);
00210 }
00211
00212 jdwpTransportError Close(void) {
00213 return functions->Close(this);
00214 }
00215
00216 jdwpTransportError ReadPacket(jdwpPacket *pkt) {
00217 return functions->ReadPacket(this, pkt);
00218 }
00219
00220 jdwpTransportError WritePacket(const jdwpPacket* pkt) {
00221 return functions->WritePacket(this, pkt);
00222 }
00223
00224 jdwpTransportError GetLastError(char** error) {
00225 return functions->GetLastError(this, error);
00226 }
00227
00228
00229 #endif
00230 };
00231
00232 #ifdef __cplusplus
00233 }
00234 #endif
00235
00236 #endif
00237