@Override public RemoteDevice newInstance(UDN udn, UDAVersion version, DeviceType type, DeviceDetails details, Icon[] icons, RemoteService[] services, List<RemoteDevice> embeddedDevices) throws ValidationException { return new RemoteDevice( new RemoteDeviceIdentity(udn, getIdentity()), version, type, details, icons, services, embeddedDevices.size() > 0 ? embeddedDevices.toArray(new RemoteDevice[embeddedDevices.size()]) : null ); }
public void resume() { log.fine("Updating remote device expiration timestamps on resume"); List<RemoteDeviceIdentity> toUpdate = new ArrayList<>(); for (RegistryItem<UDN, RemoteDevice> remoteItem : getDeviceItems()) { toUpdate.add(remoteItem.getItem().getIdentity()); } for (RemoteDeviceIdentity identity : toUpdate) { update(identity); } }
public void run() { URL deviceURL = rd.getIdentity().getDescriptorURL(); // Performance optimization, try to avoid concurrent GET requests for device descriptor, // if we retrieve it once, we have the hydrated device. There is no different outcome // processing this several times concurrently. if (activeRetrievals.contains(deviceURL)) { log.finer("Exiting early, active retrieval for URL already in progress: " + deviceURL); return; } // Exit if it has been discovered already, could be we have been waiting in the executor queue too long if (getUpnpService().getRegistry().getRemoteDevice(rd.getIdentity().getUdn(), true) != null) { log.finer("Exiting early, already discovered: " + deviceURL); return; } try { activeRetrievals.add(deviceURL); describe(); } catch (RouterException ex) { log.log(Level.WARNING, "Descriptor retrieval failed: " + deviceURL, ex ); } finally { activeRetrievals.remove(deviceURL); } }
synchronized public boolean notifyDiscoveryStart(final RemoteDevice device) { // Exit if we have it already, this is atomic inside this method, finally if (getUpnpService().getRegistry().getRemoteDevice(device.getIdentity().getUdn(), true) != null) { log.finer("Not notifying listeners, already registered: " + device); return false; } for (final RegistryListener listener : getListeners()) { getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() { listener.remoteDeviceDiscoveryStarted(RegistryImpl.this, device); } } ); } return true; }
new StreamRequestMessage(UpnpRequest.Method.GET, rd.getIdentity().getDescriptorURL()); getUpnpService().getConfiguration().getDescriptorRetrievalHeaders(rd.getIdentity()); if (headers != null) deviceDescRetrievalMsg.getHeaders().putAll(headers); + rd.getIdentity().getDescriptorURL() + ", possibly invalid URL: " + ex); return ; "Device descriptor retrieval failed, no response: " + rd.getIdentity().getDescriptorURL() ); return; log.warning( "Device descriptor retrieval failed: " + rd.getIdentity().getDescriptorURL() + ", " + deviceDescMsg.getOperation().getResponseDetails() log.fine( "Received device descriptor without or with invalid Content-Type: " + rd.getIdentity().getDescriptorURL()); log.warning("Received empty device descriptor:" + rd.getIdentity().getDescriptorURL()); return;
if (update(device.getIdentity())) { log.fine("Ignoring addition, device already registered: " + device); return; device.getIdentity().getUdn(), device, registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() != null ? registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() : device.getIdentity().getMaxAgeSeconds() ); log.fine("Adding hydrated remote device to registry with "
boolean remove(final RemoteDevice remoteDevice, boolean shuttingDown) throws RegistrationException { final RemoteDevice registeredDevice = get(remoteDevice.getIdentity().getUdn(), true); if (registeredDevice != null) { outgoingSubscription.getItem().getService().getDevice().getIdentity().getUdn(); if (subscriptionForUDN.equals(registeredDevice.getIdentity().getUdn())) { log.fine("Removing outgoing subscription: " + outgoingSubscription.getKey()); it.remove(); getDeviceItems().remove(new RegistryItem(registeredDevice.getIdentity().getUdn()));
public void init(Service service) { serviceReference = service.getReference(); wakeOnLANBytes = service.getDevice() instanceof RemoteDevice ? ((RemoteDevice) service.getDevice()).getIdentity().getWakeOnLANBytes() : null; reconnectView.setPresenter(this); init(reconnectView); }
RemoteDevice hydratedDevice = describeServices(describedDevice); if (hydratedDevice == null) { if(!errorsAlreadyLogged.contains(rd.getIdentity().getUdn())) { errorsAlreadyLogged.add(rd.getIdentity().getUdn()); log.warning("Device service description failed: " + rd); if(!errorsAlreadyLogged.contains(rd.getIdentity().getUdn())) { errorsAlreadyLogged.add(rd.getIdentity().getUdn()); log.warning("Could not validate device model: " + rd); for (ValidationError validationError : ex.getErrors()) {
public URL normalizeURI(URI relativeOrAbsoluteURI) { // TODO: I have one device (Netgear 834DG DSL Router) that sends a <URLBase>, and even that is wrong (port)! // This can be fixed by "re-enabling" UPnP in the upnpService after a reboot, it will then use the right port... // return URIUtil.createAbsoluteURL(getDescriptorURL(), relativeOrAbsoluteURI); if (getDetails() != null && getDetails().getBaseURL() != null) { // If we have an <URLBase>, all URIs are relative to it return URIUtil.createAbsoluteURL(getDetails().getBaseURL(), relativeOrAbsoluteURI); } else { // Otherwise, they are relative to the descriptor location return URIUtil.createAbsoluteURL(getIdentity().getDescriptorURL(), relativeOrAbsoluteURI); } }
registeredRemoteDevice.getIdentity().getUdn(), registeredRemoteDevice, registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() != null
currentDevice.getIdentity().getUdn(), currentDevice.getVersion(), currentDevice.getType(),
public SendingSubscribe createSendingSubscribe(RemoteGENASubscription subscription) throws ProtocolCreationException { try { List<NetworkAddress> activeStreamServers = getUpnpService().getRouter().getActiveStreamServers( subscription.getService().getDevice().getIdentity().getDiscoveredOnLocalAddress() ); return new SendingSubscribe(getUpnpService(), subscription, activeStreamServers); } catch (RouterException ex) { throw new ProtocolCreationException( "Failed to obtain local stream servers (for event callback URL creation) from router", ex ); } }
getUpnpService().getConfiguration().getDescriptorRetrievalHeaders(service.getDevice().getIdentity()); if (headers != null) serviceDescRetrievalMsg.getHeaders().putAll(headers);
public void resume() { log.fine("Updating remote device expiration timestamps on resume"); List<RemoteDeviceIdentity> toUpdate = new ArrayList<RemoteDeviceIdentity>(); for (RegistryItem<UDN, RemoteDevice> remoteItem : getDeviceItems()) { toUpdate.add(remoteItem.getItem().getIdentity()); } for (RemoteDeviceIdentity identity : toUpdate) { update(identity); } }
addIfNotNull(deviceNode, "Descriptor URL: ", ((RemoteDevice) device).getIdentity().getDescriptorURL(), true); } else if (device instanceof LocalDevice) { addIfNotNull(deviceNode, "Descriptor URI: ", namespace.getDescriptorPath(device)); addIfNotNull(deviceNode, "Presentation URI: ", device.getDetails().getPresentationURI(), device); if (device instanceof RemoteDevice && ((RemoteDevice) device).getIdentity().getInterfaceMacAddress() != null) addIfNotNull(deviceNode, "MAC Ethernet Address: ", HexBin.bytesToString(((RemoteDevice) device).getIdentity().getInterfaceMacAddress(), ":"));
@Override public RemoteDevice newInstance(UDN udn, UDAVersion version, DeviceType type, DeviceDetails details, Icon[] icons, RemoteService[] services, List<RemoteDevice> embeddedDevices) throws ValidationException { return new RemoteDevice( new RemoteDeviceIdentity(udn, getIdentity()), version, type, details, icons, services, embeddedDevices.size() > 0 ? embeddedDevices.toArray(new RemoteDevice[embeddedDevices.size()]) : null ); }
synchronized public boolean notifyDiscoveryStart(final RemoteDevice device) { // Exit if we have it already, this is atomic inside this method, finally if (getUpnpService().getRegistry().getRemoteDevice(device.getIdentity().getUdn(), true) != null) { log.finer("Not notifying listeners, already registered: " + device); return false; } for (final RegistryListener listener : getListeners()) { getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() { listener.remoteDeviceDiscoveryStarted(RegistryImpl.this, device); } } ); } return true; }
public URL normalizeURI(URI relativeOrAbsoluteURI) { // TODO: I have one device (Netgear 834DG DSL Router) that sends a <URLBase>, and even that is wrong (port)! // This can be fixed by "re-enabling" UPnP in the upnpService after a reboot, it will then use the right port... // return URIUtil.createAbsoluteURL(getDescriptorURL(), relativeOrAbsoluteURI); if (getDetails() != null && getDetails().getBaseURL() != null) { // If we have an <URLBase>, all URIs are relative to it return URIUtil.createAbsoluteURL(getDetails().getBaseURL(), relativeOrAbsoluteURI); } else { // Otherwise, they are relative to the descriptor location return URIUtil.createAbsoluteURL(getIdentity().getDescriptorURL(), relativeOrAbsoluteURI); } }
public SendingSubscribe createSendingSubscribe(RemoteGENASubscription subscription) throws ProtocolCreationException { try { List<NetworkAddress> activeStreamServers = getUpnpService().getRouter().getActiveStreamServers( subscription.getService().getDevice().getIdentity().getDiscoveredOnLocalAddress() ); return new SendingSubscribe(getUpnpService(), subscription, activeStreamServers); } catch (RouterException ex) { throw new ProtocolCreationException( "Failed to obtain local stream servers (for event callback URL creation) from router", ex ); } }