ZT1_jniutils.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #include "ZT1_jniutils.h"
  2. #ifdef __cplusplus
  3. extern "C" {
  4. #endif
  5. jobject createResultObject(JNIEnv *env, ZT1_ResultCode code)
  6. {
  7. // cache the class so we don't have to
  8. // look it up every time we need to create a java
  9. // ResultCode object
  10. static jclass resultClass = NULL;
  11. jobject resultObject = NULL;
  12. if(resultClass == NULL)
  13. {
  14. resultClass = env->FindClass("com/zerotierone/sdk/ResultCode");
  15. if(resultClass == NULL)
  16. {
  17. return NULL; // exception thrown
  18. }
  19. }
  20. std::string fieldName;
  21. switch(code)
  22. {
  23. case ZT1_RESULT_OK:
  24. fieldName = "ZT1_RESULT_OK";
  25. break;
  26. case ZT1_RESULT_FATAL_ERROR_OUT_OF_MEMORY:
  27. fieldName = "ZT1_RESULT_FATAL_ERROR_OUT_OF_MEMORY";
  28. break;
  29. case ZT1_RESULT_FATAL_ERROR_DATA_STORE_FAILED:
  30. fieldName = "ZT1_RESULT_FATAL_ERROR_DATA_STORE_FAILED";
  31. break;
  32. case ZT1_RESULT_ERROR_NETWORK_NOT_FOUND:
  33. fieldName = "ZT1_RESULT_ERROR_NETWORK_NOT_FOUND";
  34. break;
  35. case ZT1_RESULT_FATAL_ERROR_INTERNAL:
  36. default:
  37. fieldName = "ZT1_RESULT_FATAL_ERROR_INTERNAL";
  38. break;
  39. }
  40. jfieldID enumField = env->GetStaticFieldID(resultClass, fieldName.c_str(), "Lcom/zerotierone/sdk/ResultCode;");
  41. resultObject = env->GetStaticObjectField(resultClass, enumField);
  42. return resultObject;
  43. }
  44. jobject createVirtualNetworkStatus(JNIEnv *env, ZT1_VirtualNetworkStatus status)
  45. {
  46. static jclass statusClass = NULL;
  47. jobject statusObject = NULL;
  48. if(statusClass == NULL)
  49. {
  50. statusClass = env->FindClass("com/zerotierone/sdk/VirtualNetworkStatus");
  51. if(statusClass == NULL)
  52. {
  53. return NULL; // exception thrown
  54. }
  55. }
  56. std::string fieldName;
  57. switch(status)
  58. {
  59. case ZT1_NETWORK_STATUS_REQUESTING_CONFIGURATION:
  60. fieldName = "NETWORK_STATUS_REQUESTING_CONFIGURATION";
  61. break;
  62. case ZT1_NETWORK_STATUS_OK:
  63. fieldName = "NETWORK_STATUS_OK";
  64. break;
  65. case ZT1_NETWORK_STATUS_ACCESS_DENIED:
  66. fieldName = "NETWORK_STATUS_ACCESS_DENIED";
  67. break;
  68. case ZT1_NETWORK_STATUS_NOT_FOUND:
  69. fieldName = "NETWORK_STATUS_NOT_FOUND";
  70. break;
  71. case ZT1_NETWORK_STATUS_PORT_ERROR:
  72. fieldName = "NETWORK_STATUS_PORT_ERROR";
  73. break;
  74. case ZT1_NETWORK_STATUS_CLIENT_TOO_OLD:
  75. fieldName = "NETWORK_STATUS_CLIENT_TOO_OLD";
  76. break;
  77. }
  78. jfieldID enumField = env->GetStaticFieldID(statusClass, fieldName.c_str(), "Lcom/zerotierone/sdk/VirtualNetworkStatus;");
  79. statusObject = env->GetStaticObjectField(statusClass, enumField);
  80. return statusObject;
  81. }
  82. jobject createEvent(JNIEnv *env, ZT1_Event event)
  83. {
  84. static jclass eventClass = NULL;
  85. jobject eventObject = NULL;
  86. if(eventClass == NULL)
  87. {
  88. eventClass = env->FindClass("com/zerotierone/sdk/Event");
  89. if(eventClass == NULL)
  90. {
  91. return NULL;
  92. }
  93. }
  94. std::string fieldName;
  95. switch(event)
  96. {
  97. case ZT1_EVENT_UP:
  98. fieldName = "EVENT_UP";
  99. break;
  100. case ZT1_EVENT_OFFLINE:
  101. fieldName = "EVENT_OFFLINE";
  102. break;
  103. case ZT1_EVENT_DOWN:
  104. fieldName = "EVENT_DOWN";
  105. break;
  106. case ZT1_EVENT_FATAL_ERROR_IDENTITY_COLLISION:
  107. fieldName = "EVENT_FATAL_ERROR_IDENTITY_COLLISION";
  108. break;
  109. case ZT1_EVENT_AUTHENTICATION_FAILURE:
  110. fieldName = "EVENT_AUTHENTICATION_FAILURE";
  111. break;
  112. case ZT1_EVENT_INVALID_PACKET:
  113. fieldName = "EVENT_INVALID_PACKET";
  114. break;
  115. case ZT1_EVENT_TRACE:
  116. fieldName = "EVENT_TRACE";
  117. break;
  118. }
  119. jfieldID enumField = env->GetStaticFieldID(eventClass, fieldName.c_str(), "Lcom/zerotierone/sdk/Event;");
  120. eventObject = env->GetStaticObjectField(eventClass, enumField);
  121. return eventObject;
  122. }
  123. jobject createVirtualNetworkType(JNIEnv *env, ZT1_VirtualNetworkType type)
  124. {
  125. static jclass vntypeClass = NULL;
  126. jobject vntypeObject = NULL;
  127. if(vntypeClass == NULL)
  128. {
  129. vntypeClass = env->FindClass("com/zerotierone/sdk/VirtualNetworkType");
  130. if(vntypeClass == NULL)
  131. {
  132. return NULL;
  133. }
  134. }
  135. std::string fieldName;
  136. switch(type)
  137. {
  138. case ZT1_NETWORK_TYPE_PRIVATE:
  139. fieldName = "NETWORK_TYPE_PRIVATE";
  140. break;
  141. case ZT1_NETWORK_TYPE_PUBLIC:
  142. fieldName = "NETWORK_TYPE_PUBLIC";
  143. break;
  144. }
  145. jfieldID enumField = env->GetStaticFieldID(vntypeClass, fieldName.c_str(), "Lcom/zerotierone/sdk/VirtyalNetworkType;");
  146. vntypeObject = env->GetStaticObjectField(vntypeClass, enumField);
  147. return vntypeObject;
  148. }
  149. jobject newArrayList(JNIEnv *env)
  150. {
  151. return NULL;
  152. }
  153. jobject appendItemToArrayList(JNIEnv *env, jobject object)
  154. {
  155. return NULL;
  156. }
  157. jobject newIPV6Address(JNIEnv *env, char *addr)
  158. {
  159. return NULL;
  160. }
  161. jobject newIPV4Address(JNIEnv *env, char *addr)
  162. {
  163. return NULL;
  164. }
  165. jobject newMulticastGroup(JNIEnv *env, const ZT1_MulticastGroup &mc)
  166. {
  167. return NULL;
  168. }
  169. #ifdef __cplusplus
  170. }
  171. #endif