@Override public void setContext(Token token, EndpointContext ctx) { try { lock.writeLock().lock(); org.eclipse.californium.core.observe.Observation obs = obsByToken.get(token); if (obs != null) { obsByToken.put(token, new org.eclipse.californium.core.observe.Observation(obs.getRequest(), ctx)); } } finally { lock.writeLock().unlock(); } }
private Observation build(org.eclipse.californium.core.observe.Observation cfObs) { if (cfObs == null) return null; return ObserveUtil.createLwM2mObservation(cfObs.getRequest()); }
public static byte[] serialize(Observation obs) { JsonObject o = Json.object(); o.set("request", Hex.encodeHexString(serializer.serializeRequest(obs.getRequest()).bytes)); if (obs.getContext() != null) o.set("peer", EndpointContextSerDes.serialize(obs.getContext())); else o.set("peer", EndpointContextSerDes.serialize(obs.getRequest().getDestinationContext())); if (obs.getRequest().getUserContext() != null) { JsonObject ctxObject = Json.object(); for (Entry<String, String> e : obs.getRequest().getUserContext().entrySet()) { ctxObject.set(e.getKey(), e.getValue()); } o.set("context", ctxObject); } return o.toString().getBytes(); }
public static Observation deserialize(byte[] data) { JsonObject v = (JsonObject) Json.parse(new String(data)); EndpointContext endpointContext = EndpointContextSerDes.deserialize(v.get("peer").asObject()); byte[] req = Hex.decodeHex(v.getString("request", null).toCharArray()); RawData rawData = RawData.outbound(req, endpointContext, null, false); Request request = (Request) parser.parseMessage(rawData); request.setDestinationContext(endpointContext); JsonValue ctxValue = v.get("context"); if (ctxValue != null) { Map<String, String> context = new HashMap<>(); JsonObject ctxObject = (JsonObject) ctxValue; for (String name : ctxObject.names()) { context.put(name, ctxObject.getString(name, null)); } request.setUserContext(context); } return new Observation(request, endpointContext); }
private Observation build(org.eclipse.californium.core.observe.Observation cfObs) { if (cfObs == null) return null; return ObserveUtil.createLwM2mObservation(cfObs.getRequest()); }
public static byte[] serialize(Observation obs) { JsonObject o = Json.object(); o.set("request", Hex.encodeHexString(serializer.serializeRequest(obs.getRequest()).bytes)); if (obs.getContext() != null) o.set("peer", EndpointContextSerDes.serialize(obs.getContext())); else o.set("peer", EndpointContextSerDes.serialize(obs.getRequest().getDestinationContext())); if (obs.getRequest().getUserContext() != null) { JsonObject ctxObject = Json.object(); for (Entry<String, String> e : obs.getRequest().getUserContext().entrySet()) { ctxObject.set(e.getKey(), e.getValue()); } o.set("context", ctxObject); } return o.toString().getBytes(); }
public static Observation deserialize(byte[] data) { JsonObject v = (JsonObject) Json.parse(new String(data)); EndpointContext endpointContext = EndpointContextSerDes.deserialize(v.get("peer").asObject()); byte[] req = Hex.decodeHex(v.getString("request", null).toCharArray()); RawData rawData = RawData.outbound(req, endpointContext, null, false); Request request = (Request) parser.parseMessage(rawData); request.setDestinationContext(endpointContext); JsonValue ctxValue = v.get("context"); if (ctxValue != null) { Map<String, String> context = new HashMap<>(); JsonObject ctxObject = (JsonObject) ctxValue; for (String name : ctxObject.names()) { context.put(name, ctxObject.getString(name, null)); } request.setUserContext(context); } return new Observation(request, endpointContext); }
private Observation build(org.eclipse.californium.core.observe.Observation cfObs) { if (cfObs == null) return null; return ObserveUtil.createLwM2mObservation(cfObs.getRequest()); }
public static String extractRegistrationId(org.eclipse.californium.core.observe.Observation observation) { return observation.getRequest().getUserContext().get(CTX_REGID); }
public static String extractLwm2mPath(org.eclipse.californium.core.observe.Observation observation) { return observation.getRequest().getUserContext().get(CTX_LWM2M_PATH); }
/** * Validate the Californium observation. It is valid if it contains all necessary context for Leshan. */ public static String validateCoapObservation(org.eclipse.californium.core.observe.Observation observation) { if (!observation.getRequest().getUserContext().containsKey(CTX_REGID)) throw new IllegalStateException("missing registrationId info in the request context"); if (!observation.getRequest().getUserContext().containsKey(CTX_LWM2M_PATH)) throw new IllegalStateException("missing lwm2m path info in the request context"); String endpoint = observation.getRequest().getUserContext().get(CTX_ENDPOINT); if (endpoint == null) throw new IllegalStateException("missing endpoint info in the request context"); return endpoint; } }
public static String extractEndpoint(org.eclipse.californium.core.observe.Observation observation) { return observation.getRequest().getUserContext().get(CTX_ENDPOINT); }
LOG.warn( "Token collision ? observation from request [{}] will be replaced by observation from request [{}] ", previousObservation.getRequest(), obs.getRequest());
if (!j.exists(toRegIdKey(registrationId))) throw new IllegalStateException("no registration for this Id"); byte[] key = toKey(OBS_TKN, obs.getRequest().getToken().getBytes()); byte[] serializeObs = serializeObs(obs); byte[] previousValue = null; j.lpush(toKey(OBS_TKNS_REGID_IDX, registrationId), obs.getRequest().getToken().getBytes()); LOG.warn( "Token collision ? observation from request [{}] will be replaced by observation from request [{}] ", previousObservation.getRequest(), obs.getRequest());
if (!j.exists(toRegIdKey(registrationId))) throw new IllegalStateException("no registration for this Id"); byte[] key = toKey(OBS_TKN, obs.getRequest().getToken().getBytes()); byte[] serializeObs = serializeObs(obs); byte[] previousValue = null; j.lpush(toKey(OBS_TKNS_REGID_IDX, registrationId), obs.getRequest().getToken().getBytes()); LOG.warn( "Token collision ? observation from request [{}] will be replaced by observation from request [{}] ", previousObservation.getRequest(), obs.getRequest());
@Override public void remove(Token token) { try (Jedis j = pool.getResource()) { byte[] tokenKey = toKey(OBS_TKN, token.getBytes()); // fetch the observation by token byte[] serializedObs = j.get(tokenKey); if (serializedObs == null) return; org.eclipse.californium.core.observe.Observation obs = deserializeObs(serializedObs); String registrationId = ObserveUtil.extractRegistrationId(obs); Registration registration = getRegistration(j, registrationId); if (registration == null) { LOG.warn("Unable to remove observation {}, registration {} does not exist anymore", obs.getRequest(), registrationId); return; } String endpoint = registration.getEndpoint(); byte[] lockValue = null; byte[] lockKey = toKey(LOCK_EP, endpoint); try { lockValue = RedisLock.acquire(j, lockKey); unsafeRemoveObservation(j, registrationId, token.getBytes()); } finally { RedisLock.release(j, lockKey, lockValue); } } }
@Override public void remove(Token token) { try (Jedis j = pool.getResource()) { byte[] tokenKey = toKey(OBS_TKN, token.getBytes()); // fetch the observation by token byte[] serializedObs = j.get(tokenKey); if (serializedObs == null) return; org.eclipse.californium.core.observe.Observation obs = deserializeObs(serializedObs); String registrationId = ObserveUtil.extractRegistrationId(obs); Registration registration = getRegistration(j, registrationId); if (registration == null) { LOG.warn("Unable to remove observation {}, registration {} does not exist anymore", obs.getRequest(), registrationId); return; } String endpoint = registration.getEndpoint(); byte[] lockValue = null; byte[] lockKey = toKey(LOCK_EP, endpoint); try { lockValue = RedisLock.acquire(j, lockKey); unsafeRemoveObservation(j, registrationId, token.getBytes()); } finally { RedisLock.release(j, lockKey, lockValue); } } }