From 490de6b6a298f330291bb411d78fa66d70bfa0a8 Mon Sep 17 00:00:00 2001 From: jules Date: Mon, 17 Mar 2008 12:16:37 +0000 Subject: [PATCH] --- .../juce_linux_Network.cpp | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/build/linux/platform_specific_code/juce_linux_Network.cpp b/build/linux/platform_specific_code/juce_linux_Network.cpp index e6ac2013ed..067e5ba8dd 100644 --- a/build/linux/platform_specific_code/juce_linux_Network.cpp +++ b/build/linux/platform_specific_code/juce_linux_Network.cpp @@ -34,8 +34,10 @@ #include #include #include +#include #include #include +#include #include "../../../src/juce_core/basics/juce_StandardHeader.h" @@ -54,8 +56,40 @@ BEGIN_JUCE_NAMESPACE //============================================================================== int SystemStats::getMACAddresses (int64* addresses, int maxNum, const bool littleEndian) throw() { - // xxx todo - return 0; + int numResults = 0; + + const int s = socket (AF_INET, SOCK_DGRAM, 0); + if (s != -1) + { + char buf [1024]; + struct ifconf ifc; + ifc.ifc_len = sizeof (buf); + ifc.ifc_buf = buf; + ioctl (s, SIOCGIFCONF, &ifc); + + for (unsigned int i = 0; i < ifc.ifc_len / sizeof (struct ifreq); ++i) + { + struct ifreq ifr; + strcpy (ifr.ifr_name, ifc.ifc_req[i].ifr_name); + + if (ioctl (s, SIOCGIFFLAGS, &ifr) == 0 + && (ifr.ifr_flags & IFF_LOOPBACK) == 0 + && ioctl (s, SIOCGIFHWADDR, &ifr) == 0 + && numResults < maxNum) + { + int64 a = 0; + for (int j = 6; --j >= 0;) + a = (a << 8) | ifr.ifr_hwaddr.sa_data[j]; + + *addresses++ = a; + ++numResults; + } + } + + close (s); + } + + return numResults; }