diff deps/Platinum/ThirdParty/Neptune/Source/Core/NptNetwork.h @ 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/Core/NptNetwork.h	Mon Jul 06 08:06:28 2009 -0700
@@ -0,0 +1,210 @@
+/*****************************************************************
+|
+|   Neptune - Network
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+|     * Redistributions of source code must retain the above copyright
+|       notice, this list of conditions and the following disclaimer.
+|     * Redistributions in binary form must reproduce the above copyright
+|       notice, this list of conditions and the following disclaimer in the
+|       documentation and/or other materials provided with the distribution.
+|     * Neither the name of Axiomatic Systems nor the
+|       names of its contributors may be used to endorse or promote products
+|       derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_NETWORK_H_
+#define _NPT_NETWORK_H_
+
+/*----------------------------------------------------------------------
+|   includes
++---------------------------------------------------------------------*/
+#include "NptTypes.h"
+#include "NptConstants.h"
+#include "NptStrings.h"
+#include "NptList.h"
+
+/*----------------------------------------------------------------------
+|   constants
++---------------------------------------------------------------------*/
+const unsigned int NPT_NETWORK_MAX_MAC_ADDRESS_LENGTH  = 8;
+
+/*----------------------------------------------------------------------
+|   flags
++---------------------------------------------------------------------*/
+#define NPT_NETWORK_INTERFACE_FLAG_LOOPBACK       0x01
+#define NPT_NETWORK_INTERFACE_FLAG_PROMISCUOUS    0x02
+#define NPT_NETWORK_INTERFACE_FLAG_BROADCAST      0x04
+#define NPT_NETWORK_INTERFACE_FLAG_MULTICAST      0x08
+#define NPT_NETWORK_INTERFACE_FLAG_POINT_TO_POINT 0x10
+
+/*----------------------------------------------------------------------
+|   workarounds
++---------------------------------------------------------------------*/
+#if defined(_WIN32)
+#if defined(SetPort)
+#undef SetPort
+#endif
+#endif
+
+/*----------------------------------------------------------------------
+|   types
++---------------------------------------------------------------------*/
+typedef unsigned int NPT_IpPort;
+
+/*----------------------------------------------------------------------
+|   NPT_IpAddress
++---------------------------------------------------------------------*/
+class NPT_IpAddress
+{
+public:
+    // class members
+    static const NPT_IpAddress Any;
+
+    // constructors and destructor
+    NPT_IpAddress();
+    NPT_IpAddress(unsigned long address);
+
+    // methods
+    NPT_Result       ResolveName(const char* name, 
+                                 NPT_Timeout timeout = NPT_TIMEOUT_INFINITE);
+    NPT_Result       Parse(const char* name);
+    NPT_Result       Set(unsigned long address);
+    NPT_Result       Set(const unsigned char bytes[4]);
+    const unsigned char* AsBytes() const;
+    unsigned long    AsLong() const;
+    NPT_String       ToString() const;
+    
+private:
+    // members
+    unsigned char m_Address[4];
+};
+
+/*----------------------------------------------------------------------
+|   NPT_MacAddress
++---------------------------------------------------------------------*/
+class NPT_MacAddress
+{
+public:
+    // typedef enum
+    typedef enum {
+        TYPE_UNKNOWN,
+        TYPE_LOOPBACK,
+        TYPE_ETHERNET,
+        TYPE_PPP,
+        TYPE_IEEE_802_11
+    } Type;
+    
+    // constructors and destructor
+    NPT_MacAddress() : m_Type(TYPE_UNKNOWN), m_Length(0) {}
+    NPT_MacAddress(Type           type,
+                   const unsigned char* addr, 
+                   unsigned int   length);
+    
+    // methods
+    void                 SetAddress(Type type, const unsigned char* addr,
+                                    unsigned int length);
+    Type                 GetType() const    { return m_Type; }
+    const unsigned char* GetAddress() const { return m_Address; }
+    unsigned int         GetLength() const  { return m_Length; }
+    NPT_String           ToString() const;
+    
+private:
+    // members
+    Type          m_Type;
+    unsigned char m_Address[NPT_NETWORK_MAX_MAC_ADDRESS_LENGTH];
+    unsigned int  m_Length;
+};
+
+/*----------------------------------------------------------------------
+|   NPT_NetworkInterfaceAddress
++---------------------------------------------------------------------*/
+class NPT_NetworkInterfaceAddress
+{
+public:
+    // constructors and destructor
+    NPT_NetworkInterfaceAddress(const NPT_IpAddress& primary,
+                                const NPT_IpAddress& broadcast,
+                                const NPT_IpAddress& destination,
+                                const NPT_IpAddress& netmask) :
+        m_PrimaryAddress(primary),
+        m_BroadcastAddress(broadcast),
+        m_DestinationAddress(destination),
+        m_NetMask(netmask) {}
+
+    // methods
+    const NPT_IpAddress& GetPrimaryAddress() const {
+        return m_PrimaryAddress;
+    }
+    const NPT_IpAddress& GetBroadcastAddress() const {
+        return m_BroadcastAddress;
+    }
+    const NPT_IpAddress& GetDestinationAddress() const {
+        return m_DestinationAddress;
+    }
+    const NPT_IpAddress& GetNetMask() const {
+        return m_NetMask;
+    }
+    
+private:
+    // members
+    NPT_IpAddress m_PrimaryAddress;
+    NPT_IpAddress m_BroadcastAddress;
+    NPT_IpAddress m_DestinationAddress;
+    NPT_IpAddress m_NetMask;
+};
+
+/*----------------------------------------------------------------------
+|   NPT_NetworkInterface
++---------------------------------------------------------------------*/
+class NPT_NetworkInterface
+{
+public:
+    // class methods
+    static NPT_Result GetNetworkInterfaces(NPT_List<NPT_NetworkInterface*>& interfaces);
+
+    // constructors and destructor
+    NPT_NetworkInterface(const char*           name,
+                         const NPT_MacAddress& mac,
+                         NPT_Flags             flags);
+   ~NPT_NetworkInterface() {}
+
+    // methods
+    NPT_Result AddAddress(const NPT_NetworkInterfaceAddress& address);
+    const NPT_String& GetName() const {
+        return m_Name;
+    }
+    const NPT_MacAddress& GetMacAddress() const {
+        return m_MacAddress;
+    }
+    NPT_Flags GetFlags() const { return m_Flags; }
+    const NPT_List<NPT_NetworkInterfaceAddress>& GetAddresses() const {
+        return m_Addresses;
+    }    
+    
+private:
+    // members
+    NPT_String                            m_Name;
+    NPT_MacAddress                        m_MacAddress;
+    NPT_Flags                             m_Flags;
+    NPT_List<NPT_NetworkInterfaceAddress> m_Addresses;
+};
+
+
+#endif // _NPT_NETWORK_H_