weechat-xmpp icon indicating copy to clipboard operation
weechat-xmpp copied to clipboard

#+TITLE: weechat-xmpp #+AUTHOR: Tony Olagbaiye #+EMAIL: [email protected] #+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/[email protected]][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.