mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-13 11:19:04 +01:00
Update data format to match BDF spec.
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package org.briarproject.data;
|
||||
|
||||
import org.briarproject.api.data.BdfReader;
|
||||
import org.briarproject.api.data.BdfReaderFactory;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
class BdfReaderFactoryImpl implements BdfReaderFactory {
|
||||
|
||||
public BdfReader createReader(InputStream in) {
|
||||
return new BdfReaderImpl(in);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,15 @@
|
||||
package org.briarproject.data;
|
||||
|
||||
import org.briarproject.api.FormatException;
|
||||
import org.briarproject.api.data.BdfReader;
|
||||
import org.briarproject.api.data.Consumer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import static org.briarproject.data.Types.DICTIONARY;
|
||||
import static org.briarproject.data.Types.END;
|
||||
import static org.briarproject.data.Types.FALSE;
|
||||
import static org.briarproject.data.Types.FLOAT_64;
|
||||
@@ -8,7 +18,6 @@ import static org.briarproject.data.Types.INT_32;
|
||||
import static org.briarproject.data.Types.INT_64;
|
||||
import static org.briarproject.data.Types.INT_8;
|
||||
import static org.briarproject.data.Types.LIST;
|
||||
import static org.briarproject.data.Types.MAP;
|
||||
import static org.briarproject.data.Types.NULL;
|
||||
import static org.briarproject.data.Types.RAW_16;
|
||||
import static org.briarproject.data.Types.RAW_32;
|
||||
@@ -18,17 +27,8 @@ import static org.briarproject.data.Types.STRING_32;
|
||||
import static org.briarproject.data.Types.STRING_8;
|
||||
import static org.briarproject.data.Types.TRUE;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.briarproject.api.FormatException;
|
||||
import org.briarproject.api.data.Consumer;
|
||||
import org.briarproject.api.data.Reader;
|
||||
|
||||
// This class is not thread-safe
|
||||
class ReaderImpl implements Reader {
|
||||
class BdfReaderImpl implements BdfReader {
|
||||
|
||||
private static final byte[] EMPTY_BUFFER = new byte[] {};
|
||||
|
||||
@@ -39,7 +39,7 @@ class ReaderImpl implements Reader {
|
||||
private byte next;
|
||||
private byte[] buf = new byte[8];
|
||||
|
||||
ReaderImpl(InputStream in) {
|
||||
BdfReaderImpl(InputStream in) {
|
||||
this.in = in;
|
||||
}
|
||||
|
||||
@@ -88,14 +88,14 @@ class ReaderImpl implements Reader {
|
||||
}
|
||||
|
||||
private void skipObject() throws IOException {
|
||||
if (hasBoolean()) skipBoolean();
|
||||
if (hasNull()) skipNull();
|
||||
else if (hasBoolean()) skipBoolean();
|
||||
else if (hasInteger()) skipInteger();
|
||||
else if (hasFloat()) skipFloat();
|
||||
else if (hasString()) skipString();
|
||||
else if (hasRaw()) skipRaw();
|
||||
else if (hasList()) skipList();
|
||||
else if (hasMap()) skipMap();
|
||||
else if (hasNull()) skipNull();
|
||||
else if (hasDictionary()) skipDictionary();
|
||||
else throw new FormatException();
|
||||
}
|
||||
|
||||
@@ -173,18 +173,13 @@ class ReaderImpl implements Reader {
|
||||
|
||||
private short readInt16(boolean consume) throws IOException {
|
||||
readIntoBuffer(2, consume);
|
||||
short value = (short) (((buf[0] & 0xFF) << 8) + (buf[1] & 0xFF));
|
||||
if (value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE)
|
||||
throw new FormatException();
|
||||
return value;
|
||||
return (short) (((buf[0] & 0xFF) << 8) + (buf[1] & 0xFF));
|
||||
}
|
||||
|
||||
private int readInt32(boolean consume) throws IOException {
|
||||
readIntoBuffer(4, consume);
|
||||
int value = 0;
|
||||
for (int i = 0; i < 4; i++) value |= (buf[i] & 0xFF) << (24 - i * 8);
|
||||
if (value >= Short.MIN_VALUE && value <= Short.MAX_VALUE)
|
||||
throw new FormatException();
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -192,8 +187,6 @@ class ReaderImpl implements Reader {
|
||||
readIntoBuffer(8, consume);
|
||||
long value = 0;
|
||||
for (int i = 0; i < 8; i++) value |= (buf[i] & 0xFFL) << (56 - i * 8);
|
||||
if (value >= Integer.MIN_VALUE && value <= Integer.MAX_VALUE)
|
||||
throw new FormatException();
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -327,30 +320,30 @@ class ReaderImpl implements Reader {
|
||||
hasLookahead = false;
|
||||
}
|
||||
|
||||
public boolean hasMap() throws IOException {
|
||||
public boolean hasDictionary() throws IOException {
|
||||
if (!hasLookahead) readLookahead();
|
||||
if (eof) return false;
|
||||
return next == MAP;
|
||||
return next == DICTIONARY;
|
||||
}
|
||||
|
||||
public void readMapStart() throws IOException {
|
||||
if (!hasMap()) throw new FormatException();
|
||||
public void readDictionaryStart() throws IOException {
|
||||
if (!hasDictionary()) throw new FormatException();
|
||||
consumeLookahead();
|
||||
}
|
||||
|
||||
public boolean hasMapEnd() throws IOException {
|
||||
public boolean hasDictionaryEnd() throws IOException {
|
||||
return hasEnd();
|
||||
}
|
||||
|
||||
public void readMapEnd() throws IOException {
|
||||
public void readDictionaryEnd() throws IOException {
|
||||
readEnd();
|
||||
}
|
||||
|
||||
public void skipMap() throws IOException {
|
||||
if (!hasMap()) throw new FormatException();
|
||||
public void skipDictionary() throws IOException {
|
||||
if (!hasDictionary()) throw new FormatException();
|
||||
hasLookahead = false;
|
||||
while (!hasMapEnd()) {
|
||||
skipObject();
|
||||
while (!hasDictionaryEnd()) {
|
||||
skipString();
|
||||
skipObject();
|
||||
}
|
||||
hasLookahead = false;
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.briarproject.data;
|
||||
|
||||
import org.briarproject.api.data.BdfWriter;
|
||||
import org.briarproject.api.data.BdfWriterFactory;
|
||||
|
||||
import java.io.OutputStream;
|
||||
|
||||
class BdfWriterFactoryImpl implements BdfWriterFactory {
|
||||
|
||||
public BdfWriter createWriter(OutputStream out) {
|
||||
return new BdfWriterImpl(out);
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,9 @@
|
||||
package org.briarproject.data;
|
||||
|
||||
import static org.briarproject.data.Types.END;
|
||||
import static org.briarproject.data.Types.FALSE;
|
||||
import static org.briarproject.data.Types.FLOAT_64;
|
||||
import static org.briarproject.data.Types.INT_16;
|
||||
import static org.briarproject.data.Types.INT_32;
|
||||
import static org.briarproject.data.Types.INT_64;
|
||||
import static org.briarproject.data.Types.INT_8;
|
||||
import static org.briarproject.data.Types.LIST;
|
||||
import static org.briarproject.data.Types.MAP;
|
||||
import static org.briarproject.data.Types.NULL;
|
||||
import static org.briarproject.data.Types.RAW_16;
|
||||
import static org.briarproject.data.Types.RAW_32;
|
||||
import static org.briarproject.data.Types.RAW_8;
|
||||
import static org.briarproject.data.Types.STRING_16;
|
||||
import static org.briarproject.data.Types.STRING_32;
|
||||
import static org.briarproject.data.Types.STRING_8;
|
||||
import static org.briarproject.data.Types.TRUE;
|
||||
import org.briarproject.api.Bytes;
|
||||
import org.briarproject.api.FormatException;
|
||||
import org.briarproject.api.data.BdfWriter;
|
||||
import org.briarproject.api.data.Consumer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
@@ -26,17 +13,31 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.briarproject.api.Bytes;
|
||||
import org.briarproject.api.data.Consumer;
|
||||
import org.briarproject.api.data.Writer;
|
||||
import static org.briarproject.data.Types.DICTIONARY;
|
||||
import static org.briarproject.data.Types.END;
|
||||
import static org.briarproject.data.Types.FALSE;
|
||||
import static org.briarproject.data.Types.FLOAT_64;
|
||||
import static org.briarproject.data.Types.INT_16;
|
||||
import static org.briarproject.data.Types.INT_32;
|
||||
import static org.briarproject.data.Types.INT_64;
|
||||
import static org.briarproject.data.Types.INT_8;
|
||||
import static org.briarproject.data.Types.LIST;
|
||||
import static org.briarproject.data.Types.NULL;
|
||||
import static org.briarproject.data.Types.RAW_16;
|
||||
import static org.briarproject.data.Types.RAW_32;
|
||||
import static org.briarproject.data.Types.RAW_8;
|
||||
import static org.briarproject.data.Types.STRING_16;
|
||||
import static org.briarproject.data.Types.STRING_32;
|
||||
import static org.briarproject.data.Types.STRING_8;
|
||||
import static org.briarproject.data.Types.TRUE;
|
||||
|
||||
// This class is not thread-safe
|
||||
class WriterImpl implements Writer {
|
||||
class BdfWriterImpl implements BdfWriter {
|
||||
|
||||
private final OutputStream out;
|
||||
private final Collection<Consumer> consumers = new ArrayList<Consumer>(0);
|
||||
|
||||
WriterImpl(OutputStream out) {
|
||||
BdfWriterImpl(OutputStream out) {
|
||||
this.out = out;
|
||||
}
|
||||
|
||||
@@ -145,7 +146,8 @@ class WriterImpl implements Writer {
|
||||
}
|
||||
|
||||
private void writeObject(Object o) throws IOException {
|
||||
if (o instanceof Boolean) writeBoolean((Boolean) o);
|
||||
if (o == null) writeNull();
|
||||
else if (o instanceof Boolean) writeBoolean((Boolean) o);
|
||||
else if (o instanceof Byte) writeInteger((Byte) o);
|
||||
else if (o instanceof Short) writeInteger((Short) o);
|
||||
else if (o instanceof Integer) writeInteger((Integer) o);
|
||||
@@ -155,10 +157,9 @@ class WriterImpl implements Writer {
|
||||
else if (o instanceof String) writeString((String) o);
|
||||
else if (o instanceof byte[]) writeRaw((byte[]) o);
|
||||
else if (o instanceof Bytes) writeRaw(((Bytes) o).getBytes());
|
||||
else if (o instanceof List<?>) writeList((List<?>) o);
|
||||
else if (o instanceof Map<?, ?>) writeMap((Map<?, ?>) o);
|
||||
else if (o == null) writeNull();
|
||||
else throw new IllegalStateException();
|
||||
else if (o instanceof List) writeList((List) o);
|
||||
else if (o instanceof Map) writeDictionary((Map) o);
|
||||
else throw new FormatException();
|
||||
}
|
||||
|
||||
public void writeListStart() throws IOException {
|
||||
@@ -169,20 +170,21 @@ class WriterImpl implements Writer {
|
||||
write(END);
|
||||
}
|
||||
|
||||
public void writeMap(Map<?, ?> m) throws IOException {
|
||||
write(MAP);
|
||||
public void writeDictionary(Map<?, ?> m) throws IOException {
|
||||
write(DICTIONARY);
|
||||
for (Entry<?, ?> e : m.entrySet()) {
|
||||
writeObject(e.getKey());
|
||||
if (!(e.getKey() instanceof String)) throw new FormatException();
|
||||
writeString((String) e.getKey());
|
||||
writeObject(e.getValue());
|
||||
}
|
||||
write(END);
|
||||
}
|
||||
|
||||
public void writeMapStart() throws IOException {
|
||||
write(MAP);
|
||||
public void writeDictionaryStart() throws IOException {
|
||||
write(DICTIONARY);
|
||||
}
|
||||
|
||||
public void writeMapEnd() throws IOException {
|
||||
public void writeDictionaryEnd() throws IOException {
|
||||
write(END);
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package org.briarproject.data;
|
||||
|
||||
import org.briarproject.api.data.ReaderFactory;
|
||||
import org.briarproject.api.data.WriterFactory;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
import org.briarproject.api.data.BdfReaderFactory;
|
||||
import org.briarproject.api.data.BdfWriterFactory;
|
||||
|
||||
public class DataModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(ReaderFactory.class).to(ReaderFactoryImpl.class);
|
||||
bind(WriterFactory.class).to(WriterFactoryImpl.class);
|
||||
bind(BdfReaderFactory.class).to(BdfReaderFactoryImpl.class);
|
||||
bind(BdfWriterFactory.class).to(BdfWriterFactoryImpl.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
package org.briarproject.data;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.briarproject.api.data.Reader;
|
||||
import org.briarproject.api.data.ReaderFactory;
|
||||
|
||||
class ReaderFactoryImpl implements ReaderFactory {
|
||||
|
||||
public Reader createReader(InputStream in) {
|
||||
return new ReaderImpl(in);
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,6 @@ interface Types {
|
||||
byte RAW_16 = 0x52;
|
||||
byte RAW_32 = 0x54;
|
||||
byte LIST = 0x60;
|
||||
byte MAP = 0x70;
|
||||
byte DICTIONARY = 0x70;
|
||||
byte END = (byte) 0x80;
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
package org.briarproject.data;
|
||||
|
||||
import java.io.OutputStream;
|
||||
|
||||
import org.briarproject.api.data.Writer;
|
||||
import org.briarproject.api.data.WriterFactory;
|
||||
|
||||
class WriterFactoryImpl implements WriterFactory {
|
||||
|
||||
public Writer createWriter(OutputStream out) {
|
||||
return new WriterImpl(out);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user