#include #include #include #include #include JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendMouseMove(JNIEnv *env, jclass clazz, jshort deltaX, jshort deltaY) { LiSendMouseMoveEvent(deltaX, deltaY); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendMousePosition(JNIEnv *env, jclass clazz, jshort x, jshort y, jshort referenceWidth, jshort referenceHeight) { LiSendMousePositionEvent(x, y, referenceWidth, referenceHeight); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendMouseMoveAsMousePosition(JNIEnv *env, jclass clazz, jshort deltaX, jshort deltaY, jshort referenceWidth, jshort referenceHeight) { LiSendMouseMoveAsMousePositionEvent(deltaX, deltaY, referenceWidth, referenceHeight); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendMouseButton(JNIEnv *env, jclass clazz, jbyte buttonEvent, jbyte mouseButton) { LiSendMouseButtonEvent(buttonEvent, mouseButton); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendMultiControllerInput(JNIEnv *env, jclass clazz, jshort controllerNumber, jshort activeGamepadMask, jshort buttonFlags, jbyte leftTrigger, jbyte rightTrigger, jshort leftStickX, jshort leftStickY, jshort rightStickX, jshort rightStickY) { LiSendMultiControllerEvent(controllerNumber, activeGamepadMask, buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendControllerInput(JNIEnv *env, jclass clazz, jshort buttonFlags, jbyte leftTrigger, jbyte rightTrigger, jshort leftStickX, jshort leftStickY, jshort rightStickX, jshort rightStickY) { LiSendControllerEvent(buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendKeyboardInput(JNIEnv *env, jclass clazz, jshort keyCode, jbyte keyAction, jbyte modifiers) { LiSendKeyboardEvent(keyCode, keyAction, modifiers); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendMouseScroll(JNIEnv *env, jclass clazz, jbyte scrollClicks) { LiSendScrollEvent(scrollClicks); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendMouseHighResScroll(JNIEnv *env, jclass clazz, jshort scrollAmount) { LiSendHighResScrollEvent(scrollAmount); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendUtf8Text(JNIEnv *env, jclass clazz, jstring text) { const char* utf8Text = (*env)->GetStringUTFChars(env, text, NULL); LiSendUtf8TextEvent(utf8Text, strlen(utf8Text)); (*env)->ReleaseStringUTFChars(env, text, utf8Text); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_stopConnection(JNIEnv *env, jclass clazz) { LiStopConnection(); } JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_interruptConnection(JNIEnv *env, jclass clazz) { LiInterruptConnection(); } JNIEXPORT jstring JNICALL Java_com_limelight_nvstream_jni_MoonBridge_getStageName(JNIEnv *env, jclass clazz, jint stage) { return (*env)->NewStringUTF(env, LiGetStageName(stage)); } JNIEXPORT jstring JNICALL Java_com_limelight_nvstream_jni_MoonBridge_findExternalAddressIP4(JNIEnv *env, jclass clazz, jstring stunHostName, jint stunPort) { int err; struct in_addr wanAddr; const char* stunHostNameStr = (*env)->GetStringUTFChars(env, stunHostName, NULL); err = LiFindExternalAddressIP4(stunHostNameStr, stunPort, &wanAddr.s_addr); (*env)->ReleaseStringUTFChars(env, stunHostName, stunHostNameStr); if (err == 0) { char addrStr[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &wanAddr, addrStr, sizeof(addrStr)); __android_log_print(ANDROID_LOG_INFO, "moonlight-common-c", "Resolved WAN address to %s", addrStr); return (*env)->NewStringUTF(env, addrStr); } else { __android_log_print(ANDROID_LOG_ERROR, "moonlight-common-c", "STUN failed to get WAN address: %d", err); return NULL; } } JNIEXPORT jint JNICALL Java_com_limelight_nvstream_jni_MoonBridge_getPendingAudioDuration(JNIEnv *env, jclass clazz) { return LiGetPendingAudioDuration(); } JNIEXPORT jint JNICALL Java_com_limelight_nvstream_jni_MoonBridge_getPendingVideoFrames(JNIEnv *env, jclass clazz) { return LiGetPendingVideoFrames(); } JNIEXPORT jint JNICALL Java_com_limelight_nvstream_jni_MoonBridge_testClientConnectivity(JNIEnv *env, jclass clazz, jstring testServerHostName, jint referencePort, jint testFlags) { int ret; const char* testServerHostNameStr = (*env)->GetStringUTFChars(env, testServerHostName, NULL); ret = LiTestClientConnectivity(testServerHostNameStr, (unsigned short)referencePort, testFlags); (*env)->ReleaseStringUTFChars(env, testServerHostName, testServerHostNameStr); return ret; } JNIEXPORT jint JNICALL Java_com_limelight_nvstream_jni_MoonBridge_getPortFlagsFromStage(JNIEnv *env, jclass clazz, jint stage) { return LiGetPortFlagsFromStage(stage); } JNIEXPORT jint JNICALL Java_com_limelight_nvstream_jni_MoonBridge_getPortFlagsFromTerminationErrorCode(JNIEnv *env, jclass clazz, jint errorCode) { return LiGetPortFlagsFromTerminationErrorCode(errorCode); } JNIEXPORT jstring JNICALL Java_com_limelight_nvstream_jni_MoonBridge_stringifyPortFlags(JNIEnv *env, jclass clazz, jint portFlags, jstring separator) { const char* separatorStr = (*env)->GetStringUTFChars(env, separator, NULL); char outputBuffer[512]; LiStringifyPortFlags(portFlags, separatorStr, outputBuffer, sizeof(outputBuffer)); (*env)->ReleaseStringUTFChars(env, separator, separatorStr); return (*env)->NewStringUTF(env, outputBuffer); } JNIEXPORT jlong JNICALL Java_com_limelight_nvstream_jni_MoonBridge_getEstimatedRttInfo(JNIEnv *env, jclass clazz) { uint32_t rtt, variance; if (!LiGetEstimatedRttInfo(&rtt, &variance)) { return -1; } return ((uint64_t)rtt << 32U) | variance; }