public RemoteDeviceIdentity(UDN udn, RemoteDeviceIdentity template) { this(udn, template.getMaxAgeSeconds(), template.getDescriptorURL(), template.getInterfaceMacAddress(), template.getDiscoveredOnLocalAddress()); }
RemoteDeviceIdentity rdIdentity = new RemoteDeviceIdentity(getInputMessage()); log.fine("Received device notification: " + rdIdentity); log.fine("Received device ALIVE advertisement, descriptor location is: " + rdIdentity.getDescriptorURL()); if (rdIdentity.getDescriptorURL() == null) { log.finer("Ignoring message without location URL header: " + getInputMessage()); return; if (rdIdentity.getMaxAgeSeconds() == null) { log.finer("Ignoring message without max-age header: " + getInputMessage()); return;
@Override public String toString() { // Performance optimization, so we don't have to wrap all log("foo " + device) calls with isLoggable if(ModelUtil.ANDROID_RUNTIME) { return "(RemoteDeviceIdentity) UDN: " + getUdn() + ", Descriptor: " + getDescriptorURL(); } return "(" + getClass().getSimpleName() + ") UDN: " + getUdn() + ", Descriptor: " + getDescriptorURL(); } }
boolean update(RemoteDeviceIdentity rdIdentity) { if (localDevice.findDevice(rdIdentity.getUdn()) != null) { log.fine("Ignoring update, a local device graph contains UDN"); return true; RemoteDevice registeredRemoteDevice = get(rdIdentity.getUdn(), false); if (registeredRemoteDevice != null) { registeredRemoteDevice.getIdentity().getUdn(), registeredRemoteDevice, registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() != null ? registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() : rdIdentity.getMaxAgeSeconds() );
new StreamRequestMessage(UpnpRequest.Method.GET, rd.getIdentity().getDescriptorURL()); + 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;
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; }
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(), ":"));
public byte[] getWakeOnLANBytes() { if (getInterfaceMacAddress() == null) return null; byte[] bytes = new byte[6 + 16 * getInterfaceMacAddress().length]; for (int i = 0; i < 6; i++) { bytes[i] = (byte) 0xff; } for (int i = 6; i < bytes.length; i += getInterfaceMacAddress().length) { System.arraycopy(getInterfaceMacAddress(), 0, bytes, i, getInterfaceMacAddress().length); } return bytes; }
@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 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 ); } }
public void init(Service service) { serviceReference = service.getReference(); wakeOnLANBytes = service.getDevice() instanceof RemoteDevice ? ((RemoteDevice) service.getDevice()).getIdentity().getWakeOnLANBytes() : null; reconnectView.setPresenter(this); init(reconnectView); }
device.getIdentity().getUdn(), device, registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() != null ? registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() : device.getIdentity().getMaxAgeSeconds() ); log.fine("Adding hydrated remote device to registry with "
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); } }
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 byte[] getWakeOnLANBytes() { if (getInterfaceMacAddress() == null) return null; byte[] bytes = new byte[6 + 16 * getInterfaceMacAddress().length]; for (int i = 0; i < 6; i++) { bytes[i] = (byte) 0xff; } for (int i = 6; i < bytes.length; i += getInterfaceMacAddress().length) { System.arraycopy(getInterfaceMacAddress(), 0, bytes, i, getInterfaceMacAddress().length); } return bytes; }
@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 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 ); } }
public RemoteDeviceIdentity(UDN udn, RemoteDeviceIdentity template) { this(udn, template.getMaxAgeSeconds(), template.getDescriptorURL(), template.getInterfaceMacAddress(), template.getDiscoveredOnLocalAddress()); }
RemoteDeviceIdentity rdIdentity = new RemoteDeviceIdentity(getInputMessage()); log.fine("Received device search response: " + rdIdentity); if (rdIdentity.getDescriptorURL() == null) { log.finer("Ignoring message without location URL header: " + getInputMessage()); return; if (rdIdentity.getMaxAgeSeconds() == null) { log.finer("Ignoring message without max-age header: " + getInputMessage()); return;
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); } }