JNIHelpers.h
00001
00039 #ifndef JNIHELPERS_H_
00040 #define JNIHELPERS_H_
00041
00042 #include "udt.h"
00043
00044 #include <cassert>
00045 #include <climits>
00046 #include <cstring>
00047 #include <vector>
00048 #include <algorithm>
00049
00050 #include "jni.h"
00051
00052
00053
00054 #define JNI_UPDATE 0 // jni object release with copy
00055
00056
00057 extern "C"{
00058
00059
00060
00061
00062 extern jclass jdk_clsBoolean;
00063 extern jclass jdk_clsInteger;
00064 extern jclass jdk_clsLong;
00065 extern jclass jdk_clsInet4Address;
00066 extern jclass jdk_clsInet6Address;
00067 extern jclass jdk_clsInetSocketAddress;
00068 extern jclass jdk_clsSocketException;
00069 extern jclass jdk_clsSet;
00070 extern jclass jdk_clsIterator;
00071
00072
00073
00074 extern jfieldID ia_AddressID;
00075
00076
00077 extern jmethodID jdk_clsBoolean_initID;
00078 extern jmethodID jdk_clsInteger_initID;
00079 extern jmethodID jdk_clsLong_initID;
00080 extern jmethodID jdk_clsInet4Address_initID;
00081 extern jmethodID jdk_clsInetSocketAddress_initID;
00082 extern jmethodID jdk_clsInetSocketAddress_getAddressID;
00083 extern jmethodID jdk_clsInetSocketAddress_getPortID;
00084 extern jmethodID jdk_clsSet_iteratorID;
00085 extern jmethodID jdk_clsSet_addID;
00086 extern jmethodID jdk_clsSet_containsID;
00087 extern jmethodID jdk_clsIterator_hasNextID;
00088 extern jmethodID jdk_clsIterator_nextID;
00089
00090
00091 extern jclass udt_clsFactoryInterfaceUDT;
00092
00093
00094 extern jfieldID udt_clsCCC_fld_nativeHandleID;
00095
00096
00097
00098
00099 #define UDT_TIMEOUT 0
00100
00101
00102 #ifdef _MSC_VER
00103 #define __func__ __FUNCTION__
00104 #endif
00105
00106
00107
00108
00109 #define CHK_LOG(title,comment) printf ("%s function: %s comment: %s", title, __func__, comment);
00110
00111 #define CHK_NUL_RET_RET(reference,comment) if ((reference) == NULL) \
00112 { CHK_LOG("CHK_NUL_RET_RET;",comment); return; }
00113
00114 #define CHK_NUL_RET_NUL(reference,comment) if ((reference) == NULL) \
00115 { CHK_LOG("CHK_NUL_RET_NUL;",comment); return NULL; }
00116
00117 #define CHK_NUL_RET_FLS(reference,comment) if ((reference) == NULL) \
00118 { CHK_LOG("CHK_NUL_RET_FLS;",comment); return false; }
00119
00120 #define CHK_NUL_RET_ERR(reference,comment) if ((reference) == NULL) \
00121 { CHK_LOG("CHK_NUL_RET_ERR;",comment); return JNI_ERR; }
00122
00123
00124 #define BOOL(x) (((x) == JNI_TRUE) ? true : false) // from java to c++
00125 #define BOOLEAN(x) ((jboolean) ( ((x) == true) ? JNI_TRUE : JNI_FALSE )) // from c++ to java
00126
00127
00128 #define FREE(x) if ((x) != NULL) { free(x); x = NULL; }
00129 #define MALLOC(var,type,size) type* var = (type*) malloc(sizeof(type) * size);
00130
00131
00132 #define UNUSED(x) ((void)(x))
00133
00134 void X_InitClassReference(JNIEnv *env, jclass *classReference,
00135 const char *className);
00136
00137 void X_FreeClassReference(JNIEnv *env, jclass* globalRef);
00138
00139 jobject X_NewBoolean(JNIEnv *env, bool value);
00140
00141 jobject X_NewInteger(JNIEnv *env, int value);
00142
00143 jobject X_NewLong(JNIEnv* env, int64_t value);
00144
00145 int X_InitSockAddr(sockaddr* sockAddr);
00146
00147 inline bool X_IsInRange(jlong min, jlong var, jlong max) {
00148 if (min <= var && var <= max) {
00149 return true;
00150 } else {
00151 return false;
00152 }
00153 }
00154
00155 inline void X_ConvertMillisIntoTimeValue(const jlong millisTimeout,
00156 timeval* timeValue) {
00157 if (millisTimeout < 0) {
00158 timeValue->tv_sec = INT_MAX;
00159 timeValue->tv_usec = 0;
00160 } else if (millisTimeout > 0) {
00161 timeValue->tv_sec = millisTimeout / 1000;
00162 timeValue->tv_usec = (millisTimeout % 1000) * 1000;
00163 } else {
00164 timeValue->tv_sec = 0;
00165 timeValue->tv_usec = 0;
00166 }
00167 }
00168
00169
00170 int X_ConvertInetSocketAddressToSockaddr(JNIEnv* env,
00171 jobject objInetSocketAddress, sockaddr* sockAddr);
00172
00173
00174 jobject X_NewInetAddress(JNIEnv* env, jint address);
00175
00176
00177 jobject X_NewInetSocketAddress(JNIEnv* env, sockaddr* sockAddr);
00178
00179
00180 bool X_IsSockaddrEqualsInetSocketAddress(JNIEnv* env, sockaddr* sockAddr,
00181 jobject socketAddress);
00182
00183
00184 void UDT_ThrowExceptionUDT_Message(JNIEnv* env, const jint socketID,
00185 const char *comment);
00186
00187 }
00188
00189
00190
00191
00192 #endif