Class PublicHeader

java.lang.Object
org.drasyl.handler.remote.protocol.PublicHeader

public abstract class PublicHeader extends Object
This class models the public header of a drasyl protocol message. The header is structured as follows:
  • Armed: The 1 byte armed value. Indicates, if the message is armed or not.
  • HopCount: The 1 byte hop count value. Is incremented on each hop. Used to avoid loops.
  • NetworkId: The 4 bytes network id value. Is a unique network-wide value. Used to filter messages from other networks.
  • Nonce: The 24 bytes nonce value. Is used for encryption and as message id.
  • Recipient: The 32 bytes recipient address. This value is optional. If not set it MUST be sent as 0.
  • Sender: The 32 bytes sender address.
  • ProofOfWork: The 4 bytes proof of work for the sender address.
The public header is only authenticated and protected at the 5th byte. The magic number, and hop count are not protected. This allows us to update the hop count in-place.
  • Field Details

  • Constructor Details

    • PublicHeader

      public PublicHeader()
  • Method Details

    • getHopCount

      public abstract HopCount getHopCount()
    • getArmed

      public abstract boolean getArmed()
    • getNetworkId

      public abstract int getNetworkId()
    • getNonce

      public abstract Nonce getNonce()
    • getRecipient

      @Nullable public abstract DrasylAddress getRecipient()
    • getSender

      public abstract DrasylAddress getSender()
    • getProofOfWork

      public abstract ProofOfWork getProofOfWork()
    • of

      public static PublicHeader of(HopCount hopCount, boolean isArmed, int networkId, Nonce nonce, DrasylAddress recipient, DrasylAddress sender, ProofOfWork proofOfWork)
    • of

      public static PublicHeader of(RemoteMessage msg)
    • buildAuthTag

      public byte[] buildAuthTag()
      Builds the authentication tag from this public header.
      Returns:
      the authentication tag
    • writeTo

      public void writeTo(io.netty.buffer.ByteBuf byteBuf, boolean withHopCount)
      Writes this header to the buffer byteBuf.
      Parameters:
      byteBuf - writes this header to the given buffer
      withHopCount - if the hop count should be included
    • writeTo

      public void writeTo(io.netty.buffer.ByteBuf byteBuf)
      Writes this header to the buffer byteBuf. Similar to #writeTo(ByteBuf, true).
      Parameters:
      byteBuf - writes this header to the given buffer
    • of

      public static PublicHeader of(io.netty.buffer.ByteBuf byteBuf) throws InvalidMessageFormatException
      Throws:
      InvalidMessageFormatException