Commit Graph

183 Commits

Author SHA1 Message Date
akwizgran
b470afb4ef Added DatabaseComponent.setSeen() for handling requests.
Also moved IO out of the lock in receiveOffer().
2011-09-23 16:06:14 +01:00
akwizgran
ba1c61810d Updated the visibility criteria of setStatusSeenIfVisible(). 2011-09-23 16:04:58 +01:00
akwizgran
7c6e0c349c Extracted constants from DatabaseComponent interface. 2011-09-23 15:33:41 +01:00
akwizgran
b675c38953 Don't do IO while holding database locks. 2011-09-23 12:55:23 +01:00
akwizgran
09971c8460 Implemented incoming and outgoing batch connections (untested). 2011-09-22 16:26:06 +01:00
akwizgran
b65d6631f1 Removed writer's count of bytes written and renamed a method. 2011-09-21 18:22:14 +01:00
akwizgran
52f3b70c3f Added size-unlimited version of Database.getSendableMessages(). 2011-09-21 18:10:22 +01:00
akwizgran
eba6884281 Javadocs. 2011-09-21 18:09:56 +01:00
akwizgran
e589d44d9f Where possible, do IO outside transactions and locks. 2011-09-21 18:04:21 +01:00
akwizgran
43a6a22f4a Don't call finish() unless at least one message ID was written. 2011-09-21 17:52:34 +01:00
akwizgran
8dd7ec93e7 DatabaseComponent.generateAck() now returns a boolean.
The return value indicates whether any batch IDs were written.
AckWriter.finish() and Database.removeBatchesToAck() are only called
if at least one batch ID was written.
2011-09-21 17:51:17 +01:00
akwizgran
10c3b21726 Expose the encryption and authentication overhead without breaking
encapsulation.

This should allow callers to calculate maximum packet sizes without
knowing the details of the transport protocol.
2011-09-21 15:22:25 +01:00
akwizgran
7e58b25618 Allow the max packet length to be reduced from the default. 2011-09-21 13:47:06 +01:00
akwizgran
77d61e0aea Don't create empty packets. 2011-09-21 13:30:04 +01:00
akwizgran
3e60233ae0 Expose serialisation overhead without breaking encapsulation. 2011-09-21 13:16:58 +01:00
akwizgran
95c3fb4fed Removed getCapacity() from BatchWriter interface. 2011-09-21 12:37:19 +01:00
akwizgran
7ac615520b Moved tag definitions inside serial component. 2011-09-21 12:08:27 +01:00
akwizgran
5548eb32cd DatabaseComponent.generateBatch() now returns a boolean.
This allows a connection to know whether to try writing another batch
immediately, or to wait for an event from the DB.
2011-09-20 14:45:07 +01:00
akwizgran
75446b7f7e Collapsed ack handling into a single transaction.
The locks were being held across all transactions anyway, so there was
no granularity advantage to using multiple transactions.
2011-09-19 18:51:27 +01:00
akwizgran
3dd3742a96 Folded findLostBatches() into receiveAck(). 2011-09-19 18:45:19 +01:00
akwizgran
7aeb6029a6 Assertions and comments. 2011-09-19 16:42:27 +01:00
akwizgran
4b97be897e Don't attempt to retrieve ratings for anonymous messages. 2011-09-19 16:25:49 +01:00
akwizgran
44c8f9ceaa Folded ReadWriteLockDatabaseComponent into its parent. 2011-09-19 15:29:40 +01:00
akwizgran
7ef44fbab1 Updated javadoc and renamed type parameters. 2011-09-19 15:01:55 +01:00
akwizgran
22b8321376 Removed SynchronizedDatabaseComponent.
LockFairnessTest passes on Windows, Mac and Linux, so it's safe to use
ReadWriteLockDatabaseComponent on all those platforms. We can revisit
this issue for Android if necessary, but for now it's a waste of
effort to have two parallel implementations.
2011-09-19 14:54:29 +01:00
akwizgran
f6e5ef415a BadPaddingExceptions should be rethrown as RuntimeExceptions. 2011-09-19 14:53:44 +01:00
akwizgran
11cf84dedc Arrays.copyOfRange() is not available in Java 5. 2011-09-19 14:53:12 +01:00
akwizgran
7cdca62063 IOException(Throwable) constructor isn't available in Java 5. 2011-09-19 14:49:27 +01:00
akwizgran
fde354957c Timestamps may not be negative. 2011-09-16 13:20:49 +01:00
akwizgran
ad1ef4461f SynchronizedDatabaseComponent.addLocalPrivateMessage() was not
checking whether the contact was still in the DB.
2011-09-16 13:11:20 +01:00
akwizgran
43a59d9dbe Database.hasSendableMessages() should check for private messages. 2011-09-16 12:55:57 +01:00
akwizgran
5f05a7f898 Unit tests for private messages. 2011-09-16 11:33:55 +01:00
akwizgran
005e7d5207 Added a random salt to prevent ID clashes between anonymous messages. 2011-09-13 17:56:44 +01:00
akwizgran
8ec40587b2 Check for sendable private messages as well as group messages. 2011-09-13 16:15:50 +01:00
akwizgran
b78cfa6c88 More DB support for private messages - needs unit tests. 2011-09-13 15:40:33 +01:00
akwizgran
2670d7b821 DB support for private messages. 2011-09-13 15:12:36 +01:00
akwizgran
de5caca578 Basic database support for private messages. 2011-09-13 14:43:48 +01:00
akwizgran
2858c139fa Make the group field of messages optional.
Private messages have no group.
2011-09-13 14:17:22 +01:00
akwizgran
1d25b5a92e Use null instead of MessageId.NONE and AuthorId.NONE, as for other
optional fields.
2011-09-13 14:04:23 +01:00
akwizgran
70b1487140 Renamed user-defined tags "user-defined type identifiers". 2011-09-12 16:32:25 +01:00
akwizgran
64548375cc Offer IDs no longer need to be calculated or echoed in requests.
The initiator flag in the transport protocol makes this unnecessary by
linking the two sides of a stream-mode connection, making it
impossible for an attacker to replay the responder's side of a
different connection.
2011-09-12 16:21:17 +01:00
akwizgran
7ed747b2a3 Added an initiator flag (bit 31) to the IV.
The flag is used to distinguish between the initiator and responder
directions of a stream-mode connection, allowing them to use the same
connection number without risking IV reuse.

The flag is also raised for batch-mode connections, which only have
one direction.
2011-09-07 17:21:52 +01:00
akwizgran
39be97a4d6 Order sendable messages by timestamp. Also fixed some comments. 2011-09-07 15:55:03 +01:00
akwizgran
331e7e0547 Increased the maximum packet size to 1 MiB.
This should provide acceptable memory usage and database locking
granularity, while making subscription and transport updates large
enough for the incremental update issue to be kicked into the long
grass.

Removed awareness of the serialisation format from the protocol
component wherever possible, and added tests to ensure that the
constants defined in the protocol package's API are compatible with
the serialisation format.
2011-09-07 13:51:30 +01:00
akwizgran
1ac1609dc2 Renamed a couple of classes. 2011-09-07 11:30:42 +01:00
akwizgran
0a84a01235 Allow identical batches to be sent to multiple contacts. 2011-09-07 11:15:34 +01:00
akwizgran
e80ede4429 Map keys must be unique. 2011-09-07 11:04:03 +01:00
akwizgran
472dff3d61 Removed redundant frame number from header. 2011-09-01 11:11:31 +01:00
akwizgran
3b32aee6be Slightly modified ConnectionWriterImpl to write a full-size frame as
soon as possible, rather than waiting for the next write.
2011-08-19 20:10:14 +02:00
akwizgran
0132c1eff4 Fixed a typo. 2011-08-19 19:58:40 +02:00