2 * @(#)jdwpTransport.h 1.7 03/12/19
\r
4 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
\r
5 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
\r
9 * Java Debug Wire Protocol Transport Service Provider Interface.
\r
12 #ifndef JDWPTRANSPORT_H
\r
13 #define JDWPTRANSPORT_H
\r
18 JDWPTRANSPORT_VERSION_1_0 = 0x00010000
\r
25 struct jdwpTransportNativeInterface_;
\r
27 struct _jdwpTransportEnv;
\r
30 typedef _jdwpTransportEnv jdwpTransportEnv;
\r
32 typedef const struct jdwpTransportNativeInterface_ *jdwpTransportEnv;
\r
33 #endif /* __cplusplus */
\r
36 * Errors. Universal errors with JVMTI/JVMDI equivalents keep the
\r
40 JDWPTRANSPORT_ERROR_NONE = 0,
\r
41 JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT = 103,
\r
42 JDWPTRANSPORT_ERROR_OUT_OF_MEMORY = 110,
\r
43 JDWPTRANSPORT_ERROR_INTERNAL = 113,
\r
44 JDWPTRANSPORT_ERROR_ILLEGAL_STATE = 201,
\r
45 JDWPTRANSPORT_ERROR_IO_ERROR = 202,
\r
46 JDWPTRANSPORT_ERROR_TIMEOUT = 203,
\r
47 JDWPTRANSPORT_ERROR_MSG_NOT_AVAILABLE = 204
\r
48 } jdwpTransportError;
\r
52 * Structure to define capabilities
\r
55 unsigned int can_timeout_attach :1;
\r
56 unsigned int can_timeout_accept :1;
\r
57 unsigned int can_timeout_handshake :1;
\r
58 unsigned int reserved3 :1;
\r
59 unsigned int reserved4 :1;
\r
60 unsigned int reserved5 :1;
\r
61 unsigned int reserved6 :1;
\r
62 unsigned int reserved7 :1;
\r
63 unsigned int reserved8 :1;
\r
64 unsigned int reserved9 :1;
\r
65 unsigned int reserved10 :1;
\r
66 unsigned int reserved11 :1;
\r
67 unsigned int reserved12 :1;
\r
68 unsigned int reserved13 :1;
\r
69 unsigned int reserved14 :1;
\r
70 unsigned int reserved15 :1;
\r
71 } JDWPTransportCapabilities;
\r
75 * Structures to define packet layout.
\r
77 * See: http://java.sun.com/j2se/1.5/docs/guide/jpda/jdwp-spec.html
\r
81 JDWPTRANSPORT_FLAGS_NONE = 0x0,
\r
82 JDWPTRANSPORT_FLAGS_REPLY = 0x80
\r
105 jdwpReplyPacket reply;
\r
110 * JDWP functions called by the transport.
\r
112 typedef struct jdwpTransportCallback {
\r
113 void *(*alloc)(jint numBytes); /* Call this for all allocations */
\r
114 void (*free)(void *buffer); /* Call this for all deallocations */
\r
115 } jdwpTransportCallback;
\r
117 typedef jint (JNICALL *jdwpTransport_OnLoad_t)(JavaVM *jvm,
\r
118 jdwpTransportCallback *callback,
\r
120 jdwpTransportEnv** env);
\r
124 /* Function Interface */
\r
126 struct jdwpTransportNativeInterface_ {
\r
130 /* 2 : Get Capabilities */
\r
131 jdwpTransportError (JNICALL *GetCapabilities)(jdwpTransportEnv* env,
\r
132 JDWPTransportCapabilities *capabilities_ptr);
\r
135 jdwpTransportError (JNICALL *Attach)(jdwpTransportEnv* env,
\r
136 const char* address,
\r
137 jlong attach_timeout,
\r
138 jlong handshake_timeout);
\r
140 /* 4: StartListening */
\r
141 jdwpTransportError (JNICALL *StartListening)(jdwpTransportEnv* env,
\r
142 const char* address,
\r
143 char** actual_address);
\r
145 /* 5: StopListening */
\r
146 jdwpTransportError (JNICALL *StopListening)(jdwpTransportEnv* env);
\r
149 jdwpTransportError (JNICALL *Accept)(jdwpTransportEnv* env,
\r
150 jlong accept_timeout,
\r
151 jlong handshake_timeout);
\r
154 jboolean (JNICALL *IsOpen)(jdwpTransportEnv* env);
\r
157 jdwpTransportError (JNICALL *Close)(jdwpTransportEnv* env);
\r
159 /* 9: ReadPacket */
\r
160 jdwpTransportError (JNICALL *ReadPacket)(jdwpTransportEnv* env,
\r
163 /* 10: Write Packet */
\r
164 jdwpTransportError (JNICALL *WritePacket)(jdwpTransportEnv* env,
\r
165 const jdwpPacket* pkt);
\r
167 /* 11: GetLastError */
\r
168 jdwpTransportError (JNICALL *GetLastError)(jdwpTransportEnv* env,
\r
175 * Use inlined functions so that C++ code can use syntax such as
\r
176 * env->Attach("mymachine:5000", 10*1000, 0);
\r
178 * rather than using C's :-
\r
180 * (*env)->Attach(env, "mymachine:5000", 10*1000, 0);
\r
182 struct _jdwpTransportEnv {
\r
183 const struct jdwpTransportNativeInterface_ *functions;
\r
186 jdwpTransportError GetCapabilities(JDWPTransportCapabilities *capabilities_ptr) {
\r
187 return functions->GetCapabilities(this, capabilities_ptr);
\r
190 jdwpTransportError Attach(const char* address, jlong attach_timeout,
\r
191 jlong handshake_timeout) {
\r
192 return functions->Attach(this, address, attach_timeout, handshake_timeout);
\r
195 jdwpTransportError StartListening(const char* address,
\r
196 char** actual_address) {
\r
197 return functions->StartListening(this, address, actual_address);
\r
200 jdwpTransportError StopListening(void) {
\r
201 return functions->StopListening(this);
\r
204 jdwpTransportError Accept(jlong accept_timeout, jlong handshake_timeout) {
\r
205 return functions->Accept(this, accept_timeout, handshake_timeout);
\r
208 jboolean IsOpen(void) {
\r
209 return functions->IsOpen(this);
\r
212 jdwpTransportError Close(void) {
\r
213 return functions->Close(this);
\r
216 jdwpTransportError ReadPacket(jdwpPacket *pkt) {
\r
217 return functions->ReadPacket(this, pkt);
\r
220 jdwpTransportError WritePacket(const jdwpPacket* pkt) {
\r
221 return functions->WritePacket(this, pkt);
\r
224 jdwpTransportError GetLastError(char** error) {
\r
225 return functions->GetLastError(this, error);
\r
229 #endif /* __cplusplus */
\r
234 #endif /* __cplusplus */
\r
236 #endif /* JDWPTRANSPORT_H */
\r