private static void assembleMessage(final BlockwiseStatus status, final Message message) { // The assembled request will contain the options of the first block message.setSource(status.getFirst().getSource()); message.setSourcePort(status.getFirst().getSourcePort()); message.setType(status.getFirst().getType()); message.setMID(status.getFirst().getMID()); message.setToken(status.getFirst().getToken()); message.setOptions(new OptionSet(status.getFirst().getOptions())); message.setPayload(status.getBody()); }
/** * Checks whether a given block offset falls into this message's payload. * * @param block2 The offset of the block. * @return {@code true} if this message has a payload and its size is > the offset. */ public boolean hasBlock(final BlockOption block2) { return 0 < getPayloadSize() && block2.getOffset() < getPayloadSize(); }
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()); } } }
/** * Creates a key from an inbound CoAP message. * * @param message the message. * @return the key derived from the message. The key's <em>mid</em> is * scoped to the message's source address and port. */ public static KeyMID fromInboundMessage(Message message) { return new KeyMID(message.getMID(), message.getSource().getAddress(), message.getSourcePort()); }
/** * Creates a new key for an inbound CoAP message. * <p> * The key will be scoped to the message's source endpoint. * * @param msg the message. * @return the key. */ public static KeyToken fromInboundMessage(final Message msg) { return new KeyToken(msg.getToken(), msg.getSource().getAddress(), msg.getSourcePort()); }
/** * Creates a key from an outbound CoAP message. * * @param message the message. * @return the key derived from the message. The key's <em>mid</em> is * scoped to the message's destination address and port. */ public static KeyMID fromOutboundMessage(Message message) { return new KeyMID(message.getMID(), message.getDestination().getAddress(), message.getDestinationPort()); } }
private void parseMessage(Message message) { message.setType(Type.valueOf(type)); message.setMID(mid); message.setToken(reader.readBytes(tokenlength)); } else { message.setToken(new byte[0]); message.getOptions().addOption(option); } else break; message.setPayload(reader.readBytesLeft()); } else { message.setPayload(new byte[0]); // or null?
private void serializeMessage(Message message, int code) { if (message.getToken() == null) throw new NullPointerException("No Token has been set, not even an empty byte[0]"); writer.write(VERSION, VERSION_BITS); writer.write(message.getType().value, TYPE_BITS); writer.write(message.getToken().length, TOKEN_LENGTH_BITS); writer.write(code, CODE_BITS); writer.write(message.getMID(), MESSAGE_ID_BITS); writer.writeBytes(message.getToken()); List<Option> options = message.getOptions().asSortedList(); // already sorted int lastOptionNumber = 0; for (Option option:options) { byte[] payload = message.getPayload(); if (payload != null && payload.length > 0) {
message.getOptions().addOption(option); } else { String msg = String.format( "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()); } else { message.setPayload(reader.readBytesLeft()); message.setPayload((String) null);
@Override public void set(final Message message) { message.getOptions().setSize1(size); } });
exchange.setFailedTransmissionCount(failedCount); if (message.isAcknowledged()) { LOGGER.log(Level.FINEST, "Timeout: message already acknowledged, cancel retransmission of {0}", message); return; } else if (message.isRejected()) { LOGGER.log(Level.FINEST, "Timeout: message already rejected, cancel retransmission of {0}", message); return; } else if (message.isCanceled()) { LOGGER.log(Level.FINEST, "Timeout: canceled (MID={0}), do not retransmit", message.getMID()); return; message.retransmitting(); if (message.isCanceled()) { LOGGER.log(Level.FINER, "Timeout: canceled (MID={0}), do not retransmit", message.getMID()); return; LOGGER.log(Level.FINE, "Timeout: retransmission limit reached, exchange failed, message: {0}", message); exchange.setTimedOut(); message.setTimedOut(true);
byte[] payload = coapMessage.getPayload(); if (payload != null && payload.length != 0) { if (! coapMessage.getOptions().hasContentFormat()) { contentType = ContentType.APPLICATION_OCTET_STREAM; } else { int coapContentType = coapMessage.getOptions().getContentFormat();
@Override public int assignMessageId(final Message message) { int mid = message.getMID(); if (Message.NONE == mid) { InetSocketAddress dest = new InetSocketAddress(message.getDestination(), message.getDestinationPort()); mid = messageIdProvider.getNextMessageId(dest); if (Message.NONE == mid) { LOGGER.log(Level.WARNING, "Cannot send message to {0}, all MIDs are in use", dest); } else { message.setMID(mid); } } return mid; }
msg.setSource(raw.getAddress()); msg.setSourcePort(raw.getPort()); if (CoAP.isRequest(msg.getRawCode())) { } else if (CoAP.isResponse(msg.getRawCode())) { } else if (CoAP.isEmptyMessage(msg.getRawCode())) {
@Override public boolean expectMID(Message message) { return message.getMID() == mid; }
/** * Creates a new key for an outbound CoAP message. * <p> * The key will be scoped to the message's destination endpoint. * * @param msg the message. * @return the key. */ public static KeyToken fromOutboundMessage(final Message msg) { return new KeyToken(msg.getToken(), msg.getDestination().getAddress(), msg.getDestinationPort()); }
/** * {@inheritDoc} * * Required in Request to keep class for fluent API. */ @Override public Request setPayload(String payload) { super.setPayload(payload); return this; }