mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-21 15:19:53 +01:00
Minor refactoring.
This commit is contained in:
@@ -26,8 +26,8 @@ import net.sf.briar.api.protocol.writers.AckWriter;
|
|||||||
import net.sf.briar.api.protocol.writers.BatchWriter;
|
import net.sf.briar.api.protocol.writers.BatchWriter;
|
||||||
import net.sf.briar.api.protocol.writers.OfferWriter;
|
import net.sf.briar.api.protocol.writers.OfferWriter;
|
||||||
import net.sf.briar.api.protocol.writers.RequestWriter;
|
import net.sf.briar.api.protocol.writers.RequestWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.transport.ConnectionWindow;
|
import net.sf.briar.api.transport.ConnectionWindow;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -102,12 +102,12 @@ public interface DatabaseComponent {
|
|||||||
throws DbException, IOException;
|
throws DbException, IOException;
|
||||||
|
|
||||||
/** Generates a subscription update for the given contact. */
|
/** Generates a subscription update for the given contact. */
|
||||||
void generateSubscriptionUpdate(ContactId c, SubscriptionWriter s) throws
|
void generateSubscriptionUpdate(ContactId c, SubscriptionUpdateWriter s)
|
||||||
DbException, IOException;
|
throws DbException, IOException;
|
||||||
|
|
||||||
/** Generates a transport update for the given contact. */
|
/** Generates a transport update for the given contact. */
|
||||||
void generateTransportUpdate(ContactId c, TransportWriter t) throws
|
void generateTransportUpdate(ContactId c, TransportUpdateWriter t)
|
||||||
DbException, IOException;
|
throws DbException, IOException;
|
||||||
|
|
||||||
/** Returns the configuration for the given transport. */
|
/** Returns the configuration for the given transport. */
|
||||||
TransportConfig getConfig(TransportId t) throws DbException;
|
TransportConfig getConfig(TransportId t) throws DbException;
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
package net.sf.briar.api.protocol.writers;
|
package net.sf.briar.api.protocol;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.GeneralSecurityException;
|
import java.security.GeneralSecurityException;
|
||||||
import java.security.PrivateKey;
|
import java.security.PrivateKey;
|
||||||
|
|
||||||
import net.sf.briar.api.protocol.Author;
|
|
||||||
import net.sf.briar.api.protocol.Group;
|
|
||||||
import net.sf.briar.api.protocol.Message;
|
|
||||||
import net.sf.briar.api.protocol.MessageId;
|
|
||||||
|
|
||||||
public interface MessageEncoder {
|
public interface MessageEncoder {
|
||||||
|
|
||||||
@@ -12,10 +12,10 @@ public interface ProtocolConstants {
|
|||||||
static final int MAX_PACKET_LENGTH =
|
static final int MAX_PACKET_LENGTH =
|
||||||
TransportConstants.MIN_CONNECTION_LENGTH - 1024;
|
TransportConstants.MIN_CONNECTION_LENGTH - 1024;
|
||||||
|
|
||||||
/** The maximum number of transport plugins a node may support. */
|
/** The maximum number of transports a node may support. */
|
||||||
static final int MAX_TRANSPORTS = 50;
|
static final int MAX_TRANSPORTS = 50;
|
||||||
|
|
||||||
/** The maximum number of properties per transport plugin. */
|
/** The maximum number of properties per transport. */
|
||||||
static final int MAX_PROPERTIES_PER_TRANSPORT = 100;
|
static final int MAX_PROPERTIES_PER_TRANSPORT = 100;
|
||||||
|
|
||||||
/** The maximum length of a property's key or value in UTF-8 bytes. */
|
/** The maximum length of a property's key or value in UTF-8 bytes. */
|
||||||
@@ -27,7 +27,7 @@ public interface ProtocolConstants {
|
|||||||
/** The maximum length of a group's name in UTF-8 bytes. */
|
/** The maximum length of a group's name in UTF-8 bytes. */
|
||||||
static final int MAX_GROUP_NAME_LENGTH = 50;
|
static final int MAX_GROUP_NAME_LENGTH = 50;
|
||||||
|
|
||||||
/** The maximum length of a serialised public key in bytes. */
|
/** The maximum length of a public key in bytes. */
|
||||||
static final int MAX_PUBLIC_KEY_LENGTH = 100;
|
static final int MAX_PUBLIC_KEY_LENGTH = 100;
|
||||||
|
|
||||||
/** The maximum length of an author's name in UTF-8 bytes. */
|
/** The maximum length of an author's name in UTF-8 bytes. */
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
package net.sf.briar.api.protocol.writers;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import net.sf.briar.api.protocol.Author;
|
|
||||||
import net.sf.briar.api.serial.Writer;
|
|
||||||
|
|
||||||
public interface AuthorWriter {
|
|
||||||
|
|
||||||
void writeAuthor(Writer w, Author a) throws IOException;
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package net.sf.briar.api.protocol.writers;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import net.sf.briar.api.protocol.Group;
|
|
||||||
import net.sf.briar.api.serial.Writer;
|
|
||||||
|
|
||||||
public interface GroupWriter {
|
|
||||||
|
|
||||||
void writeGroup(Writer w, Group g) throws IOException;
|
|
||||||
}
|
|
||||||
@@ -12,7 +12,7 @@ public interface ProtocolWriterFactory {
|
|||||||
|
|
||||||
RequestWriter createRequestWriter(OutputStream out);
|
RequestWriter createRequestWriter(OutputStream out);
|
||||||
|
|
||||||
SubscriptionWriter createSubscriptionWriter(OutputStream out);
|
SubscriptionUpdateWriter createSubscriptionUpdateWriter(OutputStream out);
|
||||||
|
|
||||||
TransportWriter createTransportWriter(OutputStream out);
|
TransportUpdateWriter createTransportUpdateWriter(OutputStream out);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import java.util.Map;
|
|||||||
import net.sf.briar.api.protocol.Group;
|
import net.sf.briar.api.protocol.Group;
|
||||||
|
|
||||||
/** An interface for creating a subscription update. */
|
/** An interface for creating a subscription update. */
|
||||||
public interface SubscriptionWriter {
|
public interface SubscriptionUpdateWriter {
|
||||||
|
|
||||||
/** Writes the contents of the update. */
|
/** Writes the contents of the update. */
|
||||||
void writeSubscriptions(Map<Group, Long> subs, long timestamp)
|
void writeSubscriptions(Map<Group, Long> subs, long timestamp)
|
||||||
@@ -6,7 +6,7 @@ import java.util.Collection;
|
|||||||
import net.sf.briar.api.protocol.Transport;
|
import net.sf.briar.api.protocol.Transport;
|
||||||
|
|
||||||
/** An interface for creating a transport update. */
|
/** An interface for creating a transport update. */
|
||||||
public interface TransportWriter {
|
public interface TransportUpdateWriter {
|
||||||
|
|
||||||
/** Writes the contents of the update. */
|
/** Writes the contents of the update. */
|
||||||
void writeTransports(Collection<Transport> transports, long timestamp)
|
void writeTransports(Collection<Transport> transports, long timestamp)
|
||||||
@@ -58,8 +58,8 @@ import net.sf.briar.api.protocol.writers.AckWriter;
|
|||||||
import net.sf.briar.api.protocol.writers.BatchWriter;
|
import net.sf.briar.api.protocol.writers.BatchWriter;
|
||||||
import net.sf.briar.api.protocol.writers.OfferWriter;
|
import net.sf.briar.api.protocol.writers.OfferWriter;
|
||||||
import net.sf.briar.api.protocol.writers.RequestWriter;
|
import net.sf.briar.api.protocol.writers.RequestWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.transport.ConnectionWindow;
|
import net.sf.briar.api.transport.ConnectionWindow;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -602,8 +602,8 @@ DatabaseCleaner.Callback {
|
|||||||
return sent;
|
return sent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateSubscriptionUpdate(ContactId c, SubscriptionWriter s)
|
public void generateSubscriptionUpdate(ContactId c,
|
||||||
throws DbException, IOException {
|
SubscriptionUpdateWriter s) throws DbException, IOException {
|
||||||
Map<Group, Long> subs = null;
|
Map<Group, Long> subs = null;
|
||||||
long timestamp = 0L;
|
long timestamp = 0L;
|
||||||
contactLock.readLock().lock();
|
contactLock.readLock().lock();
|
||||||
@@ -644,7 +644,7 @@ DatabaseCleaner.Callback {
|
|||||||
return now - sent >= DatabaseConstants.MAX_UPDATE_INTERVAL;
|
return now - sent >= DatabaseConstants.MAX_UPDATE_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateTransportUpdate(ContactId c, TransportWriter t)
|
public void generateTransportUpdate(ContactId c, TransportUpdateWriter t)
|
||||||
throws DbException, IOException {
|
throws DbException, IOException {
|
||||||
Collection<Transport> transports = null;
|
Collection<Transport> transports = null;
|
||||||
long timestamp = 0L;
|
long timestamp = 0L;
|
||||||
|
|||||||
@@ -14,12 +14,10 @@ import net.sf.briar.api.protocol.AuthorId;
|
|||||||
import net.sf.briar.api.protocol.Group;
|
import net.sf.briar.api.protocol.Group;
|
||||||
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;
|
||||||
|
import net.sf.briar.api.protocol.MessageEncoder;
|
||||||
import net.sf.briar.api.protocol.MessageId;
|
import net.sf.briar.api.protocol.MessageId;
|
||||||
import net.sf.briar.api.protocol.ProtocolConstants;
|
import net.sf.briar.api.protocol.ProtocolConstants;
|
||||||
import net.sf.briar.api.protocol.Types;
|
import net.sf.briar.api.protocol.Types;
|
||||||
import net.sf.briar.api.protocol.writers.AuthorWriter;
|
|
||||||
import net.sf.briar.api.protocol.writers.GroupWriter;
|
|
||||||
import net.sf.briar.api.protocol.writers.MessageEncoder;
|
|
||||||
import net.sf.briar.api.serial.Consumer;
|
import net.sf.briar.api.serial.Consumer;
|
||||||
import net.sf.briar.api.serial.Writer;
|
import net.sf.briar.api.serial.Writer;
|
||||||
import net.sf.briar.api.serial.WriterFactory;
|
import net.sf.briar.api.serial.WriterFactory;
|
||||||
@@ -32,19 +30,14 @@ class MessageEncoderImpl implements MessageEncoder {
|
|||||||
private final SecureRandom random;
|
private final SecureRandom random;
|
||||||
private final MessageDigest messageDigest;
|
private final MessageDigest messageDigest;
|
||||||
private final WriterFactory writerFactory;
|
private final WriterFactory writerFactory;
|
||||||
private final AuthorWriter authorWriter;
|
|
||||||
private final GroupWriter groupWriter;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
MessageEncoderImpl(CryptoComponent crypto, WriterFactory writerFactory,
|
MessageEncoderImpl(CryptoComponent crypto, WriterFactory writerFactory) {
|
||||||
AuthorWriter authorWriter, GroupWriter groupWriter) {
|
|
||||||
authorSignature = crypto.getSignature();
|
authorSignature = crypto.getSignature();
|
||||||
groupSignature = crypto.getSignature();
|
groupSignature = crypto.getSignature();
|
||||||
random = crypto.getSecureRandom();
|
random = crypto.getSecureRandom();
|
||||||
messageDigest = crypto.getMessageDigest();
|
messageDigest = crypto.getMessageDigest();
|
||||||
this.writerFactory = writerFactory;
|
this.writerFactory = writerFactory;
|
||||||
this.authorWriter = authorWriter;
|
|
||||||
this.groupWriter = groupWriter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Message encodeMessage(MessageId parent, String subject, byte[] body)
|
public Message encodeMessage(MessageId parent, String subject, byte[] body)
|
||||||
@@ -111,9 +104,9 @@ class MessageEncoderImpl implements MessageEncoder {
|
|||||||
if(parent == null) w.writeNull();
|
if(parent == null) w.writeNull();
|
||||||
else w.writeBytes(parent.getBytes());
|
else w.writeBytes(parent.getBytes());
|
||||||
if(group == null) w.writeNull();
|
if(group == null) w.writeNull();
|
||||||
else groupWriter.writeGroup(w, group);
|
else writeGroup(w, group);
|
||||||
if(author == null) w.writeNull();
|
if(author == null) w.writeNull();
|
||||||
else authorWriter.writeAuthor(w, author);
|
else writeAuthor(w, author);
|
||||||
w.writeString(subject);
|
w.writeString(subject);
|
||||||
long timestamp = System.currentTimeMillis();
|
long timestamp = System.currentTimeMillis();
|
||||||
w.writeInt64(timestamp);
|
w.writeInt64(timestamp);
|
||||||
@@ -151,4 +144,18 @@ class MessageEncoderImpl implements MessageEncoder {
|
|||||||
return new MessageImpl(id, parent, groupId, authorId, subject,
|
return new MessageImpl(id, parent, groupId, authorId, subject,
|
||||||
timestamp, raw, bodyStart, body.length);
|
timestamp, raw, bodyStart, body.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void writeGroup(Writer w, Group g) throws IOException {
|
||||||
|
w.writeUserDefinedId(Types.GROUP);
|
||||||
|
w.writeString(g.getName());
|
||||||
|
byte[] publicKey = g.getPublicKey();
|
||||||
|
if(publicKey == null) w.writeNull();
|
||||||
|
else w.writeBytes(publicKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeAuthor(Writer w, Author a) throws IOException {
|
||||||
|
w.writeUserDefinedId(Types.AUTHOR);
|
||||||
|
w.writeString(a.getName());
|
||||||
|
w.writeBytes(a.getPublicKey());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ import net.sf.briar.api.protocol.BatchId;
|
|||||||
import net.sf.briar.api.protocol.Group;
|
import net.sf.briar.api.protocol.Group;
|
||||||
import net.sf.briar.api.protocol.GroupFactory;
|
import net.sf.briar.api.protocol.GroupFactory;
|
||||||
import net.sf.briar.api.protocol.Message;
|
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.MessageId;
|
||||||
import net.sf.briar.api.protocol.Offer;
|
import net.sf.briar.api.protocol.Offer;
|
||||||
import net.sf.briar.api.protocol.ProtocolReaderFactory;
|
import net.sf.briar.api.protocol.ProtocolReaderFactory;
|
||||||
import net.sf.briar.api.protocol.Request;
|
import net.sf.briar.api.protocol.Request;
|
||||||
import net.sf.briar.api.protocol.SubscriptionUpdate;
|
import net.sf.briar.api.protocol.SubscriptionUpdate;
|
||||||
import net.sf.briar.api.protocol.TransportUpdate;
|
import net.sf.briar.api.protocol.TransportUpdate;
|
||||||
import net.sf.briar.api.protocol.writers.MessageEncoder;
|
|
||||||
import net.sf.briar.api.serial.ObjectReader;
|
import net.sf.briar.api.serial.ObjectReader;
|
||||||
|
|
||||||
import com.google.inject.AbstractModule;
|
import com.google.inject.AbstractModule;
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
package net.sf.briar.protocol.writers;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import net.sf.briar.api.protocol.Author;
|
|
||||||
import net.sf.briar.api.protocol.Types;
|
|
||||||
import net.sf.briar.api.protocol.writers.AuthorWriter;
|
|
||||||
import net.sf.briar.api.serial.Writer;
|
|
||||||
|
|
||||||
class AuthorWriterImpl implements AuthorWriter {
|
|
||||||
|
|
||||||
public void writeAuthor(Writer w, Author a) throws IOException {
|
|
||||||
w.writeUserDefinedId(Types.AUTHOR);
|
|
||||||
w.writeString(a.getName());
|
|
||||||
w.writeBytes(a.getPublicKey());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package net.sf.briar.protocol.writers;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import net.sf.briar.api.protocol.Group;
|
|
||||||
import net.sf.briar.api.protocol.Types;
|
|
||||||
import net.sf.briar.api.protocol.writers.GroupWriter;
|
|
||||||
import net.sf.briar.api.serial.Writer;
|
|
||||||
|
|
||||||
class GroupWriterImpl implements GroupWriter {
|
|
||||||
|
|
||||||
public void writeGroup(Writer w, Group g) throws IOException {
|
|
||||||
w.writeUserDefinedId(Types.GROUP);
|
|
||||||
w.writeString(g.getName());
|
|
||||||
byte[] publicKey = g.getPublicKey();
|
|
||||||
if(publicKey == null) w.writeNull();
|
|
||||||
else w.writeBytes(publicKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -9,8 +9,8 @@ import net.sf.briar.api.protocol.writers.BatchWriter;
|
|||||||
import net.sf.briar.api.protocol.writers.OfferWriter;
|
import net.sf.briar.api.protocol.writers.OfferWriter;
|
||||||
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
||||||
import net.sf.briar.api.protocol.writers.RequestWriter;
|
import net.sf.briar.api.protocol.writers.RequestWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.serial.SerialComponent;
|
import net.sf.briar.api.serial.SerialComponent;
|
||||||
import net.sf.briar.api.serial.WriterFactory;
|
import net.sf.briar.api.serial.WriterFactory;
|
||||||
|
|
||||||
@@ -46,11 +46,12 @@ class ProtocolWriterFactoryImpl implements ProtocolWriterFactory {
|
|||||||
return new RequestWriterImpl(out, writerFactory);
|
return new RequestWriterImpl(out, writerFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubscriptionWriter createSubscriptionWriter(OutputStream out) {
|
public SubscriptionUpdateWriter createSubscriptionUpdateWriter(
|
||||||
return new SubscriptionWriterImpl(out, writerFactory);
|
OutputStream out) {
|
||||||
|
return new SubscriptionUpdateWriterImpl(out, writerFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransportWriter createTransportWriter(OutputStream out) {
|
public TransportUpdateWriter createTransportUpdateWriter(OutputStream out) {
|
||||||
return new TransportWriterImpl(out, writerFactory);
|
return new TransportUpdateWriterImpl(out, writerFactory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package net.sf.briar.protocol.writers;
|
package net.sf.briar.protocol.writers;
|
||||||
|
|
||||||
import net.sf.briar.api.protocol.writers.AuthorWriter;
|
|
||||||
import net.sf.briar.api.protocol.writers.GroupWriter;
|
|
||||||
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
||||||
|
|
||||||
import com.google.inject.AbstractModule;
|
import com.google.inject.AbstractModule;
|
||||||
@@ -10,8 +8,6 @@ public class ProtocolWritersModule extends AbstractModule {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(AuthorWriter.class).to(AuthorWriterImpl.class);
|
|
||||||
bind(GroupWriter.class).to(GroupWriterImpl.class);
|
|
||||||
bind(ProtocolWriterFactory.class).to(ProtocolWriterFactoryImpl.class);
|
bind(ProtocolWriterFactory.class).to(ProtocolWriterFactoryImpl.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,21 +7,19 @@ import java.util.Map.Entry;
|
|||||||
|
|
||||||
import net.sf.briar.api.protocol.Group;
|
import net.sf.briar.api.protocol.Group;
|
||||||
import net.sf.briar.api.protocol.Types;
|
import net.sf.briar.api.protocol.Types;
|
||||||
import net.sf.briar.api.protocol.writers.GroupWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
|
||||||
import net.sf.briar.api.serial.Writer;
|
import net.sf.briar.api.serial.Writer;
|
||||||
import net.sf.briar.api.serial.WriterFactory;
|
import net.sf.briar.api.serial.WriterFactory;
|
||||||
|
|
||||||
class SubscriptionWriterImpl implements SubscriptionWriter {
|
class SubscriptionUpdateWriterImpl implements SubscriptionUpdateWriter {
|
||||||
|
|
||||||
private final OutputStream out;
|
private final OutputStream out;
|
||||||
private final Writer w;
|
private final Writer w;
|
||||||
private final GroupWriter groupWriter;
|
|
||||||
|
|
||||||
SubscriptionWriterImpl(OutputStream out, WriterFactory writerFactory) {
|
SubscriptionUpdateWriterImpl(OutputStream out,
|
||||||
|
WriterFactory writerFactory) {
|
||||||
this.out = out;
|
this.out = out;
|
||||||
w = writerFactory.createWriter(out);
|
w = writerFactory.createWriter(out);
|
||||||
groupWriter = new GroupWriterImpl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeSubscriptions(Map<Group, Long> subs, long timestamp)
|
public void writeSubscriptions(Map<Group, Long> subs, long timestamp)
|
||||||
@@ -29,11 +27,19 @@ class SubscriptionWriterImpl implements SubscriptionWriter {
|
|||||||
w.writeUserDefinedId(Types.SUBSCRIPTION_UPDATE);
|
w.writeUserDefinedId(Types.SUBSCRIPTION_UPDATE);
|
||||||
w.writeMapStart();
|
w.writeMapStart();
|
||||||
for(Entry<Group, Long> e : subs.entrySet()) {
|
for(Entry<Group, Long> e : subs.entrySet()) {
|
||||||
groupWriter.writeGroup(w, e.getKey());
|
writeGroup(w, e.getKey());
|
||||||
w.writeInt64(e.getValue());
|
w.writeInt64(e.getValue());
|
||||||
}
|
}
|
||||||
w.writeMapEnd();
|
w.writeMapEnd();
|
||||||
w.writeInt64(timestamp);
|
w.writeInt64(timestamp);
|
||||||
out.flush();
|
out.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void writeGroup(Writer w, Group g) throws IOException {
|
||||||
|
w.writeUserDefinedId(Types.GROUP);
|
||||||
|
w.writeString(g.getName());
|
||||||
|
byte[] publicKey = g.getPublicKey();
|
||||||
|
if(publicKey == null) w.writeNull();
|
||||||
|
else w.writeBytes(publicKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -6,16 +6,16 @@ import java.util.Collection;
|
|||||||
|
|
||||||
import net.sf.briar.api.protocol.Transport;
|
import net.sf.briar.api.protocol.Transport;
|
||||||
import net.sf.briar.api.protocol.Types;
|
import net.sf.briar.api.protocol.Types;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.serial.Writer;
|
import net.sf.briar.api.serial.Writer;
|
||||||
import net.sf.briar.api.serial.WriterFactory;
|
import net.sf.briar.api.serial.WriterFactory;
|
||||||
|
|
||||||
class TransportWriterImpl implements TransportWriter {
|
class TransportUpdateWriterImpl implements TransportUpdateWriter {
|
||||||
|
|
||||||
private final OutputStream out;
|
private final OutputStream out;
|
||||||
private final Writer w;
|
private final Writer w;
|
||||||
|
|
||||||
TransportWriterImpl(OutputStream out, WriterFactory writerFactory) {
|
TransportUpdateWriterImpl(OutputStream out, WriterFactory writerFactory) {
|
||||||
this.out = out;
|
this.out = out;
|
||||||
w = writerFactory.createWriter(out);
|
w = writerFactory.createWriter(out);
|
||||||
}
|
}
|
||||||
@@ -14,8 +14,8 @@ import net.sf.briar.api.protocol.TransportIndex;
|
|||||||
import net.sf.briar.api.protocol.writers.AckWriter;
|
import net.sf.briar.api.protocol.writers.AckWriter;
|
||||||
import net.sf.briar.api.protocol.writers.BatchWriter;
|
import net.sf.briar.api.protocol.writers.BatchWriter;
|
||||||
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.transport.BatchTransportWriter;
|
import net.sf.briar.api.transport.BatchTransportWriter;
|
||||||
import net.sf.briar.api.transport.ConnectionWriter;
|
import net.sf.briar.api.transport.ConnectionWriter;
|
||||||
import net.sf.briar.api.transport.ConnectionWriterFactory;
|
import net.sf.briar.api.transport.ConnectionWriterFactory;
|
||||||
@@ -56,13 +56,14 @@ class OutgoingBatchConnection {
|
|||||||
long capacity = conn.getRemainingCapacity();
|
long capacity = conn.getRemainingCapacity();
|
||||||
if(capacity < MAX_PACKET_LENGTH) throw new IOException();
|
if(capacity < MAX_PACKET_LENGTH) throw new IOException();
|
||||||
// Write a transport update
|
// Write a transport update
|
||||||
TransportWriter t = protoFactory.createTransportWriter(out);
|
TransportUpdateWriter t =
|
||||||
|
protoFactory.createTransportUpdateWriter(out);
|
||||||
db.generateTransportUpdate(contactId, t);
|
db.generateTransportUpdate(contactId, t);
|
||||||
// If there's space, write a subscription update
|
// If there's space, write a subscription update
|
||||||
capacity = conn.getRemainingCapacity();
|
capacity = conn.getRemainingCapacity();
|
||||||
if(capacity >= MAX_PACKET_LENGTH) {
|
if(capacity >= MAX_PACKET_LENGTH) {
|
||||||
SubscriptionWriter s =
|
SubscriptionUpdateWriter s =
|
||||||
protoFactory.createSubscriptionWriter(out);
|
protoFactory.createSubscriptionUpdateWriter(out);
|
||||||
db.generateSubscriptionUpdate(contactId, s);
|
db.generateSubscriptionUpdate(contactId, s);
|
||||||
}
|
}
|
||||||
// Write acks until you can't write acks no more
|
// Write acks until you can't write acks no more
|
||||||
|
|||||||
@@ -36,8 +36,8 @@ import net.sf.briar.api.protocol.writers.BatchWriter;
|
|||||||
import net.sf.briar.api.protocol.writers.OfferWriter;
|
import net.sf.briar.api.protocol.writers.OfferWriter;
|
||||||
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
||||||
import net.sf.briar.api.protocol.writers.RequestWriter;
|
import net.sf.briar.api.protocol.writers.RequestWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.transport.ConnectionReader;
|
import net.sf.briar.api.transport.ConnectionReader;
|
||||||
import net.sf.briar.api.transport.ConnectionReaderFactory;
|
import net.sf.briar.api.transport.ConnectionReaderFactory;
|
||||||
import net.sf.briar.api.transport.ConnectionWriter;
|
import net.sf.briar.api.transport.ConnectionWriter;
|
||||||
@@ -194,13 +194,13 @@ abstract class StreamConnection implements DatabaseListener {
|
|||||||
OfferWriter offerWriter = protoWriterFactory.createOfferWriter(out);
|
OfferWriter offerWriter = protoWriterFactory.createOfferWriter(out);
|
||||||
RequestWriter requestWriter =
|
RequestWriter requestWriter =
|
||||||
protoWriterFactory.createRequestWriter(out);
|
protoWriterFactory.createRequestWriter(out);
|
||||||
SubscriptionWriter subscriptionWriter =
|
SubscriptionUpdateWriter subscriptionUpdateWriter =
|
||||||
protoWriterFactory.createSubscriptionWriter(out);
|
protoWriterFactory.createSubscriptionUpdateWriter(out);
|
||||||
TransportWriter transportWriter =
|
TransportUpdateWriter transportUpdateWriter =
|
||||||
protoWriterFactory.createTransportWriter(out);
|
protoWriterFactory.createTransportUpdateWriter(out);
|
||||||
// Send the initial packets: transports, subs, any waiting acks
|
// Send the initial packets: transports, subs, any waiting acks
|
||||||
sendTransports(transportWriter);
|
sendTransportUpdate(transportUpdateWriter);
|
||||||
sendSubscriptions(subscriptionWriter);
|
sendSubscriptionUpdate(subscriptionUpdateWriter);
|
||||||
sendAcks(ackWriter);
|
sendAcks(ackWriter);
|
||||||
State state = State.SEND_OFFER;
|
State state = State.SEND_OFFER;
|
||||||
// Main loop
|
// Main loop
|
||||||
@@ -234,10 +234,10 @@ abstract class StreamConnection implements DatabaseListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
|
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
|
||||||
sendTransports(transportWriter);
|
sendTransportUpdate(transportUpdateWriter);
|
||||||
}
|
}
|
||||||
if((flags & Flags.SUBSCRIPTIONS_UPDATED) != 0) {
|
if((flags & Flags.SUBSCRIPTIONS_UPDATED) != 0) {
|
||||||
sendSubscriptions(subscriptionWriter);
|
sendSubscriptionUpdate(subscriptionUpdateWriter);
|
||||||
}
|
}
|
||||||
if((flags & Flags.BATCH_RECEIVED) != 0) {
|
if((flags & Flags.BATCH_RECEIVED) != 0) {
|
||||||
sendAcks(ackWriter);
|
sendAcks(ackWriter);
|
||||||
@@ -274,10 +274,10 @@ abstract class StreamConnection implements DatabaseListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
|
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
|
||||||
sendTransports(transportWriter);
|
sendTransportUpdate(transportUpdateWriter);
|
||||||
}
|
}
|
||||||
if((flags & Flags.SUBSCRIPTIONS_UPDATED) != 0) {
|
if((flags & Flags.SUBSCRIPTIONS_UPDATED) != 0) {
|
||||||
sendSubscriptions(subscriptionWriter);
|
sendSubscriptionUpdate(subscriptionUpdateWriter);
|
||||||
}
|
}
|
||||||
if((flags & Flags.BATCH_RECEIVED) != 0) {
|
if((flags & Flags.BATCH_RECEIVED) != 0) {
|
||||||
sendAcks(ackWriter);
|
sendAcks(ackWriter);
|
||||||
@@ -305,10 +305,10 @@ abstract class StreamConnection implements DatabaseListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
|
if((flags & Flags.TRANSPORTS_UPDATED) != 0) {
|
||||||
sendTransports(transportWriter);
|
sendTransportUpdate(transportUpdateWriter);
|
||||||
}
|
}
|
||||||
if((flags & Flags.SUBSCRIPTIONS_UPDATED) != 0) {
|
if((flags & Flags.SUBSCRIPTIONS_UPDATED) != 0) {
|
||||||
sendSubscriptions(subscriptionWriter);
|
sendSubscriptionUpdate(subscriptionUpdateWriter);
|
||||||
}
|
}
|
||||||
if((flags & Flags.BATCH_RECEIVED) != 0) {
|
if((flags & Flags.BATCH_RECEIVED) != 0) {
|
||||||
sendAcks(ackWriter);
|
sendAcks(ackWriter);
|
||||||
@@ -388,13 +388,13 @@ abstract class StreamConnection implements DatabaseListener {
|
|||||||
db.receiveOffer(contactId, o, r);
|
db.receiveOffer(contactId, o, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendTransports(TransportWriter t) throws DbException,
|
private void sendTransportUpdate(TransportUpdateWriter t)
|
||||||
IOException {
|
throws DbException, IOException {
|
||||||
db.generateTransportUpdate(contactId, t);
|
db.generateTransportUpdate(contactId, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendSubscriptions(SubscriptionWriter s) throws DbException,
|
private void sendSubscriptionUpdate(SubscriptionUpdateWriter s)
|
||||||
IOException {
|
throws DbException, IOException {
|
||||||
db.generateSubscriptionUpdate(contactId, s);
|
db.generateSubscriptionUpdate(contactId, s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import net.sf.briar.api.protocol.BatchId;
|
|||||||
import net.sf.briar.api.protocol.Group;
|
import net.sf.briar.api.protocol.Group;
|
||||||
import net.sf.briar.api.protocol.GroupFactory;
|
import net.sf.briar.api.protocol.GroupFactory;
|
||||||
import net.sf.briar.api.protocol.Message;
|
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.MessageId;
|
||||||
import net.sf.briar.api.protocol.Offer;
|
import net.sf.briar.api.protocol.Offer;
|
||||||
import net.sf.briar.api.protocol.ProtocolReader;
|
import net.sf.briar.api.protocol.ProtocolReader;
|
||||||
@@ -37,12 +38,11 @@ import net.sf.briar.api.protocol.TransportUpdate;
|
|||||||
import net.sf.briar.api.protocol.UniqueId;
|
import net.sf.briar.api.protocol.UniqueId;
|
||||||
import net.sf.briar.api.protocol.writers.AckWriter;
|
import net.sf.briar.api.protocol.writers.AckWriter;
|
||||||
import net.sf.briar.api.protocol.writers.BatchWriter;
|
import net.sf.briar.api.protocol.writers.BatchWriter;
|
||||||
import net.sf.briar.api.protocol.writers.MessageEncoder;
|
|
||||||
import net.sf.briar.api.protocol.writers.OfferWriter;
|
import net.sf.briar.api.protocol.writers.OfferWriter;
|
||||||
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
||||||
import net.sf.briar.api.protocol.writers.RequestWriter;
|
import net.sf.briar.api.protocol.writers.RequestWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.transport.ConnectionReader;
|
import net.sf.briar.api.transport.ConnectionReader;
|
||||||
import net.sf.briar.api.transport.ConnectionReaderFactory;
|
import net.sf.briar.api.transport.ConnectionReaderFactory;
|
||||||
import net.sf.briar.api.transport.ConnectionWriter;
|
import net.sf.briar.api.transport.ConnectionWriter;
|
||||||
@@ -167,15 +167,16 @@ public class ProtocolIntegrationTest extends TestCase {
|
|||||||
requested.set(3);
|
requested.set(3);
|
||||||
r.writeRequest(requested, 4);
|
r.writeRequest(requested, 4);
|
||||||
|
|
||||||
SubscriptionWriter s =
|
SubscriptionUpdateWriter s =
|
||||||
protocolWriterFactory.createSubscriptionWriter(out1);
|
protocolWriterFactory.createSubscriptionUpdateWriter(out1);
|
||||||
// Use a LinkedHashMap for predictable iteration order
|
// Use a LinkedHashMap for predictable iteration order
|
||||||
Map<Group, Long> subs = new LinkedHashMap<Group, Long>();
|
Map<Group, Long> subs = new LinkedHashMap<Group, Long>();
|
||||||
subs.put(group, 0L);
|
subs.put(group, 0L);
|
||||||
subs.put(group1, 0L);
|
subs.put(group1, 0L);
|
||||||
s.writeSubscriptions(subs, timestamp);
|
s.writeSubscriptions(subs, timestamp);
|
||||||
|
|
||||||
TransportWriter t = protocolWriterFactory.createTransportWriter(out1);
|
TransportUpdateWriter t =
|
||||||
|
protocolWriterFactory.createTransportUpdateWriter(out1);
|
||||||
t.writeTransports(transports, timestamp);
|
t.writeTransports(transports, timestamp);
|
||||||
|
|
||||||
out1.close();
|
out1.close();
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ import net.sf.briar.api.protocol.writers.AckWriter;
|
|||||||
import net.sf.briar.api.protocol.writers.BatchWriter;
|
import net.sf.briar.api.protocol.writers.BatchWriter;
|
||||||
import net.sf.briar.api.protocol.writers.OfferWriter;
|
import net.sf.briar.api.protocol.writers.OfferWriter;
|
||||||
import net.sf.briar.api.protocol.writers.RequestWriter;
|
import net.sf.briar.api.protocol.writers.RequestWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.transport.ConnectionWindow;
|
import net.sf.briar.api.transport.ConnectionWindow;
|
||||||
|
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
@@ -488,10 +488,10 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
final AckWriter ackWriter = context.mock(AckWriter.class);
|
final AckWriter ackWriter = context.mock(AckWriter.class);
|
||||||
final BatchWriter batchWriter = context.mock(BatchWriter.class);
|
final BatchWriter batchWriter = context.mock(BatchWriter.class);
|
||||||
final OfferWriter offerWriter = context.mock(OfferWriter.class);
|
final OfferWriter offerWriter = context.mock(OfferWriter.class);
|
||||||
final SubscriptionWriter subscriptionWriter =
|
final SubscriptionUpdateWriter subscriptionUpdateWriter =
|
||||||
context.mock(SubscriptionWriter.class);
|
context.mock(SubscriptionUpdateWriter.class);
|
||||||
final TransportWriter transportWriter =
|
final TransportUpdateWriter transportUpdateWriter =
|
||||||
context.mock(TransportWriter.class);
|
context.mock(TransportUpdateWriter.class);
|
||||||
final Ack ack = context.mock(Ack.class);
|
final Ack ack = context.mock(Ack.class);
|
||||||
final Batch batch = context.mock(Batch.class);
|
final Batch batch = context.mock(Batch.class);
|
||||||
final Offer offer = context.mock(Offer.class);
|
final Offer offer = context.mock(Offer.class);
|
||||||
@@ -537,12 +537,12 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
} catch(NoSuchContactException expected) {}
|
} catch(NoSuchContactException expected) {}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
db.generateSubscriptionUpdate(contactId, subscriptionWriter);
|
db.generateSubscriptionUpdate(contactId, subscriptionUpdateWriter);
|
||||||
fail();
|
fail();
|
||||||
} catch(NoSuchContactException expected) {}
|
} catch(NoSuchContactException expected) {}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
db.generateTransportUpdate(contactId, transportWriter);
|
db.generateTransportUpdate(contactId, transportUpdateWriter);
|
||||||
fail();
|
fail();
|
||||||
} catch(NoSuchContactException expected) {}
|
} catch(NoSuchContactException expected) {}
|
||||||
|
|
||||||
@@ -771,8 +771,8 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final Database<Object> database = context.mock(Database.class);
|
final Database<Object> database = context.mock(Database.class);
|
||||||
final DatabaseCleaner cleaner = context.mock(DatabaseCleaner.class);
|
final DatabaseCleaner cleaner = context.mock(DatabaseCleaner.class);
|
||||||
final SubscriptionWriter subscriptionWriter =
|
final SubscriptionUpdateWriter subscriptionUpdateWriter =
|
||||||
context.mock(SubscriptionWriter.class);
|
context.mock(SubscriptionUpdateWriter.class);
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
allowing(database).startTransaction();
|
allowing(database).startTransaction();
|
||||||
will(returnValue(txn));
|
will(returnValue(txn));
|
||||||
@@ -787,7 +787,7 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
}});
|
}});
|
||||||
DatabaseComponent db = createDatabaseComponent(database, cleaner);
|
DatabaseComponent db = createDatabaseComponent(database, cleaner);
|
||||||
|
|
||||||
db.generateSubscriptionUpdate(contactId, subscriptionWriter);
|
db.generateSubscriptionUpdate(contactId, subscriptionUpdateWriter);
|
||||||
|
|
||||||
context.assertIsSatisfied();
|
context.assertIsSatisfied();
|
||||||
}
|
}
|
||||||
@@ -802,8 +802,8 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final Database<Object> database = context.mock(Database.class);
|
final Database<Object> database = context.mock(Database.class);
|
||||||
final DatabaseCleaner cleaner = context.mock(DatabaseCleaner.class);
|
final DatabaseCleaner cleaner = context.mock(DatabaseCleaner.class);
|
||||||
final SubscriptionWriter subscriptionWriter =
|
final SubscriptionUpdateWriter subscriptionUpdateWriter =
|
||||||
context.mock(SubscriptionWriter.class);
|
context.mock(SubscriptionUpdateWriter.class);
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
allowing(database).startTransaction();
|
allowing(database).startTransaction();
|
||||||
will(returnValue(txn));
|
will(returnValue(txn));
|
||||||
@@ -821,13 +821,13 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
oneOf(database).setSubscriptionsSent(with(txn), with(contactId),
|
oneOf(database).setSubscriptionsSent(with(txn), with(contactId),
|
||||||
with(any(long.class)));
|
with(any(long.class)));
|
||||||
// Add the subscriptions to the writer
|
// Add the subscriptions to the writer
|
||||||
oneOf(subscriptionWriter).writeSubscriptions(
|
oneOf(subscriptionUpdateWriter).writeSubscriptions(
|
||||||
with(Collections.singletonMap(group, 0L)),
|
with(Collections.singletonMap(group, 0L)),
|
||||||
with(any(long.class)));
|
with(any(long.class)));
|
||||||
}});
|
}});
|
||||||
DatabaseComponent db = createDatabaseComponent(database, cleaner);
|
DatabaseComponent db = createDatabaseComponent(database, cleaner);
|
||||||
|
|
||||||
db.generateSubscriptionUpdate(contactId, subscriptionWriter);
|
db.generateSubscriptionUpdate(contactId, subscriptionUpdateWriter);
|
||||||
|
|
||||||
context.assertIsSatisfied();
|
context.assertIsSatisfied();
|
||||||
}
|
}
|
||||||
@@ -839,8 +839,8 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final Database<Object> database = context.mock(Database.class);
|
final Database<Object> database = context.mock(Database.class);
|
||||||
final DatabaseCleaner cleaner = context.mock(DatabaseCleaner.class);
|
final DatabaseCleaner cleaner = context.mock(DatabaseCleaner.class);
|
||||||
final TransportWriter transportWriter =
|
final TransportUpdateWriter transportUpdateWriter =
|
||||||
context.mock(TransportWriter.class);
|
context.mock(TransportUpdateWriter.class);
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
allowing(database).startTransaction();
|
allowing(database).startTransaction();
|
||||||
will(returnValue(txn));
|
will(returnValue(txn));
|
||||||
@@ -855,7 +855,7 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
}});
|
}});
|
||||||
DatabaseComponent db = createDatabaseComponent(database, cleaner);
|
DatabaseComponent db = createDatabaseComponent(database, cleaner);
|
||||||
|
|
||||||
db.generateTransportUpdate(contactId, transportWriter);
|
db.generateTransportUpdate(contactId, transportUpdateWriter);
|
||||||
|
|
||||||
context.assertIsSatisfied();
|
context.assertIsSatisfied();
|
||||||
}
|
}
|
||||||
@@ -870,8 +870,8 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final Database<Object> database = context.mock(Database.class);
|
final Database<Object> database = context.mock(Database.class);
|
||||||
final DatabaseCleaner cleaner = context.mock(DatabaseCleaner.class);
|
final DatabaseCleaner cleaner = context.mock(DatabaseCleaner.class);
|
||||||
final TransportWriter transportWriter =
|
final TransportUpdateWriter transportUpdateWriter =
|
||||||
context.mock(TransportWriter.class);
|
context.mock(TransportUpdateWriter.class);
|
||||||
context.checking(new Expectations() {{
|
context.checking(new Expectations() {{
|
||||||
allowing(database).startTransaction();
|
allowing(database).startTransaction();
|
||||||
will(returnValue(txn));
|
will(returnValue(txn));
|
||||||
@@ -889,12 +889,12 @@ public abstract class DatabaseComponentTest extends TestCase {
|
|||||||
oneOf(database).setTransportsSent(with(txn), with(contactId),
|
oneOf(database).setTransportsSent(with(txn), with(contactId),
|
||||||
with(any(long.class)));
|
with(any(long.class)));
|
||||||
// Add the properties to the writer
|
// Add the properties to the writer
|
||||||
oneOf(transportWriter).writeTransports(with(transports),
|
oneOf(transportUpdateWriter).writeTransports(with(transports),
|
||||||
with(any(long.class)));
|
with(any(long.class)));
|
||||||
}});
|
}});
|
||||||
DatabaseComponent db = createDatabaseComponent(database, cleaner);
|
DatabaseComponent db = createDatabaseComponent(database, cleaner);
|
||||||
|
|
||||||
db.generateTransportUpdate(contactId, transportWriter);
|
db.generateTransportUpdate(contactId, transportUpdateWriter);
|
||||||
|
|
||||||
context.assertIsSatisfied();
|
context.assertIsSatisfied();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import net.sf.briar.api.protocol.BatchId;
|
|||||||
import net.sf.briar.api.protocol.Group;
|
import net.sf.briar.api.protocol.Group;
|
||||||
import net.sf.briar.api.protocol.GroupFactory;
|
import net.sf.briar.api.protocol.GroupFactory;
|
||||||
import net.sf.briar.api.protocol.Message;
|
import net.sf.briar.api.protocol.Message;
|
||||||
|
import net.sf.briar.api.protocol.MessageEncoder;
|
||||||
import net.sf.briar.api.protocol.Offer;
|
import net.sf.briar.api.protocol.Offer;
|
||||||
import net.sf.briar.api.protocol.ProtocolReader;
|
import net.sf.briar.api.protocol.ProtocolReader;
|
||||||
import net.sf.briar.api.protocol.ProtocolReaderFactory;
|
import net.sf.briar.api.protocol.ProtocolReaderFactory;
|
||||||
@@ -26,12 +27,11 @@ import net.sf.briar.api.protocol.TransportIndex;
|
|||||||
import net.sf.briar.api.protocol.TransportUpdate;
|
import net.sf.briar.api.protocol.TransportUpdate;
|
||||||
import net.sf.briar.api.protocol.writers.AckWriter;
|
import net.sf.briar.api.protocol.writers.AckWriter;
|
||||||
import net.sf.briar.api.protocol.writers.BatchWriter;
|
import net.sf.briar.api.protocol.writers.BatchWriter;
|
||||||
import net.sf.briar.api.protocol.writers.MessageEncoder;
|
|
||||||
import net.sf.briar.api.protocol.writers.OfferWriter;
|
import net.sf.briar.api.protocol.writers.OfferWriter;
|
||||||
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
||||||
import net.sf.briar.api.protocol.writers.RequestWriter;
|
import net.sf.briar.api.protocol.writers.RequestWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.crypto.CryptoModule;
|
import net.sf.briar.crypto.CryptoModule;
|
||||||
import net.sf.briar.protocol.writers.ProtocolWritersModule;
|
import net.sf.briar.protocol.writers.ProtocolWritersModule;
|
||||||
import net.sf.briar.serial.SerialModule;
|
import net.sf.briar.serial.SerialModule;
|
||||||
@@ -99,10 +99,12 @@ public class ProtocolReadWriteTest extends TestCase {
|
|||||||
RequestWriter r = writerFactory.createRequestWriter(out);
|
RequestWriter r = writerFactory.createRequestWriter(out);
|
||||||
r.writeRequest(bitSet, 10);
|
r.writeRequest(bitSet, 10);
|
||||||
|
|
||||||
SubscriptionWriter s = writerFactory.createSubscriptionWriter(out);
|
SubscriptionUpdateWriter s =
|
||||||
|
writerFactory.createSubscriptionUpdateWriter(out);
|
||||||
s.writeSubscriptions(subscriptions, timestamp);
|
s.writeSubscriptions(subscriptions, timestamp);
|
||||||
|
|
||||||
TransportWriter t = writerFactory.createTransportWriter(out);
|
TransportUpdateWriter t =
|
||||||
|
writerFactory.createTransportUpdateWriter(out);
|
||||||
t.writeTransports(transports, timestamp);
|
t.writeTransports(transports, timestamp);
|
||||||
|
|
||||||
// Read
|
// Read
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import net.sf.briar.api.protocol.BatchId;
|
|||||||
import net.sf.briar.api.protocol.Group;
|
import net.sf.briar.api.protocol.Group;
|
||||||
import net.sf.briar.api.protocol.GroupFactory;
|
import net.sf.briar.api.protocol.GroupFactory;
|
||||||
import net.sf.briar.api.protocol.Message;
|
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.MessageId;
|
||||||
import net.sf.briar.api.protocol.Transport;
|
import net.sf.briar.api.protocol.Transport;
|
||||||
import net.sf.briar.api.protocol.TransportId;
|
import net.sf.briar.api.protocol.TransportId;
|
||||||
@@ -34,10 +35,9 @@ import net.sf.briar.api.protocol.TransportIndex;
|
|||||||
import net.sf.briar.api.protocol.UniqueId;
|
import net.sf.briar.api.protocol.UniqueId;
|
||||||
import net.sf.briar.api.protocol.writers.AckWriter;
|
import net.sf.briar.api.protocol.writers.AckWriter;
|
||||||
import net.sf.briar.api.protocol.writers.BatchWriter;
|
import net.sf.briar.api.protocol.writers.BatchWriter;
|
||||||
import net.sf.briar.api.protocol.writers.MessageEncoder;
|
|
||||||
import net.sf.briar.api.protocol.writers.OfferWriter;
|
import net.sf.briar.api.protocol.writers.OfferWriter;
|
||||||
import net.sf.briar.api.protocol.writers.SubscriptionWriter;
|
import net.sf.briar.api.protocol.writers.SubscriptionUpdateWriter;
|
||||||
import net.sf.briar.api.protocol.writers.TransportWriter;
|
import net.sf.briar.api.protocol.writers.TransportUpdateWriter;
|
||||||
import net.sf.briar.api.serial.SerialComponent;
|
import net.sf.briar.api.serial.SerialComponent;
|
||||||
import net.sf.briar.api.serial.WriterFactory;
|
import net.sf.briar.api.serial.WriterFactory;
|
||||||
import net.sf.briar.crypto.CryptoModule;
|
import net.sf.briar.crypto.CryptoModule;
|
||||||
@@ -61,8 +61,7 @@ public class ConstantsTest extends TestCase {
|
|||||||
public ConstantsTest() throws Exception {
|
public ConstantsTest() throws Exception {
|
||||||
super();
|
super();
|
||||||
Injector i = Guice.createInjector(new CryptoModule(),
|
Injector i = Guice.createInjector(new CryptoModule(),
|
||||||
new ProtocolModule(), new ProtocolWritersModule(),
|
new ProtocolModule(), new SerialModule());
|
||||||
new SerialModule());
|
|
||||||
writerFactory = i.getInstance(WriterFactory.class);
|
writerFactory = i.getInstance(WriterFactory.class);
|
||||||
crypto = i.getInstance(CryptoComponent.class);
|
crypto = i.getInstance(CryptoComponent.class);
|
||||||
serial = i.getInstance(SerialComponent.class);
|
serial = i.getInstance(SerialComponent.class);
|
||||||
@@ -191,7 +190,8 @@ public class ConstantsTest extends TestCase {
|
|||||||
// Add the subscriptions to an update
|
// Add the subscriptions to an update
|
||||||
ByteArrayOutputStream out =
|
ByteArrayOutputStream out =
|
||||||
new ByteArrayOutputStream(MAX_PACKET_LENGTH);
|
new ByteArrayOutputStream(MAX_PACKET_LENGTH);
|
||||||
SubscriptionWriter s = new SubscriptionWriterImpl(out, writerFactory);
|
SubscriptionUpdateWriter s =
|
||||||
|
new SubscriptionUpdateWriterImpl(out, writerFactory);
|
||||||
s.writeSubscriptions(subs, Long.MAX_VALUE);
|
s.writeSubscriptions(subs, Long.MAX_VALUE);
|
||||||
// Check the size of the serialised update
|
// Check the size of the serialised update
|
||||||
assertTrue(out.size() > MAX_GROUPS *
|
assertTrue(out.size() > MAX_GROUPS *
|
||||||
@@ -218,7 +218,8 @@ public class ConstantsTest extends TestCase {
|
|||||||
// Add the transports to an update
|
// Add the transports to an update
|
||||||
ByteArrayOutputStream out =
|
ByteArrayOutputStream out =
|
||||||
new ByteArrayOutputStream(MAX_PACKET_LENGTH);
|
new ByteArrayOutputStream(MAX_PACKET_LENGTH);
|
||||||
TransportWriter t = new TransportWriterImpl(out, writerFactory);
|
TransportUpdateWriter t =
|
||||||
|
new TransportUpdateWriterImpl(out, writerFactory);
|
||||||
t.writeTransports(transports, Long.MAX_VALUE);
|
t.writeTransports(transports, Long.MAX_VALUE);
|
||||||
// Check the size of the serialised update
|
// Check the size of the serialised update
|
||||||
assertTrue(out.size() > MAX_TRANSPORTS * (UniqueId.LENGTH + 4 +
|
assertTrue(out.size() > MAX_TRANSPORTS * (UniqueId.LENGTH + 4 +
|
||||||
|
|||||||
@@ -19,12 +19,12 @@ import net.sf.briar.api.db.event.DatabaseEvent;
|
|||||||
import net.sf.briar.api.db.event.DatabaseListener;
|
import net.sf.briar.api.db.event.DatabaseListener;
|
||||||
import net.sf.briar.api.db.event.MessagesAddedEvent;
|
import net.sf.briar.api.db.event.MessagesAddedEvent;
|
||||||
import net.sf.briar.api.protocol.Message;
|
import net.sf.briar.api.protocol.Message;
|
||||||
|
import net.sf.briar.api.protocol.MessageEncoder;
|
||||||
import net.sf.briar.api.protocol.ProtocolReaderFactory;
|
import net.sf.briar.api.protocol.ProtocolReaderFactory;
|
||||||
import net.sf.briar.api.protocol.Transport;
|
import net.sf.briar.api.protocol.Transport;
|
||||||
import net.sf.briar.api.protocol.TransportId;
|
import net.sf.briar.api.protocol.TransportId;
|
||||||
import net.sf.briar.api.protocol.TransportIndex;
|
import net.sf.briar.api.protocol.TransportIndex;
|
||||||
import net.sf.briar.api.protocol.TransportUpdate;
|
import net.sf.briar.api.protocol.TransportUpdate;
|
||||||
import net.sf.briar.api.protocol.writers.MessageEncoder;
|
|
||||||
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
import net.sf.briar.api.protocol.writers.ProtocolWriterFactory;
|
||||||
import net.sf.briar.api.transport.BatchTransportReader;
|
import net.sf.briar.api.transport.BatchTransportReader;
|
||||||
import net.sf.briar.api.transport.BatchTransportWriter;
|
import net.sf.briar.api.transport.BatchTransportWriter;
|
||||||
|
|||||||
Reference in New Issue
Block a user