Commit Graph

115 Commits

Author SHA1 Message Date
akwizgran 44c8f9ceaa Folded ReadWriteLockDatabaseComponent into its parent. 2011-09-19 15:29:40 +01:00
akwizgran bf01dd4f96 Folded ReadWriteLockDatabaseComponentTest into its parent. 2011-09-19 14:58:32 +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 53f02f7a52 Fixed unit tests for database component. 2011-09-16 13:13:27 +01:00
akwizgran f18c86b0d3 Unit tests for private messages. 2011-09-16 13:06:04 +01:00
akwizgran 5f05a7f898 Unit tests for private messages. 2011-09-16 11:33:55 +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 de5caca578 Basic database support for private messages. 2011-09-13 14:43:48 +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 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 531d54c1d3 Removed unnecessary transaction commit. 2011-09-07 11:18:07 +01:00
akwizgran 0a84a01235 Allow identical batches to be sent to multiple contacts. 2011-09-07 11:15:34 +01:00
akwizgran 5e0aadd373 Moved the subscription and transport timestamps out of the contacts
table so it's not necessary to hold a write lock on the (heavily used)
contacts table to update them.
2011-08-14 14:46:12 +02:00
akwizgran 2c13e35dc4 Calculate the timestamp outside the subscription/transport update
writer - this will allow it to be saved so new connections can work
out whether they should send updates.
2011-08-14 13:36:21 +02:00
akwizgran c2b0f0ab5a Each request packet should contain the unique ID of the offer to which
it responds.
2011-08-13 17:46:19 +02:00
akwizgran 3edfa5d1ba Call the listeners when contacts are added and removed. 2011-08-11 15:55:30 +01:00
akwizgran 151a360587 Store shared secrets in the database (the crypto component will be
responsible for wrapping/unwrapping them).
2011-08-11 15:41:52 +01:00
akwizgran 07b34cfbab Added a lock for the connectionWindows table and exposed
getConnectionWindow() and setConnectionWindow() through the
DatabaseComponent interface.
2011-08-11 15:19:32 +01:00
akwizgran e0b86f1232 Moved ConnectionWindow into the transport module and implemented
window sliding (untested).
2011-08-11 13:22:23 +01:00
akwizgran d5d03192e3 Basic connection window persistence. 2011-08-11 12:56:21 +01:00
akwizgran c2045296eb Associate a timestamp with every subscription, indicating the earliest
acceptable timestamp of subscribed messages. For a new subscription,
the timestamp is initialised to the current time, so a new subscriber
to a group will not immediately receive any messages. (Subscribing to
a group is therefore more like joining a mailing list than joining a
Usenet group - you only receive messages written after you joined.)

Once the database fills up and starts expiring messages, the
timestamps of subscriptions are updated so that contacts need not send
messages that would expire immediately. This is done using the
*approximate* timestamp of the oldest message in the database, to
avoid revealing the presence or absence of any particular message.
2011-08-05 13:34:58 +01:00
akwizgran 5cb4075cfd Added the ability to store transport configuration details in the
database - unlike transport properties, these are not shared with
contacts. For example, when using email as a transport, the address
for sending and receiving emails would be a transport property, while
the username and password for the email server would be transport
configuration details. Transport plugins can update their
configuration details atomically.

Also clarified the terminology for transport and subscription updates.
2011-08-04 13:41:41 +01:00
akwizgran ec29c4d1d3 Changed the format of transport properties from (key, value) pairs to
(transport name, key, value) triples. This makes it possible for each
transport plugin to update its locally stored properties atomically.
2011-08-04 11:07:28 +01:00
akwizgran 5be9d953ee Use fail() instead of assertTrue(false). 2011-08-03 21:19:04 +01:00
akwizgran c6ded0227d Unit test for database exception handling. 2011-08-03 21:01:37 +01:00
akwizgran 2740b2b002 s/transport details/transport properties/g 2011-08-02 13:08:44 +01:00
akwizgran 0e48f4ba55 Listeners for local transport updates. 2011-08-02 09:44:15 +01:00
akwizgran ff0909a0e9 Listeners for subscription changes. 2011-08-02 09:22:54 +01:00
akwizgran 0d0885bf4b Don't throw a DbException if a contact sends duplicate batches. 2011-08-01 17:56:18 +01:00
akwizgran adee3e121c Added support for registering listeners with the database that are
called when new messages are available, and a new method
hasSendableMessages(ContactId) that listeners can call to see whether
it's worth trying to create a batch.
2011-07-27 20:27:43 +01:00
akwizgran e93fbe0b20 Implemented subscription visibility. If a subscription is not visible
to a contact, do not accept, offer, or send messages belonging to that
group to or from that contact, and do not list that group in
subscription updates sent to that contact.
2011-07-27 16:43:19 +01:00
akwizgran b161e5ed1d Request reader and unit test. 2011-07-27 11:06:54 +01:00
akwizgran 9e78837055 Implemented OfferWriter and RequestWriter, made all the writers
reusable (though not thread-safe), and guiced the readers.
2011-07-26 21:36:55 +01:00
akwizgran 426e415676 OK, I think that's enough unit tests for one day. 2011-07-26 18:37:58 +01:00
akwizgran 1e60be4b75 Unit tests for DatabaseComponent. 2011-07-26 18:25:14 +01:00
akwizgran 8ba5b46d59 More unit tests for DatabaseComponent. 2011-07-26 18:11:57 +01:00
akwizgran bcf8bcbd04 More unit tests. 2011-07-26 17:48:47 +01:00
akwizgran bc1622b1fa Unit tests and a bugfix. THE SYSTEM WORKS! 2011-07-26 17:24:26 +01:00
akwizgran dc2476cb25 Unit tests. 2011-07-26 17:12:19 +01:00
akwizgran 1ea385e7af Unit tests and a bugfix for the new database methods. 2011-07-26 16:46:50 +01:00
akwizgran 586d1739ae Removed salt from unrestricted groups: two unrestricted groups with
the same name will now be treated as the same group (this seems more
intuitive than the alternative).
2011-07-25 20:11:32 +01:00
akwizgran 941460e3bc Readers, writers and factories for subscription and transport updates. 2011-07-23 21:46:47 +01:00
akwizgran 65be63dc0c Moved writers into their own package, replaced public static fields in
CryptoModule with provider methods.
2011-07-23 18:50:40 +01:00
akwizgran 13f18d9e40 Found the bug, it was just a SQL syntax error. 2011-07-23 11:29:23 +01:00
akwizgran 0edcb31d64 Store group details in the database. Some tests are still failing... 2011-07-23 01:29:18 +01:00
akwizgran de648daca5 Bundles are gone - the batch-mode and stream-mode protocols now
consist of independently encrypted and authenticated packets (Ack,
Batch, Subscriptions and Transports so far).
2011-07-22 22:19:24 +01:00
akwizgran b41465c2da Use commons-io to measure free space. 2011-07-14 19:21:16 +01:00
akwizgran fcedc34d10 Don't store subscription or transport updates that are older than those already received. Also some small changes to DatabaseComponent impls for readability. 2011-07-14 13:53:13 +01:00
akwizgran 836d30f6df Retrieve messages from the database in raw form to avoid creating unnecessary short-lived objects. Added timestamps to headers. 2011-07-14 12:01:35 +01:00