diff --git a/briar-core/src/org/briarproject/messaging/IncomingSession.java b/briar-core/src/org/briarproject/messaging/IncomingSession.java index f7244c4fba926efdd3736136b80e34e1b167205a..b85ccda0db618ae8aef73072f6d1602913f8f91a 100644 --- a/briar-core/src/org/briarproject/messaging/IncomingSession.java +++ b/briar-core/src/org/briarproject/messaging/IncomingSession.java @@ -23,8 +23,10 @@ import org.briarproject.api.messaging.Ack; import org.briarproject.api.messaging.Message; import org.briarproject.api.messaging.MessageVerifier; import org.briarproject.api.messaging.MessagingSession; +import org.briarproject.api.messaging.Offer; import org.briarproject.api.messaging.PacketReader; import org.briarproject.api.messaging.PacketReaderFactory; +import org.briarproject.api.messaging.Request; import org.briarproject.api.messaging.RetentionAck; import org.briarproject.api.messaging.RetentionUpdate; import org.briarproject.api.messaging.SubscriptionAck; @@ -78,6 +80,12 @@ class IncomingSession implements MessagingSession, EventListener { } else if(packetReader.hasMessage()) { UnverifiedMessage m = packetReader.readMessage(); cryptoExecutor.execute(new VerifyMessage(m)); + } else if(packetReader.hasOffer()) { + Offer o = packetReader.readOffer(); + dbExecutor.execute(new ReceiveOffer(o)); + } else if(packetReader.hasRequest()) { + Request r = packetReader.readRequest(); + dbExecutor.execute(new ReceiveRequest(r)); } else if(packetReader.hasRetentionAck()) { RetentionAck a = packetReader.readRetentionAck(); dbExecutor.execute(new ReceiveRetentionAck(a)); @@ -135,6 +143,7 @@ class IncomingSession implements MessagingSession, EventListener { db.receiveAck(contactId, ack); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } } @@ -153,6 +162,7 @@ class IncomingSession implements MessagingSession, EventListener { dbExecutor.execute(new ReceiveMessage(m)); } catch(GeneralSecurityException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } } @@ -170,6 +180,43 @@ class IncomingSession implements MessagingSession, EventListener { db.receiveMessage(contactId, message); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); + } + } + } + + private class ReceiveOffer implements Runnable { + + private final Offer offer; + + private ReceiveOffer(Offer offer) { + this.offer = offer; + } + + public void run() { + try { + db.receiveOffer(contactId, offer); + } catch(DbException e) { + if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); + } + } + } + + private class ReceiveRequest implements Runnable { + + private final Request request; + + private ReceiveRequest(Request request) { + this.request = request; + } + + public void run() { + try { + db.receiveRequest(contactId, request); + } catch(DbException e) { + if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } } @@ -187,6 +234,7 @@ class IncomingSession implements MessagingSession, EventListener { db.receiveRetentionAck(contactId, ack); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } } @@ -204,6 +252,7 @@ class IncomingSession implements MessagingSession, EventListener { db.receiveRetentionUpdate(contactId, update); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } } @@ -221,6 +270,7 @@ class IncomingSession implements MessagingSession, EventListener { db.receiveSubscriptionAck(contactId, ack); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } } @@ -238,6 +288,7 @@ class IncomingSession implements MessagingSession, EventListener { db.receiveSubscriptionUpdate(contactId, update); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } } @@ -255,6 +306,7 @@ class IncomingSession implements MessagingSession, EventListener { db.receiveTransportAck(contactId, ack); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } } @@ -272,6 +324,7 @@ class IncomingSession implements MessagingSession, EventListener { db.receiveTransportUpdate(contactId, update); } catch(DbException e) { if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + interrupt(); } } }