Этот пример демонстрирует как получить информацию обо всех устройствах и сервисах. В нем мы запускаем бесконечный цикл (используя CLI) и, если будут найдены устройства или сервисы, будем вызывать функцию обратного вызова.
Пример #1 Поиск всех устройств и сервисов UPnP.
<?php
/* Callback-функция для устройств */
function device_proxy_available_cb($proxy, $arg)
{
    $info = gupnp_device_info_get($proxy);
    $type = $info['device_type'];
    $location = $info['location'];
    printf("Device available:\n");
    printf("\ttype:     %s\n", $type);
    printf("\tlocation: %s\n", $location);
}
/* Callback-функция для  сервисов */
function service_proxy_available_cb($proxy, $arg)
{
    $info = gupnp_service_info_get($proxy);
    $type = $info['service_type'];
    $location = $info['location'];
    printf("Service available:\n");
    printf("\ttype:     %s\n", $type);
    printf("\tlocation: %s\n", $location);
}
/* Создаем контекст UPnP */
$context = gupnp_context_new();
if (!$context) {
    printf("Error creating the GUPnP context\n");
    exit(-1);
}
/* Нам интересно ВСЁ!!! */
$cp = gupnp_control_point_new($context, "ssdp:all");
/* Устанавливаем callback-функции */
gupnp_control_point_callback_set($cp, 
    GUPNP_SIGNAL_DEVICE_PROXY_AVAILABLE, 'device_proxy_available_cb');
gupnp_control_point_callback_set($cp, 
    GUPNP_SIGNAL_SERVICE_PROXY_AVAILABLE, 'service_proxy_available_cb');
/* Запускаем поиск (бесконечный цикл, нажмите Ctrl-C для выхода) */
gupnp_control_point_browse_start($cp);
?>