#include struct go_string { const char *str; long n; }; extern int wgTurnOn(struct go_string ifname, int tun_fd, int mtu, struct go_string settings); extern void wgTurnOff(int handle); extern int wgGetSocketV4(int handle); extern int wgGetSocketV6(int handle); JNIEXPORT jint JNICALL Java_com_wireguard_android_backend_GoBackend_wgTurnOn(JNIEnv *env, jclass c, jstring ifname, jint tun_fd, jint mtu, jstring settings) { const char *ifname_str = (*env)->GetStringUTFChars(env, ifname, 0); size_t ifname_len = (*env)->GetStringUTFLength(env, ifname); const char *settings_str = (*env)->GetStringUTFChars(env, settings, 0); size_t settings_len = (*env)->GetStringUTFLength(env, settings); int ret = wgTurnOn((struct go_string){ .str = ifname_str, .n = ifname_len }, tun_fd, mtu, (struct go_string){ .str = settings_str, .n = settings_len }); (*env)->ReleaseStringUTFChars(env, ifname, ifname_str); (*env)->ReleaseStringUTFChars(env, settings, settings_str); return ret; } JNIEXPORT void JNICALL Java_com_wireguard_android_backend_GoBackend_wgTurnOff(JNIEnv *env, jclass c, jint handle) { wgTurnOff(handle); } JNIEXPORT jint JNICALL Java_com_wireguard_android_backend_GoBackend_wgGetSocketV4(JNIEnv *env, jclass c, jint handle) { return wgGetSocketV4(handle); } JNIEXPORT jint JNICALL Java_com_wireguard_android_backend_GoBackend_wgGetSocketV6(JNIEnv *env, jclass c, jint handle) { return wgGetSocketV6(handle); }