Author: rwinston
Date: Sun Mar  2 11:30:05 2008
New Revision: 632812

URL: http://svn.apache.org/viewvc?rev=632812&view=rev
Log:
Update changes and add example for SubnetUtils

Added:
    
commons/proper/net/branches/NET_2_0/src/main/java/examples/SubnetUtilsExample.java
Modified:
    
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java
    commons/proper/net/branches/NET_2_0/src/site/xdoc/changes.xml

Added: 
commons/proper/net/branches/NET_2_0/src/main/java/examples/SubnetUtilsExample.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/main/java/examples/SubnetUtilsExample.java?rev=632812&view=auto
==============================================================================
--- 
commons/proper/net/branches/NET_2_0/src/main/java/examples/SubnetUtilsExample.java
 (added)
+++ 
commons/proper/net/branches/NET_2_0/src/main/java/examples/SubnetUtilsExample.java
 Sun Mar  2 11:30:05 2008
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+package examples;
+
+import java.util.Scanner;
+
+import org.apache.commons.net.util.SubnetUtils;
+import org.apache.commons.net.util.SubnetUtils.SubnetInfo;
+
+/**
+ * Example class that shows how to use the [EMAIL PROTECTED] SubnetUtils} 
class. 
+ * @author Rory Winston <[EMAIL PROTECTED]>
+ *
+ */
+public class SubnetUtilsExample {
+       
+       public static void main(String[] args) {
+               String subnet = "192.168.0.1/24";
+               SubnetUtils utils = new SubnetUtils(subnet);
+               SubnetInfo info = utils.getInfo();
+               
+               System.out.printf("Subnet Information for %s:\n", subnet);
+               System.out.println("--------------------------------------");
+               System.out.printf("IP Address:\t\t\t%s\t[%s]\n", 
info.getAddress(), 
+                               
Integer.toBinaryString(info.asInteger(info.getAddress())));
+               System.out.printf("Netmask:\t\t\t%s\t[%s]\n", 
info.getNetmask(), 
+                               
Integer.toBinaryString(info.asInteger(info.getNetmask())));
+               System.out.printf("CIDR Representation:\t\t%s\n\n", 
info.getCidrSignature());
+               
+               System.out.printf("Supplied IP Address:\t\t%s\n\n", 
info.getAddress());
+               
+               System.out.printf("Network Address:\t\t%s\t[%s]\n", 
info.getNetworkAddress(), 
+                               
Integer.toBinaryString(info.asInteger(info.getNetworkAddress())));
+               System.out.printf("Broadcast Address:\t\t%s\t[%s]\n", 
info.getBroadcastAddress(), 
+                               
Integer.toBinaryString(info.asInteger(info.getBroadcastAddress())));
+               System.out.printf("First Usable Address:\t\t%s\t[%s]\n", 
info.getLowAddress(), 
+                               
Integer.toBinaryString(info.asInteger(info.getLowAddress())));
+               System.out.printf("Last Usable Address:\t\t%s\t[%s]\n", 
info.getHighAddress(), 
+                               
Integer.toBinaryString(info.asInteger(info.getHighAddress())));
+               
+               System.out.printf("Total usable addresses: \t%d\n\n", 
info.getAddressCount());
+               
+               final String prompt ="Enter an IP address (e.g. 
192.168.0.10):"; 
+               System.out.println(prompt);
+               Scanner scanner = new Scanner(System.in);
+               while (scanner.hasNextLine()) {
+                       String address = scanner.nextLine();
+                       System.out.println("The IP address [" + address + "] is 
" 
+                                       + (info.isInRange(address) ? "" : "not 
") 
+                                       + "within the subnet [" + subnet + "]");
+                       System.out.println(prompt);
+               }
+               
+       }
+
+}

Modified: 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java?rev=632812&r1=632811&r2=632812&view=diff
==============================================================================
--- 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java
 (original)
+++ 
commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/util/SubnetUtils.java
 Sun Mar  2 11:30:05 2008
@@ -25,18 +25,18 @@
  * @author <[EMAIL PROTECTED]>
  */
 public class SubnetUtils {
-       
+
        private static final String IP_ADDRESS = 
"(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})";
        private static final String SLASH_FORMAT = IP_ADDRESS + "/(\\d{1,3})";
        private static final Pattern addressPattern = 
Pattern.compile(IP_ADDRESS);
        private static final Pattern cidrPattern = 
Pattern.compile(SLASH_FORMAT);
        private static final int NBITS = 32;
-       
+
        private int netmask = 0;
        private int address = 0;
        private int network = 0;
        private int broadcast = 0;
-       
+
        /**
         * Constructor that takes a CIDR-notation string, e.g. "192.168.0.1/16"
         * @param cidrNotation A CIDR-notation string, e.g. "192.168.0.1/16"
@@ -44,7 +44,7 @@
        public SubnetUtils(String cidrNotation) {
                calculate(cidrNotation);
        }
-       
+
        /**
         * Constructor that takes two dotted decimal addresses. 
         * @param address An IP address, e.g. "192.168.0.1"
@@ -53,12 +53,14 @@
        public SubnetUtils(String address, String mask) {
                calculate(toCidrNotation(address, mask));
        }
-       
+
        /**
         * Convenience container for subnet summary information.
         *
         */
        public final class SubnetInfo {
+               private SubnetInfo() {}
+
                private int netmask()           { return netmask; }
                private int network()           { return network; }
                private int address()           { return address; }
@@ -66,24 +68,27 @@
                private int low()                       { return network() + 1; 
}
                private int high()                      { return broadcast() - 
1; }
 
-               public boolean isInRange(String address) { return 
isInRange(toInteger(address)); }
-               private boolean isInRange(int address)   { return 
((address-low()) <= (high()-low())); }
-               
-               public String getBroadcastAddress() { return 
format(toArray(broadcast())); }
-               
-               public String getNetworkAddress() { return 
format(toArray(network())); }
-               public String getLowAddress() { return format(toArray(low())); }
-               public String getHighAddress() { return 
format(toArray(high())); }
-               public int getAddressCount() { return (broadcast() - low()); }
+               public boolean isInRange(String address)        { return 
isInRange(toInteger(address)); }
+               private boolean isInRange(int address)          { return 
((address-low()) <= (high()-low())); }
+
+               public String getBroadcastAddress()                     { 
return format(toArray(broadcast())); }
+               public String getNetworkAddress()                       { 
return format(toArray(network())); }
+               public String getNetmask()                                      
{ return format(toArray(netmask())); }
+               public String getAddress()                                      
{ return format(toArray(address())); }
+               public String getLowAddress()                           { 
return format(toArray(low())); }
+               public String getHighAddress()                          { 
return format(toArray(high())); }
+               public int getAddressCount()                            { 
return (broadcast() - low()); }
+
+               public int asInteger(String address)            { return 
toInteger(address); }
                
                public String getCidrSignature() { 
                        return toCidrNotation(
-                               format(toArray(address())), 
-                               format(toArray(netmask()))
-                               );
+                                       format(toArray(address())), 
+                                       format(toArray(netmask()))
+                       );
                }
        }
-       
+
        /**
         * Return a [EMAIL PROTECTED] SubnetInfo} instance that contains 
subnet-specific statistics
         * @return
@@ -95,26 +100,26 @@
         */
        private void calculate(String mask) {
                Matcher matcher = cidrPattern.matcher(mask);
-               
+
                if (matcher.matches()) {
                        address = matchAddress(matcher);
-                       
+
                        /* Create a binary netmask from the number of bits 
specification /x */
                        int cidrPart = 
rangeCheck(Integer.valueOf(matcher.group(5)), 0, NBITS-1);
                        for (int j = 0; j < cidrPart; ++j) {
                                netmask |= (1 << 31-j);
                        }
-                       
+
                        /* Calculate base network address */
                        network = (address & netmask);
-                       
+
                        /* Calculate broadcast address */
                        broadcast = network | ~(netmask);
                }
                else 
                        throw new IllegalArgumentException("Could not parse [" 
+ mask + "]");
        }
-       
+
        /*
         * Convert a dotted decimal format address to a packed integer format
         */
@@ -139,7 +144,7 @@
                }
                return addr;
        }
-               
+
        /*
         * Convert a packed integer address into a 4-element array
         */
@@ -167,21 +172,21 @@
        private int rangeCheck(Integer value, int begin, int end) {
                if (value >= begin && value <= end)
                        return value;
-               
+
                throw new IllegalArgumentException("Value out of range: [" + 
value + "]");
        }
-       
+
        /*
         * Count the number of 1-bits in a 32-bit integer using a 
divide-and-conquer strategy
         * see Hacker's Delight section 5.1 
         */
        int pop(int x) {
-                  x = x - ((x >>> 1) & 0x55555555); 
-                  x = (x & 0x33333333) + ((x >>> 2) & 0x33333333); 
-                  x = (x + (x >>> 4)) & 0x0F0F0F0F; 
-                  x = x + (x >>> 8); 
-                  x = x + (x >>> 16); 
-                  return x & 0x0000003F; 
+               x = x - ((x >>> 1) & 0x55555555); 
+               x = (x & 0x33333333) + ((x >>> 2) & 0x33333333); 
+               x = (x + (x >>> 4)) & 0x0F0F0F0F; 
+               x = x + (x >>> 8); 
+               x = x + (x >>> 16); 
+               return x & 0x0000003F; 
        } 
 
        /* Convert two dotted decimal addresses to a single xxx.xxx.xxx.xxx/yy 
format
@@ -191,5 +196,4 @@
        private String toCidrNotation(String addr, String mask) {       
                return addr + "/" + pop(toInteger(mask));
        }
-
 }

Modified: commons/proper/net/branches/NET_2_0/src/site/xdoc/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/site/xdoc/changes.xml?rev=632812&r1=632811&r2=632812&view=diff
==============================================================================
--- commons/proper/net/branches/NET_2_0/src/site/xdoc/changes.xml (original)
+++ commons/proper/net/branches/NET_2_0/src/site/xdoc/changes.xml Sun Mar  2 
11:30:05 2008
@@ -146,6 +146,12 @@
                        <action dev="rwinston" type="fix" issue="NET-173">
                                Add configurable multiline parsing.
                        </action>
+                       <action dev="rwinston" type="fix" issue="NET-188">
+                               Add fix for broken leap year date parsing.
+                       </action>
+                       <action dev="rwinston" type="add">
+                               Add SubnetUtils class (suggested by Kenny 
McLeod)
+                       </action>
 
 
 


Reply via email to