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

NetworkPackage.encrypt now returns a new package instead of changing itself

This was causing problems with plugins that keep a reference to the
packages they have already sent, like the telephony plugin, because the
package became encrypted (and thus inaccessible) after sending it.

BUG: 326275
This commit is contained in:
Albert Vaca
2013-10-30 01:13:40 +01:00
parent 9dbe1ec9cf
commit 30cf27e835
4 changed files with 12 additions and 15 deletions

View File

@@ -22,7 +22,7 @@ public class LanLink extends BaseLink {
public void disconnect() {
if (session == null) return;
Log.i("LanLink", "Disconnect: "+session.getRemoteAddress().toString());
//Log.i("LanLink", "Disconnect: "+session.getRemoteAddress().toString());
session.close(true);
}
@@ -150,7 +150,7 @@ public class LanLink extends BaseLink {
if (thread == null) return false;
}
np.encrypt(key);
np = np.encrypt(key);
WriteFuture future = session.write(np.serialize());
if (!future.await().isWritten()) return false;

View File

@@ -26,7 +26,7 @@ public class LoopbackLink extends BaseLink {
@Override
public boolean sendPackageEncrypted(NetworkPackage in, PublicKey key) {
try {
in.encrypt(key);
in = in.encrypt(key);
String s = in.serialize();
NetworkPackage out= NetworkPackage.unserialize(s);
out.decrypt(privateKey);

View File

@@ -469,6 +469,7 @@ public class Device implements BaseLink.PackageReceiver {
public void run() {
//Log.e("sendPackage", "Sending package...");
//Log.e("sendPackage", np.serialize());
boolean useEncryption = (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_PAIR) && isPaired());

View File

@@ -76,6 +76,9 @@ public class NetworkPackage {
public double getDouble(String key) { return mBody.optDouble(key,Double.NaN); }
public double getDouble(String key, double defaultValue) { return mBody.optDouble(key,defaultValue); }
public void set(String key, double value) { try { mBody.put(key,value); } catch(Exception e) { } }
public JSONArray getJSONArray(String key) { return mBody.optJSONArray(key); }
public void set(String key, JSONArray value) { try { mBody.put(key,value); } catch(Exception e) { } }
public ArrayList<String> getStringList(String key) {
JSONArray jsonArray = mBody.optJSONArray(key);
ArrayList<String> list = new ArrayList<String>();
@@ -105,7 +108,6 @@ public class NetworkPackage {
}
}
public boolean has(String key) { return mBody.has(key); }
public boolean isEncrypted() { return mType.equals(PACKAGE_TYPE_ENCRYPTED); }
@@ -163,7 +165,7 @@ public class NetworkPackage {
return np;
}
public void encrypt(PublicKey publicKey) throws Exception {
public NetworkPackage encrypt(PublicKey publicKey) throws Exception {
String serialized = serialize();
@@ -185,17 +187,11 @@ public class NetworkPackage {
chunks.put(Base64.encodeToString(encryptedChunk, Base64.NO_WRAP));
}
mId = System.currentTimeMillis();
mType = NetworkPackage.PACKAGE_TYPE_ENCRYPTED;
mBody = new JSONObject();
try {
mBody.put("data", chunks);
}catch(Exception e){
e.printStackTrace();
Log.e("NetworkPackage","Exception");
}
//Log.i("NetworkPackage", "Encrypted " + chunks.length()+" chunks");
Log.i("NetworkPackage", "Encrypted " + chunks.length()+" chunks");
NetworkPackage encrypted = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_ENCRYPTED);
encrypted.set("data", chunks);
return encrypted;
}