Mercurial > projects > hoofbaby
diff deps/Platinum/ThirdParty/Neptune/Source/System/PSP/NptPSPNetwork.cpp @ 0:3425707ddbf6
Initial import (hopefully this mercurial stuff works...)
author | fraserofthenight |
---|---|
date | Mon, 06 Jul 2009 08:06:28 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deps/Platinum/ThirdParty/Neptune/Source/System/PSP/NptPSPNetwork.cpp Mon Jul 06 08:06:28 2009 -0700 @@ -0,0 +1,71 @@ +/***************************************************************** +| +| Neptune - Network :: PSP Implementation +| +| (c) 2001-2005 Gilles Boccon-Gibod +| Author: Sylvain Rebaud (sylvain@plutinosoft.com) +| + ****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "NptNetwork.h" + +/*---------------------------------------------------------------------- +| NPT_NetworkInterface::GetNetworkInterfaces ++---------------------------------------------------------------------*/ +NPT_Result +NPT_NetworkInterface::GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces) +{ + union SceNetApctlInfo info; + int ret = sceNetApctlGetInfo(SCE_NET_APCTL_INFO_IP_ADDRESS, &info); + if (ret < 0) { + return NPT_FAILURE; + } + NPT_IpAddress primary_address; + if (NPT_FAILED(primary_address.Parse(info.ip_address))) { + return NPT_FAILURE; + } + + NPT_IpAddress netmask; + if (NPT_FAILED(netmask.Parse(info.netmask))) { + return NPT_FAILURE; + } + + NPT_IpAddress broadcast_address; + NPT_Flags flags = 0; + flags |= NPT_NETWORK_INTERFACE_FLAG_BROADCAST; + flags |= NPT_NETWORK_INTERFACE_FLAG_MULTICAST; + + // get mac address + SceNetEtherAddr mac_info; + ret = sceNetGetLocalEtherAddr(&mac_info); + if (ret < 0) { + return NPT_FAILURE; + } + NPT_MacAddress mac(TYPE_IEEE_802_11, mac_info.data, SCE_NET_ETHER_ADDR_LEN); + + // create an interface object + char iface_name[5]; + iface_name[0] = 'i'; + iface_name[1] = 'f'; + iface_name[2] = '0'; + iface_name[3] = '0'; + iface_name[4] = '\0'; + NPT_NetworkInterface* iface = new NPT_NetworkInterface(iface_name, mac, flags); + + // set the interface address + NPT_NetworkInterfaceAddress iface_address( + primary_address, + broadcast_address, + NPT_IpAddress::Any, + netmask); + iface->AddAddress(iface_address); + + // add the interface to the list + interfaces.Add(iface); + + return NPT_SUCCESS; +} +