weechat-xmpp/account.hh

165 lines
5.9 KiB
C++
Raw Normal View History

2021-06-30 06:26:06 +00:00
// This Source Code Form is subject to the terms of the Mozilla Public
// 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/.
2022-01-11 21:38:52 +00:00
#pragma once
#include <ctime>
#include <cstdint>
2022-01-13 07:31:45 +00:00
#include <memory>
2022-01-11 21:38:52 +00:00
#include <strophe.h>
2022-01-13 07:31:45 +00:00
#include "omemo.hh"
2021-06-30 06:26:06 +00:00
extern struct t_account *accounts;
extern struct t_account *last_account;
enum t_account_option
{
ACCOUNT_OPTION_JID,
ACCOUNT_OPTION_PASSWORD,
ACCOUNT_OPTION_TLS,
ACCOUNT_OPTION_NICKNAME,
2021-06-30 08:54:59 +00:00
ACCOUNT_OPTION_AUTOCONNECT,
2021-07-02 06:48:09 +00:00
ACCOUNT_OPTION_RESOURCE,
2021-07-02 23:05:36 +00:00
ACCOUNT_OPTION_STATUS,
2021-07-22 04:04:15 +00:00
ACCOUNT_OPTION_PGP_PUBRING_PATH,
ACCOUNT_OPTION_PGP_SECRING_PATH,
2021-07-22 06:48:57 +00:00
ACCOUNT_OPTION_PGP_KEYID,
2021-06-30 06:26:06 +00:00
ACCOUNT_NUM_OPTIONS,
};
2021-07-02 04:55:43 +00:00
#define account__option_string(account, option) \
weechat_config_string(account->options[ACCOUNT_OPTION_ ## option])
#define account__option_integer(account, option) \
weechat_config_integer(account->options[ACCOUNT_OPTION_ ## option])
#define account__option_boolean(account, option) \
weechat_config_boolean(account->options[ACCOUNT_OPTION_ ## option])
#define account_option_set(account, option, value) \
weechat_config_option_set(account->options[option], value, 1)
#define account_jid(account) \
2021-07-05 16:33:26 +00:00
account->connection && xmpp_conn_is_connected(account->connection) ? \
xmpp_jid_bare(account->context, xmpp_conn_get_bound_jid(account->connection)) : \
weechat_config_string(account->options[ACCOUNT_OPTION_JID])
2021-07-02 06:48:09 +00:00
#define account_jid_device(account) \
2021-07-05 16:33:26 +00:00
account->connection && xmpp_conn_is_connected(account->connection) ? \
xmpp_conn_get_bound_jid(account->connection) : \
xmpp_jid_new(account->context, \
xmpp_jid_node(account->context, \
weechat_config_string(account->options[ACCOUNT_OPTION_JID])), \
xmpp_jid_domain(account->context, \
weechat_config_string(account->options[ACCOUNT_OPTION_JID])), \
"weechat")
2021-07-02 04:55:43 +00:00
#define account_password(account) \
weechat_config_string(account->options[ACCOUNT_OPTION_PASSWORD])
#define account_tls(account) \
weechat_config_integer(account->options[ACCOUNT_OPTION_TLS])
#define account_nickname(account) \
weechat_config_string(account->options[ACCOUNT_OPTION_NICKNAME])
#define account_autoconnect(account) \
weechat_config_boolean(account->options[ACCOUNT_OPTION_AUTOCONNECT])
2021-07-02 06:48:09 +00:00
#define account_resource(account) \
weechat_config_string(account->options[ACCOUNT_OPTION_RESOURCE])
2021-07-02 23:05:36 +00:00
#define account_status(account) \
weechat_config_string(account->options[ACCOUNT_OPTION_STATUS])
2021-07-22 04:04:15 +00:00
#define account_pgp_pubring_path(account) \
weechat_config_string(account->options[ACCOUNT_OPTION_PGP_PUBRING_PATH])
#define account_pgp_secring_path(account) \
weechat_config_string(account->options[ACCOUNT_OPTION_PGP_SECRING_PATH])
2021-07-22 06:48:57 +00:00
#define account_pgp_keyid(account) \
weechat_config_string(account->options[ACCOUNT_OPTION_PGP_KEYID])
2021-07-02 04:55:43 +00:00
2021-07-25 08:15:12 +00:00
struct t_account_device
2021-07-07 17:27:06 +00:00
{
2021-12-31 14:49:52 +00:00
uint32_t id;
2021-07-07 17:27:06 +00:00
char *name;
2021-12-31 14:49:52 +00:00
char *label;
2021-07-07 17:27:06 +00:00
2021-07-25 08:15:12 +00:00
struct t_account_device *prev_device;
struct t_account_device *next_device;
2021-07-07 17:27:06 +00:00
};
2021-07-29 03:06:48 +00:00
struct t_account_mam_query
{
char *id;
char *with;
int has_start;
time_t start;
int has_end;
time_t end;
struct t_account_mam_query *prev_mam_query;
struct t_account_mam_query *next_mam_query;
};
2021-06-30 06:26:06 +00:00
struct t_account
{
2021-07-03 23:22:57 +00:00
char *name;
2021-06-30 06:26:06 +00:00
struct t_config_option *options[ACCOUNT_NUM_OPTIONS];
int reloading_from_config;
int is_connected;
int disconnected;
2021-07-07 17:27:06 +00:00
int current_retry;
int reconnect_delay;
int reconnect_start;
2022-01-25 06:28:46 +00:00
xmpp_mem_t memory;
2021-06-30 06:26:06 +00:00
xmpp_log_t logger;
2021-07-03 23:22:57 +00:00
xmpp_ctx_t *context;
xmpp_conn_t *connection;
2021-06-30 06:26:06 +00:00
struct t_gui_buffer *buffer;
char *buffer_as_string;
2021-07-07 17:27:06 +00:00
2022-01-13 07:31:45 +00:00
weechat::xmpp::omemo omemo;
2021-07-22 04:04:15 +00:00
struct t_pgp *pgp;
2021-07-07 17:27:06 +00:00
2021-07-25 08:15:12 +00:00
struct t_account_device *devices;
struct t_account_device *last_device;
2021-07-29 03:06:48 +00:00
struct t_account_mam_query *mam_queries;
struct t_account_mam_query *last_mam_query;
2021-06-30 06:26:06 +00:00
struct t_user *users;
struct t_user *last_user;
struct t_channel *channels;
struct t_channel *last_channel;
2021-07-07 17:27:06 +00:00
2021-06-30 06:26:06 +00:00
struct t_account *prev_account;
struct t_account *next_account;
};
extern char *account_options[][2];
struct t_account *account__search(const char *account_name);
struct t_account *account__casesearch (const char *account_name);
int account__search_option(const char *option_name);
2022-01-11 21:38:52 +00:00
struct t_account_device *account__search_device(struct t_account *account,
uint32_t id);
void account__add_device(struct t_account *account,
struct t_account_device *device);
void account__free_device(struct t_account *account,
struct t_account_device *device);
2021-07-07 17:27:06 +00:00
void account__free_device_all(struct t_account *account);
2021-12-31 14:49:52 +00:00
xmpp_stanza_t *account__get_devicelist(struct t_account *account);
2021-07-29 03:06:48 +00:00
struct t_account_mam_query *account__add_mam_query(struct t_account *account,
struct t_channel *channel,
const char *id,
time_t *start, time_t *end);
struct t_account_mam_query *account__mam_query_search(struct t_account *account,
const char *id);
void account__mam_query_free(struct t_account *account,
struct t_account_mam_query *mam_query);
void account__mam_query_free_all(struct t_account *account);
2021-06-30 06:26:06 +00:00
struct t_account *account__alloc(const char *name);
void account__free_data(struct t_account *account);
void account__free(struct t_account *account);
void account__free_all();
void account__disconnect(struct t_account *account, int reconnect);
void account__disconnect_all();
void account__close_connection(struct t_account *account);
int account__connect(struct t_account *account);
int account__timer_cb(const void *pointer, void *data, int remaining_calls);