From 30d7a0f916e54871664c6e10ed4dc829fbd9512b Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Wed, 20 Jul 2011 14:45:56 +0100
Subject: [PATCH] Defined which protocol objects require user-defined tags.

---
 api/net/sf/briar/api/protocol/Tags.java       | 25 +++++++++----------
 .../net/sf/briar/protocol/BatchReader.java    |  1 -
 .../sf/briar/protocol/BundleWriterImpl.java   |  4 ---
 .../net/sf/briar/protocol/HeaderReader.java   |  3 ---
 .../sf/briar/protocol/MessageEncoderImpl.java |  8 ------
 .../net/sf/briar/protocol/MessageReader.java  |  5 ----
 6 files changed, 12 insertions(+), 34 deletions(-)

diff --git a/api/net/sf/briar/api/protocol/Tags.java b/api/net/sf/briar/api/protocol/Tags.java
index c3e2b8193e..2bf887b6f2 100644
--- a/api/net/sf/briar/api/protocol/Tags.java
+++ b/api/net/sf/briar/api/protocol/Tags.java
@@ -1,18 +1,17 @@
 package net.sf.briar.api.protocol;
 
+/**
+ * User-defined tags for encoding and decoding protocol objects. An object
+ * should have a user-defined tag if it appears in a list or a map, or if
+ * objects of different types may be encountered in a given protocol state.
+ */
 public interface Tags {
 
-	static final int AUTHOR_ID = 1;
-	static final int BATCH = 2;
-	static final int BATCH_ID = 3;
-	static final int GROUP_ID = 4;
-	static final int HEADER = 5;
-	static final int MESSAGE = 6;
-	static final int MESSAGE_BODY = 7;
-	static final int MESSAGE_ID = 8;
-	static final int NICKNAME = 9;
-	static final int PUBLIC_KEY = 10;
-	static final int SIGNATURE = 12;
-	static final int TIMESTAMP = 13;
-	static final int TRANSPORTS = 14;
+	static final int AUTHOR_ID = 0;
+	static final int BATCH = 1;
+	static final int BATCH_ID = 2;
+	static final int GROUP_ID = 3;
+	static final int HEADER = 4;
+	static final int MESSAGE = 5;
+	static final int MESSAGE_ID = 6;
 }
diff --git a/components/net/sf/briar/protocol/BatchReader.java b/components/net/sf/briar/protocol/BatchReader.java
index 336312888b..bfb67d352f 100644
--- a/components/net/sf/briar/protocol/BatchReader.java
+++ b/components/net/sf/briar/protocol/BatchReader.java
@@ -50,7 +50,6 @@ public class BatchReader implements ObjectReader<Batch> {
 		reader.removeObjectReader(Tags.MESSAGE);
 		reader.removeConsumer(signing);
 		// Read and verify the signature
-		reader.readUserDefinedTag(Tags.SIGNATURE);
 		byte[] sig = reader.readRaw();
 		reader.removeConsumer(digesting);
 		reader.removeConsumer(counting);
diff --git a/components/net/sf/briar/protocol/BundleWriterImpl.java b/components/net/sf/briar/protocol/BundleWriterImpl.java
index dc5aab7c36..e6ff92b7fe 100644
--- a/components/net/sf/briar/protocol/BundleWriterImpl.java
+++ b/components/net/sf/briar/protocol/BundleWriterImpl.java
@@ -60,15 +60,12 @@ class BundleWriterImpl implements BundleWriter {
 		// Subs
 		writer.writeList(subs);
 		// Transports
-		writer.writeUserDefinedTag(Tags.TRANSPORTS);
 		writer.writeMap(transports);
 		// Timestamp
-		writer.writeUserDefinedTag(Tags.TIMESTAMP);
 		writer.writeInt64(System.currentTimeMillis());
 		out.setSigning(false);
 		// Create and write the signature
 		byte[] sig = signature.sign();
-		writer.writeUserDefinedTag(Tags.SIGNATURE);
 		writer.writeRaw(sig);
 		// Expect a (possibly empty) list of batches
 		state = State.FIRST_BATCH;
@@ -99,7 +96,6 @@ class BundleWriterImpl implements BundleWriter {
 		out.setSigning(false);
 		// Create and write the signature
 		byte[] sig = signature.sign();
-		writer.writeUserDefinedTag(Tags.SIGNATURE);
 		writer.writeRaw(sig);
 		out.setDigesting(false);
 		// Calculate and return the ID
diff --git a/components/net/sf/briar/protocol/HeaderReader.java b/components/net/sf/briar/protocol/HeaderReader.java
index 24f5f02d8d..aeaf93e2b9 100644
--- a/components/net/sf/briar/protocol/HeaderReader.java
+++ b/components/net/sf/briar/protocol/HeaderReader.java
@@ -47,16 +47,13 @@ class HeaderReader implements ObjectReader<Header> {
 		Collection<GroupId> subs = reader.readList(GroupId.class);
 		reader.removeObjectReader(Tags.GROUP_ID);
 		// Transports
-		reader.readUserDefinedTag(Tags.TRANSPORTS);
 		Map<String, String> transports =
 			reader.readMap(String.class, String.class);
 		// Timestamp
-		reader.readUserDefinedTag(Tags.TIMESTAMP);
 		long timestamp = reader.readInt64();
 		if(timestamp < 0L) throw new FormatException();
 		reader.removeConsumer(signing);
 		// Read and verify the signature
-		reader.readUserDefinedTag(Tags.SIGNATURE);
 		byte[] sig = reader.readRaw();
 		reader.removeConsumer(counting);
 		if(!signature.verify(sig)) throw new SignatureException();
diff --git a/components/net/sf/briar/protocol/MessageEncoderImpl.java b/components/net/sf/briar/protocol/MessageEncoderImpl.java
index c3b1748764..339ece3b76 100644
--- a/components/net/sf/briar/protocol/MessageEncoderImpl.java
+++ b/components/net/sf/briar/protocol/MessageEncoderImpl.java
@@ -12,7 +12,6 @@ import net.sf.briar.api.protocol.GroupId;
 import net.sf.briar.api.protocol.Message;
 import net.sf.briar.api.protocol.MessageEncoder;
 import net.sf.briar.api.protocol.MessageId;
-import net.sf.briar.api.protocol.Tags;
 import net.sf.briar.api.serial.Writer;
 import net.sf.briar.api.serial.WriterFactory;
 
@@ -38,13 +37,9 @@ class MessageEncoderImpl implements MessageEncoder {
 		// Write the message
 		parent.writeTo(w);
 		group.writeTo(w);
-		w.writeUserDefinedTag(Tags.TIMESTAMP);
 		w.writeInt64(timestamp);
-		w.writeUserDefinedTag(Tags.NICKNAME);
 		w.writeString(nick);
-		w.writeUserDefinedTag(Tags.PUBLIC_KEY);
 		w.writeRaw(keyPair.getPublic().getEncoded());
-		w.writeUserDefinedTag(Tags.MESSAGE_BODY);
 		w.writeRaw(body);
 		// Sign the message
 		byte[] signable = out.toByteArray();
@@ -53,7 +48,6 @@ class MessageEncoderImpl implements MessageEncoder {
 		byte[] sig = signature.sign();
 		signable = null;
 		// Write the signature
-		w.writeUserDefinedTag(Tags.SIGNATURE);
 		w.writeRaw(sig);
 		byte[] raw = out.toByteArray();
 		w.close();
@@ -64,9 +58,7 @@ class MessageEncoderImpl implements MessageEncoder {
 		// The author ID is the hash of the author's nick and public key
 		out.reset();
 		w = writerFactory.createWriter(out);
-		w.writeUserDefinedTag(Tags.NICKNAME);
 		w.writeString(nick);
-		w.writeUserDefinedTag(Tags.PUBLIC_KEY);
 		w.writeRaw(keyPair.getPublic().getEncoded());
 		w.close();
 		messageDigest.reset();
diff --git a/components/net/sf/briar/protocol/MessageReader.java b/components/net/sf/briar/protocol/MessageReader.java
index 74022dfed5..ba4bad5394 100644
--- a/components/net/sf/briar/protocol/MessageReader.java
+++ b/components/net/sf/briar/protocol/MessageReader.java
@@ -48,26 +48,21 @@ class MessageReader implements ObjectReader<Message> {
 		if(b.length != UniqueId.LENGTH) throw new FormatException();
 		GroupId group = new GroupId(b);
 		// Read the timestamp
-		reader.readUserDefinedTag(Tags.TIMESTAMP);
 		long timestamp = reader.readInt64();
 		if(timestamp < 0L) throw new FormatException();
 		// Hash the author's nick and public key to get the author ID
 		DigestingConsumer digesting = new DigestingConsumer(messageDigest);
 		messageDigest.reset();
 		reader.addConsumer(digesting);
-		reader.readUserDefinedTag(Tags.NICKNAME);
 		reader.readString();
-		reader.readUserDefinedTag(Tags.PUBLIC_KEY);
 		byte[] encodedKey = reader.readRaw();
 		reader.removeConsumer(digesting);
 		AuthorId author = new AuthorId(messageDigest.digest());
 		// Skip the message body
-		reader.readUserDefinedTag(Tags.MESSAGE_BODY);
 		reader.readRaw();
 		// Record the length of the signed data
 		int messageLength = (int) counting.getCount();
 		// Read the signature
-		reader.readUserDefinedTag(Tags.SIGNATURE);
 		byte[] sig = reader.readRaw();
 		reader.removeConsumer(counting);
 		reader.removeConsumer(copying);
-- 
GitLab