diff --git a/miniupnpd/upnphttp.c b/miniupnpd/upnphttp.c index 026731d..6f467d5 100644 --- a/miniupnpd/upnphttp.c +++ b/miniupnpd/upnphttp.c @@ -643,8 +643,7 @@ ProcessHTTPSubscribe_upnphttp(struct upnphttp * h, const char * path) h->req_Timeout); syslog(LOG_DEBUG, "SID '%.*s'", h->req_SIDLen, h->req_buf + h->req_SIDOff); #if defined(UPNP_STRICT) && (UPNP_VERSION_MAJOR > 1) || (UPNP_VERSION_MINOR > 0) - /*if(h->req_Timeout < 1800) {*/ - if(h->req_Timeout == 0) { + if(h->req_Timeout < 1800) { /* Second-infinite is forbidden with UDA v1.1 and later : * (UDA 1.1 : 4.1.1 Subscription) * UPnP 1.1 control points MUST NOT subscribe using keyword infinite, @@ -653,7 +652,13 @@ ProcessHTTPSubscribe_upnphttp(struct upnphttp * h, const char * path) * ignored by a UPnP 1.1 device (the presence of infinite is handled * by the device as if the TIMEOUT header field in a request was not * present) . The keyword infinite MUST NOT be returned by a UPnP 1.1 - * device. */ + * device. + * Also the device must return a value of minimum 1800 seconds in the + * response, according to UDA 1.1 (4.1.2 SUBSCRIBE with NT and CALLBACK): + * TIMEOUT + * REQUIRED. Field value contains actual duration until subscription + * expires. Keyword "Second-" followed by an integer (no space). + * SHOULD be greater than or equal to 1800 seconds (30 minutes).*/ h->req_Timeout = 1800; /* default to 30 minutes */ } #endif /* UPNP_STRICT */