]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
android: Add ability to remove a range set from another
authorTobias Brunner <tobias@strongswan.org>
Wed, 21 Jun 2017 14:22:11 +0000 (16:22 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 3 Jul 2017 08:27:51 +0000 (10:27 +0200)
src/frontends/android/app/src/main/java/org/strongswan/android/utils/IPRangeSet.java
src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeSetTest.java

index e6884c65ecc4f7954728ef21c9eaae430cf56af5..3749ac02c21a2f753080c0f72eabacade2a720c8 100644 (file)
@@ -108,6 +108,22 @@ public class IPRangeSet
                mRanges.addAll(additions);
        }
 
+       /**
+        * Remove the given ranges from ranges in this set.
+        */
+       public void remove(IPRangeSet ranges)
+       {
+               if (ranges == this)
+               {
+                       mRanges.clear();
+                       return;
+               }
+               for (IPRange range : ranges.mRanges)
+               {
+                       remove(range);
+               }
+       }
+
        /**
         * Returns the subnets derived from all the ranges in this set.
         */
index 3f0e33e62ee26f86b44f9a5c5b0fd0c92a6ddadd..6c6e1593f84f753f0c5b2ab7802824f803025643 100644 (file)
@@ -166,6 +166,26 @@ public class IPRangeSetTest
                assertSubnets(set.getSubnets(), new IPRange("192.168.1.0/25"), new IPRange("192.168.2.128/25"));
        }
 
+       @Test
+       public void testRemoveRangesIdent() throws UnknownHostException
+       {
+               IPRangeSet set = IPRangeSet.fromString("192.168.1.0/24 192.168.4.0/24");
+               set.remove(set);
+               assertEquals("size", 0, set.size());
+               assertSubnets(set.getSubnets());
+       }
+
+       @Test
+       public void testRemoveRanges() throws UnknownHostException
+       {
+               IPRangeSet set = IPRangeSet.fromString("192.168.0.0/16");
+               IPRangeSet remove = IPRangeSet.fromString("192.168.1.0/24 192.168.3.0/24 192.168.16.0-192.168.255.255");
+               set.remove(remove);
+               assertEquals("size", 3, set.size());
+               assertSubnets(set.getSubnets(), new IPRange("192.168.0.0/24"), new IPRange("192.168.2.0/24"),
+                                         new IPRange("192.168.4.0/22"), new IPRange("192.168.8.0/21"));
+       }
+
        @Test
        public void testFromStringSingle() throws UnknownHostException
        {