Configure dbus name via commandline parameter

This commit is contained in:
groupnet 2019-06-04 14:50:48 +02:00
parent 24714454dd
commit a9e4b8ba98
3 changed files with 36 additions and 8 deletions

View file

@ -2,6 +2,25 @@ package org.asamk.signal;
public class DbusConfig { public class DbusConfig {
public static final String SIGNAL_BUSNAME = "org.asamk.Signal"; public DbusConfig() {
public static final String SIGNAL_OBJECTPATH = "/org/asamk/Signal"; }
public String signalBusName = "org.asamk.Signal";
public String signalObjectPath = "/org/asamk/Signal";
public void setName(String busName) {
DbusConfig.this.signalBusName = busName;
}
public String getName() {
return DbusConfig.this.signalBusName;
}
public void setObjectPath(String objectPath) {
DbusConfig.this.signalObjectPath = objectPath;
}
public String getObjectPath() {
return DbusConfig.this.signalObjectPath;
}
} }

View file

@ -20,6 +20,7 @@ import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.impl.Arguments; import net.sourceforge.argparse4j.impl.Arguments;
import net.sourceforge.argparse4j.inf.*; import net.sourceforge.argparse4j.inf.*;
import org.asamk.Signal; import org.asamk.Signal;
import org.asamk.signal.DbusConfig;
import org.asamk.signal.commands.*; import org.asamk.signal.commands.*;
import org.asamk.signal.manager.BaseConfig; import org.asamk.signal.manager.BaseConfig;
import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.Manager;
@ -57,6 +58,9 @@ public class Main {
Manager m; Manager m;
Signal ts; Signal ts;
DBusConnection dBusConn = null; DBusConnection dBusConn = null;
DbusConfig dbc = new DbusConfig();
if (!isEmpty(ns.getString("busname")))
dbc.setName(ns.getString("busname"));
try { try {
if (ns.getBoolean("dbus") || ns.getBoolean("dbus_system")) { if (ns.getBoolean("dbus") || ns.getBoolean("dbus_system")) {
try { try {
@ -69,7 +73,7 @@ public class Main {
} }
dBusConn = DBusConnection.getConnection(busType); dBusConn = DBusConnection.getConnection(busType);
ts = dBusConn.getRemoteObject( ts = dBusConn.getRemoteObject(
DbusConfig.SIGNAL_BUSNAME, DbusConfig.SIGNAL_OBJECTPATH, dbc.getName(), dbc.getObjectPath(),
Signal.class); Signal.class);
} catch (UnsatisfiedLinkError e) { } catch (UnsatisfiedLinkError e) {
System.err.println("Missing native library dependency for dbus service: " + e.getMessage()); System.err.println("Missing native library dependency for dbus service: " + e.getMessage());
@ -168,6 +172,8 @@ public class Main {
.action(Arguments.version()); .action(Arguments.version());
parser.addArgument("--config") parser.addArgument("--config")
.help("Set the path, where to store the config (Default: $XDG_DATA_HOME/signal-cli , $HOME/.local/share/signal-cli)."); .help("Set the path, where to store the config (Default: $XDG_DATA_HOME/signal-cli , $HOME/.local/share/signal-cli).");
parser.addArgument("--busname")
.help("Specify the dbus name, that will be used for communication (Default: org.asamk.Signal).");
MutuallyExclusiveGroup mut = parser.addMutuallyExclusiveGroup(); MutuallyExclusiveGroup mut = parser.addMutuallyExclusiveGroup();
mut.addArgument("-u", "--username") mut.addArgument("-u", "--username")

View file

@ -3,6 +3,7 @@ package org.asamk.signal.commands;
import net.sourceforge.argparse4j.impl.Arguments; import net.sourceforge.argparse4j.impl.Arguments;
import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser; import net.sourceforge.argparse4j.inf.Subparser;
import org.asamk.signal.DbusConfig;
import org.asamk.signal.DbusReceiveMessageHandler; import org.asamk.signal.DbusReceiveMessageHandler;
import org.asamk.signal.JsonDbusReceiveMessageHandler; import org.asamk.signal.JsonDbusReceiveMessageHandler;
import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.Manager;
@ -12,9 +13,8 @@ import org.freedesktop.dbus.exceptions.DBusException;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static org.asamk.signal.DbusConfig.SIGNAL_BUSNAME;
import static org.asamk.signal.DbusConfig.SIGNAL_OBJECTPATH;
import static org.asamk.signal.util.ErrorUtils.handleAssertionError; import static org.asamk.signal.util.ErrorUtils.handleAssertionError;
import static org.whispersystems.signalservice.internal.util.Util.isEmpty;
public class DaemonCommand implements LocalCommand { public class DaemonCommand implements LocalCommand {
@ -37,6 +37,9 @@ public class DaemonCommand implements LocalCommand {
System.err.println("User is not registered."); System.err.println("User is not registered.");
return 1; return 1;
} }
DbusConfig dbc = new DbusConfig();
if (!isEmpty(ns.getString("busname")))
dbc.setName(ns.getString("busname"));
DBusConnection conn = null; DBusConnection conn = null;
try { try {
try { try {
@ -47,8 +50,8 @@ public class DaemonCommand implements LocalCommand {
busType = DBusConnection.SESSION; busType = DBusConnection.SESSION;
} }
conn = DBusConnection.getConnection(busType); conn = DBusConnection.getConnection(busType);
conn.exportObject(SIGNAL_OBJECTPATH, m); conn.exportObject(dbc.getObjectPath(), m);
conn.requestBusName(SIGNAL_BUSNAME); conn.requestBusName(dbc.getName());
} catch (UnsatisfiedLinkError e) { } catch (UnsatisfiedLinkError e) {
System.err.println("Missing native library dependency for dbus service: " + e.getMessage()); System.err.println("Missing native library dependency for dbus service: " + e.getMessage());
return 1; return 1;
@ -58,7 +61,7 @@ public class DaemonCommand implements LocalCommand {
} }
boolean ignoreAttachments = ns.getBoolean("ignore_attachments"); boolean ignoreAttachments = ns.getBoolean("ignore_attachments");
try { try {
m.receiveMessages(1, TimeUnit.HOURS, false, ignoreAttachments, ns.getBoolean("json") ? new JsonDbusReceiveMessageHandler(m, conn, SIGNAL_OBJECTPATH) : new DbusReceiveMessageHandler(m, conn, SIGNAL_OBJECTPATH)); m.receiveMessages(1, TimeUnit.HOURS, false, ignoreAttachments, ns.getBoolean("json") ? new JsonDbusReceiveMessageHandler(m, conn, dbc.getObjectPath()) : new DbusReceiveMessageHandler(m, conn, dbc.getObjectPath()));
return 0; return 0;
} catch (IOException e) { } catch (IOException e) {
System.err.println("Error while receiving messages: " + e.getMessage()); System.err.println("Error while receiving messages: " + e.getMessage());