Massive refactoring to merge handling of simplex and duplex connections.

This commit is contained in:
akwizgran
2014-11-04 16:51:25 +00:00
parent b24f153704
commit 7b8181e309
67 changed files with 1981 additions and 2288 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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;
}