Site Tools


software:ssdpd:config

This is an old revision of the document!


В ssdpd.conf - файл конфигурации, подробнее ниже.

ssdpd и веб сервер могут быть запущены на разных серверах, можно запускать ssdpd на нескольких серверах (резервирование), важно чтобы root.xml был везде одинаковый.

SSDPd и nginx должны отдавать клиентам одинаковый XML файл с описанием UPnP устройства и его сервисов, далее везде root.xml
/upnp/ - положить/сделать симлинк в wwwroot веб сервера.
/upnp/control/ContentDirectory.php - отредактировать в начале файла переменные с путями и разрешить выполнение.
Нужен PHP с поддержкой SOAP.

Если потребуется изменить пути то нужно редактировать следующие файлы:

  • ssdpd.conf
  • nginx.conf
  • /upnp/descr/root.xml
  • /upnp/control/ContentDirectory.php

Настройка сети

IPv4

  • разрешить IGMP с опциями на вход и на выход с адресом назначения: 224.0.0.0/4
  • разрешить UDP на вход с адресом назначения: 224.0.0.0/4, на выход с любым адресом
pass out quick inet proto udp to 224.0.0.0/4 no state allow-opts
pass out quick inet proto igmp to 224.0.0.0/4 no state allow-opts
pass in quick inet proto udp to 224.0.0.0/4 no state # Allow receive multicast
pass in quick inet proto igmp to 224.0.0.0/4 no state allow-opts

IPv6

  • разрешить icmp6 с опциями на вход и на выход
  • разрешить UDP на вход с адресом назначения: ff00::/8, на выход с любым адресом
pass out quick inet6 proto udp to ff00::/8 no state allow-opts # Allow send multicast
pass out quick inet6 proto icmp6 no state allow-opts # mld (igmp6) also here
pass in quick inet6 proto udp to ff00::/8 no state # Allow receive multicast
pass in quick inet6 proto icmp6 no state allow-opts # mld (igmp6) also here

ssdpd.conf

log

Лог файл.

<log>
	<file>/root/msd/msd.log</file>
</log>

file

Имя файла. Запись производится если в командной строке не указан -v, иначе лог пишется в stdout.


skt

Настройки сокета.

<skt>
	<rcvBuf>64</rcvBuf>
	<sndBuf>64</sndBuf>
	<ttl>2</ttl>
	<hopLimit>5</hopLimit>
</skt>

rcvBuf

Максимальный размер буфера для приёма (SO_RCVBUF).

sndBuf

Максимальный размер буфера для отправки (SO_SNDBUF).

ttl

TTL - Только для IPv4. IP_MULTICAST_TTL

hopLimit

TTL - Только для IPv6. IPV6_MULTICAST_HOPS


Общие настройки

<flagEnableIPv4/>
<flagEnableIPv6/>
<httpServer></httpServer>

flagEnableIPv4

Включить IPv4.

flagEnableIPv6

Включить IPv6.

httpServer

Если не задано или пустое то автоматически генерируется поле Server вида: 'OS/version UPnP/1.1 product/version'


announceList

Список устройств для анонсирования.

<announceList>
	<announce>
		<xmlDevDescr>/usr/local/www/upnp/descr/root.xml</xmlDevDescr>
		<maxAge>1800</maxAge>
		<interval>10</interval>
		<ifList>
			<if>
				<ifName>vlan777</ifName>
				<DevDescrURL4><![CDATA[http://0.0.0.0:80/upnp/descr/root.xml]]></DevDescrURL4>
				<DevDescrURL6><![CDATA[http://[::]:80/upnp/descr/root.xml]]></DevDescrURL6>
			</if>
		</ifList>
	</announce>
</announceList>

announce

Описание UPnP устройства для анонсирования.

xmlDevDescr

Путь к XML файлу с описанием устройства.
SSDPd загружает из этого файла описание устройства и его сервисов.

maxAge

Время в секундах, используется клиентами для кеширования.

interval

Время в секундах, указывает как часто SSDPd посылает анонс в сеть.

ifList, if

Список сетевых интерфейсов для отсылки анонсов данного устройства.

ifName

Имя сетевого интерфейса для отсылки анонсов.

DevDescrURL4

URL для IPv4 анонсов.
Адрес “0.0.0.0” автоматически заменяется на IPv4 адрес на данном интерфейсе.
URL должен указывать на файл с XML описанием UPnP устройства и его сервисов, это должен быть тот же самый файл что и xmlDevDescr только доступный все по протоколу HTTP.

DevDescrURL6

Аналогично DevDescrURL4.
Адрес “[::]” автоматически заменяется на IPv6 адрес на данном интерфейсе.


Настройка nginx

Здесь самый минимум настроек, всё что связано с безопасностью/доступом, логами удалено.

Расшариваем папку с контентом:

# allow files listing: DataStore
location ^~ /DataStore/ {
	root /usr/;
	add_header TransferMode.DLNA.ORG 'Streaming';
	add_header ContentFeatures.DLNA.ORG 'DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000';
}

Дополнительные заголовки часто требуются UPnP/DLNA клиентам для работы.

Поддержка UPnP SUBSCRIBE/UNSUBSCRIBE (они нужны для VLC и WMP)

# UPnP SUBSCRIBE/UNSUBSCRIBE handle
location ^~ /upnp/subscribe/ {
	if ($request_method = SUBSCRIBE) {
		add_header Pragma "no-cache";
		add_header SID "uuid:7CF21CB0-2266-47BE-A608-3CC1F5210BB4";
		add_header Timeout "Second-1800";
		return 200;
	}
	if ($request_method = UNSUBSCRIBE) {
		add_header Pragma "no-cache";
		return 200;
	}
}

Если потребуется обрабатывать эти запросы в скриптах, то можно превратить их в POST с дополнительным заголовком и передать в скрипт, пример описан здесь: http://serverfault.com/questions/347663/nginx-convert-head-to-get-requests

Разрешаем PHP для UPnP скриптов:

# php for: UPnP
location ^~ /upnp/control/ {
	root /usr/local/www/;

	try_files		$fastcgi_script_name = 404;
	#fastcgi_pass		127.0.0.1:54475;
	fastcgi_pass		unix:/var/run/spawn-fcgi.sock;
	fastcgi_connect_timeout 30;
	fastcgi_read_timeout	600;
	fastcgi_send_timeout	600;
	fastcgi_ignore_client_abort off;
	#fastcgi_cache_valid	any 10s;
	fastcgi_intercept_errors off;
	include			fastcgi_params;
	fastcgi_param		SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Расширенная настройка и кастомизация под себя

В файле root.xml
root/device
friendlyName - отображаемое имя UPnP устройства;
UDN - UUID идетификатор устройства, его нужно изменять только если хотим больше одного устройства (или кто то уже его занял), длинна обязательно 36 символов;
presentationURL - можно указать там страничку с описанием или админкой.

root/device/iconList/icon
url - URL на png иконку 48х48;

root/device/serviceList/service
SCPDURL - URL до хмл файла с описанием;
controlURL - URL куда будут прилетать HTTP POST запросы к сервисам;
eventSubURL - URL куда будут идти HTTP SUBSCRIBE/UNSUBSCRIBE, можно оставить пустым.

root.xml описано ТРИ сервиса, нужно править для всех трёх!

software/ssdpd/config.1414179722.txt.gz · Last modified: 2014/10/24 19:42 by root