Klasse RegistryImpl

java.lang.Object
org.jupnp.registry.RegistryImpl
Alle implementierten Schnittstellen:
Registry

public class RegistryImpl extends Object implements Registry
Default implementation of Registry.
Autor:
Christian Bauer
  • Felddetails

    • upnpService

      protected UpnpService upnpService
    • registryMaintainer

      protected RegistryMaintainer registryMaintainer
    • pendingSubscriptionsLock

      protected final Set<RemoteGENASubscription> pendingSubscriptionsLock
    • lock

      protected Object lock
    • registryListeners

      protected final Set<RegistryListener> registryListeners
    • resourceItems

      protected final Set<org.jupnp.registry.RegistryItem<URI,Resource>> resourceItems
    • pendingExecutions

      protected final List<Runnable> pendingExecutions
    • remoteItemsLock

      protected final ReentrantReadWriteLock remoteItemsLock
    • localItemsLock

      protected final ReentrantReadWriteLock localItemsLock
    • remoteItems

      protected final org.jupnp.registry.RemoteItems remoteItems
    • localItems

      protected final org.jupnp.registry.LocalItems localItems
  • Konstruktordetails

    • RegistryImpl

      public RegistryImpl()
    • RegistryImpl

      public RegistryImpl(UpnpService upnpService)
      Starts background maintenance immediately.
  • Methodendetails

    • getUpnpService

      public UpnpService getUpnpService()
      Angegeben von:
      getUpnpService in Schnittstelle Registry
    • getConfiguration

      public UpnpServiceConfiguration getConfiguration()
      Angegeben von:
      getConfiguration in Schnittstelle Registry
    • getProtocolFactory

      public ProtocolFactory getProtocolFactory()
      Angegeben von:
      getProtocolFactory in Schnittstelle Registry
    • createRegistryMaintainer

      protected RegistryMaintainer createRegistryMaintainer()
    • addListener

      public void addListener(RegistryListener listener)
      Angegeben von:
      addListener in Schnittstelle Registry
    • removeListener

      public void removeListener(RegistryListener listener)
      Angegeben von:
      removeListener in Schnittstelle Registry
    • getListeners

      public Collection<RegistryListener> getListeners()
      Angegeben von:
      getListeners in Schnittstelle Registry
    • notifyDiscoveryStart

      public boolean notifyDiscoveryStart(RemoteDevice device)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack when the discovery protocol starts.

      The registry will notify all registered listeners of this event, unless the given device was already been present in the registry.

      Angegeben von:
      notifyDiscoveryStart in Schnittstelle Registry
      Parameter:
      device - The half-hydrated (without services) metadata of the discovered device.
      Gibt zurück:
      false if the device was already registered.
    • notifyDiscoveryFailure

      public void notifyDiscoveryFailure(RemoteDevice device, Exception e)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack when the discovery protocol stopped abnormaly.

      The registry will notify all registered listeners of this event.

      Angegeben von:
      notifyDiscoveryFailure in Schnittstelle Registry
      Parameter:
      device - The half-hydrated (without services) metadata of the discovered device.
      e - The cause for the interruption of the discovery protocol.
    • addDevice

      public void addDevice(LocalDevice localDevice)
      Beschreibung aus Schnittstelle kopiert: Registry
      Call this method to add your local device metadata.
      Angegeben von:
      addDevice in Schnittstelle Registry
      Parameter:
      localDevice - The device to add and maintain.
    • addDevice

      public void addDevice(LocalDevice localDevice, DiscoveryOptions options)
      Beschreibung aus Schnittstelle kopiert: Registry
      Call this method to add your local device metadata.
      Angegeben von:
      addDevice in Schnittstelle Registry
      Parameter:
      localDevice - The device to add and maintain.
      options - Immediately effective when this device is registered.
    • setDiscoveryOptions

      public void setDiscoveryOptions(UDN udn, DiscoveryOptions options)
      Beschreibung aus Schnittstelle kopiert: Registry
      Change the active DiscoveryOptions for the given (local device) UDN.
      Angegeben von:
      setDiscoveryOptions in Schnittstelle Registry
      Parameter:
      options - Set to null to disable any options.
    • getDiscoveryOptions

      public DiscoveryOptions getDiscoveryOptions(UDN udn)
      Beschreibung aus Schnittstelle kopiert: Registry
      Get the currently active DiscoveryOptions for the given (local device) UDN.
      Angegeben von:
      getDiscoveryOptions in Schnittstelle Registry
      Gibt zurück:
      null if there are no active discovery options for the given UDN.
    • addDevice

      public void addDevice(RemoteDevice remoteDevice)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP discovery protocol.
      Angegeben von:
      addDevice in Schnittstelle Registry
    • update

      public boolean update(RemoteDeviceIdentity rdIdentity)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP discovery protocol.
      Angegeben von:
      update in Schnittstelle Registry
    • removeDevice

      public boolean removeDevice(LocalDevice localDevice)
      Beschreibung aus Schnittstelle kopiert: Registry
      Call this to remove your local device metadata.
      Angegeben von:
      removeDevice in Schnittstelle Registry
      Gibt zurück:
      true if the device was registered and has been removed.
    • removeDevice

      public boolean removeDevice(RemoteDevice remoteDevice)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP discovery protocol.
      Angegeben von:
      removeDevice in Schnittstelle Registry
    • removeAllLocalDevices

      public void removeAllLocalDevices()
      Beschreibung aus Schnittstelle kopiert: Registry
      Clear the registry of all locally registered device metadata.
      Angegeben von:
      removeAllLocalDevices in Schnittstelle Registry
    • removeAllRemoteDevices

      public void removeAllRemoteDevices()
      Beschreibung aus Schnittstelle kopiert: Registry
      Clear the registry of all discovered remote device metadata.
      Angegeben von:
      removeAllRemoteDevices in Schnittstelle Registry
    • removeDevice

      public boolean removeDevice(UDN udn)
      Beschreibung aus Schnittstelle kopiert: Registry
      Call this to remove any device metadata with the given UDN.
      Angegeben von:
      removeDevice in Schnittstelle Registry
      Gibt zurück:
      true if the device was registered and has been removed.
    • getDevice

      public Device getDevice(UDN udn, boolean rootOnly)
      Angegeben von:
      getDevice in Schnittstelle Registry
      Parameter:
      udn - The device name to lookup.
      rootOnly - If true, only matches of root devices are returned.
      Gibt zurück:
      The registered root or embedded device metadata, or null.
    • getLocalDevice

      public LocalDevice getLocalDevice(UDN udn, boolean rootOnly)
      Angegeben von:
      getLocalDevice in Schnittstelle Registry
      Parameter:
      udn - The device name to lookup.
      rootOnly - If true, only matches of root devices are returned.
      Gibt zurück:
      The registered root or embedded device metadata, or null.
    • getRemoteDevice

      public RemoteDevice getRemoteDevice(UDN udn, boolean rootOnly)
      Angegeben von:
      getRemoteDevice in Schnittstelle Registry
      Parameter:
      udn - The device name to lookup.
      rootOnly - If true, only matches of root devices are returned.
      Gibt zurück:
      The registered root or embedded device metadata, or null.
    • getLocalDevices

      public Collection<LocalDevice> getLocalDevices()
      Angegeben von:
      getLocalDevices in Schnittstelle Registry
      Gibt zurück:
      All locally registered device metadata, in no particular order, or an empty collection.
    • getRemoteDevices

      public Collection<RemoteDevice> getRemoteDevices()
      Angegeben von:
      getRemoteDevices in Schnittstelle Registry
      Gibt zurück:
      All discovered remote device metadata, in no particular order, or an empty collection.
    • getDevices

      public Collection<Device> getDevices()
      Angegeben von:
      getDevices in Schnittstelle Registry
      Gibt zurück:
      All device metadata, in no particular order, or an empty collection.
    • getDevices

      public Collection<Device> getDevices(DeviceType deviceType)
      Angegeben von:
      getDevices in Schnittstelle Registry
      Gibt zurück:
      All device metadata of devices which implement the given type, in no particular order, or an empty collection.
    • getDevices

      public Collection<Device> getDevices(ServiceType serviceType)
      Angegeben von:
      getDevices in Schnittstelle Registry
      Gibt zurück:
      All device metadata of devices which have a service that implements the given type, in no particular order, or an empty collection.
    • getService

      public Service getService(ServiceReference serviceReference)
      Angegeben von:
      getService in Schnittstelle Registry
      Gibt zurück:
      Complete service metadata.for a service reference or null if no service for the given reference has been registered.
    • getResource

      public Resource getResource(URI pathQuery) throws IllegalArgumentException
      Angegeben von:
      getResource in Schnittstelle Registry
      Parameter:
      pathQuery - The path and optional query string of the resource's registration URI (e.g. /dev/somefile.xml?param=value)
      Gibt zurück:
      Any registered resource that matches the given URI path.
      Löst aus:
      IllegalArgumentException - If the given URI was absolute, only path and query are allowed.
    • getResource

      public <T extends Resource> T getResource(Class<T> resourceType, URI pathQuery) throws IllegalArgumentException
      Angegeben von:
      getResource in Schnittstelle Registry
      Typparameter:
      T - The required subtype of the Resource.
      Parameter:
      resourceType - The required subtype of the Resource.
      pathQuery - The path and optional query string of the resource's registration URI (e.g. /dev/somefile.xml?param=value)
      Gibt zurück:
      Any registered resource that matches the given URI path and subtype.
      Löst aus:
      IllegalArgumentException - If the given URI was absolute, only path and query are allowed.
    • getResources

      public Collection<Resource> getResources()
      Angegeben von:
      getResources in Schnittstelle Registry
      Gibt zurück:
      All registered resources, in no particular order, or an empty collection.
    • getResources

      public <T extends Resource> Collection<T> getResources(Class<T> resourceType)
      Angegeben von:
      getResources in Schnittstelle Registry
      Typparameter:
      T - The required subtype of the Resource.
      Parameter:
      resourceType - The required subtype of the Resource.
      Gibt zurück:
      Any registered resource that matches the given subtype.
    • addResource

      public void addResource(Resource resource)
      Beschreibung aus Schnittstelle kopiert: Registry
      Stores an arbitrary resource in the registry.
      Angegeben von:
      addResource in Schnittstelle Registry
      Parameter:
      resource - The resource to maintain indefinitely (until it is manually removed).
    • addResource

      public void addResource(Resource resource, int maxAgeSeconds)
      Beschreibung aus Schnittstelle kopiert: Registry
      Stores an arbitrary resource in the registry.

      Call this method repeatedly to refresh and prevent expiration of the resource.

      Angegeben von:
      addResource in Schnittstelle Registry
      Parameter:
      resource - The resource to maintain.
      maxAgeSeconds - The time after which the registry will automatically remove the resource.
    • removeResource

      public boolean removeResource(Resource resource)
      Beschreibung aus Schnittstelle kopiert: Registry
      Removes a resource from the registry.
      Angegeben von:
      removeResource in Schnittstelle Registry
      Parameter:
      resource - The resource to remove.
      Gibt zurück:
      true if the resource was registered and has been removed.
    • addLocalSubscription

      public void addLocalSubscription(LocalGENASubscription subscription)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.
      Angegeben von:
      addLocalSubscription in Schnittstelle Registry
    • getLocalSubscription

      public LocalGENASubscription getLocalSubscription(String subscriptionId)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.
      Angegeben von:
      getLocalSubscription in Schnittstelle Registry
    • updateLocalSubscription

      public boolean updateLocalSubscription(LocalGENASubscription subscription)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.
      Angegeben von:
      updateLocalSubscription in Schnittstelle Registry
    • removeLocalSubscription

      public boolean removeLocalSubscription(LocalGENASubscription subscription)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.
      Angegeben von:
      removeLocalSubscription in Schnittstelle Registry
    • addRemoteSubscription

      public void addRemoteSubscription(RemoteGENASubscription subscription)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.
      Angegeben von:
      addRemoteSubscription in Schnittstelle Registry
    • getRemoteSubscription

      public RemoteGENASubscription getRemoteSubscription(String subscriptionId)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.
      Angegeben von:
      getRemoteSubscription in Schnittstelle Registry
    • updateRemoteSubscription

      public void updateRemoteSubscription(RemoteGENASubscription subscription)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.
      Angegeben von:
      updateRemoteSubscription in Schnittstelle Registry
    • removeRemoteSubscription

      public void removeRemoteSubscription(RemoteGENASubscription subscription)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.
      Angegeben von:
      removeRemoteSubscription in Schnittstelle Registry
    • advertiseLocalDevices

      public void advertiseLocalDevices()
      Beschreibung aus Schnittstelle kopiert: Registry
      Manually trigger advertisement messages for all local devices.

      No messages will be send for devices with disabled advertisements, see DiscoveryOptions!

      Angegeben von:
      advertiseLocalDevices in Schnittstelle Registry
    • shutdown

      public void shutdown()
      Beschreibung aus Schnittstelle kopiert: Registry
      Typically called internally when the UPnP stack is stopping.

      Unsubscribes all local devices and GENA subscriptions.

      Angegeben von:
      shutdown in Schnittstelle Registry
    • pause

      public void pause()
      Beschreibung aus Schnittstelle kopiert: Registry
      Stops background maintenance (thread) of registered items.

      When paused, the registry will no longer remove expired remote devices if their discovery announcements stop for some reason (device was turned off). Your local control point will now see potentially unavailable remote devices. Outbound GENA subscriptions from your local control point to remote services will not be renewed automatically anymore, a remote service might drop your subscriptions if you don't resume maintenance within the subscription's expiration timeout.

      Local devices and services will not be announced periodically anymore to remote control points, only when they are manually added are removed from the registry. The registry will also no longer remove expired inbound GENA subscriptions to local service from remote control points, if that control point for some reason stops sending subscription renewal messages.

      Angegeben von:
      pause in Schnittstelle Registry
    • resume

      public void resume()
      Beschreibung aus Schnittstelle kopiert: Registry
      Resumes background maintenance (thread) of registered items.

      A local control point has to handle the following situations when resuming registry maintenance:

      A remote device registration might have expired. This is the case when the remote device stopped sending announcements while the registry was paused (maybe because the device was switched off) and the registry was paused longer than the device advertisement's maximum age. The registry will not know if the device is still available when it resumes maintenance. However, it will simply assume that the remote device is still available and restart its expiration check cycle. That means a device will finally be removed from the registry, if no further announcements from the device are received, when the maximum age of the device has elapsed after the registry resumed operation.

      Secondly, a remote device registration might not have expired but some of your outbound GENA subscriptions to its services have not been renewed within the expected renewal period. Therefore your outbound subscriptions might be invalid, because the remote service can drop subscriptions when you don't renew them. On resume, the registry will attempt to send renewals for all outbound GENA subscriptions that require renewal, on devices that still haven't expired. If renewal fails, your subscription will end with CancelReason.RENEWAL_FAILED. Although you then might conclude that the remote device is no longer available, a GENA renewal can also fail for other reasons. The remote device will be kept and maintained in the registry until it announces itself or it expires, even after a failed GENA renewal.

      If you are providing local devices and services, resuming registry maintenance has the following effects:

      Local devices and their services are announced again immediately if the registry has been paused for longer than half of the device's maximum age. Remote control points will either see this as a new device advertisement (if they have dropped your device while you paused maintenance) or as a regular update if you didn't pause longer than the device's maximum age/expiration timeout.

      Inbound GENA subscriptions to your local services are active, even in paused state - remote control points should continue renewing the subscription. If a remote control point stopped renewing a subscription without unsubscribing (hard power off), an outdated inbound subscription will be detected when you resume maintenance. This subscription will be cleaned up immediately on resume.

      Angegeben von:
      resume in Schnittstelle Registry
    • isPaused

      public boolean isPaused()
      Angegeben von:
      isPaused in Schnittstelle Registry
      Gibt zurück:
      true if the registry has currently no running background maintenance (thread).
    • printDebugLog

      public void printDebugLog()
    • registerPendingRemoteSubscription

      public void registerPendingRemoteSubscription(RemoteGENASubscription subscription)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.

      When subscribing with a remote host, the remote host might send the initial event message faster than the response for the subscription request. This method register that the subscription procedure is executing.

      Angegeben von:
      registerPendingRemoteSubscription in Schnittstelle Registry
    • unregisterPendingRemoteSubscription

      public void unregisterPendingRemoteSubscription(RemoteGENASubscription subscription)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.

      Notify that the subscription procedure has terminated.

      Angegeben von:
      unregisterPendingRemoteSubscription in Schnittstelle Registry
    • getWaitRemoteSubscription

      public RemoteGENASubscription getWaitRemoteSubscription(String subscriptionId)
      Beschreibung aus Schnittstelle kopiert: Registry
      Called internally by the UPnP stack, during GENA protocol execution.

      Get a remote subscription from its subscriptionId. If the subscription can't be found, wait for one of pending remote subscription procedures to terminate, until the subscription has been found or until there are no more pending subscription procedures.

      Angegeben von:
      getWaitRemoteSubscription in Schnittstelle Registry