AbstractOmemoMessageListener.java

  1. /**
  2.  *
  3.  * Copyright 2018 Paul Schaub
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *     http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package org.jivesoftware.smackx.omemo;

  18. import org.jivesoftware.smack.packet.Message;
  19. import org.jivesoftware.smack.packet.Stanza;

  20. import org.jivesoftware.smackx.carbons.packet.CarbonExtension;
  21. import org.jivesoftware.smackx.omemo.listener.OmemoMessageListener;

  22. import org.igniterealtime.smack.inttest.util.ResultSyncPoint;
  23. import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;

  24. /**
  25.  * Convenience class. This listener is used so that implementers of OmemoMessageListener don't have to implement
  26.  * both messages. Instead they can just overwrite the message they want to implement.
  27.  */
  28. public class AbstractOmemoMessageListener implements OmemoMessageListener {

  29.     @Override
  30.     public void onOmemoMessageReceived(Stanza stanza, OmemoMessage.Received decryptedMessage) {
  31.         // Override me
  32.     }

  33.     @Override
  34.     public void onOmemoCarbonCopyReceived(CarbonExtension.Direction direction, Message carbonCopy, Message wrappingMessage, OmemoMessage.Received decryptedCarbonCopy) {
  35.         // Override me
  36.     }

  37.     private static class SyncPointListener extends AbstractOmemoMessageListener {
  38.         protected final ResultSyncPoint<?, ?> syncPoint;

  39.         SyncPointListener(ResultSyncPoint<?, ?> syncPoint) {
  40.             this.syncPoint = syncPoint;
  41.         }

  42.         public ResultSyncPoint<?, ?> getSyncPoint() {
  43.             return syncPoint;
  44.         }
  45.     }

  46.     static class MessageListener extends SyncPointListener {

  47.         protected final String expectedMessage;

  48.         MessageListener(String expectedMessage, SimpleResultSyncPoint syncPoint) {
  49.             super(syncPoint);
  50.             this.expectedMessage = expectedMessage;
  51.         }

  52.         MessageListener(String expectedMessage) {
  53.             this(expectedMessage, new SimpleResultSyncPoint());
  54.         }

  55.         @Override
  56.         public void onOmemoMessageReceived(Stanza stanza, OmemoMessage.Received received) {
  57.             SimpleResultSyncPoint srp = (SimpleResultSyncPoint) syncPoint;
  58.             if (received.isKeyTransportMessage()) {
  59.                 return;
  60.             }

  61.             if (received.getBody().equals(expectedMessage)) {
  62.                 srp.signal();
  63.             } else {
  64.                 srp.signalFailure("Received decrypted message was not equal to sent message.");
  65.             }
  66.         }
  67.     }

  68.     static class PreKeyMessageListener extends MessageListener {
  69.         PreKeyMessageListener(String expectedMessage, SimpleResultSyncPoint syncPoint) {
  70.             super(expectedMessage, syncPoint);
  71.         }

  72.         PreKeyMessageListener(String expectedMessage) {
  73.             this(expectedMessage, new SimpleResultSyncPoint());
  74.         }

  75.         @Override
  76.         public void onOmemoMessageReceived(Stanza stanza, OmemoMessage.Received received) {
  77.             SimpleResultSyncPoint srp = (SimpleResultSyncPoint) syncPoint;
  78.             if (received.isKeyTransportMessage()) {
  79.                 return;
  80.             }

  81.             if (received.isPreKeyMessage()) {
  82.                 if (received.getBody().equals(expectedMessage)) {
  83.                     srp.signal();
  84.                 } else {
  85.                     srp.signalFailure("Received decrypted message was not equal to sent message.");
  86.                 }
  87.             } else {
  88.                 srp.signalFailure("Received message was not a PreKeyMessage.");
  89.             }
  90.         }
  91.     }

  92.     static class KeyTransportListener extends SyncPointListener {

  93.         KeyTransportListener(SimpleResultSyncPoint resultSyncPoint) {
  94.             super(resultSyncPoint);
  95.         }

  96.         KeyTransportListener() {
  97.             this(new SimpleResultSyncPoint());
  98.         }

  99.         @Override
  100.         public void onOmemoMessageReceived(Stanza stanza, OmemoMessage.Received received) {
  101.             SimpleResultSyncPoint s = (SimpleResultSyncPoint) syncPoint;
  102.             if (received.isKeyTransportMessage()) {
  103.                 s.signal();
  104.             }
  105.         }
  106.     }

  107.     static class PreKeyKeyTransportListener extends KeyTransportListener {
  108.         PreKeyKeyTransportListener(SimpleResultSyncPoint resultSyncPoint) {
  109.             super(resultSyncPoint);
  110.         }

  111.         PreKeyKeyTransportListener() {
  112.             this(new SimpleResultSyncPoint());
  113.         }

  114.         @Override
  115.         public void onOmemoMessageReceived(Stanza stanza, OmemoMessage.Received received) {
  116.             SimpleResultSyncPoint s = (SimpleResultSyncPoint) syncPoint;
  117.             if (received.isPreKeyMessage()) {
  118.                 if (received.isKeyTransportMessage()) {
  119.                     s.signal();
  120.                 }
  121.             }
  122.         }
  123.     }
  124. }