Skip to content

Client worker/websocket

Ruben De Smet requested to merge client-worker into master

Closes #30 (closed)

TODO:

  • Load root certificate.
    • Decide whether to stay with rustls or move to OpenSSL. Actix allows both OpenSSL gives an immediate segfault, nevermind. Let's avoid more C code :'-)
  • WebSocket things
    • Reconnect WebSocket on closure. postponed to #84
      • On reconnection failure, some form of exponential back-off?
    • Don't try to reconnect while not connected to the intertubes. postponed to #84
  • Make sure we're not doing too much socket work on the main thread.
    • Mostly, the decrypt with libsignal-protocol-rs should be called on a thread pool, because it happens synchronously and loads data from storage. #85 (closed)
  • Dispatch of password towards socket is dirty. This needs some re-engineering, maybe should be postponed to %"v0.7.0: cleaned and refactored"/another issue.
  • When everything is more or less ready, make sure Cargo.lock doesn't experience a very hectic life, squash it a bit.
    • Especially squash all "Update libsignal-protocol-rs" commits into "Add libsignal-protocol and libsignal-service git versions".
    • Get rid of the git-versions of libsignal-protocol, especially all the branches.
  • This MR possibly imports AGPLv3+ code. Fix the LICENSE statements; we can combine Whisperfish 0.5 GPLv3 code + libsignal-service-rs AGPLv3+ code into Whisperfish 0.6, I'd think.
  • Handle all incoming message types
    • DataMessage with attachments
      • Download the attachments
      • Decrypt attachments
    • Group messages
    • Wtf is group Delivery message?
    • Receipts
    • Synchronize request postponed #83 (closed)
    • Additional synchronize responses, which would start work towards #77. Postponed to #83 (closed) and #77.
  • Emit signals to QML (cfr. https://gitlab.com/rubdos/whisperfish/-/merge_requests/27#note_377865196):

    The Go code emits the signals

    c.MessageReceived(sess.ID, message.ID)
    c.NotifyMessage(sess.ID, sess.Source, sess.Message, sess.IsGroup)

These are things I note down while receiving messages from all over the place:

  • Where should read receipts be handled? Currently it panics, because SessionCipher::open_envelope doesn't know the type. Check this with the Java and Go versions.
  • Fix up tests
Edited by Ruben De Smet

Merge request reports