src/net/java/otr4j/io/messages/DataMessage.java
changeset 810 0ff0059f2ec3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/java/otr4j/io/messages/DataMessage.java	Sun Dec 05 18:43:51 2010 +0100
@@ -0,0 +1,103 @@
+/*
+ * otr4j, the open source java otr library.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package net.java.otr4j.io.messages;
+
+import java.util.Arrays;
+
+import javax.crypto.interfaces.DHPublicKey;
+
+/**
+ * 
+ * @author George Politis
+ */
+public class DataMessage extends AbstractEncodedMessage {
+
+	// Fields.
+	public byte[] mac;
+	public byte[] oldMACKeys;
+
+	public int flags;
+	public int senderKeyID;
+	public int recipientKeyID;
+	public DHPublicKey nextDH;
+	public byte[] ctr;
+	public byte[] encryptedMessage;
+
+	// Ctor.
+	public DataMessage(int protocolVersion, int flags, int senderKeyID,
+			int recipientKeyID, DHPublicKey nextDH, byte[] ctr,
+			byte[] encryptedMessage, byte[] mac, byte[] oldMacKeys) {
+		super(MESSAGE_DATA, protocolVersion);
+
+		this.flags = flags;
+		this.senderKeyID = senderKeyID;
+		this.recipientKeyID = recipientKeyID;
+		this.nextDH = nextDH;
+		this.ctr = ctr;
+		this.encryptedMessage = encryptedMessage;
+		this.mac = mac;
+		this.oldMACKeys = oldMacKeys;
+	}
+
+	public DataMessage(MysteriousT t, byte[] mac, byte[] oldMacKeys) {
+		this(t.protocolVersion, t.flags, t.senderKeyID, t.recipientKeyID,
+				t.nextDH, t.ctr, t.encryptedMessage, mac, oldMacKeys);
+	}
+
+	// Methods.
+	public MysteriousT getT() {
+		return new MysteriousT(protocolVersion, flags, senderKeyID,
+				recipientKeyID, nextDH, ctr, encryptedMessage);
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime * result + Arrays.hashCode(ctr);
+		result = prime * result + Arrays.hashCode(encryptedMessage);
+		result = prime * result + flags;
+		result = prime * result + Arrays.hashCode(mac);
+		// TODO: Needs work.
+		result = prime * result + ((nextDH == null) ? 0 : nextDH.hashCode());
+		result = prime * result + Arrays.hashCode(oldMACKeys);
+		result = prime * result + recipientKeyID;
+		result = prime * result + senderKeyID;
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		DataMessage other = (DataMessage) obj;
+		if (!Arrays.equals(ctr, other.ctr))
+			return false;
+		if (!Arrays.equals(encryptedMessage, other.encryptedMessage))
+			return false;
+		if (flags != other.flags)
+			return false;
+		if (!Arrays.equals(mac, other.mac))
+			return false;
+		if (nextDH == null) {
+			if (other.nextDH != null)
+				return false;
+		} else if (!nextDH.equals(other.nextDH))
+			return false;
+		if (!Arrays.equals(oldMACKeys, other.oldMACKeys))
+			return false;
+		if (recipientKeyID != other.recipientKeyID)
+			return false;
+		if (senderKeyID != other.senderKeyID)
+			return false;
+		return true;
+	}
+}