/**
   * Returns the result of applying XOR on this attribute's address, using the specified transaction
   * ID when converting IPv6 addresses.
   *
   * @param transactionID the transaction ID to use in case this attribute is encapsulating an IPv6
   *     address.
   * @return the XOR-ed address.
   */
  public TransportAddress getAddress(byte[] transactionID) {
    byte[] xorMask = new byte[16];

    System.arraycopy(Message.MAGIC_COOKIE, 0, xorMask, 0, 4);
    System.arraycopy(transactionID, 0, xorMask, 4, 12);

    return applyXor(xorMask);
  }
  /**
   * Applies a XOR mask to the specified address and then sets it as the value transported by this
   * attribute.
   *
   * @param address the address that we should xor and then record in this attribute.
   * @param transactionID the transaction identifier that we should use when creating the XOR mask.
   */
  public void setAddress(TransportAddress address, byte[] transactionID) {
    byte[] xorMask = new byte[16];

    System.arraycopy(Message.MAGIC_COOKIE, 0, xorMask, 0, 4);
    System.arraycopy(transactionID, 0, xorMask, 4, 12);

    TransportAddress xorAddress = applyXor(address, xorMask);

    super.setAddress(xorAddress);
  }