mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 06:39:54 +01:00
Replaced PacketWriter methods with a constant.
This commit is contained in:
@@ -4,12 +4,6 @@ import java.io.IOException;
|
|||||||
|
|
||||||
public interface PacketWriter {
|
public interface PacketWriter {
|
||||||
|
|
||||||
int getMaxMessagesForAck(long capacity);
|
|
||||||
|
|
||||||
int getMaxMessagesForRequest(long capacity);
|
|
||||||
|
|
||||||
int getMaxMessagesForOffer(long capacity);
|
|
||||||
|
|
||||||
void writeAck(Ack a) throws IOException;
|
void writeAck(Ack a) throws IOException;
|
||||||
|
|
||||||
void writeMessage(byte[] raw) throws IOException;
|
void writeMessage(byte[] raw) throws IOException;
|
||||||
|
|||||||
@@ -24,4 +24,7 @@ public interface SyncConstants {
|
|||||||
|
|
||||||
/** The maximum length of a message body in bytes. */
|
/** The maximum length of a message body in bytes. */
|
||||||
int MAX_MESSAGE_BODY_LENGTH = MAX_MESSAGE_LENGTH - MESSAGE_HEADER_LENGTH;
|
int MAX_MESSAGE_BODY_LENGTH = MAX_MESSAGE_LENGTH - MESSAGE_HEADER_LENGTH;
|
||||||
|
|
||||||
|
/** The maximum number of message IDs in an ack, offer or request packet. */
|
||||||
|
int MAX_MESSAGE_IDS = MAX_PACKET_PAYLOAD_LENGTH / UniqueId.LENGTH;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import java.util.logging.Logger;
|
|||||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||||
import static java.util.logging.Level.INFO;
|
import static java.util.logging.Level.INFO;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
|
import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_IDS;
|
||||||
import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
|
import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -176,9 +177,8 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
|
|||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
if (interrupted) return;
|
if (interrupted) return;
|
||||||
int maxMessages = packetWriter.getMaxMessagesForAck(Long.MAX_VALUE);
|
|
||||||
try {
|
try {
|
||||||
Ack a = db.generateAck(contactId, maxMessages);
|
Ack a = db.generateAck(contactId, MAX_MESSAGE_IDS);
|
||||||
if (LOG.isLoggable(INFO))
|
if (LOG.isLoggable(INFO))
|
||||||
LOG.info("Generated ack: " + (a != null));
|
LOG.info("Generated ack: " + (a != null));
|
||||||
if (a != null) writerTasks.add(new WriteAck(a));
|
if (a != null) writerTasks.add(new WriteAck(a));
|
||||||
@@ -246,10 +246,9 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
|
|||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
if (interrupted) return;
|
if (interrupted) return;
|
||||||
int maxMessages = packetWriter.getMaxMessagesForOffer(
|
|
||||||
Long.MAX_VALUE);
|
|
||||||
try {
|
try {
|
||||||
Offer o = db.generateOffer(contactId, maxMessages, maxLatency);
|
Offer o = db.generateOffer(contactId, MAX_MESSAGE_IDS,
|
||||||
|
maxLatency);
|
||||||
if (LOG.isLoggable(INFO))
|
if (LOG.isLoggable(INFO))
|
||||||
LOG.info("Generated offer: " + (o != null));
|
LOG.info("Generated offer: " + (o != null));
|
||||||
if (o != null) writerTasks.add(new WriteOffer(o));
|
if (o != null) writerTasks.add(new WriteOffer(o));
|
||||||
@@ -282,10 +281,8 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
|
|||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
if (interrupted) return;
|
if (interrupted) return;
|
||||||
int maxMessages = packetWriter.getMaxMessagesForRequest(
|
|
||||||
Long.MAX_VALUE);
|
|
||||||
try {
|
try {
|
||||||
Request r = db.generateRequest(contactId, maxMessages);
|
Request r = db.generateRequest(contactId, MAX_MESSAGE_IDS);
|
||||||
if (LOG.isLoggable(INFO))
|
if (LOG.isLoggable(INFO))
|
||||||
LOG.info("Generated request: " + (r != null));
|
LOG.info("Generated request: " + (r != null));
|
||||||
if (r != null) writerTasks.add(new WriteRequest(r));
|
if (r != null) writerTasks.add(new WriteRequest(r));
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package org.briarproject.sync;
|
package org.briarproject.sync;
|
||||||
|
|
||||||
import org.briarproject.api.UniqueId;
|
|
||||||
import org.briarproject.api.sync.Ack;
|
import org.briarproject.api.sync.Ack;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
import org.briarproject.api.sync.Offer;
|
import org.briarproject.api.sync.Offer;
|
||||||
@@ -34,24 +33,6 @@ class PacketWriterImpl implements PacketWriter {
|
|||||||
payload = new ByteArrayOutputStream(MAX_PACKET_PAYLOAD_LENGTH);
|
payload = new ByteArrayOutputStream(MAX_PACKET_PAYLOAD_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxMessagesForAck(long capacity) {
|
|
||||||
return getMaxMessagesForPacket(capacity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMaxMessagesForRequest(long capacity) {
|
|
||||||
return getMaxMessagesForPacket(capacity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMaxMessagesForOffer(long capacity) {
|
|
||||||
return getMaxMessagesForPacket(capacity);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getMaxMessagesForPacket(long capacity) {
|
|
||||||
int payload = (int) Math.min(capacity - PACKET_HEADER_LENGTH,
|
|
||||||
MAX_PACKET_PAYLOAD_LENGTH);
|
|
||||||
return payload / UniqueId.LENGTH;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writePacket(byte packetType) throws IOException {
|
private void writePacket(byte packetType) throws IOException {
|
||||||
header[1] = packetType;
|
header[1] = packetType;
|
||||||
ByteUtils.writeUint16(payload.size(), header, 2);
|
ByteUtils.writeUint16(payload.size(), header, 2);
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
import static java.util.logging.Level.INFO;
|
import static java.util.logging.Level.INFO;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
|
import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_IDS;
|
||||||
import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
|
import static org.briarproject.api.sync.SyncConstants.MAX_PACKET_PAYLOAD_LENGTH;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -117,9 +118,8 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
|
|||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
if (interrupted) return;
|
if (interrupted) return;
|
||||||
int maxMessages = packetWriter.getMaxMessagesForAck(Long.MAX_VALUE);
|
|
||||||
try {
|
try {
|
||||||
Ack a = db.generateAck(contactId, maxMessages);
|
Ack a = db.generateAck(contactId, MAX_MESSAGE_IDS);
|
||||||
if (LOG.isLoggable(INFO))
|
if (LOG.isLoggable(INFO))
|
||||||
LOG.info("Generated ack: " + (a != null));
|
LOG.info("Generated ack: " + (a != null));
|
||||||
if (a == null) decrementOutstandingQueries();
|
if (a == null) decrementOutstandingQueries();
|
||||||
|
|||||||
@@ -21,13 +21,8 @@ import org.briarproject.api.identity.AuthorFactory;
|
|||||||
import org.briarproject.api.messaging.MessagingConstants;
|
import org.briarproject.api.messaging.MessagingConstants;
|
||||||
import org.briarproject.api.messaging.PrivateMessage;
|
import org.briarproject.api.messaging.PrivateMessage;
|
||||||
import org.briarproject.api.messaging.PrivateMessageFactory;
|
import org.briarproject.api.messaging.PrivateMessageFactory;
|
||||||
import org.briarproject.api.sync.Ack;
|
|
||||||
import org.briarproject.api.sync.GroupId;
|
import org.briarproject.api.sync.GroupId;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
import org.briarproject.api.sync.Offer;
|
|
||||||
import org.briarproject.api.sync.PacketWriter;
|
|
||||||
import org.briarproject.api.sync.PacketWriterFactory;
|
|
||||||
import org.briarproject.api.sync.Request;
|
|
||||||
import org.briarproject.contact.ContactModule;
|
import org.briarproject.contact.ContactModule;
|
||||||
import org.briarproject.crypto.CryptoModule;
|
import org.briarproject.crypto.CryptoModule;
|
||||||
import org.briarproject.data.DataModule;
|
import org.briarproject.data.DataModule;
|
||||||
@@ -38,9 +33,6 @@ import org.briarproject.identity.IdentityModule;
|
|||||||
import org.briarproject.messaging.MessagingModule;
|
import org.briarproject.messaging.MessagingModule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import static org.briarproject.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
|
import static org.briarproject.api.forum.ForumConstants.MAX_FORUM_POST_BODY_LENGTH;
|
||||||
@@ -59,7 +51,6 @@ public class ConstantsTest extends BriarTestCase {
|
|||||||
private final AuthorFactory authorFactory;
|
private final AuthorFactory authorFactory;
|
||||||
private final PrivateMessageFactory privateMessageFactory;
|
private final PrivateMessageFactory privateMessageFactory;
|
||||||
private final ForumPostFactory forumPostFactory;
|
private final ForumPostFactory forumPostFactory;
|
||||||
private final PacketWriterFactory packetWriterFactory;
|
|
||||||
|
|
||||||
public ConstantsTest() throws Exception {
|
public ConstantsTest() throws Exception {
|
||||||
Injector i = Guice.createInjector(new TestDatabaseModule(),
|
Injector i = Guice.createInjector(new TestDatabaseModule(),
|
||||||
@@ -71,7 +62,6 @@ public class ConstantsTest extends BriarTestCase {
|
|||||||
authorFactory = i.getInstance(AuthorFactory.class);
|
authorFactory = i.getInstance(AuthorFactory.class);
|
||||||
privateMessageFactory = i.getInstance(PrivateMessageFactory.class);
|
privateMessageFactory = i.getInstance(PrivateMessageFactory.class);
|
||||||
forumPostFactory = i.getInstance(ForumPostFactory.class);
|
forumPostFactory = i.getInstance(ForumPostFactory.class);
|
||||||
packetWriterFactory = i.getInstance(PacketWriterFactory.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -105,16 +95,6 @@ public class ConstantsTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testMessageIdsFitIntoLargeAck() throws Exception {
|
|
||||||
testMessageIdsFitIntoAck(MAX_PACKET_PAYLOAD_LENGTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testMessageIdsFitIntoSmallAck() throws Exception {
|
|
||||||
testMessageIdsFitIntoAck(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPrivateMessageFitsIntoPacket() throws Exception {
|
public void testPrivateMessageFitsIntoPacket() throws Exception {
|
||||||
// Create a maximum-length private message
|
// Create a maximum-length private message
|
||||||
@@ -159,63 +139,4 @@ public class ConstantsTest extends BriarTestCase {
|
|||||||
+ MAX_FORUM_POST_BODY_LENGTH);
|
+ MAX_FORUM_POST_BODY_LENGTH);
|
||||||
assertTrue(length <= MAX_PACKET_PAYLOAD_LENGTH);
|
assertTrue(length <= MAX_PACKET_PAYLOAD_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testMessageIdsFitIntoLargeOffer() throws Exception {
|
|
||||||
testMessageIdsFitIntoOffer(MAX_PACKET_PAYLOAD_LENGTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testMessageIdsFitIntoSmallOffer() throws Exception {
|
|
||||||
testMessageIdsFitIntoOffer(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testMessageIdsFitIntoLargeRequest() throws Exception {
|
|
||||||
testMessageIdsFitIntoRequest(MAX_PACKET_PAYLOAD_LENGTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testMessageIdsFitIntoSmallRequest() throws Exception {
|
|
||||||
testMessageIdsFitIntoRequest(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void testMessageIdsFitIntoAck(int length) throws Exception {
|
|
||||||
// Create an ack with as many message IDs as possible
|
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream(length);
|
|
||||||
PacketWriter writer = packetWriterFactory.createPacketWriter(out);
|
|
||||||
int maxMessages = writer.getMaxMessagesForAck(length);
|
|
||||||
Collection<MessageId> ids = new ArrayList<MessageId>();
|
|
||||||
for (int i = 0; i < maxMessages; i++)
|
|
||||||
ids.add(new MessageId(TestUtils.getRandomId()));
|
|
||||||
writer.writeAck(new Ack(ids));
|
|
||||||
// Check the size of the serialised ack
|
|
||||||
assertTrue(out.size() <= length);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void testMessageIdsFitIntoRequest(int length) throws Exception {
|
|
||||||
// Create a request with as many message IDs as possible
|
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream(length);
|
|
||||||
PacketWriter writer = packetWriterFactory.createPacketWriter(out);
|
|
||||||
int maxMessages = writer.getMaxMessagesForRequest(length);
|
|
||||||
Collection<MessageId> ids = new ArrayList<MessageId>();
|
|
||||||
for (int i = 0; i < maxMessages; i++)
|
|
||||||
ids.add(new MessageId(TestUtils.getRandomId()));
|
|
||||||
writer.writeRequest(new Request(ids));
|
|
||||||
// Check the size of the serialised request
|
|
||||||
assertTrue(out.size() <= length);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void testMessageIdsFitIntoOffer(int length) throws Exception {
|
|
||||||
// Create an offer with as many message IDs as possible
|
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream(length);
|
|
||||||
PacketWriter writer = packetWriterFactory.createPacketWriter(out);
|
|
||||||
int maxMessages = writer.getMaxMessagesForOffer(length);
|
|
||||||
Collection<MessageId> ids = new ArrayList<MessageId>();
|
|
||||||
for (int i = 0; i < maxMessages; i++)
|
|
||||||
ids.add(new MessageId(TestUtils.getRandomId()));
|
|
||||||
writer.writeOffer(new Offer(ids));
|
|
||||||
// Check the size of the serialised offer
|
|
||||||
assertTrue(out.size() <= length);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class SimplexOutgoingSessionTest extends BriarTestCase {
|
import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_IDS;
|
||||||
|
|
||||||
private static final int MAX_MESSAGES_PER_ACK = 10;
|
public class SimplexOutgoingSessionTest extends BriarTestCase {
|
||||||
|
|
||||||
private final Mockery context;
|
private final Mockery context;
|
||||||
private final DatabaseComponent db;
|
private final DatabaseComponent db;
|
||||||
@@ -53,9 +53,7 @@ public class SimplexOutgoingSessionTest extends BriarTestCase {
|
|||||||
// Add listener
|
// Add listener
|
||||||
oneOf(eventBus).addListener(session);
|
oneOf(eventBus).addListener(session);
|
||||||
// No acks to send
|
// No acks to send
|
||||||
oneOf(packetWriter).getMaxMessagesForAck(with(any(long.class)));
|
oneOf(db).generateAck(contactId, MAX_MESSAGE_IDS);
|
||||||
will(returnValue(MAX_MESSAGES_PER_ACK));
|
|
||||||
oneOf(db).generateAck(contactId, MAX_MESSAGES_PER_ACK);
|
|
||||||
will(returnValue(null));
|
will(returnValue(null));
|
||||||
// No messages to send
|
// No messages to send
|
||||||
oneOf(db).generateBatch(with(contactId), with(any(int.class)),
|
oneOf(db).generateBatch(with(contactId), with(any(int.class)),
|
||||||
@@ -81,15 +79,11 @@ public class SimplexOutgoingSessionTest extends BriarTestCase {
|
|||||||
// Add listener
|
// Add listener
|
||||||
oneOf(eventBus).addListener(session);
|
oneOf(eventBus).addListener(session);
|
||||||
// One ack to send
|
// One ack to send
|
||||||
oneOf(packetWriter).getMaxMessagesForAck(with(any(long.class)));
|
oneOf(db).generateAck(contactId, MAX_MESSAGE_IDS);
|
||||||
will(returnValue(MAX_MESSAGES_PER_ACK));
|
|
||||||
oneOf(db).generateAck(contactId, MAX_MESSAGES_PER_ACK);
|
|
||||||
will(returnValue(ack));
|
will(returnValue(ack));
|
||||||
oneOf(packetWriter).writeAck(ack);
|
oneOf(packetWriter).writeAck(ack);
|
||||||
// No more acks
|
// No more acks
|
||||||
oneOf(packetWriter).getMaxMessagesForAck(with(any(long.class)));
|
oneOf(db).generateAck(contactId, MAX_MESSAGE_IDS);
|
||||||
will(returnValue(MAX_MESSAGES_PER_ACK));
|
|
||||||
oneOf(db).generateAck(contactId, MAX_MESSAGES_PER_ACK);
|
|
||||||
will(returnValue(null));
|
will(returnValue(null));
|
||||||
// One message to send
|
// One message to send
|
||||||
oneOf(db).generateBatch(with(contactId), with(any(int.class)),
|
oneOf(db).generateBatch(with(contactId), with(any(int.class)),
|
||||||
|
|||||||
Reference in New Issue
Block a user