You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2010/05/12 20:09:35 UTC

svn commit: r943604 - in /activemq/activemq-cpp/trunk/activemq-cpp/src: main/decaf/net/ test/ test/decaf/net/

Author: tabish
Date: Wed May 12 18:09:34 2010
New Revision: 943604

URL: http://svn.apache.org/viewvc?rev=943604&view=rev
Log:
Implement and test more of the InetAddress API

Added:
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.cpp   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.h   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.cpp   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.h   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.cpp   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.h   (with props)
Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.cpp?rev=943604&r1=943603&r2=943604&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.cpp Wed May 12 18:09:34 2010
@@ -25,5 +25,98 @@ Inet4Address::Inet4Address() {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+Inet4Address::Inet4Address( const unsigned char* ipAddress, int numBytes ) :
+    InetAddress( ipAddress, numBytes ) {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Inet4Address::Inet4Address( const std::string& hostname, const unsigned char* ipAddress, int numBytes ) :
+    InetAddress( hostname, ipAddress, numBytes ) {
+}
+
+////////////////////////////////////////////////////////////////////////////////
 Inet4Address::~Inet4Address() {
 }
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isAnyLocalAddress() const {
+
+    for( int ix = 0; ix < 4; ix++ ) {
+        if( this->addressBytes[ix] != 0 ) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isLoopbackAddress() const {
+    return this->addressBytes[0] == 127;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isMulticastAddress() const {
+    return ( this->addressBytes[0] & 0xF0 ) == 0xE0;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isLinkLocalAddress() const {
+    return ( ( this->addressBytes[0] == 169 ) && ( this->addressBytes[1] == 254 ) );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isSiteLocalAddress() const {
+    return ( this->addressBytes[0] == 10 ) ||
+           ( ( this->addressBytes[0] == 172 ) && ( ( this->addressBytes[1] > 15 ) && ( this->addressBytes[1] < 32 ) ) ) ||
+           ( ( this->addressBytes[0] == 192 ) && ( this->addressBytes[1] == 168 ) );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isMCGlobal() const {
+
+    // Check if we have a prefix of 1110
+    if( !isMulticastAddress() ) {
+        return false;
+    }
+
+    unsigned int address = InetAddress::bytesToInt( addressBytes.get(), 0 );
+
+    // Now check the boundaries of the global space if we have an address
+    // that is prefixed by something less than 111000000000000000000001
+    // it is not multicast. ( < 224.0.1.0)
+    if( ( address >> 8 ) < 0xE00001 ) {
+        return false;
+    }
+
+    // Now check the high boundary which is prefixed by 11101110 = 0xEE. If
+    // the value is higher than this than it is not MCGlobal ( > 238.255.255.255 )
+    if( ( address >> 24 ) > 0xEE ) {
+        return false;
+    }
+
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isMCNodeLocal() const {
+
+    // Never true for IPV4
+    return false;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isMCLinkLocal() const {
+    return ( InetAddress::bytesToInt( addressBytes.get(), 0 ) >> 8 ) == 0xE00000;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isMCSiteLocal() const {
+    return ( InetAddress::bytesToInt( addressBytes.get(), 0 ) >> 16 ) == 0xEFFF;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+bool Inet4Address::isMCOrgLocal() const {
+    unsigned int prefix = InetAddress::bytesToInt( addressBytes.get(), 0 ) >> 16;
+    return prefix >= 0xEFC0 && prefix <= 0xEFC3;
+}

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.h?rev=943604&r1=943603&r2=943604&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet4Address.h Wed May 12 18:09:34 2010
@@ -26,12 +26,90 @@ namespace decaf {
 namespace net {
 
     class DECAF_API Inet4Address : public InetAddress {
-    public:
+    private:
+
+        friend class InetAddress;
+
+    protected:
 
         Inet4Address();
+        Inet4Address( const unsigned char* ipAddress, int numBytes );
+        Inet4Address( const std::string& hostname, const unsigned char* ipAddress, int numBytes );
+
+    public:
 
         virtual ~Inet4Address();
 
+        /**
+         * Check if this InetAddress is a valid wildcard address.
+         *
+         * @return true if the address is a wildcard address.
+         */
+        virtual bool isAnyLocalAddress() const;
+
+        /**
+         * Check if this InetAddress is a valid loopback address.
+         *
+         * @return true if the address is a loopback address.
+         */
+        virtual bool isLoopbackAddress() const;
+
+        /**
+         * Check if this InetAddress is a valid Multicast address.
+         *
+         * @return true if the address is a Multicast address.
+         */
+        virtual bool isMulticastAddress() const;
+
+        /**
+         * Check if this InetAddress is a valid link local address.
+         *
+         * @return true if the address is a link local address.
+         */
+        virtual bool isLinkLocalAddress() const;
+
+        /**
+         * Check if this InetAddress is a valid site local address.
+         *
+         * @return true if the address is a site local address.
+         */
+        virtual bool isSiteLocalAddress() const;
+
+        /**
+         * Check if this InetAddress is Multicast and has Global scope.
+         *
+         * @return true if the address is Multicast and has Global scope.
+         */
+        virtual bool isMCGlobal() const;
+
+        /**
+         * Check if this InetAddress is Multicast and has Node Local scope.
+         *
+         * @return true if the address is Multicast and has Node Local scope.
+         */
+        virtual bool isMCNodeLocal() const;
+
+        /**
+         * Check if this InetAddress is Multicast and has Link Local scope.
+         *
+         * @return true if the address is Multicast and has Link Local scope.
+         */
+        virtual bool isMCLinkLocal() const;
+
+        /**
+         * Check if this InetAddress is Multicast and has Site Local scope.
+         *
+         * @return true if the address is Multicast and has Site Local scope.
+         */
+        virtual bool isMCSiteLocal() const;
+
+        /**
+         * Check if this InetAddress is Multicast and has Organization scope.
+         *
+         * @return true if the address is Multicast and has Organization scope.
+         */
+        virtual bool isMCOrgLocal() const;
+
     };
 
 }}

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.cpp?rev=943604&r1=943603&r2=943604&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.cpp Wed May 12 18:09:34 2010
@@ -25,5 +25,15 @@ Inet6Address::Inet6Address() {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+Inet6Address::Inet6Address( const unsigned char* ipAddress, int numBytes ) :
+    InetAddress( ipAddress, numBytes ) {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Inet6Address::Inet6Address( const std::string& hostname, const unsigned char* ipAddress, int numBytes ) :
+    InetAddress( hostname, ipAddress, numBytes ) {
+}
+
+////////////////////////////////////////////////////////////////////////////////
 Inet6Address::~Inet6Address() {
 }

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.h?rev=943604&r1=943603&r2=943604&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/Inet6Address.h Wed May 12 18:09:34 2010
@@ -26,9 +26,17 @@ namespace decaf {
 namespace net {
 
     class DECAF_API Inet6Address : public InetAddress {
-    public:
+    private:
+
+        friend class InetAddress;
+
+    protected:
 
         Inet6Address();
+        Inet6Address( const unsigned char* ipAddress, int numBytes );
+        Inet6Address( const std::string& hostname, const unsigned char* ipAddress, int numBytes );
+
+    public:
 
         virtual ~Inet6Address();
 

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.cpp?rev=943604&r1=943603&r2=943604&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.cpp Wed May 12 18:09:34 2010
@@ -17,6 +17,12 @@
 
 #include "InetAddress.h"
 
+#include <decaf/lang/System.h>
+#include <decaf/lang/Byte.h>
+#include <decaf/net/Inet4Address.h>
+#include <decaf/net/Inet6Address.h>
+#include <decaf/net/UnknownHostException.h>
+
 using namespace decaf;
 using namespace decaf::net;
 using namespace decaf::lang;
@@ -26,12 +32,15 @@ using namespace decaf::lang::exceptions;
 const unsigned char InetAddress::loopbackBytes[4] = { 127, 0, 0, 1 };
 const unsigned char InetAddress::anyBytes[4] = { 0, 0, 0, 0 };
 
+const InetAddress InetAddress::LOOPBACK( Inet4Address( "localhost", InetAddress::loopbackBytes, 4 ) );
+const InetAddress InetAddress::ANY( Inet4Address( InetAddress::anyBytes, 4 ) );
+
 ////////////////////////////////////////////////////////////////////////////////
 InetAddress::InetAddress() {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-InetAddress::InetAddress( unsigned char* ipAddress DECAF_UNUSED, int numBytes DECAF_UNUSED ) {
+InetAddress::InetAddress( const unsigned char* ipAddress, int numBytes ) {
 
     if( ipAddress == NULL ) {
         throw NullPointerException(
@@ -43,12 +52,28 @@ InetAddress::InetAddress( unsigned char*
             __FILE__, __LINE__, "Number of bytes value is invalid: %d", numBytes );
     }
 
-
+    unsigned char* copy = new unsigned char[numBytes];
+    System::arraycopy( ipAddress, 0, copy, 0, numBytes );
+    this->addressBytes.reset( copy, numBytes );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-InetAddress::InetAddress( const std::string& hostname DECAF_UNUSED, unsigned char* ipAddress DECAF_UNUSED, int numBytes DECAF_UNUSED ) {
+InetAddress::InetAddress( const std::string& hostname, const unsigned char* ipAddress, int numBytes ) {
+
+    if( ipAddress == NULL ) {
+        throw NullPointerException(
+            __FILE__, __LINE__, "InetAddress constructor called with null address array." );
+    }
+
+    if( numBytes < 0 ) {
+        throw IllegalArgumentException(
+            __FILE__, __LINE__, "Number of bytes value is invalid: %d", numBytes );
+    }
 
+    unsigned char* copy = new unsigned char[numBytes];
+    System::arraycopy( ipAddress, 0, copy, 0, numBytes );
+    this->addressBytes.reset( copy, numBytes );
+    this->hostname = hostname;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -57,12 +82,83 @@ InetAddress::~InetAddress() {
 
 ////////////////////////////////////////////////////////////////////////////////
 ArrayPointer<unsigned char> InetAddress::getAddress() const {
-
-    return ArrayPointer<unsigned char>();
+    return this->addressBytes.clone();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 std::string InetAddress::getHostAddress() const {
 
-    return "";
+    std::string address;
+
+    for( int ix = 0; ix < this->addressBytes.length(); ix++ ) {
+        address.append( Byte::toString( addressBytes[ix] ) );
+
+        if( ix < this->addressBytes.length() - 1 ) {
+            address.append(".");
+        }
+    }
+    return address;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string InetAddress::getHostname() const {
+
+    if( !this->hostname.empty() ) {
+        return this->hostname;
+    }
+
+    return this->getHostAddress();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string InetAddress::toString() const {
+    return getHostname() + " / " + getHostAddress();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+InetAddress InetAddress::getByAddress( const std::string& hostname, const unsigned char* bytes, int numBytes ) {
+
+    if( numBytes == 4 ) {
+        return Inet4Address( hostname, bytes, numBytes );
+    } else if( numBytes == 16 ) {
+        return Inet6Address( hostname, bytes, numBytes );
+    } else {
+        throw UnknownHostException(
+            __FILE__, __LINE__, "Number of Bytes passed was invalid: %d", numBytes );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+InetAddress InetAddress::getByAddress( const unsigned char* bytes, int numBytes ) {
+
+    if( numBytes == 4 ) {
+        return Inet4Address( bytes, numBytes );
+    } else if( numBytes == 16 ) {
+        return Inet6Address( bytes, numBytes );
+    } else {
+        throw UnknownHostException(
+            __FILE__, __LINE__, "Number of Bytes passed was invalid: %d", numBytes );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+InetAddress InetAddress::getLocalHost() {
+    return InetAddress::LOOPBACK;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+unsigned int InetAddress::bytesToInt( const unsigned char* bytes, int start ) {
+
+    // First mask the byte with 255, as when a negative
+    // signed byte converts to an integer, it has bits
+    // on in the first 3 bytes, we are only concerned
+    // about the right-most 8 bits.
+    // Then shift the rightmost byte to align with its
+    // position in the integer.
+    int value = ( ( bytes[start + 3] & 255 ) ) |
+                ( ( bytes[start + 2] & 255 ) << 8 ) |
+                ( ( bytes[start + 1] & 255 ) << 16 ) |
+                ( ( bytes[start] & 255 ) << 24 );
+
+    return value;
 }

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.h?rev=943604&r1=943603&r2=943604&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/net/InetAddress.h Wed May 12 18:09:34 2010
@@ -39,26 +39,17 @@ namespace net {
         static const InetAddress ANY;
         static const InetAddress LOOPBACK;
 
-    private:
-
-        std::string hostname;
-        bool reached;
-        decaf::lang::ArrayPointer<unsigned char> addressBytes;
-
     protected:
 
-        int family;
+        mutable std::string hostname;
+        mutable bool reached;
+        mutable decaf::lang::ArrayPointer<unsigned char> addressBytes;
 
     protected:
 
         InetAddress();
-        InetAddress( unsigned char* ipAddress, int numBytes );
-        InetAddress( const std::string& hostname, unsigned char* ipAddress, int numBytes );
-
-    private:
-
-        InetAddress( const InetAddress& );
-        InetAddress& operator= ( const InetAddress& );
+        InetAddress( const unsigned char* ipAddress, int numBytes );
+        InetAddress( const std::string& hostname, const unsigned char* ipAddress, int numBytes );
 
     public:
 
@@ -70,14 +61,178 @@ namespace net {
          *
          * @returns and ArrayPointer containing the raw bytes of the network address.
          */
-        decaf::lang::ArrayPointer<unsigned char> getAddress() const;
+        virtual decaf::lang::ArrayPointer<unsigned char> getAddress() const;
 
         /**
          * Returns a textual representation of the IP Address.
          *
-         * @returns the string form of the IP Adrress.
+         * @returns the string form of the IP Address.
+         */
+        virtual std::string getHostAddress() const;
+
+        /**
+         * Get the host name associated with this InetAddress instance.
+         *
+         * If a host name was set upon construction then that value is returned, otherwise a
+         * reverse name lookup with be performed to attempt to get the host name associated
+         * with the set IP Address.  If the host name cannot be resolved the textual representation
+         * of the IP Address is returned instead.
+         *
+         * @returns the name of the host associated with this set IP Address.
+         */
+        virtual std::string getHostname() const;
+
+        /**
+         * Returns a string representation of the InetAddress in the form 'hostname / ipaddress'
+         *
+         * If the hostname is not resolved than it appears as empty.
+         *
+         * @returns string value of this InetAddress.
+         */
+        virtual std::string toString() const;
+
+    public:  // Address Property Tests, override in the subclasses for correct results
+
+        /**
+         * Check if this InetAddress is a valid wildcard address.
+         *
+         * @return true if the address is a wildcard address.
+         */
+        virtual bool isAnyLocalAddress() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is a valid loopback address.
+         *
+         * @return true if the address is a loopback address.
+         */
+        virtual bool isLoopbackAddress() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is a valid Multicast address.
+         *
+         * @return true if the address is a Multicast address.
+         */
+        virtual bool isMulticastAddress() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is a valid link local address.
+         *
+         * @return true if the address is a link local address.
+         */
+        virtual bool isLinkLocalAddress() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is a valid site local address.
+         *
+         * @return true if the address is a site local address.
+         */
+        virtual bool isSiteLocalAddress() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is Multicast and has Global scope.
+         *
+         * @return true if the address is Multicast and has Global scope.
+         */
+        virtual bool isMCGlobal() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is Multicast and has Node Local scope.
+         *
+         * @return true if the address is Multicast and has Node Local scope.
+         */
+        virtual bool isMCNodeLocal() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is Multicast and has Link Local scope.
+         *
+         * @return true if the address is Multicast and has Link Local scope.
+         */
+        virtual bool isMCLinkLocal() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is Multicast and has Site Local scope.
+         *
+         * @return true if the address is Multicast and has Site Local scope.
+         */
+        virtual bool isMCSiteLocal() const {
+            return false;
+        }
+
+        /**
+         * Check if this InetAddress is Multicast and has Organization scope.
+         *
+         * @return true if the address is Multicast and has Organization scope.
+         */
+        virtual bool isMCOrgLocal() const {
+            return false;
+        }
+
+    public:  // Static Create methods.
+
+        /**
+         * Given a raw IP Address in byte array form, create and return a new InetAddress instance.
+         *
+         * An IPV4 address must be only four bytes in length and an IPV6 address must be 16 bytes in length.
+         *
+         * @return a copy of an InetAddress that represents the given byte array address.
+         *
+         * @throws UnknownHostException if the address array length is invalid.
+         */
+        static InetAddress getByAddress( const unsigned char* bytes, int numBytes );
+
+        /**
+         * Given a host name and IPAddress return a new InetAddress.  There is no name service checking or
+         * address validation done on the provided host name.  The host name can either be machine name or
+         * the text based representation of the IP Address.
+         *
+         * An IPV4 address must be only four bytes in length and an IPV6 address must be 16 bytes in length.
+         *
+         * @return a copy of an InetAddress that represents the given byte array address.
+         *
+         * @throws UnknownHostException if the address array length is invalid.
+         */
+        static InetAddress getByAddress( const std::string& hostname, const unsigned char* bytes, int numBytes );
+
+        /**
+         * Gets an InetAddress that is the local host address.  If the localhost value cannot
+         * be resolved than the InetAddress for Loopback is returned.
+         *
+         * @returns a new InetAddress object that contains the local host address.
+         *
+         * @throws UnknownHostException if the address for local host is not found.
+         */
+        static InetAddress getLocalHost();
+
+    protected:
+
+        /**
+         * Converts the bytes in an address array to an int starting from the value start
+         * treating the start value as the high order byte.
+         *
+         * @param bytes
+         *      The array of bytes to convert to an int.
+         * @param start
+         *      The index in the array to treat as the high order byte.
+         *
+         * @return an unsigned int that represents the address value.
          */
-        std::string getHostAddress() const;
+        static unsigned int bytesToInt( const unsigned char* bytes, int start );
 
     };
 

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am?rev=943604&r1=943603&r2=943604&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/Makefile.am Wed May 12 18:09:34 2010
@@ -111,6 +111,9 @@ cc_sources = \
     decaf/lang/StringTest.cpp \
     decaf/lang/SystemTest.cpp \
     decaf/lang/ThreadTest.cpp \
+    decaf/net/Inet4AddressTest.cpp \
+    decaf/net/Inet6AddressTest.cpp \
+    decaf/net/InetAddressTest.cpp \
     decaf/net/ServerSocketTest.cpp \
     decaf/net/SocketFactoryTest.cpp \
     decaf/net/SocketTest.cpp \
@@ -258,6 +261,9 @@ h_sources = \
     decaf/lang/StringTest.h \
     decaf/lang/SystemTest.h \
     decaf/lang/ThreadTest.h \
+    decaf/net/Inet4AddressTest.h \
+    decaf/net/Inet6AddressTest.h \
+    decaf/net/InetAddressTest.h \
     decaf/net/ServerSocketTest.h \
     decaf/net/SocketFactoryTest.h \
     decaf/net/SocketTest.h \

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.cpp?rev=943604&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.cpp (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.cpp Wed May 12 18:09:34 2010
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Inet4AddressTest.h"
+
+#include <decaf/net/Inet6Address.h>
+
+using namespace decaf;
+using namespace decaf::net;
+
+////////////////////////////////////////////////////////////////////////////////
+Inet4AddressTest::Inet4AddressTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Inet4AddressTest::~Inet4AddressTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void Inet4AddressTest::testGetByAddress() {
+
+}

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.h?rev=943604&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.h (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.h Wed May 12 18:09:34 2010
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DECAF_NET_INET4ADDRESSTEST_H_
+#define _DECAF_NET_INET4ADDRESSTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace decaf {
+namespace net {
+
+    class Inet4AddressTest : public CppUnit::TestFixture {
+
+        CPPUNIT_TEST_SUITE( Inet4AddressTest );
+        CPPUNIT_TEST( testGetByAddress );
+        CPPUNIT_TEST_SUITE_END();
+
+    public:
+
+        Inet4AddressTest();
+        virtual ~Inet4AddressTest();
+
+        void testGetByAddress();
+
+    };
+
+}}
+
+#endif /* _DECAF_NET_INET4ADDRESSTEST_H_ */

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet4AddressTest.h
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.cpp?rev=943604&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.cpp (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.cpp Wed May 12 18:09:34 2010
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Inet6AddressTest.h"
+
+#include <decaf/net/Inet4Address.h>
+
+using namespace decaf;
+using namespace decaf::net;
+
+////////////////////////////////////////////////////////////////////////////////
+Inet6AddressTest::Inet6AddressTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Inet6AddressTest::~Inet6AddressTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void Inet6AddressTest::testGetByAddress() {
+
+}

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.h?rev=943604&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.h (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.h Wed May 12 18:09:34 2010
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DECAF_NET_INET6ADDRESSTEST_H_
+#define _DECAF_NET_INET6ADDRESSTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace decaf {
+namespace net {
+
+    class Inet6AddressTest : public CppUnit::TestFixture {
+
+        CPPUNIT_TEST_SUITE( Inet6AddressTest );
+        CPPUNIT_TEST( testGetByAddress );
+        CPPUNIT_TEST_SUITE_END();
+
+    public:
+
+        Inet6AddressTest();
+        virtual ~Inet6AddressTest();
+
+        void testGetByAddress();
+
+    };
+
+}}
+
+#endif /* _DECAF_NET_INET6ADDRESSTEST_H_ */

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/Inet6AddressTest.h
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.cpp?rev=943604&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.cpp (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.cpp Wed May 12 18:09:34 2010
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "InetAddressTest.h"
+
+#include <decaf/net/InetAddress.h>
+#include <decaf/net/UnknownHostException.h>
+
+using namespace decaf;
+using namespace decaf::net;
+using namespace decaf::lang;
+
+////////////////////////////////////////////////////////////////////////////////
+InetAddressTest::InetAddressTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+InetAddressTest::~InetAddressTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void InetAddressTest::testGetByAddress() {
+
+    const unsigned char bytes[] = { 127, 0, 0, 1 };
+    InetAddress address = InetAddress::getByAddress( bytes, 4 );
+
+    ArrayPointer<unsigned char> value = address.getAddress();
+
+    CPPUNIT_ASSERT( value.get() != NULL );
+    CPPUNIT_ASSERT_EQUAL( bytes[0], value[0] );
+    CPPUNIT_ASSERT_EQUAL( bytes[1], value[1] );
+    CPPUNIT_ASSERT_EQUAL( bytes[2], value[2] );
+    CPPUNIT_ASSERT_EQUAL( bytes[3], value[3] );
+
+    const unsigned char invalid[] = { 1 };
+
+    CPPUNIT_ASSERT_THROW_MESSAGE(
+        "Should throw an UnknownHostException",
+        InetAddress::getByAddress( invalid, 1 ),
+        UnknownHostException );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void InetAddressTest::testGetHostAddress() {
+
+    const unsigned char bytes[] = { 127, 0, 0, 1 };
+    InetAddress address = InetAddress::getByAddress( bytes, 4 );
+    CPPUNIT_ASSERT_EQUAL( std::string( "127.0.0.1" ), address.getHostAddress() );
+}

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.h?rev=943604&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.h (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.h Wed May 12 18:09:34 2010
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DECAF_NET_INETADDRESSTEST_H_
+#define _DECAF_NET_INETADDRESSTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace decaf {
+namespace net {
+
+    class InetAddressTest : public CppUnit::TestFixture {
+
+        CPPUNIT_TEST_SUITE( InetAddressTest );
+        CPPUNIT_TEST( testGetByAddress );
+        CPPUNIT_TEST( testGetHostAddress );
+        CPPUNIT_TEST_SUITE_END();
+
+    public:
+
+        InetAddressTest();
+        virtual ~InetAddressTest();
+
+        void testGetByAddress();
+        void testGetHostAddress();
+
+    };
+
+}}
+
+#endif /* _DECAF_NET_INETADDRESSTEST_H_ */

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/net/InetAddressTest.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp?rev=943604&r1=943603&r2=943604&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/testRegistry.cpp Wed May 12 18:09:34 2010
@@ -223,11 +223,17 @@
 //CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::SystemTest );
 //#include <decaf/lang/PointerTest.h>
 //CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::PointerTest );
-//#include <decaf/lang/ArrayPointerTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ArrayPointerTest );
+#include <decaf/lang/ArrayPointerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ArrayPointerTest );
 //#include <decaf/lang/StringTest.h>
 //CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::StringTest );
 
+#include <decaf/net/InetAddressTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::InetAddressTest );
+#include <decaf/net/Inet4AddressTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::InetAddressTest );
+#include <decaf/net/Inet6AddressTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::InetAddressTest );
 //#include <decaf/net/SocketFactoryTest.h>
 //CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::SocketFactoryTest );
 //#include <decaf/net/ServerSocketTest.h>