1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-09 22:05:42 +02:00

relay: add option send in command /remote (issue #2066)

This can be used to send raw JSON data encapsulated in a websocket frame to the
remote.

Example: /remote send test {"request":"GET /api/version"}
This commit is contained in:
Sébastien Helleu
2024-03-31 14:26:51 +02:00
parent 4460f92727
commit 643adecff5
4 changed files with 103 additions and 48 deletions
@@ -20,6 +20,9 @@
#ifndef WEECHAT_PLUGIN_RELAY_REMOTE_NETWORK_H
#define WEECHAT_PLUGIN_RELAY_REMOTE_NETWORK_H
extern int relay_remote_network_send (struct t_relay_remote *remote,
enum t_relay_msg_type msg_type,
const char *data, int data_size);
extern int relay_remote_network_connect (struct t_relay_remote *remote);
extern void relay_remote_network_disconnect (struct t_relay_remote *remote);
File diff suppressed because it is too large Load Diff
+46 -27
View File
@@ -606,6 +606,25 @@ relay_remote_connect (struct t_relay_remote *remote)
return relay_remote_network_connect (remote);
}
/*
* Sends JSON data to a remote WeeChat relay/api.
*
* Returns:
* 1: OK
* 0: error
*/
int
relay_remote_send (struct t_relay_remote *remote, const char *json)
{
if (!remote || (remote->status != RELAY_STATUS_CONNECTED) || !json)
return 0;
return (relay_remote_network_send (remote, RELAY_MSG_STANDARD,
json, strlen (json)) > 0) ?
1 : 0;
}
/*
* Renames a remote.
*
@@ -663,6 +682,33 @@ relay_remote_rename (struct t_relay_remote *remote, const char *name)
return 1;
}
/*
* Disconnects one remote.
*/
void
relay_remote_disconnect (struct t_relay_remote *remote)
{
if (remote->sock >= 0)
relay_remote_network_disconnect (remote);
}
/*
* Disconnects all remotes.
*/
void
relay_remote_disconnect_all ()
{
struct t_relay_remote *ptr_remote;
for (ptr_remote = relay_remotes; ptr_remote;
ptr_remote = ptr_remote->next_remote)
{
relay_remote_disconnect (ptr_remote);
}
}
/*
* Deletes a remote.
*/
@@ -715,33 +761,6 @@ relay_remote_free_all ()
}
}
/*
* Disconnects one remote.
*/
void
relay_remote_disconnect (struct t_relay_remote *remote)
{
if (remote->sock >= 0)
relay_remote_network_disconnect (remote);
}
/*
* Disconnects all remotes.
*/
void
relay_remote_disconnect_all ()
{
struct t_relay_remote *ptr_remote;
for (ptr_remote = relay_remotes; ptr_remote;
ptr_remote = ptr_remote->next_remote)
{
relay_remote_disconnect (ptr_remote);
}
}
/*
* Adds a remote in an infolist.
*
+3 -2
View File
@@ -88,11 +88,12 @@ extern struct t_relay_remote *relay_remote_new_with_infolist (struct t_infolist
extern void relay_remote_set_status (struct t_relay_remote *remote,
enum t_relay_status status);
extern int relay_remote_connect (struct t_relay_remote *remote);
extern int relay_remote_send (struct t_relay_remote *remote, const char *json);
extern void relay_remote_disconnect (struct t_relay_remote *remote);
extern void relay_remote_disconnect_all ();
extern int relay_remote_rename (struct t_relay_remote *remote, const char *name);
extern void relay_remote_free (struct t_relay_remote *remote);
extern void relay_remote_free_all ();
extern void relay_remote_disconnect (struct t_relay_remote *remote);
extern void relay_remote_disconnect_all ();
extern int relay_remote_add_to_infolist (struct t_infolist *infolist,
struct t_relay_remote *remote,
int force_disconnected_state);