mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-19 19:13:03 +00:00
Display a warning if the active connection is metered. Find a proper MAC address for pairing (might require re-pair). Fix a possible infinite loop in the NvControl code.
This commit is contained in:
parent
83ad55e436
commit
77786f9693
@ -9,7 +9,7 @@
|
|||||||
android:targetSdkVersion="19" />
|
android:targetSdkVersion="19" />
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:largeHeap="true"
|
android:largeHeap="true"
|
||||||
|
@ -12,6 +12,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
import android.view.Surface;
|
import android.view.Surface;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@ -39,27 +41,49 @@ public class NvConnection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getMacAddressString() throws SocketException {
|
public static String getMacAddressString() throws SocketException {
|
||||||
Enumeration<NetworkInterface> ifaceList = NetworkInterface.getNetworkInterfaces();
|
Enumeration<NetworkInterface> ifaceList;
|
||||||
|
NetworkInterface selectedIface = null;
|
||||||
while (ifaceList.hasMoreElements()) {
|
|
||||||
|
// First look for a WLAN interface (since those generally aren't removable)
|
||||||
|
ifaceList = NetworkInterface.getNetworkInterfaces();
|
||||||
|
while (selectedIface == null && ifaceList.hasMoreElements()) {
|
||||||
NetworkInterface iface = ifaceList.nextElement();
|
NetworkInterface iface = ifaceList.nextElement();
|
||||||
|
|
||||||
/* Look for the first non-loopback interface to use as the MAC address.
|
if (iface.getName().startsWith("wlan")) {
|
||||||
* We don't require the interface to be up to avoid having to repair when
|
selectedIface = iface;
|
||||||
* connecting over different interfaces */
|
}
|
||||||
if (!iface.isLoopback()) {
|
}
|
||||||
byte[] macAddress = iface.getHardwareAddress();
|
|
||||||
if (macAddress != null && macAddress.length == 6) {
|
// If we didn't find that, look for an Ethernet interface
|
||||||
StringBuilder addrStr = new StringBuilder();
|
ifaceList = NetworkInterface.getNetworkInterfaces();
|
||||||
for (int i = 0; i < macAddress.length; i++) {
|
while (selectedIface == null && ifaceList.hasMoreElements()) {
|
||||||
addrStr.append(String.format("%02x", macAddress[i]));
|
NetworkInterface iface = ifaceList.nextElement();
|
||||||
if (i != macAddress.length - 1) {
|
|
||||||
addrStr.append(':');
|
if (iface.getName().startsWith("eth")) {
|
||||||
}
|
selectedIface = iface;
|
||||||
}
|
}
|
||||||
return addrStr.toString();
|
}
|
||||||
|
|
||||||
|
// Now just find something
|
||||||
|
ifaceList = NetworkInterface.getNetworkInterfaces();
|
||||||
|
if (ifaceList.hasMoreElements()) {
|
||||||
|
selectedIface = ifaceList.nextElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedIface == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] macAddress = selectedIface.getHardwareAddress();
|
||||||
|
if (macAddress != null && macAddress.length == 6) {
|
||||||
|
StringBuilder addrStr = new StringBuilder();
|
||||||
|
for (int i = 0; i < macAddress.length; i++) {
|
||||||
|
addrStr.append(String.format("%02x", macAddress[i]));
|
||||||
|
if (i != macAddress.length - 1) {
|
||||||
|
addrStr.append(':');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return addrStr.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -93,6 +117,8 @@ public class NvConnection {
|
|||||||
new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
checkDataConnection();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
host = InetAddress.getByName(host).getHostAddress();
|
host = InetAddress.getByName(host).getHostAddress();
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
@ -122,6 +148,14 @@ public class NvConnection {
|
|||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkDataConnection()
|
||||||
|
{
|
||||||
|
ConnectivityManager mgr = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
if (mgr.isActiveNetworkMetered()) {
|
||||||
|
displayToast("Warning: Your active network connection is metered!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void sendMouseMove(final short deltaX, final short deltaY)
|
public void sendMouseMove(final short deltaX, final short deltaY)
|
||||||
{
|
{
|
||||||
if (inputStream == null)
|
if (inputStream == null)
|
||||||
|
@ -327,9 +327,17 @@ public class NvControl {
|
|||||||
int offset = 0;
|
int offset = 0;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
offset = in.read(header, offset, header.length - offset);
|
int bytesRead = in.read(header, offset, header.length - offset);
|
||||||
|
if (bytesRead < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
offset += bytesRead;
|
||||||
} while (offset != header.length);
|
} while (offset != header.length);
|
||||||
|
|
||||||
|
if (offset != header.length) {
|
||||||
|
throw new IOException("Socket closed prematurely");
|
||||||
|
}
|
||||||
|
|
||||||
ByteBuffer bb = ByteBuffer.wrap(header).order(ByteOrder.LITTLE_ENDIAN);
|
ByteBuffer bb = ByteBuffer.wrap(header).order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
|
||||||
type = bb.getShort();
|
type = bb.getShort();
|
||||||
@ -342,8 +350,16 @@ public class NvControl {
|
|||||||
offset = 0;
|
offset = 0;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
offset = in.read(payload, offset, payload.length - offset);
|
int bytesRead = in.read(payload, offset, payload.length - offset);
|
||||||
|
if (bytesRead < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
offset += bytesRead;
|
||||||
} while (offset != payload.length);
|
} while (offset != payload.length);
|
||||||
|
|
||||||
|
if (offset != payload.length) {
|
||||||
|
throw new IOException("Socket closed prematurely");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user