protected void parseHeaders() { // This runs as late as possible and only when necessary (getter called and map is dirty) parsedHeaders = new LinkedHashMap<>(); if (log.isLoggable(Level.FINE)) log.fine("Parsing all HTTP headers for known UPnP headers: " + size()); for (Entry<String, List<String>> entry : entrySet()) { if (entry.getKey() == null) continue; // Oh yes, the JDK has 'null' HTTP headers UpnpHeader.Type type = UpnpHeader.Type.getByHttpName(entry.getKey()); if (type == null) { if (log.isLoggable(Level.FINE)) log.fine("Ignoring non-UPNP HTTP header: " + entry.getKey()); continue; } for (String value : entry.getValue()) { UpnpHeader upnpHeader = UpnpHeader.newInstance(type, value); if (upnpHeader == null || upnpHeader.getValue() == null) { if (log.isLoggable(Level.FINE)) log.fine( "Ignoring known but irrelevant header (value violates the UDA specification?) '" + type.getHttpName() + "': " + value ); } else { addParsedValue(type, upnpHeader); } } } }
for (int i = 0; i < type.getHeaderTypes().length && upnpHeader == null; i++) { Class<? extends UpnpHeader> headerClass = type.getHeaderTypes()[i]; try { log.finest("Trying to parse '" + type + "' with class: " + headerClass.getSimpleName());
/** * @param mxSeconds The time in seconds a host should wait before responding. */ public SendingSearch(UpnpService upnpService, UpnpHeader searchTarget, int mxSeconds) { super(upnpService); if (!UpnpHeader.Type.ST.isValidHeaderType(searchTarget.getClass())) { throw new IllegalArgumentException( "Given search target instance is not a valid header class for type ST: " + searchTarget.getClass() ); } this.searchTarget = searchTarget; this.mxSeconds = mxSeconds; }
for (int i = 0; i < type.getHeaderTypes().length && upnpHeader == null; i++) { Class<? extends UpnpHeader> headerClass = type.getHeaderTypes()[i]; try { log.finest("Trying to parse '" + type + "' with class: " + headerClass.getSimpleName());
protected void parseHeaders() { // This runs as late as possible and only when necessary (getter called and map is dirty) parsedHeaders = new LinkedHashMap<>(); if (log.isLoggable(Level.FINE)) log.fine("Parsing all HTTP headers for known UPnP headers: " + size()); for (Entry<String, List<String>> entry : entrySet()) { if (entry.getKey() == null) continue; // Oh yes, the JDK has 'null' HTTP headers UpnpHeader.Type type = UpnpHeader.Type.getByHttpName(entry.getKey()); if (type == null) { if (log.isLoggable(Level.FINE)) log.fine("Ignoring non-UPNP HTTP header: " + entry.getKey()); continue; } for (String value : entry.getValue()) { UpnpHeader upnpHeader = UpnpHeader.newInstance(type, value); if (upnpHeader == null || upnpHeader.getValue() == null) { if (log.isLoggable(Level.FINE)) log.fine( "Ignoring known but irrelevant header (value violates the UDA specification?) '" + type.getHttpName() + "': " + value ); } else { addParsedValue(type, upnpHeader); } } } }
protected void applyRequestHeaders() { // Headers UpnpHeaders headers = getRequestMessage().getHeaders(); if (log.isLoggable(Level.FINE)) log.fine("Writing headers on HttpContentExchange: " + headers.size()); // TODO Always add the Host header // TODO: ? setRequestHeader(UpnpHeader.Type.HOST.getHttpName(), ); // Add the default user agent if not already set on the message if (!headers.containsKey(UpnpHeader.Type.USER_AGENT)) { setRequestHeader( UpnpHeader.Type.USER_AGENT.getHttpName(), getConfiguration().getUserAgentValue( getRequestMessage().getUdaMajorVersion(), getRequestMessage().getUdaMinorVersion()) ); } for (Map.Entry<String, List<String>> entry : headers.entrySet()) { for (String v : entry.getValue()) { String headerName = entry.getKey(); if (log.isLoggable(Level.FINE)) log.fine("Setting header '" + headerName + "': " + v); addRequestHeader(headerName, v); } } }
protected boolean isSupportedServiceAdvertisement(IncomingDatagramMessage message) { ServiceType[] exclusiveServiceTypes = getUpnpService().getConfiguration().getExclusiveServiceTypes(); if (exclusiveServiceTypes == null) return false; // Discovery is disabled if (exclusiveServiceTypes.length == 0) return true; // Any advertisement is fine String usnHeader = message.getHeaders().getFirstHeader(UpnpHeader.Type.USN.getHttpName()); if (usnHeader == null) return false; // Not a service advertisement, drop it try { NamedServiceType nst = NamedServiceType.valueOf(usnHeader); for (ServiceType exclusiveServiceType : exclusiveServiceTypes) { if (nst.getServiceType().implementsVersion(exclusiveServiceType)) return true; } } catch (InvalidValueException ex) { log.finest("Not a named service type header value: " + usnHeader); } log.fine("Service advertisement not supported, dropping it: " + usnHeader); return false; }
protected void applyRequestProperties(HttpURLConnection urlConnection, StreamRequestMessage requestMessage) { urlConnection.setInstanceFollowRedirects(false); // Defaults to true but not needed here // HttpURLConnection always adds a "Host" header // HttpURLConnection always adds an "Accept" header (not needed but shouldn't hurt) // Add the default user agent if not already set on the message if (!requestMessage.getHeaders().containsKey(UpnpHeader.Type.USER_AGENT)) { urlConnection.setRequestProperty( UpnpHeader.Type.USER_AGENT.getHttpName(), getConfiguration().getUserAgentValue(requestMessage.getUdaMajorVersion(), requestMessage.getUdaMinorVersion()) ); } // Other headers applyHeaders(urlConnection, requestMessage.getHeaders()); }
protected boolean isByeBye(IncomingDatagramMessage message) { String ntsHeader = message.getHeaders().getFirstHeader(UpnpHeader.Type.NTS.getHttpName()); return ntsHeader != null && ntsHeader.equals(NotificationSubtype.BYEBYE.getHeaderString()); }
/** * @param mxSeconds The time in seconds a host should wait before responding. */ public SendingSearch(UpnpService upnpService, UpnpHeader searchTarget, int mxSeconds) { super(upnpService); if (!UpnpHeader.Type.ST.isValidHeaderType(searchTarget.getClass())) { throw new IllegalArgumentException( "Given search target instance is not a valid header class for type ST: " + searchTarget.getClass() ); } this.searchTarget = searchTarget; this.mxSeconds = mxSeconds; }
public boolean isValidHeaderType(Class<? extends UpnpHeader> clazz) { for (Class<? extends UpnpHeader> permissibleType : getHeaderTypes()) { if (permissibleType.isAssignableFrom(clazz)) { return true; } } return false; }
public void add(UpnpHeader.Type type, UpnpHeader value) { super.add(type.getHttpName(), value.getString()); if (parsedHeaders != null) addParsedValue(type, value); }
public void remove(UpnpHeader.Type type) { super.remove(type.getHttpName()); if (parsedHeaders != null) parsedHeaders.remove(type); }
for (int i = 0; i < type.getHeaderTypes().length && upnpHeader == null; i++) { Class<? extends UpnpHeader> headerClass = type.getHeaderTypes()[i]; try { log.finest("Trying to parse '" + type + "' with class: " + headerClass.getSimpleName());
protected void applyRequestHeaders() { // Headers UpnpHeaders headers = getRequestMessage().getHeaders(); if (log.isLoggable(Level.FINE)) log.fine("Writing headers on HttpContentExchange: " + headers.size()); // TODO Always add the Host header // TODO: ? setRequestHeader(UpnpHeader.Type.HOST.getHttpName(), ); // Add the default user agent if not already set on the message if (!headers.containsKey(UpnpHeader.Type.USER_AGENT)) { setRequestHeader( UpnpHeader.Type.USER_AGENT.getHttpName(), getConfiguration().getUserAgentValue( getRequestMessage().getUdaMajorVersion(), getRequestMessage().getUdaMinorVersion()) ); } for (Map.Entry<String, List<String>> entry : headers.entrySet()) { for (String v : entry.getValue()) { String headerName = entry.getKey(); if (log.isLoggable(Level.FINE)) log.fine("Setting header '" + headerName + "': " + v); addRequestHeader(headerName, v); } } }
protected void parseHeaders() { // This runs as late as possible and only when necessary (getter called and map is dirty) parsedHeaders = new LinkedHashMap(); if (log.isLoggable(Level.FINE)) log.fine("Parsing all HTTP headers for known UPnP headers: " + size()); for (Entry<String, List<String>> entry : entrySet()) { if (entry.getKey() == null) continue; // Oh yes, the JDK has 'null' HTTP headers UpnpHeader.Type type = UpnpHeader.Type.getByHttpName(entry.getKey()); if (type == null) { if (log.isLoggable(Level.FINE)) log.fine("Ignoring non-UPNP HTTP header: " + entry.getKey()); continue; } for (String value : entry.getValue()) { UpnpHeader upnpHeader = UpnpHeader.newInstance(type, value); if (upnpHeader == null || upnpHeader.getValue() == null) { if (log.isLoggable(Level.FINE)) log.fine( "Ignoring known but irrelevant header (value violates the UDA specification?) '" + type.getHttpName() + "': " + value ); } else { addParsedValue(type, upnpHeader); } } } }
protected boolean isSupportedServiceAdvertisement(IncomingDatagramMessage message) { ServiceType[] exclusiveServiceTypes = getUpnpService().getConfiguration().getExclusiveServiceTypes(); if (exclusiveServiceTypes == null) return false; // Discovery is disabled if (exclusiveServiceTypes.length == 0) return true; // Any advertisement is fine String usnHeader = message.getHeaders().getFirstHeader(UpnpHeader.Type.USN.getHttpName()); if (usnHeader == null) return false; // Not a service advertisement, drop it try { NamedServiceType nst = NamedServiceType.valueOf(usnHeader); for (ServiceType exclusiveServiceType : exclusiveServiceTypes) { if (nst.getServiceType().implementsVersion(exclusiveServiceType)) return true; } } catch (InvalidValueException ex) { log.finest("Not a named service type header value: " + usnHeader); } log.fine("Service advertisement not supported, dropping it: " + usnHeader); return false; }
protected void applyRequestProperties(HttpURLConnection urlConnection, StreamRequestMessage requestMessage) { urlConnection.setInstanceFollowRedirects(false); // Defaults to true but not needed here // HttpURLConnection always adds a "Host" header // HttpURLConnection always adds an "Accept" header (not needed but shouldn't hurt) // Add the default user agent if not already set on the message if (!requestMessage.getHeaders().containsKey(UpnpHeader.Type.USER_AGENT)) { urlConnection.setRequestProperty( UpnpHeader.Type.USER_AGENT.getHttpName(), getConfiguration().getUserAgentValue(requestMessage.getUdaMajorVersion(), requestMessage.getUdaMinorVersion()) ); } // Other headers applyHeaders(urlConnection, requestMessage.getHeaders()); }
protected boolean isByeBye(IncomingDatagramMessage message) { String ntsHeader = message.getHeaders().getFirstHeader(UpnpHeader.Type.NTS.getHttpName()); return ntsHeader != null && ntsHeader.equals(NotificationSubtype.BYEBYE.getHeaderString()); }
/** * @param mxSeconds The time in seconds a host should wait before responding. */ public SendingSearch(UpnpService upnpService, UpnpHeader searchTarget, int mxSeconds) { super(upnpService); if (!UpnpHeader.Type.ST.isValidHeaderType(searchTarget.getClass())) { throw new IllegalArgumentException( "Given search target instance is not a valid header class for type ST: " + searchTarget.getClass() ); } this.searchTarget = searchTarget; this.mxSeconds = mxSeconds; }