GUPnP is an elegant, object-oriented open source framework for creating UPnP devices and control points, written in C using GObject and libsoup. The GUPnP API is intended to be easy to use, efficient and flexible. It provides the same set of features as libupnp, but shields the developer from most of UPnP's internals.

Features

The GUPnP framework consists of the following libraries:

GSSDP implements resource discovery and announcement over SSDP.

GUPnP implements the UPnP specification: resource announcement and discovery, description, control, event notification, and presentation (GUPnP includes basic web server functionality through libsoup). GUPnP does not include helpers for construction or control of specific standardized resources (e.g. MediaServer); this is left for higher level libraries utilizing the GUPnP framework.

GUPnP-AV is a collection of helpers for building AV (audio/video) applications using GUPnP.

GUPnP-DLNA is a small utility library that aims to ease the DLNA-related tasks such as media profile guessing, transcoding to a given profile, etc.

GUPnP-IGD is a small client library that can be used to talk to Internet Gateway Devices to request NAT forwarding etc.

GUPnP-Tools is a set of utilities and demos to work with UPnP. It includes a generic control point, an AV controller, a network light, an uploader and an SSDP commandline client

Official bindings currently exist for the Vala language only. Unofficial bindings also exist for PHP (provided by Alexey Romanenko). Bindings to other languages are provided through gobject-introspection metadata.

Also available is a collection of developer tools utilising GUPnP and GTK+.

Documentation

Download

Download source tarballs of releases from here.

Bugs

No matter how perfect a software is, there are always bugs in it. If you find any, report them.

Mailing List and IRC

Mailing-list: mailing list IRC: #gupnp channel on irc.gimp.org.

User counter

If you use GUPnP, we would appreciate it if you could bump-up our user counter by simply clicking on "I USE THIS" button at our openhub page.

Development

Development takes place GNOME git repository that can be viewed here:

To clone the latest development version run the following command:

git clone https://gitlab.gnome.org/GNOME/PACKAGE_NAME.git

Where PACKAGE_NAME is gssdp, gupnp, gupnp-av, gupnp-tools, gupnp-igd or gupnp-tools depending on which components you need.

To submit patches please create merge requests.

CodingStyle

GUPnP follows the same coding style as Rygel except:

A clang-format style file is available in the repository: https://gitlab.gnome.org/GNOME/gupnp/-/blob/master/.clang-format

All the rules that can't apply to C language (e.g the rule about use of 'this' operator and error declaration).

We follow 8-space indentation.

Single line if/for/while/etc blocks must be enclosed in '{}'.

Don't hand-optimize null checks, leave that to compiler. Instead of 'if (some_variable)' you write 'if (some_variable != NULL)'

Developers