Home | History | Annotate | Download | only in jni-headers
      1 /*
      2  * %W% %E%
      3  *
      4  * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
      5  * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
      6  */
      7 
      8 /*
      9  * Java Debug Wire Protocol Transport Service Provider Interface.
     10  */
     11 
     12 #ifndef JDWPTRANSPORT_H
     13 #define JDWPTRANSPORT_H
     14 
     15 #include "jni.h"
     16 
     17 enum {
     18     JDWPTRANSPORT_VERSION_1_0 = 0x00010000
     19 };
     20 
     21 #ifdef __cplusplus
     22 extern "C" {
     23 #endif
     24 
     25 struct jdwpTransportNativeInterface_;
     26 
     27 struct _jdwpTransportEnv;
     28 
     29 #ifdef __cplusplus
     30 typedef _jdwpTransportEnv jdwpTransportEnv;
     31 #else
     32 typedef const struct jdwpTransportNativeInterface_ *jdwpTransportEnv;
     33 #endif /* __cplusplus */
     34 
     35 /*
     36  * Errors. Universal errors with JVMTI/JVMDI equivalents keep the
     37  * values the same.
     38  */
     39 typedef enum {
     40     JDWPTRANSPORT_ERROR_NONE = 0,
     41     JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT = 103,
     42     JDWPTRANSPORT_ERROR_OUT_OF_MEMORY = 110,
     43     JDWPTRANSPORT_ERROR_INTERNAL = 113,
     44     JDWPTRANSPORT_ERROR_ILLEGAL_STATE = 201,
     45     JDWPTRANSPORT_ERROR_IO_ERROR = 202,
     46     JDWPTRANSPORT_ERROR_TIMEOUT = 203,
     47     JDWPTRANSPORT_ERROR_MSG_NOT_AVAILABLE = 204
     48 } jdwpTransportError;
     49 
     50 
     51 /*
     52  * Structure to define capabilities
     53  */
     54 typedef struct {
     55     unsigned int can_timeout_attach     :1;
     56     unsigned int can_timeout_accept     :1;
     57     unsigned int can_timeout_handshake  :1;
     58     unsigned int reserved3              :1;
     59     unsigned int reserved4              :1;
     60     unsigned int reserved5              :1;
     61     unsigned int reserved6              :1;
     62     unsigned int reserved7              :1;
     63     unsigned int reserved8              :1;
     64     unsigned int reserved9              :1;
     65     unsigned int reserved10             :1;
     66     unsigned int reserved11             :1;
     67     unsigned int reserved12             :1;
     68     unsigned int reserved13             :1;
     69     unsigned int reserved14		:1;
     70     unsigned int reserved15		:1;
     71 } JDWPTransportCapabilities;
     72 
     73 
     74 /*
     75  * Structures to define packet layout.
     76  *
     77  * See: http://java.sun.com/j2se/1.5/docs/guide/jpda/jdwp-spec.html
     78  */
     79 
     80 enum {
     81     JDWPTRANSPORT_FLAGS_NONE	 = 0x0,
     82     JDWPTRANSPORT_FLAGS_REPLY	 = 0x80
     83 };
     84 
     85 typedef struct {
     86     jint len;
     87     jint id;
     88     jbyte flags;
     89     jbyte cmdSet;
     90     jbyte cmd;
     91     jbyte *data;
     92 } jdwpCmdPacket;
     93 
     94 typedef struct {
     95     jint len;
     96     jint id;
     97     jbyte flags;
     98     jshort errorCode;
     99     jbyte *data;
    100 } jdwpReplyPacket;
    101 
    102 typedef struct {
    103     union {
    104         jdwpCmdPacket cmd;
    105         jdwpReplyPacket reply;
    106     } type;
    107 } jdwpPacket;
    108 
    109 /*
    110  * JDWP functions called by the transport.
    111  */
    112 typedef struct jdwpTransportCallback {
    113     void *(*alloc)(jint numBytes);   /* Call this for all allocations */
    114     void (*free)(void *buffer);      /* Call this for all deallocations */
    115 } jdwpTransportCallback;
    116 
    117 typedef jint (JNICALL *jdwpTransport_OnLoad_t)(JavaVM *jvm,
    118 					       jdwpTransportCallback *callback,
    119 					       jint version,
    120                                       	       jdwpTransportEnv** env);
    121 
    122 
    123 
    124 /* Function Interface */
    125 
    126 struct jdwpTransportNativeInterface_ {
    127     /*  1 :  RESERVED */
    128     void *reserved1;
    129 
    130     /*	2 : Get Capabilities */
    131     jdwpTransportError (JNICALL *GetCapabilities)(jdwpTransportEnv* env,
    132 	 JDWPTransportCapabilities *capabilities_ptr);
    133 
    134     /*  3 : Attach */
    135     jdwpTransportError (JNICALL *Attach)(jdwpTransportEnv* env,
    136 	const char* address,
    137 	jlong attach_timeout,
    138 	jlong handshake_timeout);
    139 
    140     /*  4: StartListening */
    141     jdwpTransportError (JNICALL *StartListening)(jdwpTransportEnv* env,
    142 	const char* address,
    143 	char** actual_address);
    144 
    145     /*  5: StopListening */
    146     jdwpTransportError (JNICALL *StopListening)(jdwpTransportEnv* env);
    147 
    148     /*  6: Accept */
    149     jdwpTransportError (JNICALL *Accept)(jdwpTransportEnv* env,
    150 	jlong accept_timeout,
    151 	jlong handshake_timeout);
    152 
    153     /*  7: IsOpen */
    154     jboolean (JNICALL *IsOpen)(jdwpTransportEnv* env);
    155 
    156     /*  8: Close */
    157     jdwpTransportError (JNICALL *Close)(jdwpTransportEnv* env);
    158 
    159     /*  9: ReadPacket */
    160     jdwpTransportError (JNICALL *ReadPacket)(jdwpTransportEnv* env,
    161 	jdwpPacket *pkt);
    162 
    163     /*  10: Write Packet */
    164     jdwpTransportError (JNICALL *WritePacket)(jdwpTransportEnv* env,
    165 	const jdwpPacket* pkt);
    166 
    167     /*  11:  GetLastError */
    168     jdwpTransportError (JNICALL *GetLastError)(jdwpTransportEnv* env,
    169 	char** error);
    170 
    171 };
    172 
    173 
    174 /*
    175  * Use inlined functions so that C++ code can use syntax such as
    176  *	env->Attach("mymachine:5000", 10*1000, 0);
    177  *
    178  * rather than using C's :-
    179  *
    180  *	(*env)->Attach(env, "mymachine:5000", 10*1000, 0);
    181  */
    182 struct _jdwpTransportEnv {
    183     const struct jdwpTransportNativeInterface_ *functions;
    184 #ifdef __cplusplus
    185 
    186     jdwpTransportError GetCapabilities(JDWPTransportCapabilities *capabilities_ptr) {
    187 	return functions->GetCapabilities(this, capabilities_ptr);
    188     }
    189 
    190     jdwpTransportError Attach(const char* address, jlong attach_timeout,
    191         	jlong handshake_timeout) {
    192 	return functions->Attach(this, address, attach_timeout, handshake_timeout);
    193     }
    194 
    195     jdwpTransportError StartListening(const char* address,
    196         	char** actual_address) {
    197 	return functions->StartListening(this, address, actual_address);
    198     }
    199 
    200     jdwpTransportError StopListening(void) {
    201 	return functions->StopListening(this);
    202     }
    203 
    204     jdwpTransportError Accept(jlong accept_timeout, jlong handshake_timeout) {
    205 	return functions->Accept(this, accept_timeout, handshake_timeout);
    206     }
    207 
    208     jboolean IsOpen(void) {
    209         return functions->IsOpen(this);
    210     }
    211 
    212     jdwpTransportError Close(void) {
    213         return functions->Close(this);
    214     }
    215 
    216     jdwpTransportError ReadPacket(jdwpPacket *pkt) {
    217 	return functions->ReadPacket(this, pkt);
    218     }
    219 
    220     jdwpTransportError WritePacket(const jdwpPacket* pkt) {
    221 	return functions->WritePacket(this, pkt);
    222     }
    223 
    224     jdwpTransportError GetLastError(char** error) {
    225 	return functions->GetLastError(this, error);
    226     }
    227 
    228 
    229 #endif /* __cplusplus */
    230 };
    231 
    232 #ifdef __cplusplus
    233 } /* extern "C" */
    234 #endif /* __cplusplus */
    235 
    236 #endif /* JDWPTRANSPORT_H */
    237 
    238