HeartbeatAdapter.java
- package emissary.server.mvc.adapters;
- import emissary.client.EmissaryClient;
- import emissary.core.Namespace;
- import emissary.core.NamespaceException;
- import emissary.directory.DirectoryPlace;
- import emissary.directory.KeyManipulator;
- import emissary.place.IServiceProviderPlace;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import javax.annotation.Nullable;
- /**
- * Stuff for adapting the Directory heartbeat calls to HTTP
- */
- public class HeartbeatAdapter extends EmissaryClient {
- private static final Logger logger = LoggerFactory.getLogger(HeartbeatAdapter.class);
- public static final String FROM_PLACE_NAME = "hbf";
- public static final String TO_PLACE_NAME = "hbt";
- /**
- * Process the heartbeat call coming remotely over HTTP request params onto the specified (local) directory place
- *
- * @return reference to the place when found, null otherwise
- */
- @Nullable
- public IServiceProviderPlace inboundHeartbeat(final String fromName, final String toName) throws NamespaceException {
- if (toName == null) {
- throw new IllegalArgumentException("No place specified in msg from " + fromName);
- }
- logger.debug("Servicing inbound heartbeat for {} to {}", fromName, toName);
- final DirectoryPlace d = (DirectoryPlace) Namespace.lookup(toName);
- if (!d.isStaticPeer(KeyManipulator.getDefaultDirectoryKey(fromName))) {
- logger.warn("Contact attempted from {} but it is not a configured peer", fromName);
- return null;
- }
- IServiceProviderPlace place = null;
- try {
- place = (IServiceProviderPlace) Namespace.lookup(toName);
- } catch (NamespaceException ne) {
- throw ne;
- }
- if (place == null) {
- throw new IllegalArgumentException("No place found using name " + toName + " from " + fromName);
- }
- logger.debug("Heartbeat returning {}", place);
- return place;
- }
- }