diff --git a/api/net/sf/briar/api/serial/ObjectReader.java b/api/net/sf/briar/api/serial/ObjectReader.java deleted file mode 100644 index 012f5f800..000000000 --- a/api/net/sf/briar/api/serial/ObjectReader.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.sf.briar.api.serial; - -import java.io.IOException; - -public interface ObjectReader { - - T readObject(Reader r) throws IOException; -} diff --git a/api/net/sf/briar/api/serial/Reader.java b/api/net/sf/briar/api/serial/Reader.java index 9dece9845..e0610feb8 100644 --- a/api/net/sf/briar/api/serial/Reader.java +++ b/api/net/sf/briar/api/serial/Reader.java @@ -18,8 +18,8 @@ public interface Reader { void addConsumer(Consumer c); void removeConsumer(Consumer c); - void addObjectReader(int id, ObjectReader o); - void removeObjectReader(int id); + void addStructReader(int id, StructReader o); + void removeStructReader(int id); boolean hasBoolean() throws IOException; boolean readBoolean() throws IOException; @@ -51,7 +51,6 @@ public interface Reader { byte[] readBytes(int maxLength) throws IOException; boolean hasList() throws IOException; - List readList() throws IOException; List readList(Class e) throws IOException; boolean hasListStart() throws IOException; void readListStart() throws IOException; @@ -59,7 +58,6 @@ public interface Reader { void readListEnd() throws IOException; boolean hasMap() throws IOException; - Map readMap() throws IOException; Map readMap(Class k, Class v) throws IOException; boolean hasMapStart() throws IOException; void readMapStart() throws IOException; diff --git a/api/net/sf/briar/api/serial/StructReader.java b/api/net/sf/briar/api/serial/StructReader.java new file mode 100644 index 000000000..bf512caac --- /dev/null +++ b/api/net/sf/briar/api/serial/StructReader.java @@ -0,0 +1,8 @@ +package net.sf.briar.api.serial; + +import java.io.IOException; + +public interface StructReader { + + T readStruct(Reader r) throws IOException; +} diff --git a/components/net/sf/briar/protocol/AckReader.java b/components/net/sf/briar/protocol/AckReader.java index 0e89c6bcb..0b614d7c1 100644 --- a/components/net/sf/briar/protocol/AckReader.java +++ b/components/net/sf/briar/protocol/AckReader.java @@ -16,10 +16,10 @@ import net.sf.briar.api.protocol.Types; import net.sf.briar.api.protocol.UniqueId; import net.sf.briar.api.serial.Consumer; import net.sf.briar.api.serial.CountingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class AckReader implements ObjectReader { +class AckReader implements StructReader { private final PacketFactory packetFactory; @@ -27,7 +27,7 @@ class AckReader implements ObjectReader { this.packetFactory = packetFactory; } - public Ack readObject(Reader r) throws IOException { + public Ack readStruct(Reader r) throws IOException { // Initialise the consumer Consumer counting = new CountingConsumer(MAX_PACKET_LENGTH); // Read the data diff --git a/components/net/sf/briar/protocol/AuthorReader.java b/components/net/sf/briar/protocol/AuthorReader.java index c59a1028d..a54b78bb3 100644 --- a/components/net/sf/briar/protocol/AuthorReader.java +++ b/components/net/sf/briar/protocol/AuthorReader.java @@ -10,10 +10,10 @@ import net.sf.briar.api.protocol.AuthorId; import net.sf.briar.api.protocol.ProtocolConstants; import net.sf.briar.api.protocol.Types; import net.sf.briar.api.serial.DigestingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class AuthorReader implements ObjectReader { +class AuthorReader implements StructReader { private final MessageDigest messageDigest; private final AuthorFactory authorFactory; @@ -23,7 +23,7 @@ class AuthorReader implements ObjectReader { this.authorFactory = authorFactory; } - public Author readObject(Reader r) throws IOException { + public Author readStruct(Reader r) throws IOException { // Initialise the consumer DigestingConsumer digesting = new DigestingConsumer(messageDigest); // Read and digest the data diff --git a/components/net/sf/briar/protocol/BatchReader.java b/components/net/sf/briar/protocol/BatchReader.java index 55031796a..e650ac9bb 100644 --- a/components/net/sf/briar/protocol/BatchReader.java +++ b/components/net/sf/briar/protocol/BatchReader.java @@ -10,29 +10,29 @@ import net.sf.briar.api.protocol.Types; import net.sf.briar.api.protocol.UnverifiedBatch; import net.sf.briar.api.serial.Consumer; import net.sf.briar.api.serial.CountingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class BatchReader implements ObjectReader { +class BatchReader implements StructReader { - private final ObjectReader messageReader; + private final StructReader messageReader; private final UnverifiedBatchFactory batchFactory; - BatchReader(ObjectReader messageReader, + BatchReader(StructReader messageReader, UnverifiedBatchFactory batchFactory) { this.messageReader = messageReader; this.batchFactory = batchFactory; } - public UnverifiedBatch readObject(Reader r) throws IOException { + public UnverifiedBatch readStruct(Reader r) throws IOException { // Initialise the consumer Consumer counting = new CountingConsumer(MAX_PACKET_LENGTH); // Read the data r.addConsumer(counting); r.readStructId(Types.BATCH); - r.addObjectReader(Types.MESSAGE, messageReader); + r.addStructReader(Types.MESSAGE, messageReader); List messages = r.readList(UnverifiedMessage.class); - r.removeObjectReader(Types.MESSAGE); + r.removeStructReader(Types.MESSAGE); r.removeConsumer(counting); if(messages.isEmpty()) throw new FormatException(); // Build and return the batch diff --git a/components/net/sf/briar/protocol/GroupReader.java b/components/net/sf/briar/protocol/GroupReader.java index 74f24c36e..e5ac98721 100644 --- a/components/net/sf/briar/protocol/GroupReader.java +++ b/components/net/sf/briar/protocol/GroupReader.java @@ -10,10 +10,10 @@ import net.sf.briar.api.protocol.GroupId; import net.sf.briar.api.protocol.ProtocolConstants; import net.sf.briar.api.protocol.Types; import net.sf.briar.api.serial.DigestingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class GroupReader implements ObjectReader { +class GroupReader implements StructReader { private final MessageDigest messageDigest; private final GroupFactory groupFactory; @@ -23,7 +23,7 @@ class GroupReader implements ObjectReader { this.groupFactory = groupFactory; } - public Group readObject(Reader r) throws IOException { + public Group readStruct(Reader r) throws IOException { // Initialise the consumer DigestingConsumer digesting = new DigestingConsumer(messageDigest); // Read and digest the data diff --git a/components/net/sf/briar/protocol/MessageReader.java b/components/net/sf/briar/protocol/MessageReader.java index 7a4ddc22f..cd6280190 100644 --- a/components/net/sf/briar/protocol/MessageReader.java +++ b/components/net/sf/briar/protocol/MessageReader.java @@ -16,21 +16,21 @@ import net.sf.briar.api.protocol.Types; import net.sf.briar.api.protocol.UniqueId; import net.sf.briar.api.serial.CopyingConsumer; import net.sf.briar.api.serial.CountingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class MessageReader implements ObjectReader { +class MessageReader implements StructReader { - private final ObjectReader groupReader; - private final ObjectReader authorReader; + private final StructReader groupReader; + private final StructReader authorReader; - MessageReader(ObjectReader groupReader, - ObjectReader authorReader) { + MessageReader(StructReader groupReader, + StructReader authorReader) { this.groupReader = groupReader; this.authorReader = authorReader; } - public UnverifiedMessage readObject(Reader r) throws IOException { + public UnverifiedMessage readStruct(Reader r) throws IOException { CopyingConsumer copying = new CopyingConsumer(); CountingConsumer counting = new CountingConsumer(MAX_PACKET_LENGTH); r.addConsumer(copying); @@ -51,18 +51,18 @@ class MessageReader implements ObjectReader { if(r.hasNull()) { r.readNull(); } else { - r.addObjectReader(Types.GROUP, groupReader); + r.addStructReader(Types.GROUP, groupReader); group = r.readStruct(Types.GROUP, Group.class); - r.removeObjectReader(Types.GROUP); + r.removeStructReader(Types.GROUP); } // Read the author, if there is one Author author = null; if(r.hasNull()) { r.readNull(); } else { - r.addObjectReader(Types.AUTHOR, authorReader); + r.addStructReader(Types.AUTHOR, authorReader); author = r.readStruct(Types.AUTHOR, Author.class); - r.removeObjectReader(Types.AUTHOR); + r.removeStructReader(Types.AUTHOR); } // Read the subject String subject = r.readString(MAX_SUBJECT_LENGTH); diff --git a/components/net/sf/briar/protocol/OfferReader.java b/components/net/sf/briar/protocol/OfferReader.java index 48e3edf5e..b5c2ff099 100644 --- a/components/net/sf/briar/protocol/OfferReader.java +++ b/components/net/sf/briar/protocol/OfferReader.java @@ -16,10 +16,10 @@ import net.sf.briar.api.protocol.Types; import net.sf.briar.api.protocol.UniqueId; import net.sf.briar.api.serial.Consumer; import net.sf.briar.api.serial.CountingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class OfferReader implements ObjectReader { +class OfferReader implements StructReader { private final PacketFactory packetFactory; @@ -27,7 +27,7 @@ class OfferReader implements ObjectReader { this.packetFactory = packetFactory; } - public Offer readObject(Reader r) throws IOException { + public Offer readStruct(Reader r) throws IOException { // Initialise the consumer Consumer counting = new CountingConsumer(MAX_PACKET_LENGTH); // Read the data diff --git a/components/net/sf/briar/protocol/ProtocolModule.java b/components/net/sf/briar/protocol/ProtocolModule.java index aec69bdc6..6b3526223 100644 --- a/components/net/sf/briar/protocol/ProtocolModule.java +++ b/components/net/sf/briar/protocol/ProtocolModule.java @@ -18,7 +18,7 @@ import net.sf.briar.api.protocol.SubscriptionUpdate; import net.sf.briar.api.protocol.TransportUpdate; import net.sf.briar.api.protocol.UnverifiedBatch; import net.sf.briar.api.protocol.VerificationExecutor; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.util.BoundedExecutor; import com.google.inject.AbstractModule; @@ -58,54 +58,54 @@ public class ProtocolModule extends AbstractModule { } @Provides - ObjectReader getAckReader(PacketFactory ackFactory) { + StructReader getAckReader(PacketFactory ackFactory) { return new AckReader(ackFactory); } @Provides - ObjectReader getAuthorReader(CryptoComponent crypto, + StructReader getAuthorReader(CryptoComponent crypto, AuthorFactory authorFactory) { return new AuthorReader(crypto, authorFactory); } @Provides - ObjectReader getBatchReader( - ObjectReader messageReader, + StructReader getBatchReader( + StructReader messageReader, UnverifiedBatchFactory batchFactory) { return new BatchReader(messageReader, batchFactory); } @Provides - ObjectReader getGroupReader(CryptoComponent crypto, + StructReader getGroupReader(CryptoComponent crypto, GroupFactory groupFactory) { return new GroupReader(crypto, groupFactory); } @Provides - ObjectReader getMessageReader( - ObjectReader groupReader, - ObjectReader authorReader) { + StructReader getMessageReader( + StructReader groupReader, + StructReader authorReader) { return new MessageReader(groupReader, authorReader); } @Provides - ObjectReader getOfferReader(PacketFactory packetFactory) { + StructReader getOfferReader(PacketFactory packetFactory) { return new OfferReader(packetFactory); } @Provides - ObjectReader getRequestReader(PacketFactory packetFactory) { + StructReader getRequestReader(PacketFactory packetFactory) { return new RequestReader(packetFactory); } @Provides - ObjectReader getSubscriptionReader( - ObjectReader groupReader, PacketFactory packetFactory) { + StructReader getSubscriptionReader( + StructReader groupReader, PacketFactory packetFactory) { return new SubscriptionUpdateReader(groupReader, packetFactory); } @Provides - ObjectReader getTransportReader( + StructReader getTransportReader( PacketFactory packetFactory) { return new TransportUpdateReader(packetFactory); } diff --git a/components/net/sf/briar/protocol/ProtocolReaderFactoryImpl.java b/components/net/sf/briar/protocol/ProtocolReaderFactoryImpl.java index e74d6f2ae..0a2ff0330 100644 --- a/components/net/sf/briar/protocol/ProtocolReaderFactoryImpl.java +++ b/components/net/sf/briar/protocol/ProtocolReaderFactoryImpl.java @@ -10,7 +10,7 @@ import net.sf.briar.api.protocol.Request; import net.sf.briar.api.protocol.SubscriptionUpdate; import net.sf.briar.api.protocol.TransportUpdate; import net.sf.briar.api.protocol.UnverifiedBatch; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.ReaderFactory; import com.google.inject.Inject; @@ -19,21 +19,21 @@ import com.google.inject.Provider; class ProtocolReaderFactoryImpl implements ProtocolReaderFactory { private final ReaderFactory readerFactory; - private final Provider> ackProvider; - private final Provider> batchProvider; - private final Provider> offerProvider; - private final Provider> requestProvider; - private final Provider> subscriptionProvider; - private final Provider> transportProvider; + private final Provider> ackProvider; + private final Provider> batchProvider; + private final Provider> offerProvider; + private final Provider> requestProvider; + private final Provider> subscriptionProvider; + private final Provider> transportProvider; @Inject ProtocolReaderFactoryImpl(ReaderFactory readerFactory, - Provider> ackProvider, - Provider> batchProvider, - Provider> offerProvider, - Provider> requestProvider, - Provider> subscriptionProvider, - Provider> transportProvider) { + Provider> ackProvider, + Provider> batchProvider, + Provider> offerProvider, + Provider> requestProvider, + Provider> subscriptionProvider, + Provider> transportProvider) { this.readerFactory = readerFactory; this.ackProvider = ackProvider; this.batchProvider = batchProvider; diff --git a/components/net/sf/briar/protocol/ProtocolReaderImpl.java b/components/net/sf/briar/protocol/ProtocolReaderImpl.java index a55636134..cf6ff211f 100644 --- a/components/net/sf/briar/protocol/ProtocolReaderImpl.java +++ b/components/net/sf/briar/protocol/ProtocolReaderImpl.java @@ -11,7 +11,7 @@ import net.sf.briar.api.protocol.SubscriptionUpdate; import net.sf.briar.api.protocol.TransportUpdate; import net.sf.briar.api.protocol.Types; import net.sf.briar.api.protocol.UnverifiedBatch; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; import net.sf.briar.api.serial.ReaderFactory; @@ -20,19 +20,19 @@ class ProtocolReaderImpl implements ProtocolReader { private final Reader reader; ProtocolReaderImpl(InputStream in, ReaderFactory readerFactory, - ObjectReader ackReader, - ObjectReader batchReader, - ObjectReader offerReader, - ObjectReader requestReader, - ObjectReader subscriptionReader, - ObjectReader transportReader) { + StructReader ackReader, + StructReader batchReader, + StructReader offerReader, + StructReader requestReader, + StructReader subscriptionReader, + StructReader transportReader) { reader = readerFactory.createReader(in); - reader.addObjectReader(Types.ACK, ackReader); - reader.addObjectReader(Types.BATCH, batchReader); - reader.addObjectReader(Types.OFFER, offerReader); - reader.addObjectReader(Types.REQUEST, requestReader); - reader.addObjectReader(Types.SUBSCRIPTION_UPDATE, subscriptionReader); - reader.addObjectReader(Types.TRANSPORT_UPDATE, transportReader); + reader.addStructReader(Types.ACK, ackReader); + reader.addStructReader(Types.BATCH, batchReader); + reader.addStructReader(Types.OFFER, offerReader); + reader.addStructReader(Types.REQUEST, requestReader); + reader.addStructReader(Types.SUBSCRIPTION_UPDATE, subscriptionReader); + reader.addStructReader(Types.TRANSPORT_UPDATE, transportReader); } public boolean eof() throws IOException { diff --git a/components/net/sf/briar/protocol/RequestReader.java b/components/net/sf/briar/protocol/RequestReader.java index 005bc0124..b8e657457 100644 --- a/components/net/sf/briar/protocol/RequestReader.java +++ b/components/net/sf/briar/protocol/RequestReader.java @@ -11,10 +11,10 @@ import net.sf.briar.api.protocol.Request; import net.sf.briar.api.protocol.Types; import net.sf.briar.api.serial.Consumer; import net.sf.briar.api.serial.CountingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class RequestReader implements ObjectReader { +class RequestReader implements StructReader { private final PacketFactory packetFactory; @@ -22,7 +22,7 @@ class RequestReader implements ObjectReader { this.packetFactory = packetFactory; } - public Request readObject(Reader r) throws IOException { + public Request readStruct(Reader r) throws IOException { // Initialise the consumer Consumer counting = new CountingConsumer(MAX_PACKET_LENGTH); // Read the data diff --git a/components/net/sf/briar/protocol/SubscriptionUpdateReader.java b/components/net/sf/briar/protocol/SubscriptionUpdateReader.java index 2e2dd2654..83a5e55b6 100644 --- a/components/net/sf/briar/protocol/SubscriptionUpdateReader.java +++ b/components/net/sf/briar/protocol/SubscriptionUpdateReader.java @@ -12,29 +12,29 @@ import net.sf.briar.api.protocol.SubscriptionUpdate; import net.sf.briar.api.protocol.Types; import net.sf.briar.api.serial.Consumer; import net.sf.briar.api.serial.CountingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class SubscriptionUpdateReader implements ObjectReader { +class SubscriptionUpdateReader implements StructReader { - private final ObjectReader groupReader; + private final StructReader groupReader; private final PacketFactory packetFactory; - SubscriptionUpdateReader(ObjectReader groupReader, + SubscriptionUpdateReader(StructReader groupReader, PacketFactory packetFactory) { this.groupReader = groupReader; this.packetFactory = packetFactory; } - public SubscriptionUpdate readObject(Reader r) throws IOException { + public SubscriptionUpdate readStruct(Reader r) throws IOException { // Initialise the consumer Consumer counting = new CountingConsumer(MAX_PACKET_LENGTH); // Read the data r.addConsumer(counting); r.readStructId(Types.SUBSCRIPTION_UPDATE); - r.addObjectReader(Types.GROUP, groupReader); + r.addStructReader(Types.GROUP, groupReader); Map subs = r.readMap(Group.class, Long.class); - r.removeObjectReader(Types.GROUP); + r.removeStructReader(Types.GROUP); long timestamp = r.readInt64(); if(timestamp < 0L) throw new FormatException(); r.removeConsumer(counting); diff --git a/components/net/sf/briar/protocol/TransportUpdateReader.java b/components/net/sf/briar/protocol/TransportUpdateReader.java index bbea4948f..63e6b899c 100644 --- a/components/net/sf/briar/protocol/TransportUpdateReader.java +++ b/components/net/sf/briar/protocol/TransportUpdateReader.java @@ -21,28 +21,28 @@ import net.sf.briar.api.protocol.Types; import net.sf.briar.api.protocol.UniqueId; import net.sf.briar.api.serial.Consumer; import net.sf.briar.api.serial.CountingConsumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; -class TransportUpdateReader implements ObjectReader { +class TransportUpdateReader implements StructReader { private final PacketFactory packetFactory; - private final ObjectReader transportReader; + private final StructReader transportReader; TransportUpdateReader(PacketFactory packetFactory) { this.packetFactory = packetFactory; transportReader = new TransportReader(); } - public TransportUpdate readObject(Reader r) throws IOException { + public TransportUpdate readStruct(Reader r) throws IOException { // Initialise the consumer Consumer counting = new CountingConsumer(MAX_PACKET_LENGTH); // Read the data r.addConsumer(counting); r.readStructId(Types.TRANSPORT_UPDATE); - r.addObjectReader(Types.TRANSPORT, transportReader); + r.addStructReader(Types.TRANSPORT, transportReader); Collection transports = r.readList(Transport.class); - r.removeObjectReader(Types.TRANSPORT); + r.removeStructReader(Types.TRANSPORT); if(transports.size() > MAX_TRANSPORTS) throw new FormatException(); long timestamp = r.readInt64(); r.removeConsumer(counting); @@ -57,9 +57,9 @@ class TransportUpdateReader implements ObjectReader { return packetFactory.createTransportUpdate(transports, timestamp); } - private static class TransportReader implements ObjectReader { + private static class TransportReader implements StructReader { - public Transport readObject(Reader r) throws IOException { + public Transport readStruct(Reader r) throws IOException { r.readStructId(Types.TRANSPORT); // Read the ID byte[] b = r.readBytes(UniqueId.LENGTH); diff --git a/components/net/sf/briar/serial/ReaderImpl.java b/components/net/sf/briar/serial/ReaderImpl.java index 7e4dc4c19..9fa9994e4 100644 --- a/components/net/sf/briar/serial/ReaderImpl.java +++ b/components/net/sf/briar/serial/ReaderImpl.java @@ -12,7 +12,7 @@ import java.util.Map; import net.sf.briar.api.Bytes; import net.sf.briar.api.FormatException; import net.sf.briar.api.serial.Consumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; // This class is not thread-safe @@ -23,7 +23,7 @@ class ReaderImpl implements Reader { private final InputStream in; private final Collection consumers = new ArrayList(0); - private ObjectReader[] objectReaders = new ObjectReader[] {}; + private StructReader[] structReaders = new StructReader[] {}; private boolean hasLookahead = false, eof = false; private byte next, nextNext; private byte[] buf = null; @@ -98,21 +98,22 @@ class ReaderImpl implements Reader { if(!consumers.remove(c)) throw new IllegalArgumentException(); } - public void addObjectReader(int id, ObjectReader o) { + public void addStructReader(int id, StructReader o) { if(id < 0 || id > 255) throw new IllegalArgumentException(); - if(objectReaders.length < id + 1) { - ObjectReader[] newObjectReaders = new ObjectReader[id + 1]; - System.arraycopy(objectReaders, 0, newObjectReaders, 0, - objectReaders.length); - objectReaders = newObjectReaders; + if(structReaders.length < id + 1) { + int len = Math.min(256, Math.max(id + 1, structReaders.length * 2)); + StructReader[] newStructReaders = new StructReader[len]; + System.arraycopy(structReaders, 0, newStructReaders, 0, + structReaders.length); + structReaders = newStructReaders; } - objectReaders[id] = o; + structReaders[id] = o; } - public void removeObjectReader(int id) { - if(id < 0 || id > objectReaders.length) + public void removeStructReader(int id) { + if(id < 0 || id > structReaders.length) throw new IllegalArgumentException(); - objectReaders[id] = null; + structReaders[id] = null; } public boolean hasBoolean() throws IOException { @@ -335,10 +336,6 @@ class ReaderImpl implements Reader { || (next & Tag.SHORT_MASK) == Tag.SHORT_LIST; } - public List readList() throws IOException { - return readList(Object.class); - } - public List readList(Class e) throws IOException { if(!hasList()) throw new FormatException(); consumeLookahead(); @@ -385,8 +382,8 @@ class ReaderImpl implements Reader { if(hasFloat64()) return Double.valueOf(readFloat64()); if(hasString()) return readString(); if(hasBytes()) return new Bytes(readBytes()); - if(hasList()) return readList(); - if(hasMap()) return readMap(); + if(hasList()) return readList(Object.class); + if(hasMap()) return readMap(Object.class, Object.class); if(hasNull()) { readNull(); return null; @@ -462,10 +459,6 @@ class ReaderImpl implements Reader { || (next & Tag.SHORT_MASK) == Tag.SHORT_MAP; } - public Map readMap() throws IOException { - return readMap(Object.class, Object.class); - } - public Map readMap(Class k, Class v) throws IOException { if(!hasMap()) throw new FormatException(); consumeLookahead(); @@ -538,11 +531,11 @@ class ReaderImpl implements Reader { public T readStruct(int id, Class t) throws IOException { if(!hasStruct(id)) throw new FormatException(); - if(id >= objectReaders.length) throw new FormatException(); - ObjectReader o = objectReaders[id]; - if(o == null) throw new FormatException(); + if(id < 0 || id >= structReaders.length) throw new FormatException(); + StructReader s = structReaders[id]; + if(s == null) throw new FormatException(); try { - return t.cast(o.readObject(this)); + return t.cast(s.readStruct(this)); } catch(ClassCastException e) { throw new FormatException(); } diff --git a/test/net/sf/briar/protocol/AckReaderTest.java b/test/net/sf/briar/protocol/AckReaderTest.java index 255dc60a0..0220818d7 100644 --- a/test/net/sf/briar/protocol/AckReaderTest.java +++ b/test/net/sf/briar/protocol/AckReaderTest.java @@ -49,7 +49,7 @@ public class AckReaderTest extends BriarTestCase { byte[] b = createAck(true); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.ACK, ackReader); + reader.addStructReader(Types.ACK, ackReader); try { reader.readStruct(Types.ACK, Ack.class); @@ -72,7 +72,7 @@ public class AckReaderTest extends BriarTestCase { byte[] b = createAck(false); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.ACK, ackReader); + reader.addStructReader(Types.ACK, ackReader); assertEquals(ack, reader.readStruct(Types.ACK, Ack.class)); context.assertIsSatisfied(); @@ -86,7 +86,7 @@ public class AckReaderTest extends BriarTestCase { byte[] b = createEmptyAck(); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.ACK, ackReader); + reader.addStructReader(Types.ACK, ackReader); try { reader.readStruct(Types.ACK, Ack.class); diff --git a/test/net/sf/briar/protocol/BatchReaderTest.java b/test/net/sf/briar/protocol/BatchReaderTest.java index e2eabf4ce..9023f0f77 100644 --- a/test/net/sf/briar/protocol/BatchReaderTest.java +++ b/test/net/sf/briar/protocol/BatchReaderTest.java @@ -10,7 +10,7 @@ import net.sf.briar.api.FormatException; import net.sf.briar.api.protocol.ProtocolConstants; import net.sf.briar.api.protocol.Types; import net.sf.briar.api.protocol.UnverifiedBatch; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; import net.sf.briar.api.serial.ReaderFactory; import net.sf.briar.api.serial.Writer; @@ -30,7 +30,7 @@ public class BatchReaderTest extends BriarTestCase { private final WriterFactory writerFactory; private final Mockery context; private final UnverifiedMessage message; - private final ObjectReader messageReader; + private final StructReader messageReader; public BatchReaderTest() throws Exception { super(); @@ -51,7 +51,7 @@ public class BatchReaderTest extends BriarTestCase { byte[] b = createBatch(ProtocolConstants.MAX_PACKET_LENGTH + 1); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.BATCH, batchReader); + reader.addStructReader(Types.BATCH, batchReader); try { reader.readStruct(Types.BATCH, UnverifiedBatch.class); @@ -75,7 +75,7 @@ public class BatchReaderTest extends BriarTestCase { byte[] b = createBatch(ProtocolConstants.MAX_PACKET_LENGTH); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.BATCH, batchReader); + reader.addStructReader(Types.BATCH, batchReader); assertEquals(batch, reader.readStruct(Types.BATCH, UnverifiedBatch.class)); @@ -91,7 +91,7 @@ public class BatchReaderTest extends BriarTestCase { byte[] b = createEmptyBatch(); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.BATCH, batchReader); + reader.addStructReader(Types.BATCH, batchReader); try { reader.readStruct(Types.BATCH, UnverifiedBatch.class); @@ -123,9 +123,9 @@ public class BatchReaderTest extends BriarTestCase { return out.toByteArray(); } - private class TestMessageReader implements ObjectReader { + private class TestMessageReader implements StructReader { - public UnverifiedMessage readObject(Reader r) throws IOException { + public UnverifiedMessage readStruct(Reader r) throws IOException { r.readStructId(Types.MESSAGE); r.readBytes(); return message; diff --git a/test/net/sf/briar/protocol/OfferReaderTest.java b/test/net/sf/briar/protocol/OfferReaderTest.java index 92067e18f..0afb60804 100644 --- a/test/net/sf/briar/protocol/OfferReaderTest.java +++ b/test/net/sf/briar/protocol/OfferReaderTest.java @@ -49,7 +49,7 @@ public class OfferReaderTest extends BriarTestCase { byte[] b = createOffer(true); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.OFFER, offerReader); + reader.addStructReader(Types.OFFER, offerReader); try { reader.readStruct(Types.OFFER, Offer.class); @@ -72,7 +72,7 @@ public class OfferReaderTest extends BriarTestCase { byte[] b = createOffer(false); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.OFFER, offerReader); + reader.addStructReader(Types.OFFER, offerReader); assertEquals(offer, reader.readStruct(Types.OFFER, Offer.class)); context.assertIsSatisfied(); @@ -86,7 +86,7 @@ public class OfferReaderTest extends BriarTestCase { byte[] b = createEmptyOffer(); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.OFFER, offerReader); + reader.addStructReader(Types.OFFER, offerReader); try { reader.readStruct(Types.OFFER, Offer.class); diff --git a/test/net/sf/briar/protocol/RequestReaderTest.java b/test/net/sf/briar/protocol/RequestReaderTest.java index f241d13da..fb45878d5 100644 --- a/test/net/sf/briar/protocol/RequestReaderTest.java +++ b/test/net/sf/briar/protocol/RequestReaderTest.java @@ -49,7 +49,7 @@ public class RequestReaderTest extends BriarTestCase { byte[] b = createRequest(true); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.REQUEST, requestReader); + reader.addStructReader(Types.REQUEST, requestReader); try { reader.readStruct(Types.REQUEST, Request.class); @@ -72,7 +72,7 @@ public class RequestReaderTest extends BriarTestCase { byte[] b = createRequest(false); ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); - reader.addObjectReader(Types.REQUEST, requestReader); + reader.addStructReader(Types.REQUEST, requestReader); assertEquals(request, reader.readStruct(Types.REQUEST, Request.class)); @@ -102,7 +102,7 @@ public class RequestReaderTest extends BriarTestCase { ByteArrayInputStream in = new ByteArrayInputStream(b); Reader reader = readerFactory.createReader(in); RequestReader requestReader = new RequestReader(packetFactory); - reader.addObjectReader(Types.REQUEST, requestReader); + reader.addStructReader(Types.REQUEST, requestReader); Request r = reader.readStruct(Types.REQUEST, Request.class); BitSet decoded = r.getBitmap(); // Check that the decoded BitSet matches the original - we can't diff --git a/test/net/sf/briar/serial/ReaderImplTest.java b/test/net/sf/briar/serial/ReaderImplTest.java index 49a7888d2..a79cdb56b 100644 --- a/test/net/sf/briar/serial/ReaderImplTest.java +++ b/test/net/sf/briar/serial/ReaderImplTest.java @@ -14,7 +14,7 @@ import net.sf.briar.BriarTestCase; import net.sf.briar.api.Bytes; import net.sf.briar.api.FormatException; import net.sf.briar.api.serial.Consumer; -import net.sf.briar.api.serial.ObjectReader; +import net.sf.briar.api.serial.StructReader; import net.sf.briar.api.serial.Reader; import net.sf.briar.util.StringUtils; @@ -373,15 +373,15 @@ public class ReaderImplTest extends BriarTestCase { @Test public void testReadStruct() throws Exception { setContents("C0" + "83666F6F" + "F1" + "FF" + "83666F6F"); - // Add object readers for two structs - r.addObjectReader(0, new ObjectReader() { - public Foo readObject(Reader r) throws IOException { + // Add readers for two structs + r.addStructReader(0, new StructReader() { + public Foo readStruct(Reader r) throws IOException { r.readStructId(0); return new Foo(r.readString()); } }); - r.addObjectReader(255, new ObjectReader() { - public Bar readObject(Reader r) throws IOException { + r.addStructReader(255, new StructReader() { + public Bar readStruct(Reader r) throws IOException { r.readStructId(255); return new Bar(r.readString()); } @@ -396,15 +396,15 @@ public class ReaderImplTest extends BriarTestCase { @Test public void testReadStructWithConsumer() throws Exception { setContents("C0" + "83666F6F" + "F1" + "FF" + "83666F6F"); - // Add object readers for two structs - r.addObjectReader(0, new ObjectReader() { - public Foo readObject(Reader r) throws IOException { + // Add readers for two structs + r.addStructReader(0, new StructReader() { + public Foo readStruct(Reader r) throws IOException { r.readStructId(0); return new Foo(r.readString()); } }); - r.addObjectReader(255, new ObjectReader() { - public Bar readObject(Reader r) throws IOException { + r.addStructReader(255, new StructReader() { + public Bar readStruct(Reader r) throws IOException { r.readStructId(255); return new Bar(r.readString()); } @@ -435,7 +435,7 @@ public class ReaderImplTest extends BriarTestCase { public void testUnknownStructIdThrowsFormatException() throws Exception { setContents("C0" + "83666F6F"); assertTrue(r.hasStruct(0)); - // No object reader has been added for struct ID 0 + // No reader has been added for struct ID 0 try { r.readStruct(0, Foo.class); fail(); @@ -445,15 +445,15 @@ public class ReaderImplTest extends BriarTestCase { @Test public void testWrongClassThrowsFormatException() throws Exception { setContents("C0" + "83666F6F"); - // Add an object reader for struct ID 0, class Foo - r.addObjectReader(0, new ObjectReader() { - public Foo readObject(Reader r) throws IOException { + // Add a reader for struct ID 0, class Foo + r.addStructReader(0, new StructReader() { + public Foo readStruct(Reader r) throws IOException { r.readStructId(0); return new Foo(r.readString()); } }); assertTrue(r.hasStruct(0)); - // Trying to read the object as class Bar should throw a FormatException + // Trying to read the struct as class Bar should throw a FormatException try { r.readStruct(0, Bar.class); fail(); @@ -461,38 +461,38 @@ public class ReaderImplTest extends BriarTestCase { } @Test - public void testReadListUsingObjectReader() throws Exception { + public void testReadListUsingStructReader() throws Exception { setContents("A" + "1" + "C0" + "83666F6F"); - // Add an object reader for a struct - r.addObjectReader(0, new ObjectReader() { - public Foo readObject(Reader r) throws IOException { + // Add a reader for a struct + r.addStructReader(0, new StructReader() { + public Foo readStruct(Reader r) throws IOException { r.readStructId(0); return new Foo(r.readString()); } }); - // Check that the object reader is used for lists + // Check that the reader is used for lists List l = r.readList(Foo.class); assertEquals(1, l.size()); assertEquals("foo", l.get(0).s); } @Test - public void testReadMapUsingObjectReader() throws Exception { + public void testReadMapUsingStructReader() throws Exception { setContents("B" + "1" + "C0" + "83666F6F" + "C1" + "83626172"); - // Add object readers for two structs - r.addObjectReader(0, new ObjectReader() { - public Foo readObject(Reader r) throws IOException { + // Add readers for two structs + r.addStructReader(0, new StructReader() { + public Foo readStruct(Reader r) throws IOException { r.readStructId(0); return new Foo(r.readString()); } }); - r.addObjectReader(1, new ObjectReader() { - public Bar readObject(Reader r) throws IOException { + r.addStructReader(1, new StructReader() { + public Bar readStruct(Reader r) throws IOException { r.readStructId(1); return new Bar(r.readString()); } }); - // Check that the object readers are used for maps + // Check that the readers are used for maps Map m = r.readMap(Foo.class, Bar.class); assertEquals(1, m.size()); Entry e = m.entrySet().iterator().next();