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

org.freedesktop.dbus.connections.transports.TcpTransport Maven / Gradle / Ivy

package org.freedesktop.dbus.connections.transports;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

import org.freedesktop.dbus.connections.BusAddress;
import org.freedesktop.dbus.connections.SASL;

/**
 * Transport type representing a transport connection to TCP.
 * 
 * @author hypfvieh
 * @since v3.2.0 - 2019-02-08
 */
public class TcpTransport extends AbstractTransport {

    private Socket socket;
    private final int        timeout;

    
    TcpTransport(BusAddress _address, int _timeout) {
        super(_address);
        timeout = _timeout;
        setSaslAuthMode(SASL.AUTH_SHA);
    }

    @Override
    boolean hasFileDescriptorSupport() {
        return false; // file descriptor passing not possible on TCP connections
    }

    /**
     * Connect to DBus using TCP.
     * @throws IOException on error
     */
    void connect() throws IOException {
        
        if (getAddress().isListeningSocket()) {
            try (ServerSocket ss = new ServerSocket()) {
                ss.bind(new InetSocketAddress(getAddress().getHost(), getAddress().getPort()));
                socket = ss.accept();
            }
        } else {
            socket = new Socket();
            getLogger().trace("Setting timeout to {} on Socket", timeout);
            socket.connect(new InetSocketAddress(getAddress().getHost(), getAddress().getPort()), timeout);
        }
        
        setInputOutput(socket);

        authenticate(socket.getOutputStream(), socket.getInputStream(), socket);
    }

    @Override
    public void close() throws IOException {
        if (socket != null && !socket.isClosed()) {
            socket.close();
        }
        super.close();
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy