code: private void sendRatchetUpdate(OmemoManager.LoggedInOmemoManager managerGuard, OmemoDevice contactsDevice)
              throws CorruptedOmemoKeyException, InterruptedException, SmackException.NoResponseException,
              NoSuchAlgorithmException, SmackException.NotConnectedException, CryptoFailedException,
              CannotEstablishOmemoSessionException {
  
          OmemoManager manager = managerGuard.get();
          OmemoElement ratchetUpdate = createRatchetUpdateElement(managerGuard, contactsDevice);
          Message m = new Message();
          m.setTo(contactsDevice.getJid());
          m.addExtension(ratchetUpdate);
          manager.getConnection().sendStanza(m);
      }
docs: Send an empty OMEMO message to contactsDevice in order to forward the ratchet.
  @param managerGuard
  @param contactsDevice
  @throws CorruptedOmemoKeyException if our or their OMEMO key is corrupted.
  @throws InterruptedException
  @throws SmackException.NoResponseException
  @throws NoSuchAlgorithmException if AES encryption fails
  @throws SmackException.NotConnectedException
  @throws CryptoFailedException if encryption fails (should not happen though, but who knows...)
  @throws CannotEstablishOmemoSessionException if we cannot establish a session with contactsDevice.