GUPnP is a library for implementing both UPnP clients and services in C, using GObject and LibSoup. It allows for fully asynchronous use without using threads and so cleanly integrates naturally into main-loop based applications, and supports all of the UPnP features.
This documentation assumes some familiarity with the UPnP model and concepts. If the reader doesn't have any prior understanding of UPnP, then we can recommend UPnP Design By Example by Intel Press. For a very basic overview of UPnP, see Device, Service, and Control Point in the glossary.
The canonical reference for UPnP is UPnP Device Architecture by UPnP Forum. GUPnP also follows the DLNA Networked Device Interoperability Guidelines by Digital Living Network alliance (to the extent that the guidelines are applicable to a UPnP protocol implementation).