README.md



# nat_upnp - Make your port public using UNP #

Copyright (c) 2013 Benoît Chesneau.

__Version:__ 0.1.0

# nat_upnp

**nat_upnp** is an Erlang library library that provides you a way to o
map a local port to the external using [UPnP
IGD](http://en.wikipedia.org/wiki/Internet_Gateway_Device_Protocol).

The usage of **nat_upnp** is pretty simple and just the minimum of the
UNP to map a local port to the external.

## Example of usage

### Discover the router

```
1> {ok, Context} = nat_upnp:discover().
{ok,{nat_upnp,"http://192.168.1.254:5678/control/wan_ip_connection",
              "192.168.1.45"}}
```

### Add a port mapping

```
2> Protocol = tcp,
2> ExternalPort = 5638,
2> InternalPort = 5638,
2> Description = "test nat upnp",
2> Timeout = 0,
2> ok = nat_upnp:add_port_mapping(Context, Protocol, ExternalPort, InternalPort, Description, Timeout).
ok
```

> Note: Timeout = 0 mean, the port will never be released (ie. infinite
> timeout)

### Remove a port mapping

```
3> ok = nat_upnp:delete_port_mapping(Context, Protocol, ExternalPort).
ok
```

> Note: don't forget to remove the port you registered to the router
> when you exit the application or close the port. For example you could
> monitor the process that maintain the socket and when it's closing,
> unregister the port. Of course there are many other way to achieve
> that purpose.

## Contribute

For issues, comments or feedback please [create an
issue](http://github.com/benoitc/nat_upnp/issues).

### Notes for developers

If you want to contribute patches or improve the doc, you will need to
build nat_unp using the `rebar_dev.config`  file. It can also be built
using the **Makefile**:

```
$ make dev ; # compile & get deps
$ make devclean ; # clean all files
```


## Modules ##


<table width="100%" border="0" summary="list of modules">
<tr><td><a href="http://github.com/benoitc/nat_upnp/blob/master/doc/nat_upnp.md" class="module">nat_upnp</a></td></tr>
<tr><td><a href="http://github.com/benoitc/nat_upnp/blob/master/doc/nat_upnp_proto.md" class="module">nat_upnp_proto</a></td></tr></table>