protected Registry createRegistry(ProtocolFactory protocolFactory) { return new RegistryImpl(this); }
if (registry.getResource(deviceResource.getPathQuery()) != null) { throw new RegistrationException("URI namespace conflict with already registered resource: " + deviceResource); registry.addResource(validatedResource); log.fine("Added remote device resource: " + validatedResource); device.getIdentity().getUdn(), device, registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() != null ? registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() : device.getIdentity().getMaxAgeSeconds() ); sb.append("\n"); sb.append("-------------------------- START Registry Namespace -----------------------------------\n"); for (Resource resource : registry.getResources()) { sb.append(resource).append("\n"); for (final RegistryListener listener : registry.getListeners()) { registry.getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() {
/** * Starts background maintenance immediately. */ @Inject public RegistryImpl(UpnpService upnpService) { log.fine("Creating Registry: " + getClass().getName()); this.upnpService = upnpService; log.fine("Starting registry background maintenance..."); registryMaintainer = createRegistryMaintainer(); if (registryMaintainer != null) { getConfiguration().getRegistryMaintainerExecutor().execute(registryMaintainer); } }
synchronized public boolean removeDevice(UDN udn) { Device device = getDevice(udn, true); if (device != null && device instanceof LocalDevice) return removeDevice((LocalDevice) device); if (device != null && device instanceof RemoteDevice) return removeDevice((RemoteDevice) device); return false; }
protected void renewOutgoingSubscription(final RemoteGENASubscription subscription) { registry.executeAsyncProtocol( registry.getProtocolFactory().createSendingRenewal(subscription) ); } }
synchronized public void notifyDiscoveryFailure(final RemoteDevice device, final Exception ex) { for (final RegistryListener listener : getListeners()) { getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() { listener.remoteDeviceDiscoveryFailed(RegistryImpl.this, device, ex); } } ); } }
if (registry.getDevice(localDevice.getIdentity().getUdn(), false) != null) { log.fine("Ignoring addition, device already registered: " + localDevice); return; if (registry.getResource(deviceResource.getPathQuery()) != null) { throw new RegistrationException("URI namespace conflict with already registered resource: " + deviceResource); registry.addResource(deviceResource); log.fine("Registered resource: " + deviceResource); advertiseAlive(localDevice); for (final RegistryListener listener : registry.getListeners()) { registry.getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() {
if (registry.removeResource(deviceResource)) { log.fine("Unregistered resource: " + deviceResource); it.remove(); if (!shuttingDown) { registry.getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() { for (final RegistryListener listener : registry.getListeners()) { registry.getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() {
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; }
boolean update(RemoteDeviceIdentity rdIdentity) { for (LocalDevice localDevice : registry.getLocalDevices()) { if (localDevice.findDevice(rdIdentity.getUdn()) != null) { log.fine("Ignoring update, a local device graph contains UDN"); registeredRemoteDevice.getIdentity().getUdn(), registeredRemoteDevice, registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() != null ? registry.getConfiguration().getRemoteDeviceMaxAgeSeconds() : rdIdentity.getMaxAgeSeconds() ); for (final RegistryListener listener : registry.getListeners()) { registry.getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() {
synchronized void runPendingExecutions(boolean async) { if (log.isLoggable(Level.FINEST)) log.finest("Executing pending operations: " + pendingExecutions.size()); for (Runnable pendingExecution : pendingExecutions) { if (async) getConfiguration().getAsyncProtocolExecutor().execute(pendingExecution); else pendingExecution.run(); } if (pendingExecutions.size() > 0) { pendingExecutions.clear(); } }
synchronized public Service getService(ServiceReference serviceReference) { Device device; if ((device = getDevice(serviceReference.getUdn(), false)) != null) { return device.findService(serviceReference.getServiceId()); } return null; }
@Override protected RegistryMaintainer createRegistryMaintainer() { return configuration.isMaintainsRegistry() ? super.createRegistryMaintainer() : null; } };
protected void advertiseAlive(final LocalDevice localDevice) { registry.executeAsyncProtocol(new Runnable() { public void run() { try { log.finer("Sleeping some milliseconds to avoid flooding the network with ALIVE msgs"); Thread.sleep(randomGenerator.nextInt(100)); } catch (InterruptedException ex) { log.severe("Background execution interrupted: " + ex.getMessage()); } registry.getProtocolFactory().createSendingNotificationAlive(localDevice).run(); } }); }
synchronized public void addResource(Resource resource) { addResource(resource, ExpirationDetails.UNLIMITED_AGE); }
@Override public Collection<IUpnpDevice> getDevicesList() { Collection<IUpnpDevice> devices = new ArrayList<IUpnpDevice>(); for (Device d : clingRegistry.getDevices()) devices.add(new CDevice(d)); return devices; }
@Override public void addListener(IRegistryListener r) { clingRegistry.addListener((CRegistryListener) r); }
if (registry.getDevice(localDevice.getIdentity().getUdn(), false) != null) { log.fine("Ignoring addition, device already registered: " + localDevice); return; if (registry.getResource(deviceResource.getPathQuery()) != null) { throw new RegistrationException("URI namespace conflict with already registered resource: " + deviceResource); registry.addResource(deviceResource); log.fine("Registered resource: " + deviceResource); advertiseAlive(localDevice); for (final RegistryListener listener : registry.getListeners()) { registry.getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() {
if (registry.removeResource(deviceResource)) { log.fine("Unregistered resource: " + deviceResource); it.remove(); if (!shuttingDown) { registry.getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() { for (final RegistryListener listener : registry.getListeners()) { registry.getConfiguration().getRegistryListenerExecutor().execute( new Runnable() { public void run() {
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; }