# net-php

Network Library for PHP with native Yggdrasil support

## Install

`composer require yggverse/net`

## Usage

### Socket

#### Check socket is open

```
var_dump(
    \Yggverse\Net\Socket::isOpen('yo.index', 80)
);
```

#### Check host valid

```
var_dump(
    \Yggverse\Net\Socket::isHost('yo.index')
);
```

#### Check port valid

```
var_dump(
    \Yggverse\Net\Socket::isPort(80)
);
```

### Dig

#### Resolve records

```
var_dump(
    \Yggverse\Net\Dig::records('yo.index', ['A', 'AAAA'], &$result = [], &$error = [], $provider = null)
);
```

#### Check hostname valid

```
var_dump(
    \Yggverse\Net\Dig::isHostName('yo.index')
);
```

#### Check record valid

```
var_dump(
    \Yggverse\Net\Dig::isRecord('A')
);
```

#### Check record value valid

```
var_dump(
    \Yggverse\Net\Dig::isRecordValue('A', '127.0.0.1')
);
```

### Address

Includes methods to work with network addresses.

#### Base address methods

Different operations with address parts:

* `scheme`
* `user`
* `password`
* `host`
* `protocol`
* `path`
* `query`
* `fragment`

#### Address conversion from relative to absolute format

**Document root**

```
$base = new \Yggverse\Net\Address(
    'http://yo.ygg/a1/b1/c1'
);

$address = new \Yggverse\Net\Address(
    '/a2'
);

var_dump(
    $address->getAbsolute(
        $base
    ) // return http://yo.ygg/a2
);
```

**Current folder**

```
$base = new \Yggverse\Net\Address(
    'http://yo.ygg/a1/b1/c1'
);

$address = new \Yggverse\Net\Address(
    'c2'
);

var_dump(
    $address->getAbsolute(
        $base
    ) // return http://yo.ygg/a1/b1/c2
);
```

**Ending slash**

```
$base = new \Yggverse\Net\Address(
    'http://yo.ygg/a1/b1/c1/'
);

$address = new \Yggverse\Net\Address(
    '../../b2/c2'
);

var_dump(
    $address->getAbsolute(
        $base
    ) // return http://yo.ygg/a1/b2/c2
);
```

**All options**

```
$base = new \Yggverse\Net\Address(
    'http://user:password@yo.ygg/a1/b1/c1?attribute=value#anchor'
);

$address = new \Yggverse\Net\Address(
    '../../a2/b2?attribute2=value2#anchor2'
);

var_dump(
    $address->getAbsolute(
        $base
    ) // return http://user:password@yo.ygg/a2/b2?attribute2=value2#anchor2
);
```

## Integrations

* [Network API with native Yggdrasil/IPv6 support](https://github.com/YGGverse/web-api)
* [Yo! Crawler for different networks](https://github.com/YGGverse/Yo)