From d308a30d05a1c963ebc30cb0da94ed28523e22c2 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Tue, 8 Mar 2016 16:06:40 +0000 Subject: [PATCH] Added BdfIncomingMessageHook. --- .../clients/BdfIncomingMessageHook.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 briar-core/src/org/briarproject/clients/BdfIncomingMessageHook.java diff --git a/briar-core/src/org/briarproject/clients/BdfIncomingMessageHook.java b/briar-core/src/org/briarproject/clients/BdfIncomingMessageHook.java new file mode 100644 index 0000000000..9d9f0d691c --- /dev/null +++ b/briar-core/src/org/briarproject/clients/BdfIncomingMessageHook.java @@ -0,0 +1,59 @@ +package org.briarproject.clients; + +import org.briarproject.api.FormatException; +import org.briarproject.api.clients.ClientHelper; +import org.briarproject.api.clients.MessageQueueManager.IncomingQueueMessageHook; +import org.briarproject.api.clients.QueueMessage; +import org.briarproject.api.data.BdfDictionary; +import org.briarproject.api.data.BdfList; +import org.briarproject.api.data.MetadataParser; +import org.briarproject.api.db.DbException; +import org.briarproject.api.db.Metadata; +import org.briarproject.api.db.Transaction; +import org.briarproject.api.sync.Message; +import org.briarproject.api.sync.ValidationManager.IncomingMessageHook; +import org.briarproject.api.system.Clock; + +import static org.briarproject.api.clients.QueueMessage.QUEUE_MESSAGE_HEADER_LENGTH; +import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH; + +public abstract class BdfIncomingMessageHook implements IncomingMessageHook, + IncomingQueueMessageHook { + + protected final ClientHelper clientHelper; + protected final MetadataParser metadataParser; + + protected BdfIncomingMessageHook(ClientHelper clientHelper, + MetadataParser metadataParser, Clock clock) { + this.clientHelper = clientHelper; + this.metadataParser = metadataParser; + } + + protected abstract void incomingMessage(Transaction txn, BdfList message, + BdfDictionary meta) throws DbException, FormatException; + + @Override + public void incomingMessage(Transaction txn, Message m, Metadata meta) + throws DbException { + incomingMessage(txn, m, meta, MESSAGE_HEADER_LENGTH); + } + + @Override + public void incomingMessage(Transaction txn, QueueMessage q, Metadata meta) + throws DbException { + incomingMessage(txn, q, meta, QUEUE_MESSAGE_HEADER_LENGTH); + } + + private void incomingMessage(Transaction txn, Message m, Metadata meta, + int headerLength) throws DbException { + try { + byte[] raw = m.getRaw(); + BdfList message = clientHelper.toList(raw, headerLength, + raw.length - headerLength); + BdfDictionary metaDictionary = metadataParser.parse(meta); + incomingMessage(txn, message, metaDictionary); + } catch (FormatException e) { + throw new DbException(e); + } + } +} -- GitLab