mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-14 19:59:05 +01:00
Separated MessageHeader interface from Message interface.
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package net.sf.briar.api.protocol;
|
package net.sf.briar.api.protocol;
|
||||||
|
|
||||||
public interface Message {
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
public interface Message extends MessageHeader {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum length of a message body in bytes. To allow for future
|
* The maximum length of a message body in bytes. To allow for future
|
||||||
@@ -19,30 +21,15 @@ public interface Message {
|
|||||||
/** The length of the random salt in bytes. */
|
/** The length of the random salt in bytes. */
|
||||||
static final int SALT_LENGTH = 8;
|
static final int SALT_LENGTH = 8;
|
||||||
|
|
||||||
/** Returns the message's unique identifier. */
|
/** Returns the length of the message in bytes. */
|
||||||
MessageId getId();
|
int getLength();
|
||||||
|
|
||||||
|
/** Returns the serialised representation of the entire message. */
|
||||||
|
byte[] getSerialisedBytes();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the message's parent, or MessageId.NONE if this is the first
|
* Returns a stream for reading the serialised representation of the entire
|
||||||
* message in a thread.
|
* message.
|
||||||
*/
|
*/
|
||||||
MessageId getParent();
|
InputStream getSerialisedStream();
|
||||||
|
|
||||||
/** Returns the group to which the message belongs. */
|
|
||||||
GroupId getGroup();
|
|
||||||
|
|
||||||
/** Returns the message's author. */
|
|
||||||
AuthorId getAuthor();
|
|
||||||
|
|
||||||
/** Returns the message's subject line. */
|
|
||||||
String getSubject();
|
|
||||||
|
|
||||||
/** Returns the timestamp created by the message's author. */
|
|
||||||
long getTimestamp();
|
|
||||||
|
|
||||||
/** Returns the size of the message in bytes. */
|
|
||||||
int getSize();
|
|
||||||
|
|
||||||
/** Returns the serialised representation of the message. */
|
|
||||||
byte[] getBytes();
|
|
||||||
}
|
}
|
||||||
25
api/net/sf/briar/api/protocol/MessageHeader.java
Normal file
25
api/net/sf/briar/api/protocol/MessageHeader.java
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package net.sf.briar.api.protocol;
|
||||||
|
|
||||||
|
public interface MessageHeader {
|
||||||
|
|
||||||
|
/** Returns the message's unique identifier. */
|
||||||
|
MessageId getId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the message's parent, or MessageId.NONE if this is the first
|
||||||
|
* message in a thread.
|
||||||
|
*/
|
||||||
|
MessageId getParent();
|
||||||
|
|
||||||
|
/** Returns the group to which the message belongs. */
|
||||||
|
GroupId getGroup();
|
||||||
|
|
||||||
|
/** Returns the message's author. */
|
||||||
|
AuthorId getAuthor();
|
||||||
|
|
||||||
|
/** Returns the message's subject line. */
|
||||||
|
String getSubject();
|
||||||
|
|
||||||
|
/** Returns the timestamp created by the message's author. */
|
||||||
|
long getTimestamp();
|
||||||
|
}
|
||||||
@@ -236,7 +236,7 @@ DatabaseCleaner.Callback {
|
|||||||
if(sendability > 0) updateAncestorSendability(txn, id, true);
|
if(sendability > 0) updateAncestorSendability(txn, id, true);
|
||||||
// Count the bytes stored
|
// Count the bytes stored
|
||||||
synchronized(spaceLock) {
|
synchronized(spaceLock) {
|
||||||
bytesStoredSinceLastCheck += m.getSize();
|
bytesStoredSinceLastCheck += m.getLength();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return stored;
|
return stored;
|
||||||
@@ -344,7 +344,7 @@ DatabaseCleaner.Callback {
|
|||||||
else db.setStatus(txn, c, id, Status.NEW);
|
else db.setStatus(txn, c, id, Status.NEW);
|
||||||
// Count the bytes stored
|
// Count the bytes stored
|
||||||
synchronized(spaceLock) {
|
synchronized(spaceLock) {
|
||||||
bytesStoredSinceLastCheck += m.getSize();
|
bytesStoredSinceLastCheck += m.getLength();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package net.sf.briar.db;
|
package net.sf.briar.db;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
@@ -549,9 +548,9 @@ abstract class JdbcDatabase implements Database<Connection> {
|
|||||||
if(m.getAuthor() == null) ps.setNull(4, Types.BINARY);
|
if(m.getAuthor() == null) ps.setNull(4, Types.BINARY);
|
||||||
else ps.setBytes(4, m.getAuthor().getBytes());
|
else ps.setBytes(4, m.getAuthor().getBytes());
|
||||||
ps.setLong(5, m.getTimestamp());
|
ps.setLong(5, m.getTimestamp());
|
||||||
ps.setInt(6, m.getSize());
|
int length = m.getLength();
|
||||||
byte[] raw = m.getBytes();
|
ps.setInt(6, length);
|
||||||
ps.setBinaryStream(7, new ByteArrayInputStream(raw), raw.length);
|
ps.setBinaryStream(7, m.getSerialisedStream(), length);
|
||||||
int affected = ps.executeUpdate();
|
int affected = ps.executeUpdate();
|
||||||
if(affected != 1) throw new DbStateException();
|
if(affected != 1) throw new DbStateException();
|
||||||
ps.close();
|
ps.close();
|
||||||
@@ -635,9 +634,9 @@ abstract class JdbcDatabase implements Database<Connection> {
|
|||||||
if(m.getParent() == null) ps.setNull(2, Types.BINARY);
|
if(m.getParent() == null) ps.setNull(2, Types.BINARY);
|
||||||
else ps.setBytes(2, m.getParent().getBytes());
|
else ps.setBytes(2, m.getParent().getBytes());
|
||||||
ps.setLong(3, m.getTimestamp());
|
ps.setLong(3, m.getTimestamp());
|
||||||
ps.setInt(4, m.getSize());
|
int length = m.getLength();
|
||||||
byte[] raw = m.getBytes();
|
ps.setInt(4, length);
|
||||||
ps.setBinaryStream(5, new ByteArrayInputStream(raw), raw.length);
|
ps.setBinaryStream(5, m.getSerialisedStream(), length);
|
||||||
ps.setInt(6, c.getInt());
|
ps.setInt(6, c.getInt());
|
||||||
int affected = ps.executeUpdate();
|
int affected = ps.executeUpdate();
|
||||||
if(affected != 1) throw new DbStateException();
|
if(affected != 1) throw new DbStateException();
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package net.sf.briar.protocol;
|
package net.sf.briar.protocol;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
import net.sf.briar.api.protocol.AuthorId;
|
import net.sf.briar.api.protocol.AuthorId;
|
||||||
import net.sf.briar.api.protocol.GroupId;
|
import net.sf.briar.api.protocol.GroupId;
|
||||||
import net.sf.briar.api.protocol.Message;
|
import net.sf.briar.api.protocol.Message;
|
||||||
@@ -50,14 +53,18 @@ class MessageImpl implements Message {
|
|||||||
return timestamp;
|
return timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getLength() {
|
||||||
return raw.length;
|
return raw.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getBytes() {
|
public byte[] getSerialisedBytes() {
|
||||||
return raw;
|
return raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InputStream getSerialisedStream() {
|
||||||
|
return new ByteArrayInputStream(raw);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
return o instanceof Message && id.equals(((Message) o).getId());
|
return o instanceof Message && id.equals(((Message) o).getId());
|
||||||
|
|||||||
@@ -142,10 +142,10 @@ public class ProtocolIntegrationTest extends TestCase {
|
|||||||
a.finish();
|
a.finish();
|
||||||
|
|
||||||
BatchWriter b = protocolWriterFactory.createBatchWriter(out1);
|
BatchWriter b = protocolWriterFactory.createBatchWriter(out1);
|
||||||
assertTrue(b.writeMessage(message.getBytes()));
|
assertTrue(b.writeMessage(message.getSerialisedBytes()));
|
||||||
assertTrue(b.writeMessage(message1.getBytes()));
|
assertTrue(b.writeMessage(message1.getSerialisedBytes()));
|
||||||
assertTrue(b.writeMessage(message2.getBytes()));
|
assertTrue(b.writeMessage(message2.getSerialisedBytes()));
|
||||||
assertTrue(b.writeMessage(message3.getBytes()));
|
assertTrue(b.writeMessage(message3.getSerialisedBytes()));
|
||||||
b.finish();
|
b.finish();
|
||||||
|
|
||||||
OfferWriter o = protocolWriterFactory.createOfferWriter(out1);
|
OfferWriter o = protocolWriterFactory.createOfferWriter(out1);
|
||||||
@@ -255,6 +255,6 @@ public class ProtocolIntegrationTest extends TestCase {
|
|||||||
assertEquals(m1.getGroup(), m2.getGroup());
|
assertEquals(m1.getGroup(), m2.getGroup());
|
||||||
assertEquals(m1.getAuthor(), m2.getAuthor());
|
assertEquals(m1.getAuthor(), m2.getAuthor());
|
||||||
assertEquals(m1.getTimestamp(), m2.getTimestamp());
|
assertEquals(m1.getTimestamp(), m2.getTimestamp());
|
||||||
assertArrayEquals(m1.getBytes(), m2.getBytes());
|
assertArrayEquals(m1.getSerialisedBytes(), m2.getSerialisedBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package net.sf.briar.db;
|
package net.sf.briar.db;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
import net.sf.briar.api.protocol.AuthorId;
|
import net.sf.briar.api.protocol.AuthorId;
|
||||||
import net.sf.briar.api.protocol.GroupId;
|
import net.sf.briar.api.protocol.GroupId;
|
||||||
import net.sf.briar.api.protocol.Message;
|
import net.sf.briar.api.protocol.Message;
|
||||||
@@ -49,14 +52,18 @@ class TestMessage implements Message {
|
|||||||
return timestamp;
|
return timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getLength() {
|
||||||
return raw.length;
|
return raw.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getBytes() {
|
public byte[] getSerialisedBytes() {
|
||||||
return raw;
|
return raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InputStream getSerialisedStream() {
|
||||||
|
return new ByteArrayInputStream(raw);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
return o instanceof Message && id.equals(((Message)o).getId());
|
return o instanceof Message && id.equals(((Message)o).getId());
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public class ProtocolReadWriteTest extends TestCase {
|
|||||||
a.finish();
|
a.finish();
|
||||||
|
|
||||||
BatchWriter b = writerFactory.createBatchWriter(out);
|
BatchWriter b = writerFactory.createBatchWriter(out);
|
||||||
b.writeMessage(message.getBytes());
|
b.writeMessage(message.getSerialisedBytes());
|
||||||
b.finish();
|
b.finish();
|
||||||
|
|
||||||
OfferWriter o = writerFactory.createOfferWriter(out);
|
OfferWriter o = writerFactory.createOfferWriter(out);
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ public class ConstantsTest extends TestCase {
|
|||||||
ProtocolConstants.MAX_PACKET_LENGTH);
|
ProtocolConstants.MAX_PACKET_LENGTH);
|
||||||
BatchWriter b = new BatchWriterImpl(out, serial, writerFactory,
|
BatchWriter b = new BatchWriterImpl(out, serial, writerFactory,
|
||||||
crypto.getMessageDigest());
|
crypto.getMessageDigest());
|
||||||
assertTrue(b.writeMessage(message.getBytes()));
|
assertTrue(b.writeMessage(message.getSerialisedBytes()));
|
||||||
b.finish();
|
b.finish();
|
||||||
// Check the size of the serialised batch
|
// Check the size of the serialised batch
|
||||||
assertTrue(out.size() > UniqueId.LENGTH + Group.MAX_NAME_LENGTH +
|
assertTrue(out.size() > UniqueId.LENGTH + Group.MAX_NAME_LENGTH +
|
||||||
|
|||||||
Reference in New Issue
Block a user