mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
388 lines
11 KiB
Java
388 lines
11 KiB
Java
package org.briarproject.api.db;
|
|
|
|
import org.briarproject.api.DeviceId;
|
|
import org.briarproject.api.TransportId;
|
|
import org.briarproject.api.contact.Contact;
|
|
import org.briarproject.api.contact.ContactId;
|
|
import org.briarproject.api.identity.Author;
|
|
import org.briarproject.api.identity.AuthorId;
|
|
import org.briarproject.api.identity.LocalAuthor;
|
|
import org.briarproject.api.settings.Settings;
|
|
import org.briarproject.api.sync.Ack;
|
|
import org.briarproject.api.sync.ClientId;
|
|
import org.briarproject.api.sync.Group;
|
|
import org.briarproject.api.sync.GroupId;
|
|
import org.briarproject.api.sync.Message;
|
|
import org.briarproject.api.sync.MessageId;
|
|
import org.briarproject.api.sync.MessageStatus;
|
|
import org.briarproject.api.sync.Offer;
|
|
import org.briarproject.api.sync.Request;
|
|
import org.briarproject.api.transport.TransportKeys;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Collection;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* Encapsulates the database implementation and exposes high-level operations
|
|
* to other components.
|
|
*/
|
|
public interface DatabaseComponent {
|
|
|
|
/**
|
|
* Opens the database and returns true if the database already existed.
|
|
*/
|
|
boolean open() throws DbException;
|
|
|
|
/**
|
|
* Waits for any open transactions to finish and closes the database.
|
|
*/
|
|
void close() throws DbException, IOException;
|
|
|
|
/**
|
|
* Starts a new transaction and returns an object representing it.
|
|
* <p/>
|
|
* This method acquires locks, so it must not be called while holding a
|
|
* lock.
|
|
* @param readOnly true if the transaction will only be used for reading.
|
|
*/
|
|
Transaction startTransaction(boolean readOnly) throws DbException;
|
|
|
|
/**
|
|
* Ends a transaction. If the transaction is marked as complete, the
|
|
* transaction is committed and any events attached to the transaction are
|
|
* broadcast; otherwise the transaction is aborted.
|
|
*/
|
|
void endTransaction(Transaction txn) throws DbException;
|
|
|
|
/**
|
|
* Stores a contact associated with the given local and remote pseudonyms,
|
|
* and returns an ID for the contact.
|
|
*/
|
|
ContactId addContact(Transaction txn, Author remote, AuthorId local,
|
|
boolean active) throws DbException;
|
|
|
|
/**
|
|
* Stores a group.
|
|
*/
|
|
void addGroup(Transaction txn, Group g) throws DbException;
|
|
|
|
/**
|
|
* Stores a local pseudonym.
|
|
*/
|
|
void addLocalAuthor(Transaction txn, LocalAuthor a) throws DbException;
|
|
|
|
/**
|
|
* Stores a local message.
|
|
*/
|
|
void addLocalMessage(Transaction txn, Message m, ClientId c, Metadata meta,
|
|
boolean shared) throws DbException;
|
|
|
|
/**
|
|
* Stores a transport.
|
|
*/
|
|
void addTransport(Transaction txn, TransportId t, int maxLatency)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Stores transport keys for a newly added contact.
|
|
*/
|
|
void addTransportKeys(Transaction txn, ContactId c, TransportKeys k)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Deletes the message with the given ID. The message ID and any other
|
|
* associated data are not deleted.
|
|
*/
|
|
void deleteMessage(Transaction txn, MessageId m) throws DbException;
|
|
|
|
/** Deletes any metadata associated with the given message. */
|
|
void deleteMessageMetadata(Transaction txn, MessageId m) throws DbException;
|
|
|
|
/**
|
|
* Returns an acknowledgement for the given contact, or null if there are
|
|
* no messages to acknowledge.
|
|
*/
|
|
Ack generateAck(Transaction txn, ContactId c, int maxMessages)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Returns a batch of raw messages for the given contact, with a total
|
|
* length less than or equal to the given length, for transmission over a
|
|
* transport with the given maximum latency. Returns null if there are no
|
|
* sendable messages that fit in the given length.
|
|
*/
|
|
Collection<byte[]> generateBatch(Transaction txn, ContactId c,
|
|
int maxLength, int maxLatency) throws DbException;
|
|
|
|
/**
|
|
* Returns an offer for the given contact for transmission over a
|
|
* transport with the given maximum latency, or null if there are no
|
|
* messages to offer.
|
|
*/
|
|
Offer generateOffer(Transaction txn, ContactId c, int maxMessages,
|
|
int maxLatency) throws DbException;
|
|
|
|
/**
|
|
* Returns a request for the given contact, or null if there are no
|
|
* messages to request.
|
|
*/
|
|
Request generateRequest(Transaction txn, ContactId c, int maxMessages)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Returns a batch of raw messages for the given contact, with a total
|
|
* length less than or equal to the given length, for transmission over a
|
|
* transport with the given maximum latency. Only messages that have been
|
|
* requested by the contact are returned. Returns null if there are no
|
|
* sendable messages that fit in the given length.
|
|
*/
|
|
Collection<byte[]> generateRequestedBatch(Transaction txn, ContactId c,
|
|
int maxLength, int maxLatency) throws DbException;
|
|
|
|
/**
|
|
* Returns the contact with the given ID.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Contact getContact(Transaction txn, ContactId c) throws DbException;
|
|
|
|
/**
|
|
* Returns all contacts.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Collection<Contact> getContacts(Transaction txn) throws DbException;
|
|
|
|
/**
|
|
* Returns all contacts associated with the given local pseudonym.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Collection<ContactId> getContacts(Transaction txn, AuthorId a)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Returns the unique ID for this device.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
DeviceId getDeviceId(Transaction txn) throws DbException;
|
|
|
|
/**
|
|
* Returns the group with the given ID.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Group getGroup(Transaction txn, GroupId g) throws DbException;
|
|
|
|
/**
|
|
* Returns the metadata for the given group.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Metadata getGroupMetadata(Transaction txn, GroupId g) throws DbException;
|
|
|
|
/**
|
|
* Returns all groups belonging to the given client.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Collection<Group> getGroups(Transaction txn, ClientId c) throws DbException;
|
|
|
|
/**
|
|
* Returns the local pseudonym with the given ID.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
LocalAuthor getLocalAuthor(Transaction txn, AuthorId a) throws DbException;
|
|
|
|
/**
|
|
* Returns all local pseudonyms.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Collection<LocalAuthor> getLocalAuthors(Transaction txn) throws DbException;
|
|
|
|
/**
|
|
* Returns the IDs of any messages that need to be validated by the given
|
|
* client.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Collection<MessageId> getMessagesToValidate(Transaction txn, ClientId c)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Returns the message with the given ID, in serialised form, or null if
|
|
* the message has been deleted.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
byte[] getRawMessage(Transaction txn, MessageId m) throws DbException;
|
|
|
|
/**
|
|
* Returns the metadata for all messages in the given group.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Map<MessageId, Metadata> getMessageMetadata(Transaction txn, GroupId g)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Returns the metadata for the given message.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Metadata getMessageMetadata(Transaction txn, MessageId m)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Returns the status of all messages in the given group with respect to
|
|
* the given contact.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Collection<MessageStatus> getMessageStatus(Transaction txn, ContactId c,
|
|
GroupId g) throws DbException;
|
|
|
|
/**
|
|
* Returns the status of the given message with respect to the given
|
|
* contact.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
MessageStatus getMessageStatus(Transaction txn, ContactId c, MessageId m)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Returns all settings in the given namespace.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Settings getSettings(Transaction txn, String namespace) throws DbException;
|
|
|
|
/**
|
|
* Returns all transport keys for the given transport.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
Map<ContactId, TransportKeys> getTransportKeys(Transaction txn,
|
|
TransportId t) throws DbException;
|
|
|
|
/**
|
|
* Increments the outgoing stream counter for the given contact and
|
|
* transport in the given rotation period .
|
|
*/
|
|
void incrementStreamCounter(Transaction txn, ContactId c, TransportId t,
|
|
long rotationPeriod) throws DbException;
|
|
|
|
/**
|
|
* Returns true if the given group is visible to the given contact.
|
|
* <p/>
|
|
* Read-only.
|
|
*/
|
|
boolean isVisibleToContact(Transaction txn, ContactId c, GroupId g)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Merges the given metadata with the existing metadata for the given
|
|
* group.
|
|
*/
|
|
void mergeGroupMetadata(Transaction txn, GroupId g, Metadata meta)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Merges the given metadata with the existing metadata for the given
|
|
* message.
|
|
*/
|
|
void mergeMessageMetadata(Transaction txn, MessageId m, Metadata meta)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Merges the given settings with the existing settings in the given
|
|
* namespace.
|
|
*/
|
|
void mergeSettings(Transaction txn, Settings s, String namespace)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Processes an ack from the given contact.
|
|
*/
|
|
void receiveAck(Transaction txn, ContactId c, Ack a) throws DbException;
|
|
|
|
/**
|
|
* Processes a message from the given contact.
|
|
*/
|
|
void receiveMessage(Transaction txn, ContactId c, Message m)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Processes an offer from the given contact.
|
|
*/
|
|
void receiveOffer(Transaction txn, ContactId c, Offer o) throws DbException;
|
|
|
|
/**
|
|
* Processes a request from the given contact.
|
|
*/
|
|
void receiveRequest(Transaction txn, ContactId c, Request r)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Removes a contact (and all associated state) from the database.
|
|
*/
|
|
void removeContact(Transaction txn, ContactId c) throws DbException;
|
|
|
|
/**
|
|
* Removes a group (and all associated state) from the database.
|
|
*/
|
|
void removeGroup(Transaction txn, Group g) throws DbException;
|
|
|
|
/**
|
|
* Removes a local pseudonym (and all associated state) from the database.
|
|
*/
|
|
void removeLocalAuthor(Transaction txn, AuthorId a) throws DbException;
|
|
|
|
/**
|
|
* Removes a transport (and all associated state) from the database.
|
|
*/
|
|
void removeTransport(Transaction txn, TransportId t) throws DbException;
|
|
|
|
/**
|
|
* Marks the given contact as active or inactive.
|
|
*/
|
|
void setContactActive(Transaction txn, ContactId c, boolean active)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Marks the given message as shared or unshared.
|
|
*/
|
|
void setMessageShared(Transaction txn, Message m, boolean shared)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Marks the given message as valid or invalid.
|
|
*/
|
|
void setMessageValid(Transaction txn, Message m, ClientId c, boolean valid)
|
|
throws DbException;
|
|
|
|
/**
|
|
* Sets the reordering window for the given contact and transport in the
|
|
* given rotation period.
|
|
*/
|
|
void setReorderingWindow(Transaction txn, ContactId c, TransportId t,
|
|
long rotationPeriod, long base, byte[] bitmap) throws DbException;
|
|
|
|
/**
|
|
* Makes a group visible or invisible to a contact.
|
|
*/
|
|
void setVisibleToContact(Transaction txn, ContactId c, GroupId g,
|
|
boolean visible) throws DbException;
|
|
|
|
/**
|
|
* Stores the given transport keys, deleting any keys they have replaced.
|
|
*/
|
|
void updateTransportKeys(Transaction txn,
|
|
Map<ContactId, TransportKeys> keys) throws DbException;
|
|
}
|