if (response.getOptions().hasObserve()) { block = new Response(response.getCode()); block.setDestination(response.getDestination()); block.setDestinationPort(response.getDestinationPort()); block.setOptions(new OptionSet(response.getOptions())); block.addMessageObserver(new TimeoutForwarder(response)); int payloadsize = response.getPayloadSize(); int currentSize = 1 << (4 + szx); int from = num * currentSize; int to = Math.min((num + 1) * currentSize, response.getPayloadSize()); int length = to - from; byte[] blockPayload = new byte[length]; boolean m = (to < response.getPayloadSize()); block.getOptions().setBlock2(szx, m, num); System.arraycopy(response.getPayload(), from, blockPayload, 0, length); block.setPayload(blockPayload); block.setLast(!m && !response.getOptions().hasObserve()); block.getOptions().setBlock2(szx, false, num); block.setLast(true); status.setComplete(true);
protected boolean checkResponse(Request request, Response response) { boolean success = true; success &= checkType(Type.ACK, response.getType()); success &= checkInt(EXPECTED_RESPONSE_CODE.value, response.getCode().value, "code"); success &= checkOption(MediaTypeRegistry.APPLICATION_LINK_FORMAT, response.getOptions().getContentFormat(), "Content-Format"); success &= checkDiscoveryAttributes(EXPECTED_IF, response.getPayloadString()); return success; } }
public CoapMessage(Response request, boolean incoming) { this(incoming, request.getType(), request.getMID(), request.getTokenString(), request.getOptions(), request .getPayload()); this.code = request.getCode().toString(); }
@Override public String toString() { String payload = getPayloadTracingString(); return String.format("%s-%-6s MID=%5d, Token=%s, OptionSet=%s, %s", getType(), getCode(), getMID(), getTokenString(), getOptions(), payload); }
/** * Send an error response on the given exchange. * * @param code * @param message * @param exchange */ protected void createAndSendResponse(ResponseCode code, String message, Exchange exchange) { Response response = new Response(code); response.setPayload(message); exchange.sendResponse(response); }
@Override public void handleGET(CoapExchange exchange) { String payload = "Available commands:\n - GET: show statistics\n - POST write stats to file\n - DELETE: reset statistics\n\n"; payload += getStatString(); Response response = new Response(ResponseCode.CONTENT); response.setPayload(payload); response.getOptions().setContentFormat(MediaTypeRegistry.TEXT_PLAIN); exchange.respond(response); }
ResponseCode status = incomingResponse.getCode(); Response outgoingResponse = new Response(status); byte[] payload = incomingResponse.getPayload(); outgoingResponse.setPayload(payload); long timestamp = incomingResponse.getTimestamp(); outgoingResponse.setTimestamp(timestamp); outgoingResponse.setOptions(new OptionSet( incomingResponse.getOptions()));
if (response.getType()!=Type.ACK) { LOGGER.finer("Rejecting blockwise transfer for canceled Exchange"); EmptyMessage rst = EmptyMessage.newRST(response); if (!response.getOptions().hasBlock1() && !response.getOptions().hasBlock2()) { if (response.getOptions().hasBlock1()) { BlockOption block1 = response.getOptions().getBlock1(); LOGGER.log(Level.FINER, "Response acknowledges block {0}", block1); nextBlock.setToken(response.getToken()); } else if (!response.getOptions().hasBlock2()) { if (response.getOptions().hasBlock2()) { BlockOption block2 = response.getOptions().getBlock2(); BlockwiseStatus status = findResponseBlockStatus(exchange, response); if (response.getOptions().hasObserve() && block2.getNum()==0 && status.getCurrentNum()!=0) { if (response.getOptions().getObserve()>status.getObserve()) { if (block2.getNum() == status.getCurrentNum() && (block2.getNum()==0 || Arrays.equals(response.getToken(), exchange.getCurrentRequest().getToken()))) { status.addBlock(response.getPayload()); if (response.getOptions().hasObserve()) {
@Test public void testUTF8Encoding() { Response response = new Response(ResponseCode.CONTENT); response.setType(Type.NON); response.setMID(expectedMid); response.setToken(new byte[] {}); response.getOptions().addLocationPath("ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ").addLocationPath("γλώσσα") .addLocationPath("пустынных").addLocationQuery("ვეპხის=யாமறிந்த").addLocationQuery("⠊⠀⠉⠁⠝=⠑⠁⠞⠀⠛⠇⠁⠎⠎"); response.setPayload("⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑"); RawData rawData = serializer.serializeResponse(response); Response result = (Response) parser.parseMessage(rawData); assertEquals("ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ/γλώσσα/пустынных", response.getOptions().getLocationPathString()); assertEquals("ვეპხის=யாமறிந்த&⠊⠀⠉⠁⠝=⠑⠁⠞⠀⠛⠇⠁⠎⠎", response.getOptions().getLocationQueryString()); assertEquals("⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑", result.getPayloadString()); assertEquals(response.getMID(), result.getMID()); } }
/** * Formats a {@link Response} into a readable String representation. * * @param r the Response * @return the pretty print */ public static String prettyPrint(Response r) { StringBuilder sb = new StringBuilder(); sb.append("==[ CoAP Response ]============================================").append(System.lineSeparator()); sb.append(String.format("MID : %d", r.getMID())).append(System.lineSeparator()); sb.append(String.format("Token : %s", r.getTokenString())).append(System.lineSeparator()); sb.append(String.format("Type : %s", r.getType().toString())).append(System.lineSeparator()); sb.append(String.format("Status : %s", r.getCode().toString())).append(System.lineSeparator()); sb.append(String.format("Options: %s", r.getOptions().toString())).append(System.lineSeparator()); sb.append(String.format("Payload: %d Bytes", r.getPayloadSize())).append(System.lineSeparator()); if (r.getPayloadSize() > 0 && MediaTypeRegistry.isPrintable(r.getOptions().getContentFormat())) { sb.append("---------------------------------------------------------------").append(System.lineSeparator()); sb.append(r.getPayloadString()); sb.append(System.lineSeparator()); } sb.append("==============================================================="); return sb.toString(); }
@Override public void visit(RegisterRequest request) { if (coapResponse.isError()) { // handle error response: lwM2mresponse = new RegisterResponse(toLwM2mResponseCode(coapResponse.getCode()), null, coapResponse.getPayloadString()); } else if (coapResponse.getCode() == org.eclipse.californium.core.coap.CoAP.ResponseCode.CREATED) { // handle success response: lwM2mresponse = RegisterResponse.success(coapResponse.getOptions().getLocationString()); } else { // handle unexpected response: handleUnexpectedResponseCode(request, coapResponse); } }
@Override public void onResponse(Response coapResponse) { if (coapResponse.getCode() == CoAP.ResponseCode.CHANGED || coapResponse.getCode() == CoAP.ResponseCode.CONTENT) { try { LwM2mNode content = LwM2mNodeDecoder.decode(coapResponse.getPayload(), ContentFormat.fromCode(coapResponse.getOptions().getContentFormat()), path); ValueResponse response = new ValueResponse(ResponseCode.CHANGED, content); for (ObservationListener listener : listeners) { listener.newValue(this, response.getContent()); } } catch (InvalidValueException e) { String msg = String.format("[%s] ([%s])", e.getMessage(), e.getPath().toString()); LOG.debug(msg); } } }
@Test public void testResponseParsing() { Response response = new Response(ResponseCode.CONTENT); response.setType(Type.NON); response.setMID(expectedMid); response.setToken(new byte[] { 22, -1, 0, 78, 100, 22 }); response.getOptions().addETag(new byte[] { 1, 0, 0, 0, 0, 1 }) .addLocationPath("/one/two/three/four/five/six/seven/eight/nine/ten") .addOption(new Option(57453, "Arbitrary".hashCode())).addOption(new Option(19205, "Arbitrary1")) .addOption(new Option(19205, "Arbitrary2")).addOption(new Option(19205, "Arbitrary3")); RawData rawData = serializer.serializeResponse(response); Response result = (Response) parser.parseMessage(rawData); assertEquals(response.getMID(), result.getMID()); assertArrayEquals(response.getToken(), result.getToken()); assertEquals(response.getOptions().asSortedList(), result.getOptions().asSortedList()); }
private Response responseFor(final Request request) { Response response = new Response(ResponseCode.CONTENT); response.setMID(request.getMID()); response.setToken(request.getToken()); response.setBytes(new byte[]{}); response.setSource(request.getDestination()); response.setSourcePort(request.getDestinationPort()); response.setDestination(request.getSource()); response.setDestinationPort(request.getSourcePort()); return response; } }
public void handleGET(CoapExchange exchange) { Response response = new Response(CONTENT); response.setType(respType); // respType is altered throughout the test cases response.setPayload(respPayload); // payload is altered throughout the test cases exchange.respond(response); }
@Override public void visit(BootstrapRequest request) { if (coapResponse.isError()) { // handle error response: lwM2mresponse = new BootstrapResponse(toLwM2mResponseCode(coapResponse.getCode()), coapResponse.getPayloadString()); } else if (coapResponse.getCode() == org.eclipse.californium.core.coap.CoAP.ResponseCode.CHANGED) { // handle success response: lwM2mresponse = BootstrapResponse.success(); } else { // handle unexpected response: handleUnexpectedResponseCode(request, coapResponse); } }
protected final void appendResponseDetails(final Response response) { if (response.isCanceled()) { buffer.append("CANCELED "); } buffer.append(response.getType()).append(" [MID=").append(response.getMID()) .append(", T=").append(response.getTokenString()).append("], ") .append(response.getCode()); appendBlockOption(1, response.getOptions().getBlock1()); appendBlockOption(2, response.getOptions().getBlock2()); appendObserveOption(response.getOptions()); appendSize1(response.getOptions()); appendSize2(response.getOptions()); appendEtags(response.getOptions()); }
@Override public void handleRequest(Exchange exchange) { try { super.handleRequest(exchange); } catch (Exception e) { LOG.error("Exception while handling a request on the /rd resource", e); // unexpected error, we should sent something like a INTERNAL_SERVER_ERROR. // but it would not be LWM2M compliant. so BAD_REQUEST for now... exchange.sendResponse(new Response(ResponseCode.BAD_REQUEST)); } }
protected boolean checkResponse(Request request, Response response) { boolean success = true; success &= checkType(Type.ACK, response.getType()); success &= checkInt(EXPECTED_RESPONSE_CODE.value, response.getCode().value, "code"); success &= checkInt(request.getMID(), response.getMID(), "MID"); return success; } }
protected boolean checkResponse(Request request, Response response) { boolean success = true; success &= checkType(Type.ACK, response.getType()); success &= checkInt(EXPECTED_RESPONSE_CODE.value, response.getCode().value, "code"); success &= checkToken(request.getToken(), response.getToken()); success &= hasContentType(response); success &= hasNonEmptyPalyoad(response); return success; } }