linkage shenanigans

v1
Tony Olagbaiye 3 years ago
parent 4acb753cae
commit e7a4dd34c9
No known key found for this signature in database
GPG Key ID: 9E2FF3BDEBDFC910

@ -34,27 +34,19 @@ use_guix()
fi
# Miscellaneous packages.
PACKAGES_MAINTENANCE=(
direnv
git
git:send-email
gnupg
guile-colorized
guile-readline
less
ncurses
openssh
xdot
ENVIRONMENTS=(
weechat
)
# Environment packages.
PACKAGES=(help2man guile-sqlite3 guile-gcrypt
autoconf autoconf-archive automake libtool
make cmake gcc-toolchain pkg-config
libressl libxml2 libstrophe json-c weechat)
PACKAGES=(
autoconf autoconf-archive automake libtool
make cmake gcc-toolchain pkg-config patchelf
weechat xz libxml2 libstrophe json-c
)
# Thanks <https://lists.gnu.org/archive/html/guix-devel/2016-09/msg00859.html>
eval "$(guix environment --search-paths --root="$gcroot" --ad-hoc ${PACKAGES[@]} ${PACKAGES_MAINTENANCE[@]} "$@")"
eval "$(guix environment --search-paths --root="$gcroot" ${ENVIRONMENTS[@]} --ad-hoc ${PACKAGES[@]} "$@")"
export CC=gcc
}

3
.gitmodules vendored

@ -1,6 +1,3 @@
[submodule "json-c"]
path = json-c
url = https://github.com/json-c/json-c
[submodule "libstrophe"]
path = libstrophe
url = https://github.com/strophe/libstrophe

@ -4,67 +4,68 @@ ifdef DEBUG
endif
RM=rm -f
FIND=find
CFLAGS+=$(DBGCFLAGS) -fno-omit-frame-pointer -fPIC -std=gnu99 -g -Wall -Wextra -Werror-implicit-function-declaration -Wno-missing-field-initializers -Ilibstrophe -Ijson-c
INCLUDES=-Ilibstrophe -Ijson-c
CFLAGS+=$(DBGCFLAGS) -fno-omit-frame-pointer -fPIC -std=gnu99 -g -Wall -Wextra -Werror-implicit-function-declaration -Wno-missing-field-initializers $(INCLUDES)
LDFLAGS+=-shared -g $(DBGCFLAGS) $(DBGLDFLAGS)
LDLIBS=-lssl -lxml2
LDLIBS=-lstrophe -lpthread
PREFIX ?= /usr/local
LIBDIR ?= $(PREFIX)/lib
INSTALL ?= /usr/bin/install
SRCS=xmpp.c \
xmpp-command.c \
xmpp-config.c \
xmpp-connection.c \
DEPS=json-c/libjson-c.a
OLDSRCS=slack.c \
slack-api.c \
slack-buffer.c \
slack-channel.c \
slack-config.c \
slack-command.c \
slack-completion.c \
slack-emoji.c \
slack-input.c \
slack-message.c \
slack-oauth.c \
slack-request.c \
slack-teaminfo.c \
slack-user.c \
slack-workspace.c \
api/slack-api-hello.c \
api/slack-api-error.c \
api/slack-api-message.c \
api/slack-api-user-typing.c \
api/message/slack-api-message-bot-message.c \
api/message/slack-api-message-slackbot-response.c \
api/message/slack-api-message-me-message.c \
api/message/slack-api-message-unimplemented.c \
request/slack-request-chat-memessage.c \
request/slack-request-chat-postmessage.c \
request/slack-request-channels-list.c \
request/slack-request-conversations-members.c \
request/slack-request-emoji-list.c \
request/slack-request-users-list.c
OBJS=$(subst .c,.o,$(SRCS)) libstrophe/.libs/libstrophe.a json-c/libjson-c.a
all: libstrophe/.libs/libstrophe.a json-c/libjson-c.a weechat-xmpp
slack-api.c \
slack-buffer.c \
slack-channel.c \
slack-config.c \
slack-command.c \
slack-completion.c \
slack-emoji.c \
slack-input.c \
slack-message.c \
slack-oauth.c \
slack-request.c \
slack-teaminfo.c \
slack-user.c \
slack-workspace.c \
api/slack-api-hello.c \
api/slack-api-error.c \
api/slack-api-message.c \
api/slack-api-user-typing.c \
api/message/slack-api-message-bot-message.c \
api/message/slack-api-message-slackbot-response.c \
api/message/slack-api-message-me-message.c \
api/message/slack-api-message-unimplemented.c \
request/slack-request-chat-memessage.c \
request/slack-request-chat-postmessage.c \
request/slack-request-channels-list.c \
request/slack-request-conversations-members.c \
request/slack-request-emoji-list.c \
request/slack-request-users-list.c
OBJS=$(subst .c,.o,$(SRCS))
all: $(DEPS) weechat-xmpp
weechat-xmpp: $(OBJS)
$(CC) $(LDFLAGS) -o xmpp.so $(OBJS) $(LDLIBS)
libstrophe/.libs/libstrophe.a:
cd libstrophe && ./bootstrap.sh && env CFLAGS=-fPIC LDFLAGS= ./configure
$(MAKE) -C libstrophe
libstrophe: libstrophe/.libs/libstrophe.a
which patchelf >/dev/null && \
patchelf --set-rpath $(LIBRARY_PATH):$(shell patchelf --print-rpath xmpp.so) xmpp.so || true
json-c/libjson-c.a:
cd json-c && env CFLAGS= LDFLAGS= cmake -DCMAKE_C_FLAGS=-fPIC .
cd json-c && env CFLAGS= LDFLAGS= \
cmake -DCMAKE_C_FLAGS=-fPIC .
$(MAKE) -C json-c json-c-static
json-c: json-c/libjson-c.a
depend: .depend
.depend: libstrophe/.libs/libstrophe.a json-c/libjson-c.a $(SRCS)
.depend: json-c/libjson-c.a $(SRCS)
$(RM) ./.depend
$(CC) $(CFLAGS) -MM $^>>./.depend
@ -73,8 +74,6 @@ tidy:
clean:
$(RM) $(OBJS)
$(MAKE) -C libstrophe clean || true
$(MAKE) -C libwebsockets clean || true
$(MAKE) -C json-c clean || true
git submodule foreach --recursive git clean -xfd || true
git submodule foreach --recursive git reset --hard || true

@ -1 +0,0 @@
Subproject commit 2d5424bcff4e9d810b73444b02708f69743ff65d

@ -2,32 +2,33 @@
// License, version 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <libwebsockets.h>
#include <strophe.h>
#include <stdlib.h>
#include <string.h>
#include "weechat-plugin.h"
#include "slack.h"
#include "slack-oauth.h"
#include "slack-teaminfo.h"
#include "slack-workspace.h"
#include "slack-channel.h"
#include "slack-buffer.h"
#include "slack-message.h"
#include "slack-command.h"
#include "request/slack-request-chat-memessage.h"
void slack_command_display_workspace(struct t_slack_workspace *workspace)
#include <weechat/weechat-plugin.h>
#include "xmpp.h"
//#include "xmpp-oauth.h"
//#include "xmpp-teaminfo.h"
//#include "xmpp-workspace.h"
//#include "xmpp-channel.h"
//#include "xmpp-buffer.h"
//#include "xmpp-message.h"
#include "xmpp-command.h"
//#include "request/xmpp-request-chat-memessage.h"
/*
void xmpp_command_display_workspace(xmpp_conn_t *workspace)
{
int num_channels, num_pv;
if (workspace->is_connected)
{
num_channels = 0;//slack_workspace_get_channel_count(workspace);
num_pv = 0;//slack_workspace_get_pv_count(workspace);
num_channels = 0;//xmpp_workspace_get_channel_count(workspace);
num_pv = 0;//xmpp_workspace_get_pv_count(workspace);
weechat_printf(
NULL,
" %s %s%s%s.slack.com %s(%s%s%s) [%s%s%s]%s, %d %s, %d pv",
" %s %s%s%s.xmpp.com %s(%s%s%s) [%s%s%s]%s, %d %s, %d pv",
(workspace->is_connected) ? "*" : " ",
weechat_color("chat_server"),
workspace->domain,
@ -50,7 +51,7 @@ void slack_command_display_workspace(struct t_slack_workspace *workspace)
{
weechat_printf(
NULL,
" %s%s%s.slack.com %s(%s%s%s)%s",
" %s%s%s.xmpp.com %s(%s%s%s)%s",
weechat_color("chat_server"),
workspace->domain,
weechat_color("reset"),
@ -63,10 +64,10 @@ void slack_command_display_workspace(struct t_slack_workspace *workspace)
}
}
void slack_command_workspace_list(int argc, char **argv)
void xmpp_command_workspace_list(int argc, char **argv)
{
int i, one_workspace_found;
struct t_slack_workspace *ptr_workspace2;
xmpp_conn_t *ptr_workspace2;
char *workspace_name = NULL;
for (i = 2; i < argc; i++)
@ -76,14 +77,14 @@ void slack_command_workspace_list(int argc, char **argv)
}
if (!workspace_name)
{
if (slack_workspaces)
if (xmpp_workspaces)
{
weechat_printf(NULL, "");
weechat_printf(NULL, _("All workspaces:"));
for (ptr_workspace2 = slack_workspaces; ptr_workspace2;
for (ptr_workspace2 = xmpp_workspaces; ptr_workspace2;
ptr_workspace2 = ptr_workspace2->next_workspace)
{
slack_command_display_workspace(ptr_workspace2);
xmpp_command_display_workspace(ptr_workspace2);
}
}
else
@ -92,7 +93,7 @@ void slack_command_workspace_list(int argc, char **argv)
else
{
one_workspace_found = 0;
for (ptr_workspace2 = slack_workspaces; ptr_workspace2;
for (ptr_workspace2 = xmpp_workspaces; ptr_workspace2;
ptr_workspace2 = ptr_workspace2->next_workspace)
{
if (weechat_strcasestr(ptr_workspace2->name, workspace_name))
@ -105,7 +106,7 @@ void slack_command_workspace_list(int argc, char **argv)
workspace_name);
}
one_workspace_found = 1;
slack_command_display_workspace(ptr_workspace2);
xmpp_command_display_workspace(ptr_workspace2);
}
}
if (!one_workspace_found)
@ -115,40 +116,40 @@ void slack_command_workspace_list(int argc, char **argv)
}
}
void slack_command_add_workspace(struct t_slack_teaminfo *slack_teaminfo)
void xmpp_command_add_workspace(struct t_xmpp_teaminfo *xmpp_teaminfo)
{
struct t_slack_workspace *workspace;
xmpp_conn_t *workspace;
workspace = slack_workspace_casesearch(slack_teaminfo->domain);
workspace = xmpp_workspace_casesearch(xmpp_teaminfo->domain);
if (workspace)
{
weechat_printf(
NULL,
_("%s%s: workspace \"%s\" already exists, can't add it!"),
weechat_prefix("error"), SLACK_PLUGIN_NAME,
slack_teaminfo->domain);
weechat_prefix("error"), XMPP_PLUGIN_NAME,
xmpp_teaminfo->domain);
return;
}
workspace = slack_workspace_alloc(slack_teaminfo->domain);
workspace = xmpp_workspace_alloc(xmpp_teaminfo->domain);
if (!workspace)
{
weechat_printf(
NULL,
_("%s%s: unable to add workspace"),
weechat_prefix("error"), SLACK_PLUGIN_NAME);
weechat_prefix("error"), XMPP_PLUGIN_NAME);
return;
}
workspace->id = strdup(slack_teaminfo->id);
workspace->name = strdup(slack_teaminfo->name);
weechat_config_option_set(workspace->options[SLACK_WORKSPACE_OPTION_TOKEN],
slack_teaminfo->token, 1);
workspace->id = strdup(xmpp_teaminfo->id);
workspace->name = strdup(xmpp_teaminfo->name);
weechat_config_option_set(workspace->options[XMPP_WORKSPACE_OPTION_TOKEN],
xmpp_teaminfo->token, 1);
weechat_printf (
NULL,
_("%s: workspace %s%s%s.slack.com %s(%s%s%s)%s added"),
SLACK_PLUGIN_NAME,
_("%s: workspace %s%s%s.xmpp.com %s(%s%s%s)%s added"),
XMPP_PLUGIN_NAME,
weechat_color("chat_server"),
workspace->domain,
weechat_color("reset"),
@ -158,47 +159,47 @@ void slack_command_add_workspace(struct t_slack_teaminfo *slack_teaminfo)
weechat_color("chat_delimiters"),
weechat_color("reset"));
free_teaminfo(slack_teaminfo);
free_teaminfo(xmpp_teaminfo);
}
void slack_command_fetch_workspace(char *token)
void xmpp_command_fetch_workspace(char *token)
{
slack_teaminfo_fetch(token, &slack_command_add_workspace);
xmpp_teaminfo_fetch(token, &xmpp_command_add_workspace);
free(token);
}
void slack_command_workspace_register(int argc, char **argv)
void xmpp_command_workspace_register(int argc, char **argv)
{
char *code;
if (argc > 2)
{
code = argv[2];
if (strncmp("xoxp", code, 4) == 0)
{
slack_command_fetch_workspace(strdup(code));
xmpp_command_fetch_workspace(strdup(code));
}
else
{
slack_oauth_request_token(code, &slack_command_fetch_workspace);
xmpp_oauth_request_token(code, &xmpp_command_fetch_workspace);
}
}
else
{
weechat_printf(NULL,
_("\n#### Retrieving a Slack token via OAUTH ####\n"
"1) Paste this into a browser: https://slack.com/oauth/authorize?client_id=%s&scope=client\n"
_("\n#### Retrieving a Xmpp token via OAUTH ####\n"
"1) Paste this into a browser: https://xmpp.com/oauth/authorize?client_id=%s&scope=client\n"
"2) Select the team you wish to access from weechat in your browser.\n"
"3) Click \"Authorize\" in the browser **IMPORTANT: the redirect will fail, this is expected**\n"
"4) Copy the \"code\" portion of the URL to your clipboard\n"
"5) Return to weechat and run `/slack register [code]`\n"),
SLACK_CLIENT_ID);
"5) Return to weechat and run `/xmpp register [code]`\n"),
XMPP_CLIENT_ID);
}
}
int slack_command_connect_workspace(struct t_slack_workspace *workspace)
int xmpp_command_connect_workspace(xmpp_conn_t *workspace)
{
if (!workspace)
return 0;
@ -208,19 +209,19 @@ int slack_command_connect_workspace(struct t_slack_workspace *workspace)
weechat_printf(
NULL,
_("%s%s: already connected to workspace \"%s\"!"),
weechat_prefix("error"), SLACK_PLUGIN_NAME,
weechat_prefix("error"), XMPP_PLUGIN_NAME,
workspace->domain);
}
slack_workspace_connect(workspace);
xmpp_workspace_connect(workspace);
return 1;
}
int slack_command_workspace_connect(int argc, char **argv)
int xmpp_command_workspace_connect(int argc, char **argv)
{
int i, nb_connect, connect_ok;
struct t_slack_workspace *ptr_workspace;
xmpp_conn_t *ptr_workspace;
(void) argc;
(void) argv;
@ -231,10 +232,10 @@ int slack_command_workspace_connect(int argc, char **argv)
for (i = 2; i < argc; i++)
{
nb_connect++;
ptr_workspace = slack_workspace_search(argv[i]);
ptr_workspace = xmpp_workspace_search(argv[i]);
if (ptr_workspace)
{
if (!slack_command_connect_workspace(ptr_workspace))
if (!xmpp_command_connect_workspace(ptr_workspace))
{
connect_ok = 0;
}
@ -244,8 +245,8 @@ int slack_command_workspace_connect(int argc, char **argv)
weechat_printf(
NULL,
_("%s%s: workspace not found \"%s\" "
"(register first with: /slack register)"),
weechat_prefix("error"), SLACK_PLUGIN_NAME,
"(register first with: /xmpp register)"),
weechat_prefix("error"), XMPP_PLUGIN_NAME,
argv[i]);
}
}
@ -253,9 +254,9 @@ int slack_command_workspace_connect(int argc, char **argv)
return (connect_ok) ? WEECHAT_RC_OK : WEECHAT_RC_ERROR;
}
void slack_command_workspace_delete(int argc, char **argv)
void xmpp_command_workspace_delete(int argc, char **argv)
{
struct t_slack_workspace *workspace;
xmpp_conn_t *workspace;
char *workspace_domain;
if (argc < 3)
@ -269,14 +270,14 @@ void slack_command_workspace_delete(int argc, char **argv)
return;
}
workspace = slack_workspace_search(argv[2]);
workspace = xmpp_workspace_search(argv[2]);
if (!workspace)
{
weechat_printf(
NULL,
_("%s%s: workspace \"%s\" not found for \"%s\" command"),
weechat_prefix("error"), SLACK_PLUGIN_NAME,
argv[2], "slack delete");
weechat_prefix("error"), XMPP_PLUGIN_NAME,
argv[2], "xmpp delete");
return;
}
if (workspace->is_connected)
@ -284,151 +285,151 @@ void slack_command_workspace_delete(int argc, char **argv)
weechat_printf(
NULL,
_("%s%s: you cannot delete workspace \"%s\" because you"
"are connected. Try \"/slack disconnect %s\" first."),
weechat_prefix("error"), SLACK_PLUGIN_NAME,
"are connected. Try \"/xmpp disconnect %s\" first."),
weechat_prefix("error"), XMPP_PLUGIN_NAME,
argv[2], argv[2]);
return;
}
workspace_domain = strdup(workspace->domain);
slack_workspace_free(workspace);
xmpp_workspace_free(workspace);
weechat_printf (
NULL,
_("%s: workspace %s%s%s has been deleted"),
SLACK_PLUGIN_NAME,
XMPP_PLUGIN_NAME,
weechat_color("chat_server"),
(workspace_domain) ? workspace_domain : "???",
weechat_color("reset"));
if (workspace_domain)
free(workspace_domain);
}
*/
int slack_command_slack(const void *pointer, void *data,
int xmpp_command_xmpp(const void *pointer, void *data,
struct t_gui_buffer *buffer, int argc,
char **argv, char **argv_eol)
{
(void) pointer;
(void) data;
(void) buffer;
if (argc <= 1 || weechat_strcasecmp(argv[1], "list") == 0)
{
slack_command_workspace_list(argc, argv);
return WEECHAT_RC_OK;
}
if (argc > 1)
{
if (weechat_strcasecmp(argv[1], "register") == 0)
{
slack_command_workspace_register(argc, argv);
return WEECHAT_RC_OK;
}
if (weechat_strcasecmp(argv[1], "connect") == 0)
{
slack_command_workspace_connect(argc, argv);
return WEECHAT_RC_OK;
}
if (weechat_strcasecmp(argv[1], "delete") == 0)
{
slack_command_workspace_delete(argc, argv);
return WEECHAT_RC_OK;
}
WEECHAT_COMMAND_ERROR;
}
//if (argc <= 1 || weechat_strcasecmp(argv[1], "list") == 0)
//{
// xmpp_command_workspace_list(argc, argv);
// return WEECHAT_RC_OK;
//}
//if (argc > 1)
//{
// if (weechat_strcasecmp(argv[1], "register") == 0)
// {
// xmpp_command_workspace_register(argc, argv);
// return WEECHAT_RC_OK;
// }
// if (weechat_strcasecmp(argv[1], "connect") == 0)
// {
// xmpp_command_workspace_connect(argc, argv);
// return WEECHAT_RC_OK;
// }
// if (weechat_strcasecmp(argv[1], "delete") == 0)
// {
// xmpp_command_workspace_delete(argc, argv);
// return WEECHAT_RC_OK;
// }
// WEECHAT_COMMAND_ERROR;
//}
return WEECHAT_RC_OK;
}
int slack_command_me(const void *pointer, void *data,
int xmpp_command_me(const void *pointer, void *data,
struct t_gui_buffer *buffer, int argc,
char **argv, char **argv_eol)
{
struct t_slack_workspace *ptr_workspace = NULL;
struct t_slack_channel *ptr_channel = NULL;
struct t_slack_request *request;
xmpp_conn_t *ptr_workspace = NULL;
//struct t_xmpp_channel *ptr_channel = NULL;
//struct t_xmpp_request *request;
char *text;
(void) pointer;
(void) data;
(void) buffer;
(void) argv;
slack_buffer_get_workspace_and_channel(buffer, &ptr_workspace, &ptr_channel);
if (!ptr_workspace)
return WEECHAT_RC_ERROR;
if (!ptr_channel)
{
weechat_printf (
ptr_workspace->buffer,
_("%s%s: \"%s\" command can not be executed on a workspace buffer"),
weechat_prefix("error"), SLACK_PLUGIN_NAME, "me");
return WEECHAT_RC_OK;
}
if (!ptr_workspace->is_connected)
{
weechat_printf(buffer,
_("%s%s: you are not connected to server"),
weechat_prefix("error"), SLACK_PLUGIN_NAME);
return WEECHAT_RC_OK;
}
if (argc > 1)
{
text = malloc(SLACK_MESSAGE_MAX_LENGTH);
if (!text)
{
weechat_printf(buffer,
_("%s%s: error allocating string"),
weechat_prefix("error"), SLACK_PLUGIN_NAME);
return WEECHAT_RC_ERROR;
}
lws_urlencode(text, argv_eol[1], SLACK_MESSAGE_MAX_LENGTH);
request = slack_request_chat_memessage(ptr_workspace,
weechat_config_string(
ptr_workspace->options[SLACK_WORKSPACE_OPTION_TOKEN]),
ptr_channel->id, text);
if (request)
slack_workspace_register_request(ptr_workspace, request);
free(text);
}
//xmpp_buffer_get_workspace_and_channel(buffer, &ptr_workspace, &ptr_channel);
//if (!ptr_workspace)
// return WEECHAT_RC_ERROR;
//if (!ptr_channel)
//{
// weechat_printf (
// ptr_workspace->buffer,
// _("%s%s: \"%s\" command can not be executed on a workspace buffer"),
// weechat_prefix("error"), XMPP_PLUGIN_NAME, "me");
// return WEECHAT_RC_OK;
//}
//if (!ptr_workspace->is_connected)
//{
// weechat_printf(buffer,
// _("%s%s: you are not connected to server"),
// weechat_prefix("error"), XMPP_PLUGIN_NAME);
// return WEECHAT_RC_OK;
//}
//if (argc > 1)
//{
// text = malloc(XMPP_MESSAGE_MAX_LENGTH);
// if (!text)
// {
// weechat_printf(buffer,
// _("%s%s: error allocating string"),
// weechat_prefix("error"), XMPP_PLUGIN_NAME);
// return WEECHAT_RC_ERROR;
// }
// lws_urlencode(text, argv_eol[1], XMPP_MESSAGE_MAX_LENGTH);
// request = xmpp_request_chat_memessage(ptr_workspace,
// weechat_config_string(
// ptr_workspace->options[XMPP_WORKSPACE_OPTION_TOKEN]),
// ptr_channel->id, text);
// if (request)
// xmpp_workspace_register_request(ptr_workspace, request);
// free(text);
//}
return WEECHAT_RC_OK;
}
void slack_command_init()
void xmpp_command_init()
{
weechat_hook_command(
"slack",
N_("slack control"),
"xmpp",
N_("xmpp control"),
N_("list"
" || register [token]"
" || connect <workspace>"
" || delete <workspace>"),
N_(" list: list workspaces\n"
"register: add a slack workspace\n"
" connect: connect to a slack workspace\n"
" delete: delete a slack workspace\n"),
"register: add a xmpp workspace\n"
" connect: connect to a xmpp workspace\n"
" delete: delete a xmpp workspace\n"),
"list"
" || register %(slack_token)"
" || connect %(slack_workspace)"
" || delete %(slack_workspace)",
&slack_command_slack, NULL, NULL);
" || register %(xmpp_token)"
" || connect %(xmpp_workspace)"
" || delete %(xmpp_workspace)",
&xmpp_command_xmpp, NULL, NULL);
weechat_hook_command(
"me",
N_("send a slack action to the current channel"),
N_("send a xmpp action to the current channel"),
N_("<message>"),
N_("message: message to send"),
NULL, &slack_command_me, NULL, NULL);
NULL, &xmpp_command_me, NULL, NULL);
}

@ -2,9 +2,9 @@
// License, version 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef _SLACK_COMMAND_H_
#define _SLACK_COMMAND_H_
#ifndef _XMPP_COMMAND_H_
#define _XMPP_COMMAND_H_
extern void slack_command_init();
extern void xmpp_command_init();
#endif /*SLACK_COMMAND_H*/
#endif /*XMPP_COMMAND_H*/

@ -16,13 +16,12 @@
//#include "api/xmpp-api-message.h"
//#include "api/xmpp-api-user-typing.h"
xmpp_ctx_t *xmpp_context = NULL;
xmpp_conn_t *xmpp_connection = NULL;
xmpp_conn_t *xmpp_connection;
void xmpp_log_emit_weechat(void *const userdata, const xmpp_log_level_t level, const char *const area, const char *const msg)
{
(void) userdata;
time_t date = time(NULL);
const char *timestamp = weechat_util_get_time_string(&date);
@ -40,22 +39,27 @@ xmpp_log_t xmpp_logger = {
void xmpp_connection_init()
{
xmpp_initialize();
xmpp_context = xmpp_ctx_new(NULL, &xmpp_logger);
xmpp_connection = xmpp_conn_new(xmpp_context);
xmpp_conn_set_jid(xmpp_connection,
weechat_config_string(xmpp_config_serverdef_jid));
xmpp_conn_set_pass(xmpp_connection,
weechat_config_string(xmpp_config_serverdef_password));
//size_t case_count = sizeof(cases) / sizeof(cases[0]);
//qsort(cases, case_count, sizeof(struct stringcase), stringcase_cmp);
}
//xmpp_api_message_init();
void xmpp_connection_autoconnect()
{
xmpp_connection_connect(weechat_config_string(xmpp_config_serverdef_jid),
weechat_config_string(xmpp_config_serverdef_password));
weechat_printf(NULL, _("xmpp: %s # %s"),
weechat_config_string(xmpp_config_serverdef_jid),
weechat_config_string(xmpp_config_serverdef_password));
}
void xmpp_connection_connect(xmpp_conn_t *connection)
void xmpp_connection_connect(const char* jid, const char* password)
{
xmpp_ctx_t *xmpp_context = xmpp_ctx_new(NULL, &xmpp_logger);
xmpp_conn_t *xmpp_connection = xmpp_conn_new(xmpp_context);
xmpp_connection = xmpp_conn_new(xmpp_context);
xmpp_conn_set_jid(xmpp_connection, jid);
xmpp_conn_set_pass(xmpp_connection, password);
//struct lws_context_creation_info ctxinfo;
//struct lws_client_connect_info ccinfo;
//const char *url_protocol, *url_path;
@ -117,6 +121,7 @@ void xmpp_connection_connect(xmpp_conn_t *connection)
//ccinfo.userdata = workspace;
//lws_client_connect_via_info(&ccinfo);
return xmpp_connection;
}
int xmpp_connection_route_message(xmpp_conn_t *workspace,

@ -5,13 +5,13 @@
#ifndef _XMPP_CONNECTION_H_
#define _XMPP_CONNECTION_H_
extern xmpp_ctx_t *xmpp_context;
extern xmpp_conn_t *xmpp_connection;
void xmpp_connection_init();
void xmpp_connection_connect(xmpp_conn_t *connection);
void xmpp_connection_autoconnect();
void xmpp_connection_connect(const char* jid, const char* password);
int xmpp_connection_route_message(xmpp_conn_t *connection,
const char *type, json_object *message);

@ -12,10 +12,10 @@
#include "xmpp.h"
#include "xmpp-config.h"
#include "xmpp-connection.h"
//#include "slack-command.h"
//#include "slack-workspace.h"
//#include "slack-buffer.h"
//#include "slack-completion.h"
#include "xmpp-command.h"
//#include "xmpp-workspace.h"
//#include "xmpp-buffer.h"
//#include "xmpp-completion.h"
WEECHAT_PLUGIN_NAME(XMPP_PLUGIN_NAME);
@ -31,6 +31,15 @@ struct t_hook *xmpp_hook_timer = NULL;
struct t_gui_bar_item *xmpp_typing_bar_item = NULL;
/*
void connection_check_events(void)
{
conn.xmpp_in_event_loop = TRUE;
xmpp_run_once(conn.xmpp_ctx, 10);
conn.xmpp_in_event_loop = FALSE;
}
*/
int weechat_plugin_init(struct t_weechat_plugin *plugin, int argc, char *argv[])
{
(void) argc;
@ -45,7 +54,9 @@ int weechat_plugin_init(struct t_weechat_plugin *plugin, int argc, char *argv[])
xmpp_connection_init();
//xmpp_command_init();
xmpp_command_init();
xmpp_connection_autoconnect();
//xmpp_completion_init();
@ -81,9 +92,17 @@ int weechat_plugin_end(struct t_weechat_plugin *plugin)
xmpp_config_write();
xmpp_conn_release(xmpp_connection);
if (xmpp_connection)
{
xmpp_ctx_t *xmpp_context = xmpp_conn_get_context(xmpp_connection);
if (xmpp_conn_is_connected(xmpp_connection))
xmpp_disconnect(xmpp_connection);
xmpp_ctx_free(xmpp_context);
xmpp_conn_release(xmpp_connection);
xmpp_ctx_free(xmpp_context);
}
xmpp_shutdown();

Loading…
Cancel
Save