Commit Graph

64 Commits

Author SHA1 Message Date
akwizgran
ff0909a0e9 Listeners for subscription changes. 2011-08-02 09:22:54 +01:00
akwizgran
cee4956b37 If no messages are added to a batch, don't call BatchWriter.finish() -
this allows the caller to avoid creating an empty packet by delaying
creation of the packet's header and trailer until something's written
to the packet's body. Changed the return semantics of
DatabaseComponent.generateBatch(ContactId, BatchWriter,
Collection<MessageId>) so that the IDs of messages considered for
inclusion in the batch but no longer sendable are also returned - this
allows the caller to remove them from the set of requested IDs.
2011-07-28 11:17:33 +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
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
10edc05dff Database portion of the offer/request/transfer protocol (untested). 2011-07-26 15:40:34 +01:00
akwizgran
a86ef2142f Sign the message with the group's private key if the group is
restricted, and check the signature if it should be present.
2011-07-25 21:54:49 +01:00
akwizgran
3f61d0c3df Changed the message format to store the author and group inline - this
doesn't take a huge amount of space and allows every message to be
self-certifying.
2011-07-25 21:14:16 +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
fb95565880 Use the BouncyCastle provider so we can be sure we won't get
NoSuchAlgorithmExceptions. Key generation is *slow* - I guess that's a
good sign. ;-)
2011-07-25 10:38:46 +01:00
akwizgran
c98c968b87 Removed unnecessary Raw interface. 2011-07-24 17:47:17 +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
5d000b62f8 Removed Writer.close(). 2011-07-22 18:08:05 +01:00
akwizgran
a573e87c04 ReaderImpl now maintains either one or two bytes of lookahead,
depending on the value of the first byte, so that an object's initial
tag is included in the data seen by the ObjectReader. Digests and
signatures can therefore be calculated over objects by their readers
without any risk of ambiguity.
2011-07-22 17:39:59 +01:00
akwizgran
45b4bef348 Catch ClassCastException when the encountered type doesn't match the
expected type, and re-throw as FormatException.
2011-07-20 15:07:17 +01:00
akwizgran
30d7a0f916 Defined which protocol objects require user-defined tags. 2011-07-20 14:45:56 +01:00
akwizgran
6b61cfa1bc Factored out header reading and batch reading into separate classes
for easier testing.
2011-07-19 19:13:27 +01:00
akwizgran
fb528a85ad Nested user-defined objects (and collections of them) can now be read
by registering ObjectReaders with the Reader.
2011-07-19 17:17:45 +01:00
akwizgran
ff984c69fb Messages are no longer encoded as raw byte arrays. 2011-07-19 14:01:33 +01:00
akwizgran
30fc6c1a92 Defined some user-defined tags for protocol elements. Currently they're just adding redundancy, but in future they'll be used for parsing nested elements. 2011-07-18 17:44:18 +01:00
akwizgran
427142ae51 Read and write user-defined tags. 2011-07-18 16:46:03 +01:00
akwizgran
0bc8a31749 Cleaned up serial and protocol packages in preparation for user-defined types. 2011-07-18 14:33:41 +01:00
akwizgran
62d69b6fb5 Don't use FileUtils.getBriarDirectory() in tests. 2011-07-14 20:42:41 +01:00
akwizgran
065b6e496f Don't use the real Briar directory for unit tests. 2011-07-14 20:02:47 +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
akwizgran
a121dcdda8 New retransmission mechanism, which does away with the need for bundle IDs and should cope better with high bandwidth-delay product links. 2011-07-14 09:39:15 +01:00
akwizgran
e13b0437c3 Rewrote the bundle reading and writing code to eliminate copying. Signatures and digests are now calculated on the fly as the data is read or written. This is a little bit tricky in the case of reading because ReaderImpl uses a lookahead byte, so the signature and message digest need to lag one byte behind. 2011-07-13 16:39:31 +01:00
akwizgran
c3643a037b Added accessors for the amount of raw data read and written by readers and writers - this fixes a fixme in MessageParserImpl. 2011-07-12 20:27:37 +01:00
akwizgran
22a67cc0d2 Message parser and encoder. 2011-07-12 18:41:08 +01:00
akwizgran
2af6f19476 Check the return value from Signature.verify(). *cough* 2011-07-12 17:08:31 +01:00
akwizgran
3d549ea6ac Builders for incoming and outgoing headers and batches. The protocol and serial components can now be used to serialise, sign, deserialise and verify real bundles (except for message parsing). 2011-07-12 16:50:20 +01:00
akwizgran
e0509db45d Protocol refactoring. Each bundle now consists of a signed header and zero or more signed batches. There is no overall signature on the bundle, since the bundle's contents may need to be processed before the entire bundle has been read. The protocol does not prevent an adversary from removing batches from a bundle, reordering batches, moving them from one bundle to another, etc. However, since each batch is signed and acknowledged independently, no such guarantees are required. Bundle IDs will go away when the retransmission mechanism is changed. 2011-07-12 12:55:46 +01:00
akwizgran
4977695a79 Refactored readers and writers. 2011-07-12 11:28:26 +01:00
akwizgran
4f5eb21180 Builders for batches and bundles. 2011-07-11 12:25:04 +01:00
akwizgran
51e371f7ca Added start/end methods for writing indefinite lists and maps. 2011-07-11 10:07:01 +01:00
akwizgran
63f1caebac Iterators throw FormatRuntimeException if a FormatException occurs, or RuntimeException if an IO error occurs. Reduced visibility of impl classes. 2011-07-10 22:42:38 +01:00
akwizgran
0f4ffe9fbc Added type-safe accessors and iterator accessors for lists and maps. 2011-07-10 18:31:18 +01:00
akwizgran
1f5e52c31b Modifying Protocol Buffers (or Thrift, or MessagePack, or any of the free ASN.1 implementations I could find) to support length constraints was more work than writing a custom serialisation format, so I wrote a custom format. 2011-07-10 14:44:15 +01:00
akwizgran
4deb52478d Protocol Buffers will be used for the wire protocol. As a quick test it's now used to serialize transport details when creating an invitation. 2011-07-07 22:10:02 +01:00
akwizgran
7fb589075d Added support for local transport details. Each bundle contains the sender's latest transport details. 2011-07-06 19:07:10 +01:00
akwizgran
b548820f77 Transport details for contacts can be stored in the database (these are arbitrary key/value pairs that describe how to reach the contact using a particular transport). Moved the generic ContactId and Rating classes out of the database package of the API. 2011-07-06 16:50:01 +01:00
akwizgran
9fbf0f21de Contact IDs are now auto-generated. 2011-07-06 14:53:35 +01:00