TcpConnector.java

// Copyright (c) ZeroC, Inc.

package com.zeroc.Ice;

import java.net.InetSocketAddress;
import java.util.Objects;

final class TcpConnector implements Connector {
    @Override
    public Transceiver connect() {
        return new TcpTransceiver(
            _instance, new StreamSocket(_instance, _proxy, _addr, _sourceAddr));
    }

    @Override
    public short type() {
        return _instance.type();
    }

    @Override
    public String toString() {
        return Network.addrToString(_proxy == null ? _addr : _proxy.getAddress());
    }

    @Override
    public int hashCode() {
        int h = 5381;
        h = HashUtil.hashAdd(h, _addr.getAddress().getHostAddress());
        h = HashUtil.hashAdd(h, _addr.getPort());
        if (_sourceAddr != null) {
            h = HashUtil.hashAdd(h, _sourceAddr.getAddress().getHostAddress());
        }
        h = HashUtil.hashAdd(h, _timeout);
        h = HashUtil.hashAdd(h, _connectionId);
        return h;
    }

    //
    // Only for use by TcpEndpoint
    //
    TcpConnector(
            ProtocolInstance instance,
            InetSocketAddress addr,
            NetworkProxy proxy,
            InetSocketAddress sourceAddr,
            int timeout,
            String connectionId) {
        _instance = instance;
        _addr = addr;
        _proxy = proxy;
        _sourceAddr = sourceAddr;
        _timeout = timeout;
        _connectionId = connectionId;
    }

    @Override
    public boolean equals(java.lang.Object obj) {
        if (!(obj instanceof TcpConnector)) {
            return false;
        }

        if (this == obj) {
            return true;
        }

        TcpConnector p = (TcpConnector) obj;
        if (_timeout != p._timeout) {
            return false;
        }

        if (!_connectionId.equals(p._connectionId)) {
            return false;
        }

        if (!Objects.equals(_sourceAddr, p._sourceAddr)) {
            return false;
        }

        return Objects.equals(_addr, p._addr);
    }

    private final ProtocolInstance _instance;
    private final InetSocketAddress _addr;
    private final NetworkProxy _proxy;
    private final InetSocketAddress _sourceAddr;
    private final int _timeout;
    private String _connectionId = "";
}