From ca708ba3827bcf7e7cc0e480bbf690e3755e9c90 Mon Sep 17 00:00:00 2001 From: Samuel Holland Date: Mon, 31 Jul 2017 21:14:42 -0500 Subject: [PATCH] Profile: Implement deep copying This is a simple, naive implementation that {,de}serializes the profile's state, but it does not depend on the internal representation of Profile or its contained classes. Signed-off-by: Jason A. Donenfeld --- .../java/com/wireguard/config/Profile.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/wireguard/config/Profile.java b/app/src/main/java/com/wireguard/config/Profile.java index e6506c45..70781195 100644 --- a/app/src/main/java/com/wireguard/config/Profile.java +++ b/app/src/main/java/com/wireguard/config/Profile.java @@ -19,7 +19,7 @@ import java.nio.charset.StandardCharsets; * Represents a wg-quick profile. */ -public class Profile extends BaseObservable implements Observable { +public class Profile extends BaseObservable implements Copyable, Observable { private final Interface iface = new Interface(); private boolean isConnected; private final String name; @@ -30,6 +30,22 @@ public class Profile extends BaseObservable implements Observable { this.name = name; } + private Profile(Profile original) + throws IOException { + this(original.getName()); + final byte configBytes[] = original.toString().getBytes(StandardCharsets.UTF_8); + final ByteArrayInputStream configStream = new ByteArrayInputStream(configBytes); + parseFrom(configStream); + } + + public Profile copy() { + try { + return new Profile(this); + } catch (IOException e) { + return null; + } + } + public Interface getInterface() { return iface; }