GUPnPSimpleIgd: GUPnP IGD Reference Manual

## GUPnPSimpleIgd GUPnPSimpleIgd — A simple class to map ports on UPnP routers |

## Functions

GUPnPSimpleIgd * | gupnp_simple_igd_new ()
void | gupnp_simple_igd_add_port ()
void | gupnp_simple_igd_remove_port ()
gboolean | gupnp_simple_igd_delete_all_mappings ()
void | gupnp_simple_igd_remove_port_local ()

## Types and Values

struct | GUPnPSimpleIgd
#define | GUPNP_SIMPLE_IGD_ERROR
enum | GUPnPSimpleIgdError

## Description

This simple class allows applications to map ports on UPnP routers. It implements the basic functionalities to map ports to external ports. It also allows implementations to know the external port from the router's perspective.

Every call to this object, including its creation, MUST always be done using the same thread local GMainContext pushed via `g_main_context_push_thread_default()`;

## Functions

### gupnp_simple_igd_new ()

    GUPnPSimpleIgd *
    gupnp_simple_igd_new (void);

This creates a new GUPnpSimpleIgd object using the special GMainContext

#### Returns

a new GUPnPSimpleIgd

### gupnp_simple_igd_add_port ()

    void
    gupnp_simple_igd_add_port (GUPnPSimpleIgd *self,
                               const gchar *protocol,
                               guint16 external_port,
                               const gchar *local_ip,
                               guint16 local_port,
                               guint32 lease_duration,
                               const gchar *description);

This adds a port to the router's forwarding table. The mapping will be automatically refreshed by this object until it is either removed with `gupnp_simple_igd_remove_port()`, `gupnp_simple_igd_remove_port_local()` or the object disapears.

If there is a problem, the “error-mapping-port” signal will be emitted. If a router is found and a port is mapped correctly, “mapped-external-port” will be emitted. These signals may be emitted multiple times if there are multiple routers present.

#### Parameters

self | The GUPnPSimpleIgd object |
protocol | the protocol "UDP" or "TCP" |
external_port | The port to try to open on the external device, 0 means to try a random port if the same port as the local port is already taken |
local_ip | The IP address to forward packets to (most likely the local ip address) |
local_port | The local port to forward packets to |
lease_duration | The duration of the lease (it will be auto-renewed before it expires). This is in seconds. |
description | The description that will appear in the router's table |

### gupnp_simple_igd_remove_port ()

    void
    gupnp_simple_igd_remove_port (GUPnPSimpleIgd *self,
                                  const gchar *protocol,
                                  guint external_port);

This tries to remove a port entry from the routers that was previously added with `gupnp_simple_igd_add_port()`. There is no indicated of success or failure it is a best effort mechanism. If it fails, the bindings will disapears after the lease duration set when the port where added.

#### Parameters

self | The GUPnPSimpleIgd object |
protocol | the protocol "UDP" or "TCP" as given to `gupnp_simple_igd_add_port()` |
external_port | The port to try to open on the external device as given to `gupnp_simple_igd_add_port()` |

### gupnp_simple_igd_delete_all_mappings ()

    gboolean
    gupnp_simple_igd_delete_all_mappings (GUPnPSimpleIgd *self);

Removes all mappings and prevents other from being formed Should only be called by the dispose function of subclasses

#### Parameters

self | a GUPnPSimpleIgd |

#### Returns

`TRUE` if the object can be disposed, `FALSE` otherwise

### gupnp_simple_igd_remove_port_local ()

    void
    gupnp_simple_igd_remove_port_local (GUPnPSimpleIgd *self,
                                        const gchar *protocol,
                                        const gchar *local_ip,
                                        guint16 local_port);

This tries to remove a port entry from the routers that was previously added with `gupnp_simple_igd_add_port()`. There is no indicated of success or failure it is a best effort mechanism. If it fails, the bindings will disapears after the lease duration set when the port where added.

#### Parameters

self | The GUPnPSimpleIgd object |
protocol | the protocol "UDP" or "TCP" as given to `gupnp_simple_igd_add_port()` |
local_ip | The local ip on the internal device as was to `gupnp_simple_igd_add_port()` |
local_port | The port to try to open on the internal device as given to `gupnp_simple_igd_add_port()` |

## Types and Values

### struct GUPnPSimpleIgd

    struct GUPnPSimpleIgd {
      GObject parent;
    };

All members are private, access them using methods and properties

### GUPNP_SIMPLE_IGD_ERROR

    #define GUPNP_SIMPLE_IGD_ERROR (gupnp_simple_igd_error_quark ())

The error domain for GUPnP Simple IGD

### enum GUPnPSimpleIgdError

Errors coming out of the GUPnPSimpleIGD object.

#### Members

GUPNP_SIMPLE_IGD_ERROR_EXTERNAL_ADDRESS | Error getting the external address of the router |