Changeset View
Changeset View
Standalone View
Standalone View
src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java
Show All 29 Lines | |||||
30 | import org.kde.kdeconnect.Backends.BaseLink; | 30 | import org.kde.kdeconnect.Backends.BaseLink; | ||
31 | import org.kde.kdeconnect.Backends.BaseLinkProvider; | 31 | import org.kde.kdeconnect.Backends.BaseLinkProvider; | ||
32 | import org.kde.kdeconnect.BackgroundService; | 32 | import org.kde.kdeconnect.BackgroundService; | ||
33 | import org.kde.kdeconnect.Device; | 33 | import org.kde.kdeconnect.Device; | ||
34 | import org.kde.kdeconnect.Helpers.DeviceHelper; | 34 | import org.kde.kdeconnect.Helpers.DeviceHelper; | ||
35 | import org.kde.kdeconnect.Helpers.NetworkHelper; | 35 | import org.kde.kdeconnect.Helpers.NetworkHelper; | ||
36 | import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper; | 36 | import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper; | ||
37 | import org.kde.kdeconnect.Helpers.StringsHelper; | 37 | import org.kde.kdeconnect.Helpers.StringsHelper; | ||
38 | import org.kde.kdeconnect.Helpers.TrustedNetworkHelper; | ||||
38 | import org.kde.kdeconnect.NetworkPacket; | 39 | import org.kde.kdeconnect.NetworkPacket; | ||
39 | import org.kde.kdeconnect.UserInterface.CustomDevicesActivity; | 40 | import org.kde.kdeconnect.UserInterface.CustomDevicesActivity; | ||
40 | 41 | | |||
41 | import java.io.BufferedReader; | 42 | import java.io.BufferedReader; | ||
42 | import java.io.IOException; | 43 | import java.io.IOException; | ||
43 | import java.io.InputStreamReader; | 44 | import java.io.InputStreamReader; | ||
44 | import java.io.OutputStream; | 45 | import java.io.OutputStream; | ||
45 | import java.net.DatagramPacket; | 46 | import java.net.DatagramPacket; | ||
46 | import java.net.DatagramSocket; | 47 | import java.net.DatagramSocket; | ||
47 | import java.net.InetAddress; | 48 | import java.net.InetAddress; | ||
48 | import java.net.InetSocketAddress; | 49 | import java.net.InetSocketAddress; | ||
49 | import java.net.ServerSocket; | 50 | import java.net.ServerSocket; | ||
50 | import java.net.Socket; | 51 | import java.net.Socket; | ||
51 | import java.net.SocketException; | 52 | import java.net.SocketException; | ||
52 | import java.security.cert.Certificate; | 53 | import java.security.cert.Certificate; | ||
53 | import java.util.ArrayList; | 54 | import java.util.ArrayList; | ||
54 | import java.util.HashMap; | 55 | import java.util.HashMap; | ||
55 | import java.util.Timer; | 56 | import java.util.Timer; | ||
56 | import java.util.TimerTask; | 57 | import java.util.TimerTask; | ||
57 | 58 | | |||
58 | import javax.net.SocketFactory; | 59 | import javax.net.SocketFactory; | ||
59 | import javax.net.ssl.HandshakeCompletedEvent; | | |||
60 | import javax.net.ssl.HandshakeCompletedListener; | | |||
61 | import javax.net.ssl.SSLSocket; | 60 | import javax.net.ssl.SSLSocket; | ||
62 | 61 | | |||
63 | /** | 62 | /** | ||
64 | * This BaseLinkProvider creates {@link LanLink}s to other devices on the same | 63 | * This BaseLinkProvider creates {@link LanLink}s to other devices on the same | ||
65 | * WiFi network. The first packet sent over a socket must be an | 64 | * WiFi network. The first packet sent over a socket must be an | ||
66 | * {@link NetworkPacket#createIdentityPacket(Context)}. | 65 | * {@link NetworkPacket#createIdentityPacket(Context)}. | ||
67 | * | 66 | * | ||
68 | * @see #identityPacketReceived(NetworkPacket, Socket, LanLink.ConnectionStarted) | 67 | * @see #identityPacketReceived(NetworkPacket, Socket, LanLink.ConnectionStarted) | ||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Line(s) | 100 | void tcpPacketReceived(Socket socket) throws Exception { | |||
118 | 117 | | |||
119 | Log.i("KDE/LanLinkProvider", "Identity package received from a TCP connection from " + networkPacket.getString("deviceName")); | 118 | Log.i("KDE/LanLinkProvider", "Identity package received from a TCP connection from " + networkPacket.getString("deviceName")); | ||
120 | identityPacketReceived(networkPacket, socket, LanLink.ConnectionStarted.Locally); | 119 | identityPacketReceived(networkPacket, socket, LanLink.ConnectionStarted.Locally); | ||
121 | } | 120 | } | ||
122 | 121 | | |||
123 | //I've received their broadcast and should connect to their TCP socket and send my identity. | 122 | //I've received their broadcast and should connect to their TCP socket and send my identity. | ||
124 | void udpPacketReceived(DatagramPacket packet) throws Exception { | 123 | void udpPacketReceived(DatagramPacket packet) throws Exception { | ||
125 | 124 | | |||
125 | if (TrustedNetworkHelper.isNotTrustedNetwork(context)) { | ||||
126 | Log.w("LanLinkProvider", "Current WiFi isn't a Trusted Network"); | ||||
127 | return; | ||||
128 | } | ||||
129 | | ||||
126 | final InetAddress address = packet.getAddress(); | 130 | final InetAddress address = packet.getAddress(); | ||
127 | 131 | | |||
128 | try { | 132 | try { | ||
129 | 133 | | |||
130 | String message = new String(packet.getData(), StringsHelper.UTF8); | 134 | String message = new String(packet.getData(), StringsHelper.UTF8); | ||
131 | final NetworkPacket identityPacket = NetworkPacket.unserialize(message); | 135 | final NetworkPacket identityPacket = NetworkPacket.unserialize(message); | ||
132 | final String deviceId = identityPacket.getString("deviceId"); | 136 | final String deviceId = identityPacket.getString("deviceId"); | ||
133 | if (!identityPacket.getType().equals(NetworkPacket.PACKET_TYPE_IDENTITY)) { | 137 | if (!identityPacket.getType().equals(NetworkPacket.PACKET_TYPE_IDENTITY)) { | ||
▲ Show 20 Lines • Show All 246 Lines • ▼ Show 20 Line(s) | |||||
380 | 384 | | |||
381 | private void broadcastUdpPacket() { | 385 | private void broadcastUdpPacket() { | ||
382 | 386 | | |||
383 | if (NetworkHelper.isOnMobileNetwork(context)) { | 387 | if (NetworkHelper.isOnMobileNetwork(context)) { | ||
384 | Log.w("LanLinkProvider", "On 3G network, not sending broadcast."); | 388 | Log.w("LanLinkProvider", "On 3G network, not sending broadcast."); | ||
385 | return; | 389 | return; | ||
386 | } | 390 | } | ||
387 | 391 | | |||
392 | if (TrustedNetworkHelper.isNotTrustedNetwork(context)) { | ||||
393 | Log.w("LanLinkProvider", "Current WiFi isn't a Trusted Network"); | ||||
394 | return; | ||||
395 | } | ||||
396 | | ||||
388 | new Thread(() -> { | 397 | new Thread(() -> { | ||
389 | 398 | | |||
390 | String deviceListPrefs = PreferenceManager.getDefaultSharedPreferences(context).getString(CustomDevicesActivity.KEY_CUSTOM_DEVLIST_PREFERENCE, ""); | 399 | String deviceListPrefs = PreferenceManager.getDefaultSharedPreferences(context).getString(CustomDevicesActivity.KEY_CUSTOM_DEVLIST_PREFERENCE, ""); | ||
391 | ArrayList<String> iplist = new ArrayList<>(); | 400 | ArrayList<String> iplist = new ArrayList<>(); | ||
392 | if (!deviceListPrefs.isEmpty()) { | 401 | if (!deviceListPrefs.isEmpty()) { | ||
393 | iplist = CustomDevicesActivity.deserializeIpList(deviceListPrefs); | 402 | iplist = CustomDevicesActivity.deserializeIpList(deviceListPrefs); | ||
394 | } | 403 | } | ||
395 | iplist.add("255.255.255.255"); //Default: broadcast. | 404 | iplist.add("255.255.255.255"); //Default: broadcast. | ||
▲ Show 20 Lines • Show All 94 Lines • Show Last 20 Lines |