2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-31 22:25:08 +00:00

Fixed discoverable mode dropping connections that we didn't create

This commit is contained in:
Albert Vaca
2015-09-09 03:31:39 -07:00
parent 0b8500338a
commit d35623a28a
5 changed files with 24 additions and 10 deletions

View File

@@ -30,14 +30,28 @@ import java.util.ArrayList;
public abstract class BaseLink { public abstract class BaseLink {
public enum ConnectionStarted {
Locally, Remotely;
};
public interface PackageReceiver {
void onPackageReceived(NetworkPackage np);
}
private final BaseLinkProvider linkProvider; private final BaseLinkProvider linkProvider;
private final String deviceId; private final String deviceId;
private final ArrayList<PackageReceiver> receivers = new ArrayList<>(); private final ArrayList<PackageReceiver> receivers = new ArrayList<>();
protected PrivateKey privateKey; protected PrivateKey privateKey;
protected BaseLink(String deviceId, BaseLinkProvider linkProvider) { protected ConnectionStarted connectionSource; // If the other device sent me a broadcast,
// I should not close the connection with it
// because it's probably trying to find me and
// potentially ask for pairing.
protected BaseLink(String deviceId, BaseLinkProvider linkProvider, ConnectionStarted connectionSource) {
this.linkProvider = linkProvider; this.linkProvider = linkProvider;
this.deviceId = deviceId; this.deviceId = deviceId;
this.connectionSource = connectionSource;
} }
public String getDeviceId() { public String getDeviceId() {
@@ -52,9 +66,8 @@ public abstract class BaseLink {
return linkProvider; return linkProvider;
} }
public ConnectionStarted getConnectionSource() {
public interface PackageReceiver { return connectionSource;
void onPackageReceived(NetworkPackage np);
} }
public void addPackageReceiver(PackageReceiver pr) { public void addPackageReceiver(PackageReceiver pr) {

View File

@@ -57,8 +57,8 @@ public class LanLink extends BaseLink {
session.close(true); session.close(true);
} }
public LanLink(IoSession session, String deviceId, BaseLinkProvider linkProvider) { public LanLink(IoSession session, String deviceId, BaseLinkProvider linkProvider, ConnectionStarted connectionSource) {
super(deviceId, linkProvider); super(deviceId, linkProvider, connectionSource);
this.session = session; this.session = session;
} }

View File

@@ -37,6 +37,7 @@ import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioDatagramAcceptor; import org.apache.mina.transport.socket.nio.NioDatagramAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketConnector; import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.kde.kdeconnect.Backends.BaseLink;
import org.kde.kdeconnect.Backends.BaseLinkProvider; import org.kde.kdeconnect.Backends.BaseLinkProvider;
import org.kde.kdeconnect.Device; import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.NetworkPackage; import org.kde.kdeconnect.NetworkPackage;
@@ -134,7 +135,7 @@ public class LanLinkProvider extends BaseLinkProvider {
//Log.i("KDE/LanLinkProvider", "Identity package received from " + np.getString("deviceName")); //Log.i("KDE/LanLinkProvider", "Identity package received from " + np.getString("deviceName"));
LanLink link = new LanLink(session, np.getString("deviceId"), LanLinkProvider.this); LanLink link = new LanLink(session, np.getString("deviceId"), LanLinkProvider.this, BaseLink.ConnectionStarted.Locally);
nioSessions.put(session.getId(),link); nioSessions.put(session.getId(),link);
//Log.e("KDE/LanLinkProvider","nioSessions.size(): " + nioSessions.size()); //Log.e("KDE/LanLinkProvider","nioSessions.size(): " + nioSessions.size());
addLink(np, link); addLink(np, link);
@@ -195,7 +196,7 @@ public class LanLinkProvider extends BaseLinkProvider {
final IoSession session = ioFuture.getSession(); final IoSession session = ioFuture.getSession();
Log.i("KDE/LanLinkProvider", "Connection successful: " + session.isConnected()); Log.i("KDE/LanLinkProvider", "Connection successful: " + session.isConnected());
final LanLink link = new LanLink(session, identityPackage.getString("deviceId"), LanLinkProvider.this); final LanLink link = new LanLink(session, identityPackage.getString("deviceId"), LanLinkProvider.this, BaseLink.ConnectionStarted.Remotely);
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {

View File

@@ -30,7 +30,7 @@ import java.security.PublicKey;
public class LoopbackLink extends BaseLink { public class LoopbackLink extends BaseLink {
public LoopbackLink(BaseLinkProvider linkProvider) { public LoopbackLink(BaseLinkProvider linkProvider) {
super("loopback", linkProvider); super("loopback", linkProvider, ConnectionStarted.Remotely);
} }
@Override @Override

View File

@@ -172,7 +172,7 @@ public class BackgroundService extends Service {
Log.i("KDE/onConnectionLost", "removeLink, deviceId: " + link.getDeviceId()); Log.i("KDE/onConnectionLost", "removeLink, deviceId: " + link.getDeviceId());
if (d != null) { if (d != null) {
d.removeLink(link); d.removeLink(link);
if (!d.isReachable() && !d.isPaired()) { if (!d.isReachable() && !d.isPaired() && (link.getConnectionSource() == BaseLink.ConnectionStarted.Locally)) {
//Log.e("onConnectionLost","Removing connection device because it was not paired"); //Log.e("onConnectionLost","Removing connection device because it was not paired");
devices.remove(link.getDeviceId()); devices.remove(link.getDeviceId());
d.removePairingCallback(devicePairingCallback); d.removePairingCallback(devicePairingCallback);