private static int determineValueFromNibble(final DatagramReader reader, final int delta, final Message message) { if (delta <= 12) { return delta; } else if (delta == 13) { return reader.read(8) + 13; } else if (delta == 14) { return reader.read(16) + 269; } else { throw new CoAPMessageFormatException( "Message contains illegal option delta/length: " + delta, message.getMID(), message.getRawCode(), message.isConfirmable()); } } }
if (e.isConfirmable() && e.hasMid()) { Level.FINE, "rejected malformed message from [{0}], reason: {1}", new Object[]{raw.getInetSocketAddress(), e.getMessage()}); } else {
private void reject(final RawData raw, final CoAPMessageFormatException cause) { // Generate RST EmptyMessage rst = new EmptyMessage(Type.RST); rst.setMID(cause.getMid()); rst.setDestination(raw.getAddress()); rst.setDestinationPort(raw.getPort()); coapstack.sendEmptyMessage(null, rst); }
"Message contains option of length %d with only fewer bytes left in the message", optionLength); throw new CoAPMessageFormatException(msg, message.getMID(), message.getRawCode(), message.isConfirmable()); throw new CoAPMessageFormatException( "Found payload marker (0xFF) but message contains no payload", message.getMID(), message.getRawCode(), message.isConfirmable());
/** * Parses a byte array into a CoAP Message. * * @param msg the byte array to parse. * @return the message. * @throws MessageFormatException if the array cannot be parsed into a message. */ public final Message parseMessage(final byte[] msg) { String message = "illegal message code"; DatagramReader reader = new DatagramReader(msg); MessageHeader header = parseHeader(reader); try { if (CoAP.isRequest(header.getCode())) { return parseMessage(reader, header, new Request(CoAP.Code.valueOf(header.getCode()))); } else if (CoAP.isResponse(header.getCode())) { return parseMessage(reader, header, new Response(CoAP.ResponseCode.valueOf(header.getCode()))); } else if (CoAP.isEmptyMessage(header.getCode())) { return parseMessage(reader, header, new EmptyMessage(header.getType())); } } catch (MessageFormatException e) { /** use message to add CoAP message specific information */ message = e.getMessage(); } throw new CoAPMessageFormatException(message, header.getMID(), header.getCode(), CoAP.Type.CON == header.getType()); }