Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/3rdparty.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2022-09-20 17:20:42 +0300
committerCôme Chilliet <come.chilliet@nextcloud.com>2022-09-20 17:20:42 +0300
commiteb02283d5b0d6dfe76d83e0df13030a153412fdf (patch)
treee0083da033961e884caf7779042446e23d4314fa
parent27cc868e57475a71b92cc037c869205765d36675 (diff)
Add README and composer.json to .gitignore
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
-rw-r--r--.gitignore3
-rw-r--r--mlocati/ip-lib/README.md648
-rw-r--r--mlocati/ip-lib/composer.json60
3 files changed, 3 insertions, 708 deletions
diff --git a/.gitignore b/.gitignore
index d9610862..7cadd463 100644
--- a/.gitignore
+++ b/.gitignore
@@ -147,6 +147,9 @@ mexitek/phpcolors/README.md
mikey179/vfsstream
+mlocati/ip-lib/README.md
+mlocati/ip-lib/composer.json
+
mtdowling/jmespath.php/tests
nextcloud/lognormalizer/.gitignore
diff --git a/mlocati/ip-lib/README.md b/mlocati/ip-lib/README.md
deleted file mode 100644
index 762f0c3d..00000000
--- a/mlocati/ip-lib/README.md
+++ /dev/null
@@ -1,648 +0,0 @@
-[![Tests](https://github.com/mlocati/ip-lib/actions/workflows/tests.yml/badge.svg)](https://github.com/mlocati/ip-lib/actions?query=workflow%3A%22tests%22)
-[![Coverage Status](https://coveralls.io/repos/github/mlocati/ip-lib/badge.svg?branch=master)](https://coveralls.io/github/mlocati/ip-lib?branch=master)
-[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/mlocati/ip-lib/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/mlocati/ip-lib/?branch=master)
-![Packagist Downloads](https://img.shields.io/packagist/dm/mlocati/ip-lib)
-
-# IPLib - Handle IPv4, IPv6 and IP ranges
-
-## Introduction
-
-IPLib is a modern, PSR-compliant, test-driven IP addresses and subnets manipulation library. It implements primitives to handle IPv4 and IPv6 addresses, as well as IP ranges (subnets), in CIDR format (like `::1/128` or `127.0.0.1/32`) and in pattern format (like `::*:*` or `127.0.*.*`).
-
-## Requirements
-
-IPLib has very basic requirements as:
-
-- Works with any PHP version greater than 5.3.3 (PHP **5.3.x**, **5.4.x**, **5.5.x**, **5.6.x**, **7.x**, and **8.x** are fully supported).
-- **No external dependencies**
-- **No special PHP configuration needed** (yes, it will __always work__ even if PHP has not been built with IPv6 support!).
-
-## Installation
-
-### Manual installation
-
-[Download](https://github.com/mlocati/ip-lib/releases) the latest version, unzip it and add these lines in our PHP files:
-
-```php
-require_once 'path/to/iplib/ip-lib.php';
-```
-
-### Installation with Composer
-
-Simply run
-
-```sh
-composer require mlocati/ip-lib
-```
-
-or add these lines to your `composer.json` file:
-
-```json
-"require": {
- "mlocati/ip-lib": "^1"
-}
-```
-
-## Sample usage
-
-### Parse an address
-
-To parse an IPv4 address:
-
-```php
-$address = \IPLib\Address\IPv4::parseString('127.0.0.1');
-```
-
-To parse an IPv6 address:
-
-```php
-$address = \IPLib\Address\IPv6::parseString('::1');
-```
-
-To parse an address in any format (IPv4 or IPv6):
-
-```php
-$address = \IPLib\Factory::parseAddressString('::1');
-$address = \IPLib\Factory::parseAddressString('127.0.0.1');
-```
-
-### Get the next/previous addresses
-
-```php
-$address = \IPLib\Factory::parseAddressString('::1');
-
-// This will print ::
-echo (string) $address->getPreviousAddress();
-
-// This will print ::2
-echo (string) $address->getNextAddress();
-```
-
-### Get the addresses at a specified offset
-
-For addresses:
-
-```php
-$address = \IPLib\Factory::parseAddressString('::1');
-
-// This will print ::1
-echo (string) $address->getAddressAtOffset(0);
-
-// This will print ::2
-echo (string) $address->getAddressAtOffset(1);
-
-// This will print ::3
-echo (string) $address->getAddressAtOffset(2);
-
-// This will print ::3e9
-echo (string) $address->getAddressAtOffset(1000);
-
-// This will print ::
-echo (string) $address->getAddressAtOffset(-1);
-
-// This will print NULL
-echo var_dump($address->getAddressAtOffset(-2));
-```
-
-For ranges:
-
-```php
-$range = \IPLib\Factory::parseRangeString('::ff00/120');
-
-// This will print ::ff00
-echo (string) $range->getAddressAtOffset(0);
-
-// This will print ::ff10
-echo (string) $range->getAddressAtOffset(16);
-
-// This will print ::ff64
-echo (string) $range->getAddressAtOffset(100);
-
-// This will print NULL because the address ::1:0 is out of the range
-var_dump($range->getAddressAtOffset(256));
-
-// This will print ::ffff
-echo (string) $range->getAddressAtOffset(-1);
-
-// This will print ::fff0
-echo (string) $range->getAddressAtOffset(-16);
-
-// This will print ::ff00
-echo (string) $range->getAddressAtOffset(-256);
-
-// This will print NULL because the address ::feff is out of the range
-var_dump($range->getAddressAtOffset(-257));
-```
-
-### Parse an IP address range
-
-To parse a subnet (CIDR) range:
-
-```php
-$range = \IPLib\Range\Subnet::parseString('127.0.0.1/24');
-$range = \IPLib\Range\Subnet::parseString('::1/128');
-```
-
-To parse a pattern (asterisk notation) range:
-
-```php
-$range = \IPLib\Range\Pattern::parseString('127.0.0.*');
-$range = \IPLib\Range\Pattern::parseString('::*');
-```
-
-To parse an andress as a range:
-
-```php
-$range = \IPLib\Range\Single::parseString('127.0.0.1');
-$range = \IPLib\Range\Single::parseString('::1');
-```
-
-To parse a range in any format:
-
-```php
-$range = \IPLib\Factory::parseRangeString('127.0.0.*');
-$range = \IPLib\Factory::parseRangeString('::1/128');
-$range = \IPLib\Factory::parseRangeString('::');
-```
-
-### Retrieve a range from its boundaries
-
-You can calculate the smallest range that comprises two addresses:
-
-```php
-$range = \IPLib\Factory::getRangeFromBoundaries('192.168.0.1', '192.168.255.255');
-
-// This will print 192.168.0.0/16
-echo (string) $range;
-```
-
-You can also calculate a list of ranges that exactly describes all the addresses between two addresses:
-
-```php
-$ranges = \IPLib\Factory::getRangesFromBoundaries('192.168.0.0', '192.168.0.5');
-
-// This will print 192.168.0.0/30 192.168.0.4/31
-echo implode(' ', $ranges);
-```
-
-### Retrieve the boundaries of a range
-
-```php
-$range = \IPLib\Factory::parseRangeString('127.0.0.*');
-
-// This will print 127.0.0.0
-echo (string) $range->getStartAddress();
-
-// This will print 127.0.0.255
-echo (string) $range->getEndAddress();
-```
-
-### Format addresses and ranges
-
-Both IP addresses and ranges have a `toString` method that you can use to retrieve a textual representation:
-
-```php
-// This will print 127.0.0.1
-echo \IPLib\Factory::parseAddressString('127.0.0.1')->toString();
-
-// This will print 127.0.0.1
-echo \IPLib\Factory::parseAddressString('127.000.000.001')->toString();
-
-// This will print ::1
-echo \IPLib\Factory::parseAddressString('::1')->toString();
-
-// This will print ::1
-echo \IPLib\Factory::parseAddressString('0:0::1')->toString();
-
-// This will print ::1/64
-echo \IPLib\Factory::parseRangeString('0:0::1/64')->toString();
-```
-
-When working with IPv6, you may want the full (expanded) representation of the addresses. In this case, simply use a `true` parameter for the `toString` method:
-
-```php
-// This will print 0000:0000:0000:0000:0000:0000:0000:0000
-echo \IPLib\Factory::parseAddressString('::')->toString(true);
-
-// This will print 0000:0000:0000:0000:0000:0000:0000:0001
-echo \IPLib\Factory::parseAddressString('::1')->toString(true);
-
-// This will print 0fff:0000:0000:0000:0000:0000:0000:0000
-echo \IPLib\Factory::parseAddressString('fff::')->toString(true);
-
-// This will print 0000:0000:0000:0000:0000:0000:0000:0000
-echo \IPLib\Factory::parseAddressString('::0:0')->toString(true);
-
-// This will print 0001:0002:0003:0004:0005:0006:0007:0008
-echo \IPLib\Factory::parseAddressString('1:2:3:4:5:6:7:8')->toString(true);
-
-// This will print 0000:0000:0000:0000:0000:0000:0000:0001/64
-echo \IPLib\Factory::parseRangeString('0:0::1/64')->toString();
-```
-
-The address and range objects implements the `__toString()` method, which call the `toString()` method.
-So, if you want the string (short) representation of an object, you can do any of the following:
-
-```php
-$address = \IPLib\Address\IPv6::parseString('::1');
-
-// All these will print ::1
-echo $address->toString();
-echo $address->toString(false);
-echo (string) $address;
-```
-
-### Check if an address is contained in a range
-
-All the range types offer a `contains` method, and all the IP address types offer a `matches` method: you can call them to check if an address is contained in a range:
-
-```php
-$address = \IPLib\Factory::parseAddressString('1:2:3:4:5:6:7:8');
-$range = \IPLib\Factory::parseRangeString('0:0::1/64');
-
-$contained = $address->matches($range);
-// that's equivalent to
-$contained = $range->contains($address);
-```
-
-Please remark that if the address is IPv4 and the range is IPv6 (or vice-versa), the result will always be `false`.
-
-### Check if a range contains another range
-
-All the range types offer a `containsRange` method: you can call them to check if an address range fully contains another range:
-
-```php
-$range1 = \IPLib\Factory::parseRangeString('0:0::1/64');
-$range2 = \IPLib\Factory::parseRangeString('0:0::1/65');
-
-$contained = $range1->containsRange($range2);
-```
-
-### Getting the type of an IP address
-
-If you want to know if an address is within a private network, or if it's a public IP, or whatever you want, you can use the `getRangeType` method:
-
-```php
-$address = \IPLib\Factory::parseAddressString('::');
-
-$type = $address->getRangeType();
-
-$typeName = \IPLib\Range\Type::getName($type);
-```
-
-The most notable values of the range type are:
-
-- `\IPLib\Range\Type::T_UNSPECIFIED` if the address is all zeros (`0.0.0.0` or `::`)
-- `\IPLib\Range\Type::T_LOOPBACK` if the address is the localhost (usually `127.0.0.1` or `::1`)
-- `\IPLib\Range\Type::T_PRIVATENETWORK` if the address is in the local network (for instance `192.168.0.1` or `fc00::1`)
-- `\IPLib\Range\Type::T_PUBLIC` if the address is for public usage (for instance `104.25.25.33` or `2001:503:ba3e::2:30`)
-
-### Getting the type of an IP address range
-
-If you want to know the type of an address range, you can use the `getRangeType` method:
-
-```php
-$range = \IPLib\Factory::parseRangeString('2000:0::1/64');
-
-// $type will contain the value of \IPLib\Range\Type::T_PUBLIC
-$type = $range->getRangeType();
-
-// This will print Public address
-echo \IPLib\Range\Type::getName($type);
-```
-
-Please note that if a range spans across multiple range types, you'll get NULL as the range type:
-
-```php
-$range = \IPLib\Factory::parseRangeString('::/127');
-
-// $type will contain null
-$type = $range->getRangeType();
-
-// This will print Unknown type
-echo \IPLib\Range\Type::getName($type);
-```
-
-### Converting IP addresses
-
-This library supports converting IPv4 to/from IPv6 addresses using the [6to4 notation](https://tools.ietf.org/html/rfc3056) or the [IPv4-mapped notation](https://tools.ietf.org/html/rfc4291#section-2.5.5.2):
-
-```php
-$ipv4 = \IPLib\Factory::parseAddressString('1.2.3.4');
-
-// 6to4 notation
-$ipv6 = $ipv4->toIPv6();
-
-// This will print 2002:102:304::
-echo (string) $ipv6;
-
-// This will print 1.2.3.4
-echo $ipv6->toIPv4();
-
-// IPv4-mapped notation
-$ipv6 = $ipv4->toIPv6IPv4Mapped();
-
-// This will print ::ffff:1.2.3.4
-echo (string) $ipv6;
-
-// This will print 1.2.3.4
-echo $ipv6_6to4->toIPv4();
-```
-
-### Converting IP ranges
-
-This library supports IPv4/IPv6 ranges in pattern format (eg. `192.168.*.*`) and in CIDR/subnet format (eg. `192.168.0.0/16`), and it offers a way to convert between the two formats:
-
-```php
-// This will print ::*:*:*:*
-echo \IPLib\Factory::parseRangeString('::/64')->asPattern()->toString();
-
-// This will print 1:2::/96
-echo \IPLib\Factory::parseRangeString('1:2::*:*')->asSubnet()->toString();
-
-// This will print 192.168.0.0/24
-echo \IPLib\Factory::parseRangeString('192.168.0.*')->asSubnet()->toString();
-
-// This will print 10.*.*.*
-echo \IPLib\Factory::parseRangeString('10.0.0.0/8')->asPattern()->toString();
-```
-
-Please remark that all the range types implement the `asPattern()` and `asSubnet()` methods.
-
-### Getting the subnet mask for IPv4 ranges
-
-You can use the `getSubnetMask()` to get the subnet mask for IPv4 ranges:
-
-```php
-// This will print 255.255.255.0
-echo \IPLib\Factory::parseRangeString('192.168.0.*')->getSubnetMask()->toString();
-
-// This will print 255.255.255.252
-echo \IPLib\Factory::parseRangeString('192.168.0.12/30')->getSubnetMask()->toString();
-```
-
-### Getting the range size
-
-You can use the `getSize()` to get the count of addresses this IP range contains:
-
-```php
-// This will print 256
-echo \IPLib\Factory::parseRangeString('192.168.0.*')->getSize();
-
-// This will print 4
-echo \IPLib\Factory::parseRangeString('192.168.0.12/30')->getSize();
-
-// This will print 1
-echo \IPLib\Factory::parseRangeString('192.168.0.1')->getSize();
-```
-
-### Getting the reverse DNS lookup address
-
-To perform reverse DNS queries, you need to use a special format of the IP addresses.
-
-You can use the `getReverseDNSLookupName()` method of the IP address instances to retrieve it easily:
-
-```php
-$ipv4 = \IPLib\Factory::parseAddressString('1.2.3.255');
-$ipv6 = \IPLib\Factory::parseAddressString('1234:abcd::cafe:babe');
-
-// This will print 255.3.2.1.in-addr.arpa
-echo $ipv4->getReverseDNSLookupName();
-
-// This will print e.b.a.b.e.f.a.c.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.c.b.a.4.3.2.1.ip6.arpa
-echo $ipv6->getReverseDNSLookupName();
-```
-
-To parse addresses in reverse DNS lookup format you can use the `IPLib\ParseStringFlag::ADDRESS_MAYBE_RDNS` flag when parsing a string:
-
-```php
-$ipv4 = \IPLib\Factory::parseAddressString('255.3.2.1.in-addr.arpa', \IPLib\ParseStringFlag::ADDRESS_MAYBE_RDNS);
-$ipv6 = \IPLib\Factory::parseAddressString('e.b.a.b.e.f.a.c.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.c.b.a.4.3.2.1.ip6.arpa', \IPLib\ParseStringFlag::ADDRESS_MAYBE_RDNS);
-
-// This will print 1.2.3.255
-echo $ipv4->toString();
-
-// This will print 1234:abcd::cafe:babe
-echo (string) $ipv6->toString();
-```
-
-You can also use `getReverseDNSLookupName()` for IP ranges.
-In this case, the result is an array of strings:
-
-```php
-$range = \IPLib\Factory::parseRangeString('10.155.16.0/22');
-
-/*
- * This will print:
- * array (
- * 0 => '16.155.10.in-addr.arpa',
- * 1 => '17.155.10.in-addr.arpa',
- * 2 => '18.155.10.in-addr.arpa',
- * 3 => '19.155.10.in-addr.arpa',
- * )
-*/
-var_export($range->getReverseDNSLookupName());
-```
-
-### Using a database
-
-This package offers a great feature: you can store address ranges in a database table, and check if an address is contained in one of the saved ranges with a simple query.
-
-To save a range, you need to store the address type (for IPv4 it's `4`, for IPv6 it's `6`), as well as two values representing the start and the end of the range.
-These methods are:
-```php
-$range->getAddressType();
-$range->getComparableStartString();
-$range->getComparableEndString();
-```
-
-Let's assume that you saved the type in a field called `addressType`, and the range boundaries in two fields called `rangeFrom` and `rangeTo`.
-
-When you want to check if an address is within a stored range, simply use the `getComparableString` method of the address and check if it's between the fields `rangeFrom` and `rangeTo`, and check if the stored `addressType` is the same as the one of the address instance you want to check.
-
-Here's a sample code:
-
-```php
-/*
- * Let's assume that:
- * - $pdo is a PDO instance
- * - $range is a range object
- * - $address is an address object
- */
-
-// Save the $range object
-$insertQuery = $pdo->prepare('
- insert into ranges (addressType, rangeFrom, rangeTo)
- values (:addressType, :rangeFrom, :rangeTo)
-');
-
-$insertQuery->execute(array(
- ':addressType' => $range->getAddressType(),
- ':rangeFrom' => $range->getComparableStartString(),
- ':rangeTo' => $range->getComparableEndString(),
-));
-
-// Retrieve the saved ranges where an address $address falls:
-$searchQuery = $pdo->prepare('
- select * from ranges
- where addressType = :addressType
- and :address between rangeFrom and rangeTo
-');
-
-$searchQuery->execute(array(
- ':addressType' => $address->getAddressType(),
- ':address' => $address->getComparableString(),
-));
-
-$rows = $searchQuery->fetchAll();
-$searchQuery->closeCursor();
-```
-
-## Handling non-standard address and range strings
-
-### Accepting ports
-
-If you want to accept addresses that may include ports, you can specify the `IPLib\ParseStringFlag::MAY_INCLUDE_PORT` flag:
-
-```php
-use IPLib\Factory;
-use IPLib\ParseStringFlag;
-
-require_once __DIR__ . '/../ip-lib.php';
-
-// These will print NULL
-var_export(Factory::parseAddressString('127.0.0.1:80'));
-var_export(Factory::parseAddressString('[::]:80'));
-
-// This will print 127.0.0.1
-echo (string) Factory::parseAddressString('127.0.0.1:80', ParseStringFlag::MAY_INCLUDE_PORT);
-// This will print ::
-echo (string) Factory::parseAddressString('[::]:80', ParseStringFlag::MAY_INCLUDE_PORT);
-```
-
-### Accepting IPv6 zone IDs
-
-If you want to accept IPv6 addresses that may include a zone ID, you can specify the `IPLib\ParseStringFlag::MAY_INCLUDE_ZONEID` flag:
-
-```php
-use IPLib\Factory;
-use IPLib\ParseStringFlag;
-
-// This will print NULL
-var_export(Factory::parseAddressString('::%11'));
-
-// This will print ::
-echo (string) Factory::parseAddressString('::%11', ParseStringFlag::MAY_INCLUDE_ZONEID);
-```
-
-### Accepting non-decimal IPv4 addresses
-
-IPv4 addresses are usually expressed in decimal notation, for example as `192.168.0.1`.
-
-By the way, the GNU (used in many Linux distros), BSD (used in Mac) and Windows implementations of `inet_aton` and `inet_addr` accept IPv4 addresses with numbers in octal and/or hexadecimal format.
-Please remark that this does not apply to the `inet_pton` and `ip2long` functions, as well as to the Musl implementation (used in Alpine Linux) of `inet_aton` and `inet_addr`.
-
-So, for example, these addresses are all equivalent to `192.168.0.1`:
-
-- `0xC0.0xA8.0x0.0x01` (only hexadecimal)
-- `0300.0250.00.01` (only octal)
-- `192.0250.0.0x01` (decimal, octal and hexadecimal numbers)
-
-(try it: if you browse to [`http://0177.0.0.0x1`](http://0177.0.0.0x1), your browser will try to browse `http://127.0.0.1`).
-
-If you want to accept this non-decimal syntax, you may use the `IPLib\ParseStringFlag::IPV4_MAYBE_NON_DECIMAL` flag:
-
-```php
-use IPLib\Factory;
-use IPLib\ParseStringFlag;
-
-// This will print NULL
-var_export(Factory::parseAddressString('0177.0.0.0x1'));
-
-// This will print 127.0.0.1
-var_export((string) Factory::parseAddressString('0177.0.0.0x1', ParseStringFlag::IPV4_MAYBE_NON_DECIMAL));
-
-// This will print NULL
-var_export(Factory::parseRangeString('0177.0.0.0x1/32'));
-
-// This will print 127.0.0.1/32
-var_export((string) Factory::parseRangeString('0177.0.0.0x1/32', ParseStringFlag::IPV4_MAYBE_NON_DECIMAL));
-```
-
-Please be aware that the `IPV4_MAYBE_NON_DECIMAL` flag may also affect parsing decimal numbers:
-
-```php
-use IPLib\Factory;
-use IPLib\ParseStringFlag;
-
-// This will print 127.0.0.10 since the last digit is assumed to be decimal
-var_export((string) Factory::parseAddressString('127.0.0.010'));
-
-// This will print 127.0.0.8 since the last digit is assumed to be octal
-var_export((string) Factory::parseAddressString('127.0.0.010', ParseStringFlag::IPV4_MAYBE_NON_DECIMAL));
-```
-
-### Accepting IPv4 addresses in not-quad-dotted notation
-
-IPv4 addresses are usually expressed with 4 numbers, for example as `192.168.0.1`.
-
-By the way, the GNU (used in many Linux distros), BSD (used in Mac) and Windows implementations of `inet_aton` and `inet_addr` [accept IPv4 addresses with 1 to 4 numbers](https://man7.org/linux/man-pages/man3/inet_addr.3.html#DESCRIPTION).
-
-Please remark that this does not apply to the `inet_pton` and `ip2long` functions, as well as to the Musl implementation (used in Alpine Linux) of `inet_aton` and `inet_addr`.
-
-If you want to accept this non-decimal syntax, you may use the `IPLib\ParseStringFlag::IPV4ADDRESS_MAYBE_NON_QUAD_DOTTED` flag:
-
-```php
-use IPLib\Factory;
-use IPLib\ParseStringFlag;
-
-// This will print NULL
-var_export(Factory::parseAddressString('1.2.500'));
-
-// This will print 0.0.0.0
-var_export((string) Factory::parseAddressString('0', ParseStringFlag::IPV4ADDRESS_MAYBE_NON_QUAD_DOTTED));
-
-// This will print 0.0.0.1
-var_export((string) Factory::parseAddressString('1', ParseStringFlag::IPV4ADDRESS_MAYBE_NON_QUAD_DOTTED));
-
-// This will print 0.0.1.244
-var_export((string) Factory::parseAddressString('0.0.500', ParseStringFlag::IPV4ADDRESS_MAYBE_NON_QUAD_DOTTED));
-
-// This will print 255.255.255.255
-var_export((string) Factory::parseAddressString('4294967295', ParseStringFlag::IPV4ADDRESS_MAYBE_NON_QUAD_DOTTED));
-```
-
-### Accepting compact IPv4 subnet notation
-
-Even if there isn't an RFC that describe it, IPv4 subnet notation may also be written in a compact form, omitting extra digits (for example, `127.0.0.0/24` may be written as `127/24`).
-If you want to accept such format, you can specify the `IPLib\ParseStringFlag::IPV4SUBNET_MAYBE_COMPACT` flag:
-
-```php
-use IPLib\Factory;
-use IPLib\ParseStringFlag;
-
-// This will print NULL
-var_export(Factory::parseRangeString('127/24'));
-
-// This will print 127.0.0.0/24
-echo (string) Factory::parseRangeString('127/24', ParseStringFlag::IPV4SUBNET_MAYBE_COMPACT);
-```
-
-### Combining multiple flags
-
-Of course, you may use more than one `IPLib\ParseStringFlag` flag at once:
-
-```php
-use IPLib\Factory;
-use IPLib\ParseStringFlag;
-
-// This will print 127.0.0.255
-var_export((string) Factory::parseAddressString('127.0.0.0xff:80', ParseStringFlag::MAY_INCLUDE_PORT | ParseStringFlag::IPV4_MAYBE_NON_DECIMAL));
-
-// This will print ::
-var_export((string) Factory::parseAddressString('[::%11]:80', ParseStringFlag::MAY_INCLUDE_PORT | ParseStringFlag::MAY_INCLUDE_ZONEID));
-```
-
-## Do you really want to say thank you?
-
-You can offer me a [monthly coffee](https://github.com/sponsors/mlocati) or a [one-time coffee](https://paypal.me/mlocati) :wink:
diff --git a/mlocati/ip-lib/composer.json b/mlocati/ip-lib/composer.json
deleted file mode 100644
index bb11be45..00000000
--- a/mlocati/ip-lib/composer.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "mlocati/ip-lib",
- "description": "Handle IPv4, IPv6 addresses and ranges",
- "type": "library",
- "license": "MIT",
- "homepage": "https://github.com/mlocati/ip-lib",
- "authors": [
- {
- "name": "Michele Locati",
- "homepage": "https://github.com/mlocati",
- "email": "mlocati@gmail.com",
- "role": "Author"
- }
- ],
- "keywords": [
- "ip",
- "ipv4",
- "ipv6",
- "range",
- "network",
- "networking",
- "address",
- "addresses",
- "subnet",
- "matching",
- "managing",
- "manage"
- ],
- "require": {
- "php": ">=5.3.3"
- },
- "autoload": {
- "psr-4": {
- "IPLib\\": "src/"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "IPLib\\Test\\": "test/tests/",
- "IPLib\\Test\\Helpers\\": "test/helpers/"
- }
- },
- "require-dev": {
- "ext-pdo_sqlite": "*",
- "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.5 || ^9.5"
- },
- "scripts": {
- "test": "phpunit"
- },
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/mlocati"
- },
- {
- "type": "other",
- "url": "https://paypal.me/mlocati"
- }
- ]
-}