mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-26 14:32:42 +00:00
162 lines
6.3 KiB
C
162 lines
6.3 KiB
C
#include <Limelight.h>
|
|
|
|
#include <jni.h>
|
|
#include <android/log.h>
|
|
|
|
#include <arpa/inet.h>
|
|
#include <string.h>
|
|
|
|
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;
|
|
} |