mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-13 11:19:04 +01:00
Massive refactoring to merge handling of simplex and duplex connections.
This commit is contained in:
@@ -72,13 +72,10 @@ public interface CryptoComponent {
|
||||
|
||||
/**
|
||||
* Derives a frame key from the given temporary secret and stream number.
|
||||
* @param alice indicates whether the key is for a connection initiated by
|
||||
* @param alice indicates whether the key is for a stream initiated by
|
||||
* Alice or Bob.
|
||||
* @param initiator indicates whether the key is for the initiator's or the
|
||||
* responder's side of the connection.
|
||||
*/
|
||||
SecretKey deriveFrameKey(byte[] secret, long streamNumber, boolean alice,
|
||||
boolean initiator);
|
||||
SecretKey deriveFrameKey(byte[] secret, long streamNumber, boolean alice);
|
||||
|
||||
/** Returns a cipher for encrypting and authenticating frames. */
|
||||
AuthenticatedCipher getFrameCipher();
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.briarproject.api.messaging;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public interface MessagingSession {
|
||||
|
||||
/**
|
||||
* Runs the session. This method returns when there are no more packets to
|
||||
* send or when the {@link #interrupt()} method has been called.
|
||||
*/
|
||||
void run() throws IOException;
|
||||
|
||||
/**
|
||||
* Interrupts the session, causing the {@link #run()} method to return at
|
||||
* the next opportunity or throw an {@link java.io.IOException IOException}
|
||||
* if it cannot return cleanly.
|
||||
*/
|
||||
void interrupt();
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.briarproject.api.messaging;
|
||||
|
||||
import org.briarproject.api.plugins.TransportConnectionReader;
|
||||
import org.briarproject.api.plugins.TransportConnectionWriter;
|
||||
import org.briarproject.api.transport.StreamContext;
|
||||
|
||||
public interface MessagingSessionFactory {
|
||||
|
||||
MessagingSession createIncomingSession(StreamContext ctx,
|
||||
TransportConnectionReader r);
|
||||
|
||||
MessagingSession createOutgoingSession(StreamContext ctx,
|
||||
TransportConnectionWriter w, boolean duplex);
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package org.briarproject.api.messaging.duplex;
|
||||
|
||||
import org.briarproject.api.ContactId;
|
||||
import org.briarproject.api.TransportId;
|
||||
import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
|
||||
import org.briarproject.api.transport.StreamContext;
|
||||
|
||||
public interface DuplexConnectionFactory {
|
||||
|
||||
void createIncomingConnection(StreamContext ctx,
|
||||
DuplexTransportConnection d);
|
||||
|
||||
void createOutgoingConnection(ContactId c, TransportId t,
|
||||
DuplexTransportConnection d);
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package org.briarproject.api.messaging.simplex;
|
||||
|
||||
import org.briarproject.api.ContactId;
|
||||
import org.briarproject.api.TransportId;
|
||||
import org.briarproject.api.plugins.simplex.SimplexTransportReader;
|
||||
import org.briarproject.api.plugins.simplex.SimplexTransportWriter;
|
||||
import org.briarproject.api.transport.StreamContext;
|
||||
|
||||
public interface SimplexConnectionFactory {
|
||||
|
||||
void createIncomingConnection(StreamContext ctx,
|
||||
SimplexTransportReader r);
|
||||
|
||||
void createOutgoingConnection(ContactId c, TransportId t,
|
||||
SimplexTransportWriter w);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.briarproject.api.plugins;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* An interface for reading data from a transport connection. The reader is not
|
||||
* responsible for decrypting or authenticating the data.
|
||||
*/
|
||||
public interface TransportConnectionReader {
|
||||
|
||||
/** Returns the maximum frame length of the transport in bytes. */
|
||||
int getMaxFrameLength();
|
||||
|
||||
/** Returns the maximum latency of the transport in milliseconds. */
|
||||
long getMaxLatency();
|
||||
|
||||
/** Returns an input stream for reading from the transport connection. */
|
||||
InputStream getInputStream() throws IOException;
|
||||
|
||||
/**
|
||||
* Marks this side of the transport connection closed. If the transport is
|
||||
* simplex, the connection is closed. If the transport is duplex, the
|
||||
* connection is closed if <tt>exception</tt> is true or the other side of
|
||||
* the connection has been marked as closed.
|
||||
* @param exception true if the connection is being closed because of an
|
||||
* exception. This may affect how resources are disposed of.
|
||||
* @param recognised true if the pseudo-random tag was recognised. This may
|
||||
* affect how resources are disposed of.
|
||||
*/
|
||||
void dispose(boolean exception, boolean recognised) throws IOException;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.briarproject.api.plugins;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
/**
|
||||
* An interface for writing data to a transport connection. The writer is not
|
||||
* responsible for authenticating or encrypting the data.
|
||||
*/
|
||||
public interface TransportConnectionWriter {
|
||||
|
||||
/** Returns the maximum frame length of the transport in bytes. */
|
||||
int getMaxFrameLength();
|
||||
|
||||
/** Returns the maximum latency of the transport in milliseconds. */
|
||||
long getMaxLatency();
|
||||
|
||||
/** Returns the capacity of the transport connection in bytes. */
|
||||
long getCapacity();
|
||||
|
||||
/** Returns an output stream for writing to the transport connection. */
|
||||
OutputStream getOutputStream() throws IOException;
|
||||
|
||||
/**
|
||||
* Marks this side of the transport connection closed. If the transport is
|
||||
* simplex, the connection is closed. If the transport is duplex, the
|
||||
* connection is closed if <tt>exception</tt> is true or the other side of
|
||||
* the connection has been marked as closed.
|
||||
* @param exception true if the connection is being closed because of an
|
||||
* exception. This may affect how resources are disposed of.
|
||||
*/
|
||||
void dispose(boolean exception) throws IOException;
|
||||
}
|
||||
@@ -1,8 +1,7 @@
|
||||
package org.briarproject.api.plugins.duplex;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import org.briarproject.api.plugins.TransportConnectionReader;
|
||||
import org.briarproject.api.plugins.TransportConnectionWriter;
|
||||
|
||||
/**
|
||||
* An interface for reading and writing data over a duplex transport. The
|
||||
@@ -11,23 +10,11 @@ import java.io.OutputStream;
|
||||
*/
|
||||
public interface DuplexTransportConnection {
|
||||
|
||||
/** Returns the maximum frame length of the transport in bytes. */
|
||||
int getMaxFrameLength();
|
||||
/** Returns a {@link org.briarproject.api.plugins.TransportConnectionReader
|
||||
* TransportConnectionReader} for reading from the connection. */
|
||||
TransportConnectionReader getReader();
|
||||
|
||||
/** Returns the maximum latency of the transport in milliseconds. */
|
||||
long getMaxLatency();
|
||||
|
||||
/** Returns an input stream for reading from the connection. */
|
||||
InputStream getInputStream() throws IOException;
|
||||
|
||||
/** Returns an output stream for writing to the connection. */
|
||||
OutputStream getOutputStream() throws IOException;
|
||||
|
||||
/**
|
||||
* Closes the connection and disposes of any associated resources. The
|
||||
* first argument indicates whether the connection is being closed because
|
||||
* of an exception and the second argument indicates whether the connection
|
||||
* was recognised, which may affect how resources are disposed of.
|
||||
*/
|
||||
void dispose(boolean exception, boolean recognised) throws IOException;
|
||||
/** Returns a {@link org.briarproject.api.plugins.TransportConnectionWriter
|
||||
* TransportConnectionWriter} for writing to the connection. */
|
||||
TransportConnectionWriter getWriter();
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package org.briarproject.api.plugins.simplex;
|
||||
|
||||
import org.briarproject.api.ContactId;
|
||||
import org.briarproject.api.plugins.Plugin;
|
||||
import org.briarproject.api.plugins.TransportConnectionReader;
|
||||
import org.briarproject.api.plugins.TransportConnectionWriter;
|
||||
|
||||
/** An interface for transport plugins that support simplex communication. */
|
||||
public interface SimplexPlugin extends Plugin {
|
||||
@@ -11,12 +13,12 @@ public interface SimplexPlugin extends Plugin {
|
||||
* current transport and configuration properties. Returns null if a reader
|
||||
* could not be created.
|
||||
*/
|
||||
SimplexTransportReader createReader(ContactId c);
|
||||
TransportConnectionReader createReader(ContactId c);
|
||||
|
||||
/**
|
||||
* Attempts to create and return a writer for the given contact using the
|
||||
* current transport and configuration properties. Returns null if a writer
|
||||
* could not be created.
|
||||
*/
|
||||
SimplexTransportWriter createWriter(ContactId c);
|
||||
TransportConnectionWriter createWriter(ContactId c);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package org.briarproject.api.plugins.simplex;
|
||||
|
||||
import org.briarproject.api.ContactId;
|
||||
import org.briarproject.api.plugins.PluginCallback;
|
||||
import org.briarproject.api.plugins.TransportConnectionReader;
|
||||
import org.briarproject.api.plugins.TransportConnectionWriter;
|
||||
|
||||
/**
|
||||
* An interface for handling readers and writers created by a simplex transport
|
||||
@@ -9,7 +11,7 @@ import org.briarproject.api.plugins.PluginCallback;
|
||||
*/
|
||||
public interface SimplexPluginCallback extends PluginCallback {
|
||||
|
||||
void readerCreated(SimplexTransportReader r);
|
||||
void readerCreated(TransportConnectionReader r);
|
||||
|
||||
void writerCreated(ContactId c, SimplexTransportWriter w);
|
||||
void writerCreated(ContactId c, TransportConnectionWriter w);
|
||||
}
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
package org.briarproject.api.plugins.simplex;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* An interface for reading data from a simplex transport. The reader is not
|
||||
* responsible for decrypting or authenticating the data before returning it.
|
||||
*/
|
||||
public interface SimplexTransportReader {
|
||||
|
||||
/** Returns the maximum frame length of the transport in bytes. */
|
||||
int getMaxFrameLength();
|
||||
|
||||
/** Returns an input stream for reading from the transport. */
|
||||
InputStream getInputStream() throws IOException;
|
||||
|
||||
/**
|
||||
* Closes the reader and disposes of any associated resources. The first
|
||||
* argument indicates whether the reader is being closed because of an
|
||||
* exception and the second argument indicates whether the connection was
|
||||
* recognised, which may affect how resources are disposed of.
|
||||
*/
|
||||
void dispose(boolean exception, boolean recognised) throws IOException;
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package org.briarproject.api.plugins.simplex;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
/**
|
||||
* An interface for writing data to a simplex transport. The writer is not
|
||||
* responsible for authenticating or encrypting the data before writing it.
|
||||
*/
|
||||
public interface SimplexTransportWriter {
|
||||
|
||||
/** Returns the capacity of the transport in bytes. */
|
||||
long getCapacity();
|
||||
|
||||
/** Returns the maximum frame length of the transport in bytes. */
|
||||
int getMaxFrameLength();
|
||||
|
||||
/** Returns the maximum latency of the transport in milliseconds. */
|
||||
long getMaxLatency();
|
||||
|
||||
/** Returns an output stream for writing to the transport. */
|
||||
OutputStream getOutputStream() throws IOException;
|
||||
|
||||
/**
|
||||
* Closes the writer and disposes of any associated resources. The
|
||||
* argument indicates whether the writer is being closed because of an
|
||||
* exception, which may affect how resources are disposed of.
|
||||
*/
|
||||
void dispose(boolean exception) throws IOException;
|
||||
}
|
||||
@@ -2,18 +2,18 @@ package org.briarproject.api.transport;
|
||||
|
||||
import org.briarproject.api.ContactId;
|
||||
import org.briarproject.api.TransportId;
|
||||
import org.briarproject.api.plugins.TransportConnectionReader;
|
||||
import org.briarproject.api.plugins.TransportConnectionWriter;
|
||||
import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
|
||||
import org.briarproject.api.plugins.simplex.SimplexTransportReader;
|
||||
import org.briarproject.api.plugins.simplex.SimplexTransportWriter;
|
||||
|
||||
public interface ConnectionDispatcher {
|
||||
|
||||
void dispatchIncomingConnection(TransportId t, SimplexTransportReader r);
|
||||
void dispatchIncomingConnection(TransportId t, TransportConnectionReader r);
|
||||
|
||||
void dispatchIncomingConnection(TransportId t, DuplexTransportConnection d);
|
||||
|
||||
void dispatchOutgoingConnection(ContactId c, TransportId t,
|
||||
SimplexTransportWriter w);
|
||||
TransportConnectionWriter w);
|
||||
|
||||
void dispatchOutgoingConnection(ContactId c, TransportId t,
|
||||
DuplexTransportConnection d);
|
||||
|
||||
@@ -6,7 +6,7 @@ public interface StreamReaderFactory {
|
||||
|
||||
/** Creates a {@link StreamReader} for a transport connection. */
|
||||
StreamReader createStreamReader(InputStream in, int maxFrameLength,
|
||||
StreamContext ctx, boolean incoming, boolean initiator);
|
||||
StreamContext ctx);
|
||||
|
||||
/** Creates a {@link StreamReader} for an invitation connection. */
|
||||
StreamReader createInvitationStreamReader(InputStream in,
|
||||
|
||||
@@ -10,10 +10,4 @@ public interface StreamWriter {
|
||||
* be written.
|
||||
*/
|
||||
OutputStream getOutputStream();
|
||||
|
||||
/**
|
||||
* Returns the maximum number of bytes that can be written to the output
|
||||
* stream.
|
||||
*/
|
||||
long getRemainingCapacity();
|
||||
}
|
||||
|
||||
@@ -6,8 +6,7 @@ public interface StreamWriterFactory {
|
||||
|
||||
/** Creates a {@link StreamWriter} for a transport connection. */
|
||||
StreamWriter createStreamWriter(OutputStream out, int maxFrameLength,
|
||||
long capacity, StreamContext ctx, boolean incoming,
|
||||
boolean initiator);
|
||||
StreamContext ctx);
|
||||
|
||||
/** Creates a {@link StreamWriter} for an invitation connection. */
|
||||
StreamWriter createInvitationStreamWriter(OutputStream out,
|
||||
|
||||
@@ -4,12 +4,13 @@ import org.briarproject.api.ContactId;
|
||||
import org.briarproject.api.TransportId;
|
||||
import org.briarproject.api.db.DbException;
|
||||
|
||||
/** Maintains the table of expected tags for recognising incoming streams. */
|
||||
/** Keeps track of expected tags and uses them to recognise incoming streams. */
|
||||
public interface TagRecogniser {
|
||||
|
||||
/**
|
||||
* Returns a {@link StreamContext} for reading from the stream with the
|
||||
* given tag if the tag was expected, or null if the tag was unexpected.
|
||||
* Looks up the given tag and returns a {@link StreamContext} for reading
|
||||
* from the stream if the tag was expected, or null if the tag was
|
||||
* unexpected.
|
||||
*/
|
||||
StreamContext recogniseTag(TransportId t, byte[] tag) throws DbException;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user