You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Tony Olagbaiye 5011ae9fa2
switch to lmdb++
3 years ago
tests
xmpp
.dir-locals.el
.envrc
.gitattributes
.gitignore
.gitmodules
.travis.yml
LICENSE
NOTES.md
README.org
account.cpp
account.hh
buffer.cpp
buffer.hh
channel.cpp
channel.hh
command.cpp
command.hh
completion.cpp
completion.hh
config.cpp
config.hh
connection.cpp
connection.hh
input.cpp
input.hh
libomemo.scm
makefile
message.cpp
message.hh
omemo.cpp
omemo.hh
pgp.cpp
pgp.hh
plugin.cpp
plugin.hh
user.cpp
user.hh
util.cpp
util.hh

README.org

weechat-xmpp

https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master">file:https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master">file:https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master file:<img src=" title="file:https://img.shields.io/github/issues/bqv/weechat-xmpp.svg" /> file:<img src=" title="file:https://img.shields.io/github/issues-closed/bqv/weechat-xmpp.svg" /> file:<img src=" title="file:https://img.shields.io/github/license/bqv/weechat-xmpp.svg" /> file:<img src=" title="file:https://img.shields.io/badge/weechat--extras-xmpp-blue.svg" /> https://inverse.chat/badge.svg?room=weechat@muc.xa0.uk">file:https://inverse.chat/badge.svg?room=weechat@muc.xa0.uk

Status: XMPP for power users and digital masochists
Location: http://github.com/bqv/weechat-xmpp
Version: 0.1.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 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)
  • rnp (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?)
    • 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
      • [#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
  • MAM Fetching
  • Bookmarks / Roster

    • Autojoin bookmarks
    • Add bookmarks
    • Delete bookmarks
    • Roster
  • OTR (libotr)
  • PGP (rnpgp)

    • Use keyrings (e.g. exported from gnupg)
    • Presence
    • Decryption
    • Encryption
    • Custom set/clear key (/pgp)
  • Room Explorer (https://search.jabber.network/docs/api)

TODO [C] Implement completion engine (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.