Package-private perhaps?

On 18 September 2014 20:01, Remko Popma <[email protected]> wrote:

> On an enterprise machine it is not uncommon to have multiple network
> interface cards. When used internally in UUID, it is okay to ignore that
> scenario, and it's also more convenient to return localhost rather than
> null if there is no network card at all.
>
> If we make this logic public, we cannot make the same assumptions any
> more. Shouldn't we return some sort of iterator or collection of
> MacAddresses? Or call it getFirstMacAddress? The Javadoc says null is
> returned if there's no NIC, but I don't see that in the code. (Do you
> anticipate using this method for something other than UUID? It might be
> better to leave it private...)
>
> Just my 2c.
> Remko
>
> Sent from my iPhone
>
> > On 2014/09/19, at 9:05, [email protected] wrote:
> >
> > Repository: logging-log4j2
> > Updated Branches:
> >  refs/heads/master 6b80804dc -> 2a754e12b
> >
> >
> > Refactor MAC address getter to own method.
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
> > Commit:
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2a754e12
> > Tree:
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2a754e12
> > Diff:
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2a754e12
> >
> > Branch: refs/heads/master
> > Commit: 2a754e12b28df03dab38d5e66db251094a9834a9
> > Parents: 6b80804
> > Author: Matt Sicker <[email protected]>
> > Authored: Thu Sep 18 19:04:56 2014 -0500
> > Committer: Matt Sicker <[email protected]>
> > Committed: Thu Sep 18 19:04:56 2014 -0500
> >
> > ----------------------------------------------------------------------
> > .../logging/log4j/core/util/NetUtils.java       | 40 ++++++++++++++++++++
> > .../logging/log4j/core/util/UuidUtil.java       | 40 +-------------------
> > 2 files changed, 41 insertions(+), 39 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2a754e12/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
> > index 2609fef..46e16ce 100644
> > ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
> > +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NetUtils.java
> > @@ -70,4 +70,44 @@ public final class NetUtils {
> >             return "UNKNOWN_LOCALHOST";
> >         }
> >     }
> > +
> > +    /**
> > +     * Returns the local network interface's MAC address if possible.
> The local network interface is defined here as
> > +     * the {@link NetworkInterface} that is both up and not a loopback
> interface.
> > +     *
> > +     * @return the MAC address of the local network interface or {@code
> null} if no MAC address could be determined.
> > +     * @since 2.1
> > +     */
> > +    public static byte[] getLocalMacAddress() {
> > +        byte[] mac = null;
> > +        try {
> > +            final InetAddress localHost = InetAddress.getLocalHost();
> > +            try {
> > +                final NetworkInterface localInterface =
> NetworkInterface.getByInetAddress(localHost);
> > +                if (isUpAndNotLoopback(localInterface)) {
> > +                    mac = localInterface.getHardwareAddress();
> > +                }
> > +                if (mac == null) {
> > +                    final Enumeration<NetworkInterface>
> networkInterfaces = NetworkInterface.getNetworkInterfaces();
> > +                    while (networkInterfaces.hasMoreElements() && mac
> == null) {
> > +                        final NetworkInterface nic =
> networkInterfaces.nextElement();
> > +                        if (isUpAndNotLoopback(nic)) {
> > +                            mac = nic.getHardwareAddress();
> > +                        }
> > +                    }
> > +                }
> > +            } catch (final SocketException e) {
> > +                LOGGER.catching(e);
> > +            }
> > +            if (mac == null || mac.length == 0) {
> > +                mac = localHost.getAddress();
> > +            }
> > +        } catch (final UnknownHostException ignored) {
> > +        }
> > +        return mac;
> > +    }
> > +
> > +    private static boolean isUpAndNotLoopback(final NetworkInterface
> ni) throws SocketException {
> > +        return ni != null && !ni.isLoopback() && ni.isUp();
> > +    }
> > }
> >
> >
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2a754e12/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
> > ----------------------------------------------------------------------
> > diff --git
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
> > index 34b021f..9bed752 100644
> > ---
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
> > +++
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/UuidUtil.java
> > @@ -16,13 +16,8 @@
> >  */
> > package org.apache.logging.log4j.core.util;
> >
> > -import java.lang.reflect.Method;
> > -import java.net.InetAddress;
> > -import java.net.NetworkInterface;
> > -import java.net.UnknownHostException;
> > import java.nio.ByteBuffer;
> > import java.security.SecureRandom;
> > -import java.util.Enumeration;
> > import java.util.Random;
> > import java.util.UUID;
> > import java.util.concurrent.atomic.AtomicInteger;
> > @@ -65,40 +60,7 @@ public final class UuidUtil {
> >     private static final int HUNDRED_NANOS_PER_MILLI = 10000;
> >
> >     static {
> > -        byte[] mac = null;
> > -        try {
> > -            final InetAddress address = InetAddress.getLocalHost();
> > -            try {
> > -                NetworkInterface ni =
> NetworkInterface.getByInetAddress(address);
> > -                if (ni != null && !ni.isLoopback() && ni.isUp()) {
> > -                    final Method method =
> ni.getClass().getMethod("getHardwareAddress");
> > -                    if (method != null) {
> > -                        mac = (byte[]) method.invoke(ni);
> > -                    }
> > -                }
> > -
> > -                if (mac == null) {
> > -                    final Enumeration<NetworkInterface> enumeration =
> NetworkInterface.getNetworkInterfaces();
> > -                    while (enumeration.hasMoreElements() && mac ==
> null) {
> > -                        ni = enumeration.nextElement();
> > -                        if (ni != null && ni.isUp() &&
> !ni.isLoopback()) {
> > -                            final Method method =
> ni.getClass().getMethod("getHardwareAddress");
> > -                            if (method != null) {
> > -                                mac = (byte[]) method.invoke(ni);
> > -                            }
> > -                        }
> > -                    }
> > -                }
> > -            } catch (final Exception ex) {
> > -                ex.printStackTrace();
> > -                // Ignore exception
> > -            }
> > -            if (mac == null || mac.length == 0) {
> > -                mac = address.getAddress();
> > -            }
> > -        } catch (final UnknownHostException e) {
> > -            // Ignore exception
> > -        }
> > +        byte[] mac = NetUtils.getLocalMacAddress();
> >         final Random randomGenerator = new SecureRandom();
> >         if (mac == null || mac.length == 0) {
> >             mac = new byte[6];
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>


-- 
Matt Sicker <[email protected]>

Reply via email to