diff --git a/moonlight-common/src/main/java/com/limelight/nvstream/NvConnection.java b/moonlight-common/src/main/java/com/limelight/nvstream/NvConnection.java index 906e1f73..28b994e4 100644 --- a/moonlight-common/src/main/java/com/limelight/nvstream/NvConnection.java +++ b/moonlight-common/src/main/java/com/limelight/nvstream/NvConnection.java @@ -347,4 +347,8 @@ public class NvConnection { MoonBridge.sendMouseScroll(scrollClicks); } } + + public static String findExternalAddressForMdns() { + return MoonBridge.findExternalAddressIP4("stun.stunprotocol.org", 3478); + } } diff --git a/moonlight-common/src/main/java/com/limelight/nvstream/jni/MoonBridge.java b/moonlight-common/src/main/java/com/limelight/nvstream/jni/MoonBridge.java index 798d0210..49105f72 100644 --- a/moonlight-common/src/main/java/com/limelight/nvstream/jni/MoonBridge.java +++ b/moonlight-common/src/main/java/com/limelight/nvstream/jni/MoonBridge.java @@ -203,5 +203,7 @@ public class MoonBridge { public static native String getStageName(int stage); + public static native String findExternalAddressIP4(String stunHostName, int stunPort); + public static native void init(); } diff --git a/moonlight-common/src/main/jni/moonlight-core/Android.mk b/moonlight-common/src/main/jni/moonlight-core/Android.mk index d3ad8883..221def48 100644 --- a/moonlight-common/src/main/jni/moonlight-core/Android.mk +++ b/moonlight-common/src/main/jni/moonlight-core/Android.mk @@ -23,6 +23,7 @@ LOCAL_SRC_FILES := moonlight-common-c/src/AudioStream.c \ moonlight-common-c/src/RtspConnection.c \ moonlight-common-c/src/RtspParser.c \ moonlight-common-c/src/SdpGenerator.c \ + moonlight-common-c/src/SimpleStun.c \ moonlight-common-c/src/VideoDepacketizer.c \ moonlight-common-c/src/VideoStream.c \ moonlight-common-c/reedsolomon/rs.c \ diff --git a/moonlight-common/src/main/jni/moonlight-core/moonlight-common-c b/moonlight-common/src/main/jni/moonlight-core/moonlight-common-c index 558ba488..0eed7226 160000 --- a/moonlight-common/src/main/jni/moonlight-core/moonlight-common-c +++ b/moonlight-common/src/main/jni/moonlight-core/moonlight-common-c @@ -1 +1 @@ -Subproject commit 558ba488e8eb7a614b6d9a93968c7c69683f942d +Subproject commit 0eed722635f411ebfef662501e35733f6fb24e0c diff --git a/moonlight-common/src/main/jni/moonlight-core/simplejni.c b/moonlight-common/src/main/jni/moonlight-core/simplejni.c index 1f0e0a67..8631ebad 100644 --- a/moonlight-common/src/main/jni/moonlight-core/simplejni.c +++ b/moonlight-common/src/main/jni/moonlight-core/simplejni.c @@ -1,6 +1,9 @@ #include #include +#include + +#include JNIEXPORT void JNICALL Java_com_limelight_nvstream_jni_MoonBridge_sendMouseMove(JNIEnv *env, jclass clazz, jshort deltaX, jshort deltaY) { @@ -53,4 +56,28 @@ Java_com_limelight_nvstream_jni_MoonBridge_interruptConnection(JNIEnv *env, jcla 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; + } } \ No newline at end of file