Class MessageMessage

All Implemented Interfaces:
Serializable, Cloneable, Comparable<AX25Message>, AprsSignableMessage, CommentedMessage, LimitedSendableMessage, SendableMessage, SignableMessage

public class MessageMessage extends Message implements LimitedSendableMessage, AprsSignableMessage
This class encodes an addressed Message APRS message (APRS protocol specification chapter 14). Note that one form of Message can be a directed query (APRS protocol specification chapter 15).
See Also:
  • Field Details

    • addressee

      public String addressee
      Addressee of the message. May be a bulletin sequence number or a broadcast group (such as NWS_WARN).
    • serialNumber

      public String serialNumber
      Sequence number of this message used for acknowledgment. May be null if no sequence number.
    • acked

      public boolean acked
      Flag indicating if a locally-originated message has been acknowledged. Used to stop automatic retransmissions of messages with serial numbers.
    • numTransmissions

      public int numTransmissions
      Number of times the message should be transmitted before giving up.
    • signatureState

      public SignableMessage.SignatureState signatureState
      Quality of the signature (if any) associated with this message.
  • Constructor Details

    • MessageMessage

      public MessageMessage(byte[] body, int offset, String tp, long rcvTimestamp)
      Decode a MessageMessage from a byte array.
      Parameters:
      body - byte array containing the message
      offset - index into the array where the message starts
      tp - third-party routing String, or null if not routed from another network
      rcvTimestamp - time in Java milliseconds since 1 Jan 1970 UTC when the message was received
    • MessageMessage

      public MessageMessage(String addressee, String body)
      Create a new partially-initialized MessageMessage, suitable for transmission.
      Parameters:
      addressee - String addressee for the message
      body - String body text of the message
    • MessageMessage

      public MessageMessage(String addressee, String body, String serialNum)
      Create a new partially-initialized MessageMessage, suitable for transmission.
      Parameters:
      addressee - String addressee for the message
      body - String body text of the message
      serialNum - String serial number for the message (indicates it should be acknowledged)
  • Method Details

    • paramString

      public String paramString()
      Descriptive text about this message, to be included in the toString() method's response.
      Overrides:
      paramString in class Message
      Returns:
      String describing the contents of this message
      See Also:
    • bodyEquals

      public boolean bodyEquals(AX25Message o)
      Compare the contents of the body of the message, reporting if they match.
      Overrides:
      bodyEquals in class Message
      Parameters:
      o - another AX25Message to compare against
      Returns:
      boolean true if the body values are equivalent
    • compareTo

      public int compareTo(AX25Message o)
      Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
      Specified by:
      compareTo in interface Comparable<AX25Message>
      Overrides:
      compareTo in class Message
      Parameters:
      o - the object to be compared.
      Returns:
      a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
      Throws:
      ClassCastException - if the specified object's type prevents it from being compared to this object.
    • getAddressee

      public String getAddressee()
      Report the addressee of this message.
      Returns:
      addressee String
    • getQuery

      public String getQuery()
      Test whether this MessageMessage contains a directed query (APRS protocol specification chapter 15).
      Returns:
      query String if this is a query, or null if not
    • getBody

      public byte[] getBody(boolean countTransmission, ProtocolFamily protocolId, AX25Frame frame)
      Get an instance of this message, suitable for transmitting.
      Specified by:
      getBody in interface SendableMessage
      Parameters:
      countTransmission - number of times the message has been transmitted
      protocolId - ProtocolFamily for this message
      frame - AX25Frame into which the message will be placed, so any alternate AX25Message can be linked to it
      Returns:
      byte array of message
      See Also:
    • isEnabled

      public boolean isEnabled()
      Test if message should still be transmitted.
      Specified by:
      isEnabled in interface SendableMessage
      Returns:
      boolean true if message should still be transmitted
    • disableForTransmit

      public void disableForTransmit()
      Specify that message should no longer be transmitted.
      Specified by:
      disableForTransmit in interface SendableMessage
    • setMaxTransmits

      public void setMaxTransmits(int maxTransmits)
      Specify the maximum number of times this message should be transmitted.
      Specified by:
      setMaxTransmits in interface LimitedSendableMessage
      Parameters:
      maxTransmits - non-negative number of transmits before this message should go idle
    • isSelfAddressed

      public boolean isSelfAddressed()
      Indicate if this text message is self-addressed. This commonly occurs when a station is transmitting telemetry data and wants to specify how the telemetry should be interpreted.
      Returns:
      boolean true if message was received from the same station that it is addressed to
    • getSignatureState

      public SignableMessage.SignatureState getSignatureState()
      Report the status of the signature of this message.
      Specified by:
      getSignatureState in interface SignableMessage
      Returns:
      signature state of this message
    • setKeyAlias

      public void setKeyAlias(String alias)
      Set the alias for the key that should be used to sign this message at transmission time.
      Specified by:
      setKeyAlias in interface SignableMessage
      Parameters:
      alias - String name that should match a secret key in the key manager
    • getKeyAlias

      public String getKeyAlias()
      Get the alias for the key that should be used to sign this message at transmission time.
      Specified by:
      getKeyAlias in interface SignableMessage
      Returns:
      String name of key alias, matching a secret key in the key manager, or null if message should not be signed
    • getSignature

      public String getSignature()
      Get the ASCII-encoded signature of this message.
      Specified by:
      getSignature in interface AprsSignableMessage
      Returns:
      ASCII String of the signature, or null if not signed
    • setSignature

      public void setSignature(String signature)
      Set the ASCII-encoded signature of this message.
      Specified by:
      setSignature in interface AprsSignableMessage
      Parameters:
      signature - String of the signature, or null to remove any pre-existing signature
    • writeToSigningBuf

      public void writeToSigningBuf(DataOutput dos, PrintWriter pw)
      Write the appropriate part of the body of this message to the signing buffer.
      Specified by:
      writeToSigningBuf in interface SignableMessage
      Parameters:
      dos - DataOutput that will accept binary writes of the message data
      pw - PrintWriter that will accept character writes of the message data