static QuicNettyChannel getOrAddChannel()

in dubbo-remoting-extensions/dubbo-remoting-quic/src/main/java/org/apache/dubbo/remoting/transport/quic/QuicNettyChannel.java [87:119]


    static QuicNettyChannel getOrAddChannel(Channel ch, URL url, ChannelHandler handler) {
        if (ch == null) {
            return null;
        }

        //FIXME
        InetSocketAddress v = null;
        if (ch instanceof QuicStreamChannel) {
            QuicStreamChannel qsc = (QuicStreamChannel) ch;
            QuicChannel qqc = qsc.parent();
            try {
                Field f = qqc.getClass().getDeclaredField("remote");
                f.setAccessible(true);
                v = (InetSocketAddress) f.get(qqc);
            } catch (NoSuchFieldException | IllegalAccessException e) {
                logger.error(e.getMessage());
            }
        }

        QuicNettyChannel ret = CHANNEL_MAP.get(ch);
        if (ret == null) {
            QuicNettyChannel nettyChannel = new QuicNettyChannel(ch, url, handler);
            nettyChannel.setRemoteAddress(v);
            if (ch.isActive()) {
                nettyChannel.markActive(true);
                ret = CHANNEL_MAP.putIfAbsent(ch, nettyChannel);
            }
            if (ret == null) {
                ret = nettyChannel;
            }
        }
        return ret;
    }