#+TITLE: weechat-xmpp #+AUTHOR: Tony Olagbaiye #+EMAIL: bqv@fron.io #+DATE: 2021-06-26 #+DESCRIPTION: Weechat plugin for XMPP #+KEYWORDS: weechat xmpp c api #+LANGUAGE: en #+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t #+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:t tags:not-in-toc #+EXPORT_EXCLUDE_TAGS: exclude #+STARTUP: showall [[https://travis-ci.org/bqv/weechat-xmpp][file:https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master]] [[https://coveralls.io/github/bqv/weechat-xmpp?branch=master][file:https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master]] [[https://github.com/bqv/weechat-xmpp/issues][file:https://img.shields.io/github/issues/bqv/weechat-xmpp.svg]] [[https://github.com/bqv/weechat-xmpp/issues?q=is:issue+is:closed][file:https://img.shields.io/github/issues-closed/bqv/weechat-xmpp.svg]] [[https://github.com/bqv/weechat-xmpp/blob/master/LICENSE][file:https://img.shields.io/github/license/bqv/weechat-xmpp.svg]] [[https://github.com/bqv/weechat-extras/][file:https://img.shields.io/badge/weechat--extras-xmpp-blue.svg]] [[https://inverse.chat/#converse/room?jid=weechat@muc.xa0.uk][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.1 | | 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 am rewriting this in C++, slowly... * Usage 1. Start with =/account add=, use =/help account= for instructions. 2. Use =/account connect = 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) - libfmt (dynamic, dependency) - g++ (build, >= GCC12) - bison (build) - flex (build) - doctest (test) - weechat (>= v3.0) * Building #+begin_src sh git clone git://github.com/bqv/weechat-xmpp.git cd weechat-xmpp git submodule update --init --recursive make make install #+end_src 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 don't expect any, but I have no real requests for style of pull requests besides a wish that you keep vaguely to the indentation style I use. * Tasks ** DONE Implement basic functionality (milestone v0.1) * [X] Connecting * [X] Pretty-printing stanzas * [X] Receiveing and formatting PMs to a dedicated buffer * [X] Responding to PMs and formatting responses * [X] Opening PMs (/chat) ** TODO [#A] Implement essential functionality (milestone v0.2) * [X] Opening PMs with initial message * [X] Buffer autoswitch on enter/open * [X] Handle open/enter jids with a resource without breaking * [X] Allow /close without crashing * [X] Highlight * [X] MUC PMs * [X] Send typing notifications * [X] Recv typing notifications * [X] Message Carbons * [X] MAM Fetching * [/] Read receipts * [X] Message Delivery (XEP-0184) * [X] Chat Markers (XEP-0333) * [X] Composing * [X] Paused * [?] Active * [#] Inactive * [#] Gone * [X] OMEMO (libomemo-c) * [X] Presence * [X] Disco * [X] Disco response * [X] Key Generation / storage (lmdb) * [X] Generation * [X] Storage * [X] Announce * [X] Device ID * [X] Bundles * [X] Messages * [-] PGP (gpgme) * [X] Use keyrings (from gnupg) * [X] Presence * [X] Decryption * [X] Encryption * [X] Custom set/clear key (/pgp) * [ ] [#B] Save pgp key set per jid/muc * [ ] [#A] Account renaming * [-] OOB messages * [X] Single media on a line * [ ] [#D] Multiple media inline (protocol?) * [ ] [#C] Encrypted (pgp/omemo) * [X] Join and handle events asynchronously * [ ] Cache caps * [ ] Handle wide errors gracefully * [ ] [#C] Event-driven MUC entrance * [ ] XMPP Ping (xep-199) * [ ] [#C] Respond to s2c and m2c * [ ] [#B] /ping for c2s and c2c * [-] MUCs * [X] Presence/nicklist * [X] Enters * [X] Leaves * [X] Tracking * [X] Set/show topic * [X] Opening (/enter) * [X] Receiving * [X] Sending * [X] With /msg * [X] Handle errors gracefully * [-] Edits * [X] Displaying * [X] Tagging * [X] Diff highlighting * [ ] [#B] Making (/edit) * [ ] [#A] Leave on /close * [ ] Service Disco * [ ] [#B] /disco [domain] * [ ] /whois [user|muc] * [ ] [#B] User Avatars * [ ] [#B] MUC Icons * [-] Bookmarks / Roster (xep-048) * [X] Autojoin bookmarks * [ ] [#A] Except biboumi rooms * [ ] [#B] Add bookmarks * [ ] [#B] Delete bookmarks * [ ] [#B] Roster * [ ] [#D] OTR (libotr) * [ ] [#C] Room Explorer (https://search.jabber.network/docs/api) * [ ] [#C] DOAP * [ ] [#C] Link sniffing for oob ** TODO [#C] Adhere to CCS2022 (XEP-459) (milestone v0.3) * [ ] Core * [ ] Service Discovery (xep-030) * [ ] Entity Capabilities (xep-115) * [ ] Advanced * [ ] Direct TLS (require secure connection) * [ ] Personal Eventing Protocol (xep-163) * [ ] IM * [ ] File Upload (xep-363) * [ ] VCard-temp (xep-054) * [ ] MUC Invitations (xep-249) * [ ] Advanced * [ ] User Avatar (xep-084) * [ ] User Avatar Compatibility (xep-398 xep-153) * [ ] User Blocking (xep-191) * [ ] PEP Native Bookmarks (xep-402) * [ ] MUC Self-Ping (xep-410) * [ ] Persistent Storage (xep-223) * [ ] XML Storage (xep-049) * [ ] Message Correction (xep-308) * [ ] Direct File Transfer - Jingle (xep-234 xep-261) * [ ] Extras * [ ] Stateless Inline Media Sharing (xep-385) * [ ] Consistent Color Generation (xep-392) * [ ] Message Styling (xep-393) * [ ] Extended Channel Search (xep-433) * [ ] Message Retraction (xep-424) * [ ] Message Moderation (xep-425) ** 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" -- [[github.com/janicez][Ellenor et al Bjornsdottir]] * License weechat-xmpp is licensed under the Mozilla Public License Version 2.0 available [[https://www.mozilla.org/en-US/MPL/2.0/][here]] and in LICENSE.