Skip to content

Commit 3d5f17b

Browse files
committed
jnr-unixsocket: Switched to new library trying blocking mode
1 parent fb189f5 commit 3d5f17b

16 files changed

Lines changed: 745 additions & 674 deletions

File tree

dbus-java/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@
108108
</build>
109109

110110
<dependencies>
111+
<dependency>
112+
<groupId>com.github.jnr</groupId>
113+
<artifactId>jnr-unixsocket</artifactId>
114+
<version>0.22-SNAPSHOT</version>
115+
</dependency>
116+
111117
<dependency>
112118
<groupId>com.github.hypfvieh</groupId>
113119
<artifactId>java-utils</artifactId>

dbus-java/src/main/java/org/freedesktop/dbus/MessageReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,6 @@ public void close() throws IOException {
199199
}
200200

201201
public boolean isClosed() {
202-
return inputStream != null;
202+
return inputStream == null;
203203
}
204204
}

dbus-java/src/main/java/org/freedesktop/dbus/MessageWriter.java

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
package org.freedesktop.dbus;
1414

15-
import java.io.BufferedOutputStream;
1615
import java.io.Closeable;
1716
import java.io.IOException;
1817
import java.io.OutputStream;
@@ -22,27 +21,14 @@
2221
import org.slf4j.Logger;
2322
import org.slf4j.LoggerFactory;
2423

25-
import cx.ath.matthew.unix.USOutputStream;
26-
2724
public class MessageWriter implements Closeable {
2825

2926
private final Logger logger = LoggerFactory.getLogger(getClass());
3027

3128
private OutputStream outputStream;
32-
private boolean unixSocket;
3329

3430
public MessageWriter(OutputStream _out) {
3531
this.outputStream = _out;
36-
this.unixSocket = false;
37-
try {
38-
if (_out instanceof USOutputStream) {
39-
this.unixSocket = true;
40-
}
41-
} catch (Throwable t) {
42-
}
43-
if (!this.unixSocket) {
44-
this.outputStream = new BufferedOutputStream(_out);
45-
}
4632
}
4733

4834
public void writeMessage(Message m) throws IOException {
@@ -54,22 +40,14 @@ public void writeMessage(Message m) throws IOException {
5440
logger.warn("Message {} wire-data was null!", m);
5541
return;
5642
}
57-
if (unixSocket) {
58-
if (logger.isTraceEnabled()) {
59-
logger.debug("Writing all {} buffers simultaneously to Unix Socket", m.getWireData().length );
60-
for (byte[] buf : m.getWireData()) {
61-
logger.trace("({}):{}", buf, (null == buf ? "" : Hexdump.format(buf)));
62-
}
63-
}
64-
((USOutputStream) outputStream).write(m.getWireData());
65-
} else {
66-
for (byte[] buf : m.getWireData()) {
67-
logger.trace("({}):{}", buf, (null == buf ? "" : Hexdump.format(buf)));
68-
if (null == buf) {
69-
break;
70-
}
71-
outputStream.write(buf);
43+
44+
logger.debug("Writing all {} buffers simultaneously to Unix Socket", m.getWireData().length );
45+
for (byte[] buf : m.getWireData()) {
46+
logger.trace("({}):{}", buf, (null == buf ? "" : Hexdump.format(buf)));
47+
if (null == buf) {
48+
break;
7249
}
50+
outputStream.write(buf);
7351
}
7452
outputStream.flush();
7553
}
@@ -84,6 +62,6 @@ public void close() throws IOException {
8462
}
8563

8664
public boolean isClosed() {
87-
return outputStream != null;
65+
return outputStream == null;
8866
}
8967
}

dbus-java/src/main/java/org/freedesktop/dbus/bin/DBusDaemon.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
import org.freedesktop.dbus.MessageReader;
3838
import org.freedesktop.dbus.MessageWriter;
3939
import org.freedesktop.dbus.connections.BusAddress;
40-
import org.freedesktop.dbus.connections.Transport;
4140
import org.freedesktop.dbus.connections.impl.DirectConnection;
41+
import org.freedesktop.dbus.connections.transports.TransportFactory;
4242
import org.freedesktop.dbus.errors.Error;
4343
import org.freedesktop.dbus.errors.MatchRuleInvalid;
4444
import org.freedesktop.dbus.exceptions.DBusException;
@@ -949,8 +949,8 @@ public static void main(String[] args) throws Exception {
949949
}
950950

951951
BusAddress address = new BusAddress(addr);
952-
if (null == address.getParameter("guid")) {
953-
addr += ",guid=" + Transport.genGUID();
952+
if (!address.hasGuid()) {
953+
addr += ",guid=" + TransportFactory.genGUID();
954954
address = new BusAddress(addr);
955955
}
956956

dbus-java/src/main/java/org/freedesktop/dbus/bin/EmbeddedDBusDaemon.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,17 @@ private void listen() throws IOException {
9494
private void startUnixSocket(BusAddress address) throws IOException {
9595
LOGGER.debug("enter");
9696
UnixServerSocket uss;
97-
if (null != address.getParameter("abstract")) {
98-
uss = new UnixServerSocket(new UnixSocketAddress(address.getParameter("abstract"), true));
97+
if (address.isAbstract()) {
98+
uss = new UnixServerSocket(new UnixSocketAddress(address.getAbstract(), true));
9999
} else {
100-
uss = new UnixServerSocket(new UnixSocketAddress(address.getParameter("path"), false));
100+
uss = new UnixServerSocket(new UnixSocketAddress(address.getPath(), false));
101101
}
102102
listenSocket = uss;
103103

104104
// accept new connections
105105
while (daemonThread.isRunning()) {
106106
UnixSocket s = uss.accept();
107-
if ((new SASL()).auth(SASL.MODE_SERVER, authTypes, address.getParameter("guid"), s.getOutputStream(), s.getInputStream(), s)) {
107+
if ((new SASL()).auth(SASL.SaslMode.SERVER, authTypes, address.getGuid(), s.getOutputStream(), s.getInputStream(), s)) {
108108
// s.setBlocking(false);
109109
daemonThread.addSock(s);
110110
} else {
@@ -120,15 +120,15 @@ private void startTCPSocket(BusAddress address) throws IOException {
120120

121121
LOGGER.debug("enter");
122122

123-
try (ServerSocket ss = new ServerSocket(Integer.parseInt(address.getParameter("port")), 10, InetAddress.getByName(address.getParameter("host")))) {
123+
try (ServerSocket ss = new ServerSocket(address.getPort(), 10, InetAddress.getByName(address.getHost()))) {
124124
listenSocket = ss;
125125

126126
// accept new connections
127127
while (daemonThread.isRunning()) {
128128
Socket s = ss.accept();
129129
boolean authOK = false;
130130
try {
131-
authOK = (new SASL()).auth(SASL.MODE_SERVER, authTypes, address.getParameter("guid"), s.getOutputStream(), s.getInputStream(), null);
131+
authOK = (new SASL()).auth(SASL.SaslMode.SERVER, authTypes, address.getGuid(), s.getOutputStream(), s.getInputStream(), null);
132132
} catch (Exception e) {
133133
LOGGER.debug("", e);
134134
}

dbus-java/src/main/java/org/freedesktop/dbus/connections/AbstractConnection.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
import org.freedesktop.dbus.RemoteInvocationHandler;
4646
import org.freedesktop.dbus.RemoteObject;
4747
import org.freedesktop.dbus.SignalTuple;
48+
import org.freedesktop.dbus.connections.transports.AbstractTransport;
49+
import org.freedesktop.dbus.connections.transports.TransportFactory;
4850
import org.freedesktop.dbus.errors.Error;
4951
import org.freedesktop.dbus.errors.UnknownMethod;
5052
import org.freedesktop.dbus.errors.UnknownObject;
@@ -117,7 +119,7 @@ public abstract class AbstractConnection implements Closeable {
117119
private boolean weakreferences = false;
118120
private boolean connected = false;
119121

120-
private Transport transport;
122+
private AbstractTransport transport;
121123
private ExecutorService workerThreadPool;
122124
private ExecutorService senderService;
123125

@@ -146,7 +148,8 @@ protected AbstractConnection(String address) throws DBusException {
146148

147149
try {
148150
busAddress = new BusAddress(address);
149-
transport = new Transport(busAddress, AbstractConnection.TIMEOUT);
151+
transport = TransportFactory.createTransport(busAddress, AbstractConnection.TIMEOUT);
152+
transport.start();
150153
connected = true;
151154
} catch (IOException | DBusException ioe) {
152155
logger.debug("Error creating transport", ioe);
@@ -480,7 +483,7 @@ public synchronized void disconnect() {
480483
// disconnect from the transport layer
481484
try {
482485
if (transport != null) {
483-
transport.disconnect();
486+
transport.close();
484487
transport = null;
485488
}
486489
} catch (IOException exIo) {

dbus-java/src/main/java/org/freedesktop/dbus/connections/BusAddress.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.slf4j.Logger;
2020
import org.slf4j.LoggerFactory;
2121

22+
import com.github.hypfvieh.util.TypeUtil;
23+
2224
public class BusAddress {
2325
private final Logger logger = LoggerFactory.getLogger(getClass());
2426

@@ -66,11 +68,50 @@ public AddressBusTypes getBusType() {
6668
return type;
6769
}
6870

71+
public boolean isAbstract() {
72+
return parameters.containsKey("abstract");
73+
}
74+
75+
public boolean isListeningSocket() {
76+
return parameters.containsKey("listen");
77+
}
78+
79+
public boolean hasPath() {
80+
return parameters.containsKey("path");
81+
}
82+
83+
public boolean hasHost() {
84+
return parameters.containsKey("host");
85+
}
86+
87+
public boolean hasPort() {
88+
return parameters.containsKey("port");
89+
}
90+
91+
public boolean hasGuid() {
92+
return parameters.containsKey("guid");
93+
}
6994

70-
public String getParameter(String key) {
71-
return parameters.get(key);
95+
public String getAbstract() {
96+
return parameters.get("abstract");
97+
}
98+
99+
public String getPath() {
100+
return parameters.get("path");
101+
}
102+
103+
public int getPort() {
104+
return TypeUtil.isValidNetworkPort(parameters.get("port"), true) ? Integer.parseInt(parameters.get("port")) : null;
105+
}
106+
107+
public String getHost() {
108+
return parameters.get("host");
72109
}
73110

111+
public String getGuid() {
112+
return parameters.get("guid");
113+
}
114+
74115
@Override
75116
public String toString() {
76117
return type + ": " + parameters;
@@ -81,7 +122,7 @@ public String getRawAddress() {
81122
}
82123

83124
public boolean isServer() {
84-
return getParameter("listen") != null;
125+
return isListeningSocket();
85126
}
86127

87128
public static enum AddressBusTypes {

0 commit comments

Comments
 (0)