Class HelloMessage

java.lang.Object
org.drasyl.handler.remote.protocol.HelloMessage
All Implemented Interfaces:
FullReadMessage<HelloMessage>, RemoteMessage

@UnstableApi public abstract class HelloMessage extends Object
Describes a message that is used to announce this node to peers or to join a super node. The message's body is structured as follows:
  • Time: The sender's current time in milliseconds stored in 8 bytes.
  • ChildrenTime: Specifies how many seconds (8 bytes) the sender wants to join the receiving super peer. If the value is 0, the message is an announcement and not a join.
  • Signature: 64 byte signature. Only present if ChildrenTime is > 0.
  • Endpoints: UDP-port-IP-address-combinations were this node can be reached. IPv4 addresses will be mapped to IPv6 addresses (2 + 16 bytes per endpoint)

This is an immutable object.

  • Field Details

  • Constructor Details

    • HelloMessage

      public HelloMessage()
  • Method Details

    • of

      public static HelloMessage of(HopCount hopCount, boolean isArmed, int networkId, Nonce nonce, DrasylAddress recipient, DrasylAddress sender, ProofOfWork proofOfWork, long time, long childrenTime, ImmutableByteArray signature, Set<InetSocketAddress> endpoints)
      Creates a new HelloMessage.
      Parameters:
      hopCount - the hop count
      isArmed - if the message is armed or not
      networkId - the network id
      nonce - the nonce
      recipient - the public key of the recipient
      sender - the public key of the sender
      proofOfWork - the proof of work of sender
      time - the local time of the sender
      childrenTime - the join time
      signature - the signature
      endpoints - the UDP-port-IP-address-combinations were this node can be reached
      Throws:
      NullPointerException - if nonce, sender, proofOfWork, recipient, or hopCount is null
    • of

      public static HelloMessage of(HopCount hopCount, boolean isArmed, int networkId, Nonce nonce, DrasylAddress recipient, DrasylAddress sender, ProofOfWork proofOfWork, long time, long childrenTime, IdentitySecretKey secretKey, Set<InetSocketAddress> endpoints)
      Creates new HelloMessage.
      Parameters:
      hopCount - the hop count
      isArmed - if the message is armed or not
      networkId - the network id
      nonce - the nonce
      recipient - the public key of the recipient
      sender - the public key of the sender
      proofOfWork - the proof of work of sender
      time - the local time of the sender
      childrenTime - the join time
      Throws:
      NullPointerException - if nonce, sender, proofOfWork, recipient, or hopCount is null
    • of

      public static HelloMessage of(int networkId, DrasylAddress recipient, IdentityPublicKey sender, ProofOfWork proofOfWork, long time, long childrenTime, IdentitySecretKey secretKey, Set<InetSocketAddress> endpoints)
      Creates a new HelloMessage.
      Parameters:
      networkId - the network of the joining node
      recipient - the public key of the node to join
      sender - the public key of the joining node
      proofOfWork - the proof of work
      time - time in millis when this message was sent
      childrenTime - if 0 greater then 0, node will join a children.
      secretKey - the secret key used to sign this message
      endpoints - the UDP-port-IP-address-combinations were this node can be reached
      Throws:
      NullPointerException - if sender, proofOfWork, or recipient is null
    • of

      public static HelloMessage of(int networkId, DrasylAddress recipient, IdentityPublicKey sender, ProofOfWork proofOfWork, long childrenTime, IdentitySecretKey secretKey, Set<InetSocketAddress> endpoints)
      Creates a new HelloMessage.
      Parameters:
      networkId - the network of the joining node
      recipient - the public key of the node to join
      sender - the public key of the joining node
      proofOfWork - the proof of work
      childrenTime - if 0 greater then 0, node will join a children.
      secretKey - the secret key used to sign this message
      endpoints - the UDP-port-IP-address-combinations were this node can be reached
      Throws:
      NullPointerException - if sender, proofOfWork, or recipient is null
    • of

      public static HelloMessage of(int networkId, DrasylAddress recipient, IdentityPublicKey sender, ProofOfWork proofOfWork)
      Creates a new HelloMessage.
      Parameters:
      networkId - the network of the joining node
      recipient - the public key of the node to join
      sender - the public key of the joining node
      proofOfWork - the proof of work
      Throws:
      NullPointerException - if sender, proofOfWork, or recipient is null
    • of

      public static HelloMessage of(int networkId, IdentityPublicKey sender, ProofOfWork proofOfWork)
      Creates a new multicast HelloMessage (sent by LocalNetworkDiscovery}.
      Parameters:
      networkId - the network of the joining node
      sender - the public key of the joining node
      proofOfWork - the proof of work
      Throws:
      NullPointerException - if sender, or proofOfWork is null
    • getRecipient

      @Nullable public abstract DrasylAddress getRecipient()
      Returns the IdentityPublicKey of the message recipient. If the message has no recipient (e.g. because it is a multicast message) null is returned.
      Returns:
      the IdentityPublicKey of the message recipient
    • getTime

      public abstract long getTime()
      Returns the time this message has been sent.
    • getChildrenTime

      public abstract long getChildrenTime()
      If the value is greater than 0, it indicates that this node wants to join the receiver as a child. For this, the receiver must be configured as a super node. In all other cases, the message is used to announce this node's presence to the recipient.
    • getSignature

      public abstract ImmutableByteArray getSignature()
    • getEndpoints

      public abstract Set<InetSocketAddress> getEndpoints()
    • incrementHopCount

      public HelloMessage incrementHopCount()
      Description copied from interface: FullReadMessage
      Returns this message with incremented hop count.
      Returns:
      this message with incremented hop count.
    • isSigned

      public boolean isSigned()
      Returns true if message is signed. This message will not verifiy the signature! Use verifySignature() to check if supplied signature is valid.
      Returns:
      true if message is signed
    • verifySignature

      public boolean verifySignature()
      Returns true if message is signed and the signature is valid. Use isSigned() to check whether a message is signed.
      Returns:
      true if message is signed and the signature is valid
    • writePrivateHeaderTo

      protected void writePrivateHeaderTo(io.netty.buffer.ByteBuf out)
    • writeBodyTo

      protected void writeBodyTo(io.netty.buffer.ByteBuf out)
    • getLength

      public int getLength()
    • arm

      public ArmedProtocolMessage arm(io.netty.buffer.ByteBufAllocator alloc, Crypto cryptoInstance, SessionPair sessionPair) throws InvalidMessageFormatException
      Description copied from interface: FullReadMessage
      Returns an armed version (ArmedProtocolMessage) of this message for sending it through untrustworthy channels.
      Specified by:
      arm in interface FullReadMessage<T extends FullReadMessage<?>>
      cryptoInstance - the crypto instance that should be used
      sessionPair - will be used for encryption
      Returns:
      the armed version of this message
      Throws:
      InvalidMessageFormatException - if arming was not possible
    • encodeMessage

      public io.netty.buffer.ByteBuf encodeMessage(io.netty.buffer.ByteBufAllocator alloc)
      Description copied from interface: RemoteMessage
      Writes this message to a buffer created by alloc.
      Specified by:
      encodeMessage in interface RemoteMessage
      Returns:
      the buffer written to
    • writePublicHeaderTo

      protected void writePublicHeaderTo(io.netty.buffer.ByteBuf out)