All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.freedesktop.dbus.connections.config.TransportConfig Maven / Gradle / Ivy

Go to download

Improved version of the DBus-Java library provided by freedesktop.org (https://dbus.freedesktop.org/doc/dbus-java/). This is the OSGi compliant bundle of all required libraries in one bundle.

There is a newer version: 5.1.1
Show newest version
package org.freedesktop.dbus.connections.config;

import org.freedesktop.dbus.connections.BusAddress;
import org.freedesktop.dbus.connections.impl.BaseConnectionBuilder;
import org.freedesktop.dbus.connections.transports.AbstractTransport;
import org.freedesktop.dbus.connections.transports.TransportBuilder;
import org.freedesktop.dbus.utils.Util;

import java.nio.file.attribute.PosixFilePermission;
import java.util.*;
import java.util.function.Consumer;

/**
 * Configuration used to setup a transport.
 *
 * @author hypfvieh
 * @since v4.2.0 - 2022-07-21
 */
public final class TransportConfig {

    private SaslConfig                  saslConfig;

    private BusAddress                  busAddress;

    private Consumer preConnectCallback;
    private Consumer afterBindCallback;

    private int                         timeout          = 10000;
    private boolean                     autoConnect      = true;

    /** user to set on socket file if this is a server transport (null to do nothing). */
    private String                      fileOwner;
    /** group to set on socket file if this is a server transport (null to do nothing). */
    private String                      fileGroup;

    private byte                        endianess        = BaseConnectionBuilder.getSystemEndianness();
    private boolean                     registerSelf     = true;

    private ClassLoader                 serviceLoaderClassLoader = TransportBuilder.class.getClassLoader();
    private ModuleLayer                 serviceLoaderModuleLayer;

    /**
     * Unix file permissions to set on socket file if this is a server transport (ignored on Windows, does nothing if
     * null)
     */
    private Set    fileUnixPermissions;

    /**
     * Contains additional configuration where no direct getter/setter is available for.
     */
    private Map         additionalConfig = new LinkedHashMap<>();

    public TransportConfig(BusAddress _address) {
        busAddress = _address;
    }

    public TransportConfig() {
        this(null);
    }

    public BusAddress getBusAddress() {
        return busAddress;
    }

    public void setBusAddress(BusAddress _busAddress) {
        busAddress = Objects.requireNonNull(_busAddress, "BusAddress required");
    }

    public void setListening(boolean _listen) {
        updateBusAddress(_listen);
    }

    public boolean isListening() {
        return busAddress != null && busAddress.isListeningSocket();
    }

    public Consumer getPreConnectCallback() {
        return preConnectCallback;
    }

    public void setPreConnectCallback(Consumer _preConnectCallback) {
        preConnectCallback = _preConnectCallback;
    }

    public Consumer getAfterBindCallback() {
        return afterBindCallback;
    }

    public void setAfterBindCallback(Consumer _afterBindCallback) {
        afterBindCallback = _afterBindCallback;
    }

    public boolean isAutoConnect() {
        return autoConnect;
    }

    public void setAutoConnect(boolean _autoConnect) {
        autoConnect = _autoConnect;
    }

    public int getTimeout() {
        return timeout;
    }

    public void setTimeout(int _timeout) {
        timeout = _timeout;
    }

    public String getFileOwner() {
        return fileOwner;
    }

    public void setFileOwner(String _fileOwner) {
        fileOwner = _fileOwner;
    }

    public String getFileGroup() {
        return fileGroup;
    }

    public void setFileGroup(String _fileGroup) {
        fileGroup = _fileGroup;
    }

    public Set getFileUnixPermissions() {
        return fileUnixPermissions;
    }

    public void setFileUnixPermissions(PosixFilePermission... _permissions) {
        if (Util.isWindows()) {
            return;
        }

        if (_permissions == null || _permissions.length < 1) {
            return;
        }

        fileUnixPermissions = new LinkedHashSet<>(Arrays.asList(_permissions));
    }

    public Map getAdditionalConfig() {
        return additionalConfig;
    }

    public void setAdditionalConfig(Map _additionalConfig) {
        additionalConfig = _additionalConfig;
    }

    public SaslConfig getSaslConfig() {
        if (saslConfig == null) {
            saslConfig = new SaslConfig();
        }
        return saslConfig;
    }

    void setSaslConfig(SaslConfig _saslCfg) {
        saslConfig = _saslCfg;
    }

    public byte getEndianess() {
        return endianess;
    }

    public void setEndianess(byte _endianess) {
        endianess = _endianess;
    }

    public boolean isRegisterSelf() {
        return registerSelf;
    }

    public void setRegisterSelf(boolean _registerSelf) {
        registerSelf = _registerSelf;
    }

    public ClassLoader getServiceLoaderClassLoader() {
        return serviceLoaderClassLoader;
    }

    public void setServiceLoaderClassLoader(ClassLoader _serviceLoaderClassLoader) {
        serviceLoaderClassLoader = _serviceLoaderClassLoader;
    }

    public ModuleLayer getServiceLoaderModuleLayer() {
        return serviceLoaderModuleLayer;
    }

    public void setServiceLoaderModuleLayer(ModuleLayer _serviceLoaderModuleLayer) {
        serviceLoaderModuleLayer = _serviceLoaderModuleLayer;
    }

    /**
     * Toggles the busaddress to be a listening (server) or non listening (client) connection.
     * @param _listening true to be a server connection
     */
    void updateBusAddress(boolean _listening) {
        if (busAddress == null) {
            return;
        }
        if (!busAddress.isListeningSocket() && _listening) { // not a listening address, but should be one
            busAddress.addParameter("listen", "true");
        } else if (busAddress.isListeningSocket() && !_listening) { // listening address, but should not be one
            busAddress.removeParameter("listen");
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy