Go to file
2022-03-15 05:48:23 +00:00
deps submodules 2022-03-14 14:10:03 +00:00
tests checkpoint 2022-01-25 09:02:58 +00:00
xmpp jids - memory integrity 2022-03-15 01:14:31 +00:00
.dir-locals.el pgp automation 2021-07-22 06:27:39 +01:00
.envrc checkpoint 2022-01-25 09:02:58 +00:00
.gitattributes Implement emoji exact search functions 2018-05-11 22:41:15 +01:00
.gitignore coverage gen 2022-01-12 16:25:02 +00:00
.gitmodules submodules 2022-03-14 14:10:03 +00:00
.travis.yml Clang doesn't like our gnu extensions despite -std=gnu99 2018-05-12 18:32:35 +01:00
account.cpp jids - memory integrity 2022-03-15 01:14:31 +00:00
account.hh checkpoint 2022-01-25 09:02:58 +00:00
buffer.cpp rest//.c -> cpp 2022-01-11 23:32:34 +00:00
buffer.hh rest//.c -> cpp 2022-01-11 23:32:34 +00:00
channel.cpp better version and editing 2022-03-14 13:51:37 +00:00
channel.hh some raii 2022-01-13 07:31:45 +00:00
command.cpp better version and editing 2022-03-14 13:51:37 +00:00
command.hh command/connection.c -> cpp 2022-01-11 23:23:54 +00:00
completion.cpp rest//.c -> cpp 2022-01-11 23:32:34 +00:00
completion.hh rest//.c -> cpp 2022-01-11 23:32:34 +00:00
config.cpp channel/user.c -> cpp 2022-01-11 21:38:52 +00:00
config.hh config.c -> cpp 2022-01-11 20:50:10 +00:00
connection.cpp jids - memory integrity 2022-03-15 01:14:31 +00:00
connection.hh some raii 2022-01-13 07:31:45 +00:00
gcrypt.hh something something inheritance 2022-01-18 08:31:45 +00:00
input.cpp rest//.c -> cpp 2022-01-11 23:32:34 +00:00
input.hh rest//.c -> cpp 2022-01-11 23:32:34 +00:00
LICENSE Initial commit 2018-04-29 11:40:16 +01:00
makefile pgp: switch from rnp to gpgme 2022-03-15 05:48:23 +00:00
message.cpp some raii 2022-01-13 07:31:45 +00:00
message.hh some raii 2022-01-13 07:31:45 +00:00
NOTES.md see readme 2021-07-25 09:15:12 +01:00
omemo.cpp checkpoint 2022-01-25 09:02:58 +00:00
omemo.hh fix bug from f2e711a 2022-01-14 21:29:51 +00:00
pgp.cpp pgp: switch from rnp to gpgme 2022-03-15 05:48:23 +00:00
pgp.hh pgp: switch from rnp to gpgme 2022-03-15 05:48:23 +00:00
plugin.cpp checkpoint 2022-01-25 09:02:58 +00:00
plugin.hh better version and editing 2022-03-14 13:51:37 +00:00
README.org pgp: switch from rnp to gpgme 2022-03-15 05:48:23 +00:00
signal.hh something something inheritance 2022-01-18 08:31:45 +00:00
user.cpp some raii 2022-01-13 07:31:45 +00:00
user.hh channel/user.c -> cpp 2022-01-11 21:38:52 +00:00
util.cpp omemo/pgp/util.c -> cpp 2022-01-11 23:12:31 +00:00
util.hh omemo/pgp/util.c -> cpp 2022-01-11 23:12:31 +00:00

weechat-xmpp

file:https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master file:https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master https://img.shields.io/github/issues/bqv/weechat-xmpp.svg https://img.shields.io/github/issues-closed/bqv/weechat-xmpp.svg https://img.shields.io/github/license/bqv/weechat-xmpp.svg https://img.shields.io/badge/weechat--extras-xmpp-blue.svg file:https://img.shields.io/badge/xmpp-weechat%40muc.xa0.uk-yellow

Status: XMPP for power users and digital masochists
Location: http://github.com/bqv/weechat-xmpp
Version: 0.2.0
Disclaimer: I'm lazy and unashamedly clinically insane

Description

A weechat plugin in C to extend the chat client to support XMPP and a currently minimal but ideally maximal set of XEPs. My priority here is to have an android-available XMPP client that hides as little as possible from the user. To use this with android, set up a relay (`/relay`) and see weechat-android. I might rewrite this in C++ at some point when I feel like I can do it without burning out.

Usage

  1. Start with /account add, use /help account for instructions.
  2. Use /account connect <account-name> with the name set at add-time.

Installing

Place xmpp.so in the appropriate place for weechat plugins.

Dependencies

  • libstrophe (dynamic, dependency)
  • libxml2 (dynamic, dependency)
  • lmdb (dynamic, dependency)
  • libomemo-c (libsignal-protocol-c) (dynamic, dependency)
  • gpgme (dynamic, dependency)
  • weechat (>= v3.0)

.. or just use the guix spec in .envrc

Building

git clone git://github.com/bqv/weechat-xmpp.git
cd weechat-xmpp
git submodule update --init --recursive
make
make install

Do NOT run make install as root, it installs the plugin to your local weechat plugins directory

Development

I use emacs for development of this, although I am also a fan of vim. My debug build process involves static analysis with clang and cppcheck, and dynamic analysis with address-sanitizer and leak-sanitizer. My debug evaluation process involves gdb/mi run with the arguments -ex "handle SIGPIPE nostop noprint pass" --args weechat -a 2>asan.log since part of weechat and it's default plugins use SIGPIPE as control.

I have no real requests for style of pull requests besides a wish that you keep vaguely to the indentation style I use for this project.

Happy coding!

Tasks

DONE [A] Implement basic functionality (milestone v0.1)

  • Connecting
  • Pretty-printing stanzas
  • Receiveing and formatting PMs to a dedicated buffer
  • Responding to PMs and formatting responses
  • Opening PMs (/chat)

TODO [A] Implement essential functionality (milestone v0.2)

  • Opening PMs with initial message
  • OOB messages

    • Single media on a line
    • Multiple media inline (protocol?)
    • [#D] Encrypted (pgp/omemo)
  • Buffer autoswitch on enter/open
  • Handle open/enter jids with a resource without breaking
  • Allow /close without crashing
  • [#B] Handle wide errors gracefully

    • [#B] Event-driven MUC entrance
  • [#C] XMPP Ping (xep-199)
  • [#A] Highlight
  • MUCs

    • Opening (/enter)
    • [#B] Leave on /close
    • Receiving
    • Sending

      • With /msg
    • [#B] Edits

      • [#B] Displaying
      • [#B] Tagging
      • [#B] Making (/edit)
      • [#C] Diff highlighting
    • [#B] Handle errors gracefully
    • [#B] Presence/nicklist

      • [#B] Enters
      • [#B] Leaves
      • [#B] Tracking
    • [#B] Set/show topic
  • OMEMO (libomemo-c)

    • Presence

      • Disco
      • Disco response
      • Key Generation / storage (lmdb)

        • Generation
        • Storage
        • Announce

          • Device ID
          • Bundles
    • Messages
  • [#C] MUC PMs
  • [#A] Send typing notifications
  • [#A] Recv typing notifications
  • [#C] Read receipts

    • Chat Markers (XEP-0333)

      • Composing
      • Paused
      • [?] Active
      • Inactive
      • Gone
    • Message Delivery (XEP-0184)
  • Message Carbons
  • Service Disco

    • /disco [domain]
  • /whois [user|muc]

    • User Avatars
    • MUC Icons
  • MAM Fetching
  • Bookmarks / Roster

    • Autojoin bookmarks

      • Except biboumi rooms
    • Add bookmarks
    • Delete bookmarks
    • Roster
  • OTR (libotr)
  • PGP (gpgme)

    • Use keyrings (from gnupg)
    • Presence
    • Decryption
    • Encryption
    • Custom set/clear key (/pgp)
    • Save pgp key set per jid/muc
  • Room Explorer (https://search.jabber.network/docs/api)

TODO [C] Adhere to CCS (milestone v0.3)

TODO [#D] Close all issues (milestone v1.0)

Contributing

Your contributions are always welcome! Please submit a pull request or create an issue to add a new or missing feature.

Testimonials

"Weechat-Strophe - for the discerning dual IRCer XMPPer" Ellenor et al Bjornsdottir

License

weechat-xmpp is licensed under the Mozilla Public License Version 2.0 available here and in LICENSE.