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
4497774311
Derive separate keys for each direction.
2011-08-14 12:18:16 +02:00
akwizgran
254da2da27
Removed the restriction that transport updates have to be written in
...
delimited form.
2011-08-14 11:41:56 +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
e1b9ee247c
Integration test for the protocol component.
2011-08-13 16:56:00 +02:00
akwizgran
8853c54930
Made the lock fairness test more precise.
2011-08-13 16:25:45 +02:00
akwizgran
36fc34993d
Lock fairness test: check that fair ReentrantReadWriteLocks don't
...
allow writers to starve. If this test passes on Java 5 and 6, we can
get rid of SynchronizedDatabaseComponent and merge
ReadWriteLockDatabaseComponent with DatabaseComponentImpl.
2011-08-13 15:39:09 +02:00
akwizgran
9d25a819d1
Decoupled ProtocolReader (which belongs in the protocol component)
...
from PacketReader (which belongs in the transport component).
2011-08-13 14:18:16 +02:00
akwizgran
5b6fecfb43
Updated FileReadWriteTest to use the transport component for
...
encrypting and decrypting packets. Moved the test to the main package
since it's an integration test for several components.
2011-08-12 23:24:24 +02:00
akwizgran
0504a2d6fd
Implemented PacketReader, renamed Packet{Reader,Writer}Factory in the
...
protocol component to Protocol{Reader,Writer}Factory.
2011-08-12 21:55:22 +02:00
akwizgran
2c387f80b1
Packet decrypter with unit tests. Decryption is complicated by the
...
fact that the cipher wants to operate a block at a time even though
it's in CTR mode.
2011-08-12 17:14:58 +02:00
akwizgran
68b4760dfa
Use a constant for the tag size.
2011-08-12 14:26:56 +02:00
akwizgran
f0cf825ca9
Javadoc and unit test for SharedSecret.
2011-08-12 12:57:23 +02:00
akwizgran
e896b2d86d
Unit tests for ConnectionRecogniserImpl.
2011-08-12 12:26:47 +02:00
akwizgran
a789f49a39
Separated tag encoding from PacketWriterImpl, since it's also needed
...
by the code that recognises tags. Implemented ConnectionRecogniser
(untested).
2011-08-11 19:55:22 +01:00
akwizgran
7545a1cc8f
Moved Bytes to the main package. Added a SharedSecret class to parse
...
encrypted secrets retrieved from the database.
2011-08-11 19:14:20 +01: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
0e6638bad6
Retrieve the set of unseen connection numbers from a connection
...
window.
2011-08-11 13:58:11 +01:00
akwizgran
ac4521152f
Unit tests for ConnectionWindowImpl.
2011-08-11 13:37:18 +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
f3f0c223c4
PacketWriter is implemented by two classes: PacketWriterImpl and
...
PacketEncrypter. The separation allows authentication and encryption
to be tested separately.
2011-08-09 17:50:54 +01:00
akwizgran
e9d0021f56
Added interfaces for reading and writing packets and recognising which
...
contact originated an incoming connection, and an implementation of
the PacketWriter interface.
2011-08-09 16:15:25 +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
c90a18278b
Allow a maximum length to be specified when reading strings or byte
...
arrays, check it before allocating the buffer, and always specify the
maximum length when reading untrusted data - otherwise
CountingConsumer will reject the packet, but not before we've tried to
allocate a buffer of the specified size (up to 2 GB).
2011-08-03 19:29:30 +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
02c4d9197c
Added CounterModeTest to ant buildfile.
2011-08-01 14:36:19 +01:00
akwizgran
9586e0de9c
Unit tests for CTR-mode encryption.
2011-08-01 14:01:17 +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
4311b1a224
Added RequestReaderTest to ant buildfile.
2011-07-27 11:08:17 +01:00
akwizgran
b161e5ed1d
Request reader and unit test.
2011-07-27 11:06:54 +01:00
akwizgran
0933092295
Added RequestWriterImplTest to ant buildfile.
2011-07-26 22:02:51 +01:00
akwizgran
0cf8477504
Read and write offers. Mostly boilerplate.
2011-07-26 22:00:39 +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