SAT>IP: Send M-SEARCH request three times

This commit is contained in:
Jaroslav Kysela 2014-05-12 15:52:26 +02:00
parent d779ebc7dd
commit 851a9b785c

View file

@ -498,6 +498,7 @@ static struct satip_discovery_queue satip_discoveries;
static upnp_service_t *satip_discovery_service;
static gtimer_t satip_discovery_timer;
static gtimer_t satip_discovery_timerq;
static gtimer_t satip_discovery_msearch_timer;
static str_list_t *satip_static_clients;
static void
@ -862,7 +863,7 @@ satip_discovery_service_destroy(upnp_service_t *us)
}
static void
satip_discovery_timer_cb(void *aux)
satip_discovery_send_msearch(void *aux)
{
#define MSG "\
M-SEARCH * HTTP/1.1\r\n\
@ -870,6 +871,29 @@ HOST: 239.255.255.250:1900\r\n\
MAN: \"ssdp:discover\"\r\n\
MX: 2\r\n\
ST: urn:ses-com:device:SatIPServer:1\r\n"
int attempt = ((intptr_t)aux) % 10;
htsbuf_queue_t q;
/* UDP is not reliable - send this message three times */
if (attempt < 1 || attempt > 3)
return;
if (satip_discovery_service == NULL)
return;
htsbuf_queue_init(&q, 0);
htsbuf_append(&q, MSG, sizeof(MSG)-1);
htsbuf_qprintf(&q, "USER-AGENT: unix/1.0 UPnP/1.1 TVHeadend/%s\r\n", tvheadend_version);
htsbuf_append(&q, "\r\n", 2);
upnp_send(&q, NULL);
htsbuf_queue_flush(&q);
gtimer_arm_ms(&satip_discovery_msearch_timer, satip_discovery_send_msearch,
(void *)(intptr_t)(attempt + 1), attempt * 11);
}
static void
satip_discovery_timer_cb(void *aux)
{
int i;
if (!tvheadend_running)
@ -885,15 +909,8 @@ ST: urn:ses-com:device:SatIPServer:1\r\n"
satip_discovery_service->us_destroy = satip_discovery_service_destroy;
}
}
if (satip_discovery_service) {
htsbuf_queue_t q;
htsbuf_queue_init(&q, 0);
htsbuf_append(&q, MSG, sizeof(MSG)-1);
htsbuf_qprintf(&q, "USER-AGENT: unix/1.0 UPnP/1.1 TVHeadend/%s\r\n", tvheadend_version);
htsbuf_append(&q, "\r\n", 2);
upnp_send(&q, NULL);
htsbuf_queue_flush(&q);
}
if (satip_discovery_service)
satip_discovery_send_msearch((void *)1);
for (i = 0; i < satip_static_clients->num; i++)
satip_discovery_static(satip_static_clients->str[i]);
gtimer_arm(&satip_discovery_timer, satip_discovery_timer_cb, NULL, 3600);