aeron-driver/src/main/java/io/aeron/driver/media/UdpChannel.java
@SuppressWarnings("MethodLength")
    public static UdpChannel parse(final String channelUriString)
    {
        try
        {
            final ChannelUri channelUri = ChannelUri.parse(channelUriString);
            validateConfiguration(channelUri);

            InetSocketAddress endpointAddress = getEndpointAddress(channelUri);
            final InetSocketAddress explicitControlAddress = getExplicitControlAddress(channelUri);

            final String tagIdStr = channelUri.channelTag();
            final String controlMode = channelUri.get(CommonContext.MDC_CONTROL_MODE_PARAM_NAME);
            final boolean hasNoDistinguishingCharacteristic =
                null == endpointAddress && null == explicitControlAddress && null == tagIdStr;

            if (hasNoDistinguishingCharacteristic && null == controlMode)
            {
                throw new IllegalArgumentException(
                    "Aeron URIs for UDP must specify an endpoint address, control address, tag-id, or control-mode");
            }

            if (null != endpointAddress && endpointAddress.isUnresolved())
            {
                throw new UnknownHostException("could not resolve endpoint address: " + endpointAddress);
            }

            if (null != explicitControlAddress && explicitControlAddress.isUnresolved())
            {
                throw new UnknownHostException("could not resolve control address: " + explicitControlAddress);
            }

            final Context context = new Context()
                .uriStr(channelUriString)
                .channelUri(channelUri)
                .hasNoDistinguishingCharacteristic(hasNoDistinguishingCharacteristic);

            if (null != tagIdStr)
            {
                context.hasTagId(true).tagId(Long.parseLong(tagIdStr));
            }

            if (null == endpointAddress)
            {
                endpointAddress = new InetSocketAddress("0.0.0.0", 0);
            }

            if (endpointAddress.getAddress().isMulticastAddress())
            {
                final InetSocketAddress controlAddress = getMulticastControlAddress(endpointAddress);
                final InterfaceSearchAddress searchAddress = getInterfaceSearchAddress(channelUri);
                final NetworkInterface localInterface = findInterface(searchAddress);
                final InetSocketAddress resolvedAddress = resolveToAddressOfInterface(localInterface, searchAddress);

                context
                    .isMulticast(true)
                    .localControlAddress(resolvedAddress)
                    .remoteControlAddress(controlAddress)
                    .localDataAddress(resolvedAddress)
                    .remoteDataAddress(endpointAddress)
                    .localInterface(localInterface)
                    .protocolFamily(getProtocolFamily(endpointAddress.getAddress()))
                    .canonicalForm(canonicalise(resolvedAddress, endpointAddress));

                final String ttlValue = channelUri.get(CommonContext.TTL_PARAM_NAME);
                if (null != ttlValue)
                {
                    context.hasMulticastTtl(true).multicastTtl(Integer.parseInt(ttlValue));
                }
            }
            else if (null != explicitControlAddress)
            {
                context
                    .hasExplicitControl(true)
                    .remoteControlAddress(endpointAddress)
                    .remoteDataAddress(endpointAddress)
                    .localControlAddress(explicitControlAddress)
                    .localDataAddress(explicitControlAddress)
                    .protocolFamily(getProtocolFamily(endpointAddress.getAddress()))
                    .canonicalForm(canonicalise(explicitControlAddress, endpointAddress));
            }
            else
            {
                final InterfaceSearchAddress searchAddress = getInterfaceSearchAddress(channelUri);

                final InetSocketAddress localAddress = searchAddress.getInetAddress().isAnyLocalAddress() ?
                    searchAddress.getAddress() :
                    resolveToAddressOfInterface(findInterface(searchAddress), searchAddress);

                final String uniqueCanonicalFormSuffix = hasNoDistinguishingCharacteristic ?
                    ("-" + UNIQUE_CANONICAL_FORM_VALUE.getAndAdd(1)) : "";

                context
                    .remoteControlAddress(endpointAddress)
                    .remoteDataAddress(endpointAddress)
                    .localControlAddress(localAddress)
                    .localDataAddress(localAddress)
                    .protocolFamily(getProtocolFamily(endpointAddress.getAddress()))
                    .canonicalForm(canonicalise(localAddress, endpointAddress) + uniqueCanonicalFormSuffix);
            }

            return new UdpChannel(context);
        }
        catch (final Exception ex)
        {
            throw new InvalidChannelException(ErrorCode.INVALID_CHANNEL, ex);
        }
    }
@SuppressWarnings("MethodLength")
    public static UdpChannel parse(final String channelUriString)
    {
        try
        {
            final ChannelUri channelUri = ChannelUri.parse(channelUriString);
            validateConfiguration(channelUri);

            InetSocketAddress endpointAddress = getEndpointAddress(channelUri);
            final InetSocketAddress explicitControlAddress = getExplicitControlAddress(channelUri);

            final String tagIdStr = channelUri.channelTag();
            final String controlMode = channelUri.get(CommonContext.MDC_CONTROL_MODE_PARAM_NAME);
            final boolean hasNoDistinguishingCharacteristic =
                null == endpointAddress && null == explicitControlAddress && null == tagIdStr;

            if (hasNoDistinguishingCharacteristic && null == controlMode)
            {
                throw new IllegalArgumentException(
                    "Aeron URIs for UDP must specify an endpoint address, control address, tag-id, or control-mode");
            }

            if (null != endpointAddress && endpointAddress.isUnresolved())
            {
                throw new UnknownHostException("could not resolve endpoint address: " + endpointAddress);
            }

            if (null != explicitControlAddress && explicitControlAddress.isUnresolved())
            {
                throw new UnknownHostException("could not resolve control address: " + explicitControlAddress);
            }

            final Context context = new Context()
                .uriStr(channelUriString)
                .channelUri(channelUri)
                .hasNoDistinguishingCharacteristic(hasNoDistinguishingCharacteristic);

            if (null != tagIdStr)
            {
                context.hasTagId(true).tagId(Long.parseLong(tagIdStr));
            }

            if (null == endpointAddress)
            {
                endpointAddress = new InetSocketAddress("0.0.0.0", 0);
            }

            if (endpointAddress.getAddress().isMulticastAddress())
            {
                final InetSocketAddress controlAddress = getMulticastControlAddress(endpointAddress);
                final InterfaceSearchAddress searchAddress = getInterfaceSearchAddress(channelUri);
                final NetworkInterface localInterface = findInterface(searchAddress);
                final InetSocketAddress resolvedAddress = resolveToAddressOfInterface(localInterface, searchAddress);

                context
                    .isMulticast(true)
                    .localControlAddress(resolvedAddress)
                    .remoteControlAddress(controlAddress)
                    .localDataAddress(resolvedAddress)
                    .remoteDataAddress(endpointAddress)
                    .localInterface(localInterface)
                    .protocolFamily(getProtocolFamily(endpointAddress.getAddress()))
                    .canonicalForm(canonicalise(resolvedAddress, endpointAddress));

                final String ttlValue = channelUri.get(CommonContext.TTL_PARAM_NAME);
                if (null != ttlValue)
                {
                    context.hasMulticastTtl(true).multicastTtl(Integer.parseInt(ttlValue));
                }
            }
            else if (null != explicitControlAddress)
            {
                context
                    .hasExplicitControl(true)
                    .remoteControlAddress(endpointAddress)
                    .remoteDataAddress(endpointAddress)
                    .localControlAddress(explicitControlAddress)
                    .localDataAddress(explicitControlAddress)
                    .protocolFamily(getProtocolFamily(endpointAddress.getAddress()))
                    .canonicalForm(canonicalise(explicitControlAddress, endpointAddress));
            }
            else
            {
                final InterfaceSearchAddress searchAddress = getInterfaceSearchAddress(channelUri);

                final InetSocketAddress localAddress = searchAddress.getInetAddress().isAnyLocalAddress() ?
                    searchAddress.getAddress() :
                    resolveToAddressOfInterface(findInterface(searchAddress), searchAddress);

                final String uniqueCanonicalFormSuffix = hasNoDistinguishingCharacteristic ?
                    ("-" + UNIQUE_CANONICAL_FORM_VALUE.getAndAdd(1)) : "";

                context
                    .remoteControlAddress(endpointAddress)
                    .remoteDataAddress(endpointAddress)
                    .localControlAddress(localAddress)
                    .localDataAddress(localAddress)
                    .protocolFamily(getProtocolFamily(endpointAddress.getAddress()))
                    .canonicalForm(canonicalise(localAddress, endpointAddress) + uniqueCanonicalFormSuffix);
            }

            return new UdpChannel(context);
        }
        catch (final Exception ex)
        {
            throw new InvalidChannelException(ErrorCode.INVALID_CHANNEL, ex);
        }
    }
@ SuppressWarnings ( "MethodLength" ) public static UdpChannel parse ( final String channelUriString ) { try { final ChannelUri channelUri = ChannelUri . parse ( channelUriString ) ; validateConfiguration ( channelUri ) ; InetSocketAddress endpointAddress = getEndpointAddress ( channelUri ) ; final InetSocketAddress explicitControlAddress = getExplicitControlAddress ( channelUri ) ; final String tagIdStr = channelUri . channelTag ( ) ; final String controlMode = channelUri . get ( CommonContext . MDC_CONTROL_MODE_PARAM_NAME ) ; final boolean hasNoDistinguishingCharacteristic = null == endpointAddress && null == explicitControlAddress && null == tagIdStr ; if ( hasNoDistinguishingCharacteristic && null == controlMode ) { throw new IllegalArgumentException ( "Aeron URIs for UDP must specify an endpoint address, control address, tag-id, or control-mode" ) ; } if ( null != endpointAddress && endpointAddress . isUnresolved ( ) ) { throw new UnknownHostException ( "could not resolve endpoint address: " + endpointAddress ) ; } if ( null != explicitControlAddress && explicitControlAddress . isUnresolved ( ) ) { throw new UnknownHostException ( "could not resolve control address: " + explicitControlAddress ) ; } final Context context = new Context ( ) . uriStr ( channelUriString ) . channelUri ( channelUri ) . hasNoDistinguishingCharacteristic ( hasNoDistinguishingCharacteristic ) ; if ( null != tagIdStr ) { context . hasTagId ( true ) . tagId ( Long . parseLong ( tagIdStr ) ) ; } if ( null == endpointAddress ) { endpointAddress = new InetSocketAddress ( "0.0.0.0" , 0 ) ; } if ( endpointAddress . getAddress ( ) . isMulticastAddress ( ) ) { final InetSocketAddress controlAddress = getMulticastControlAddress ( endpointAddress ) ; final InterfaceSearchAddress searchAddress = getInterfaceSearchAddress ( channelUri ) ; final NetworkInterface localInterface = findInterface ( searchAddress ) ; final InetSocketAddress resolvedAddress = resolveToAddressOfInterface ( localInterface , searchAddress ) ; context . isMulticast ( true ) . localControlAddress ( resolvedAddress ) . remoteControlAddress ( controlAddress ) . localDataAddress ( resolvedAddress ) . remoteDataAddress ( endpointAddress ) . localInterface ( localInterface ) . protocolFamily ( getProtocolFamily ( endpointAddress . getAddress ( ) ) ) . canonicalForm ( canonicalise ( resolvedAddress , endpointAddress ) ) ; final String ttlValue = channelUri . get ( CommonContext . TTL_PARAM_NAME ) ; if ( null != ttlValue ) { context . hasMulticastTtl ( true ) . multicastTtl ( Integer . parseInt ( ttlValue ) ) ; } } else if ( null != explicitControlAddress ) { context . hasExplicitControl ( true ) . remoteControlAddress ( endpointAddress ) . remoteDataAddress ( endpointAddress ) . localControlAddress ( explicitControlAddress ) . localDataAddress ( explicitControlAddress ) . protocolFamily ( getProtocolFamily ( endpointAddress . getAddress ( ) ) ) . canonicalForm ( canonicalise ( explicitControlAddress , endpointAddress ) ) ; } else { final InterfaceSearchAddress searchAddress = getInterfaceSearchAddress ( channelUri ) ; final InetSocketAddress localAddress = searchAddress . getInetAddress ( ) . isAnyLocalAddress ( ) ? searchAddress . getAddress ( ) : resolveToAddressOfInterface ( findInterface ( searchAddress ) , searchAddress ) ; final String uniqueCanonicalFormSuffix = hasNoDistinguishingCharacteristic ? ( "-" + UNIQUE_CANONICAL_FORM_VALUE . getAndAdd ( 1 ) ) : "" ; context . remoteControlAddress ( endpointAddress ) . remoteDataAddress ( endpointAddress ) . localControlAddress ( localAddress ) . localDataAddress ( localAddress ) . protocolFamily ( getProtocolFamily ( endpointAddress . getAddress ( ) ) ) . canonicalForm ( canonicalise ( localAddress , endpointAddress ) + uniqueCanonicalFormSuffix ) ; } return new UdpChannel ( context ) ; } catch ( final Exception ex ) { throw new InvalidChannelException ( ErrorCode . INVALID_CHANNEL , ex ) ; } }
Parse channel URI and create a {@link UdpChannel}.

@param channelUriString to parse
@return a new {@link UdpChannel}
@throws InvalidChannelException if an error occurs.
Parse channel URI and create a { @link UdpChannel } .