Skip to content

Commit

Permalink
[network] - add function for retreiving the mac adr as 6 bytes, and r…
Browse files Browse the repository at this point in the history
…efactor networklinux to base macaddr on the 6 bytes instead of the formatted str, like done in windows
  • Loading branch information
Memphiz committed May 14, 2012
1 parent 6f40b50 commit 582a0b6
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 28 deletions.
1 change: 1 addition & 0 deletions xbmc/network/Network.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class CNetworkInterface
virtual bool IsWireless(void) = 0;

virtual CStdString GetMacAddress(void) = 0;
virtual void GetMacAddressRaw(char rawMac[6]) = 0;

virtual CStdString GetCurrentIPAddress() = 0;
virtual CStdString GetCurrentNetmask() = 0;
Expand Down
50 changes: 24 additions & 26 deletions xbmc/network/linux/NetworkLinux.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,19 @@

using namespace std;

CNetworkInterfaceLinux::CNetworkInterfaceLinux(CNetworkLinux* network, CStdString interfaceName, CStdString interfaceMacAdr)
CNetworkInterfaceLinux::CNetworkInterfaceLinux(CNetworkLinux* network, CStdString interfaceName, char interfaceMacAddrRaw[6])

{
m_network = network;
m_interfaceName = interfaceName;
m_interfaceMacAdr = interfaceMacAdr;
m_interfaceMacAdr.Format("%02X:%02X:%02X:%02X:%02X:%02X",
(uint8_t)interfaceMacAddrRaw[0],
(uint8_t)interfaceMacAddrRaw[1],
(uint8_t)interfaceMacAddrRaw[2],
(uint8_t)interfaceMacAddrRaw[3],
(uint8_t)interfaceMacAddrRaw[4],
(uint8_t)interfaceMacAddrRaw[5]);
memcpy(m_interfaceMacAddrRaw, interfaceMacAddrRaw, sizeof(m_interfaceMacAddrRaw));
}

CNetworkInterfaceLinux::~CNetworkInterfaceLinux(void)
Expand Down Expand Up @@ -116,6 +123,11 @@ CStdString CNetworkInterfaceLinux::GetMacAddress()
return m_interfaceMacAdr;
}

void CNetworkInterfaceLinux::GetMacAddressRaw(char rawMac[6])
{
memcpy(rawMac, m_interfaceMacAddrRaw, 6);
}

CStdString CNetworkInterfaceLinux::GetCurrentIPAddress(void)
{
CStdString result = "";
Expand Down Expand Up @@ -328,9 +340,9 @@ CNetworkInterface* CNetworkLinux::GetFirstConnectedInterface(void)
#endif


CStdString CNetworkLinux::GetMacAddress(CStdString interfaceName)
void CNetworkLinux::GetMacAddress(CStdString interfaceName, char rawMac[6])
{
CStdString result = "00:00:00:00:00:00";
memset(rawMac, 0, 6);
#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD)

#if !defined(IFT_ETHER)
Expand All @@ -344,7 +356,7 @@ CStdString CNetworkLinux::GetMacAddress(CStdString interfaceName)

if( getifaddrs(&list) < 0 )
{
return result;
return;
}

for(interface = list; interface != NULL; interface = interface->ifa_next)
Expand All @@ -358,13 +370,7 @@ CStdString CNetworkLinux::GetMacAddress(CStdString interfaceName)

if( dlAddr->sdl_alen > 5 )
{
result.Format("%02X:%02X:%02X:%02X:%02X:%02X",
base[0],
base[1],
base[2],
base[3],
base[4],
base[5]);
memcpy(rawMac, base, 6);
}
}
break;
Expand All @@ -379,22 +385,14 @@ CStdString CNetworkLinux::GetMacAddress(CStdString interfaceName)
strcpy(ifr.ifr_name, interfaceName.c_str());
if (ioctl(GetSocket(), SIOCGIFHWADDR, &ifr) >= 0)
{
result.Format("%02X:%02X:%02X:%02X:%02X:%02X",
(unsigned char)ifr.ifr_hwaddr.sa_data[0],
(unsigned char)ifr.ifr_hwaddr.sa_data[1],
(unsigned char)ifr.ifr_hwaddr.sa_data[2],
(unsigned char)ifr.ifr_hwaddr.sa_data[3],
(unsigned char)ifr.ifr_hwaddr.sa_data[4],
(unsigned char)ifr.ifr_hwaddr.sa_data[5]);
memcpy(rawMac, ifr.ifr_hwaddr.sa_data, 6);
}
#endif

return result;
}

void CNetworkLinux::queryInterfaceList()
{
CStdString macAddr = "";
char macAddrRaw[6];
m_interfaces.clear();

#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD)
Expand All @@ -410,9 +408,9 @@ void CNetworkLinux::queryInterfaceList()
if(cur->ifa_addr->sa_family != AF_INET)
continue;

macAddr = GetMacAddress(cur->ifa_name);
GetMacAddress(cur->ifa_name, macAddrRaw);
// Add the interface.
m_interfaces.push_back(new CNetworkInterfaceLinux(this, cur->ifa_name, macAddr));
m_interfaces.push_back(new CNetworkInterfaceLinux(this, cur->ifa_name, macAddrRaw));
}

freeifaddrs(list);
Expand Down Expand Up @@ -447,8 +445,8 @@ void CNetworkLinux::queryInterfaceList()

// save the result
CStdString interfaceName = p;
macAddr = GetMacAddress(interfaceName);
m_interfaces.push_back(new CNetworkInterfaceLinux(this, interfaceName, macAddr));
GetMacAddress(interfaceName, macAddrRaw);
m_interfaces.push_back(new CNetworkInterfaceLinux(this, interfaceName, macAddrRaw));
}
free(line);
fclose(fp);
Expand Down
6 changes: 4 additions & 2 deletions xbmc/network/linux/NetworkLinux.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class CNetworkLinux;
class CNetworkInterfaceLinux : public CNetworkInterface
{
public:
CNetworkInterfaceLinux(CNetworkLinux* network, CStdString interfaceName, CStdString interfaceMacAdr);
CNetworkInterfaceLinux(CNetworkLinux* network, CStdString interfaceName, char interfaceMacAddrRaw[6]);
~CNetworkInterfaceLinux(void);

virtual CStdString& GetName(void);
Expand All @@ -41,6 +41,7 @@ class CNetworkInterfaceLinux : public CNetworkInterface
virtual bool IsWireless(void);

virtual CStdString GetMacAddress(void);
virtual void GetMacAddressRaw(char rawMac[6]);

virtual CStdString GetCurrentIPAddress();
virtual CStdString GetCurrentNetmask();
Expand All @@ -57,6 +58,7 @@ class CNetworkInterfaceLinux : public CNetworkInterface
void WriteSettings(FILE* fw, NetworkAssignment assignment, CStdString& ipAddress, CStdString& networkMask, CStdString& defaultGateway, CStdString& essId, CStdString& key, EncMode& encryptionMode);
CStdString m_interfaceName;
CStdString m_interfaceMacAdr;
char m_interfaceMacAddrRaw[6];
CNetworkLinux* m_network;
};

Expand All @@ -83,7 +85,7 @@ class CNetworkLinux : public CNetwork

private:
int GetSocket() { return m_sock; }
CStdString GetMacAddress(CStdString interfaceName);
void GetMacAddress(CStdString interfaceName, char macAddrRaw[6]);
void queryInterfaceList();
std::vector<CNetworkInterface*> m_interfaces;
int m_sock;
Expand Down
5 changes: 5 additions & 0 deletions xbmc/network/windows/NetworkWin32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@ CStdString CNetworkInterfaceWin32::GetMacAddress()
return result;
}

void CNetworkInterfaceWin32::GetMacAddressRaw(char rawMac[6])
{
memcpy(rawMac, m_adapter.Address, 6);
}

CStdString CNetworkInterfaceWin32::GetCurrentIPAddress(void)
{
return m_adapter.IpAddressList.IpAddress.String;
Expand Down
1 change: 1 addition & 0 deletions xbmc/network/windows/NetworkWin32.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class CNetworkInterfaceWin32 : public CNetworkInterface
virtual bool IsWireless(void);

virtual CStdString GetMacAddress(void);
virtual void GetMacAddressRaw(char rawMac[6]);

virtual CStdString GetCurrentIPAddress();
virtual CStdString GetCurrentNetmask();
Expand Down

0 comments on commit 582a0b6

Please sign in to comment.