1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-12 14:14:48 +02:00

relay/api: fix send of data to remote after command /upgrade executed in the remote client

This commit is contained in:
Sébastien Helleu
2024-08-11 23:35:51 +02:00
parent 1de8fec2ee
commit b63f63f001
6 changed files with 44 additions and 14 deletions
+1
View File
@@ -73,6 +73,7 @@
- relay/api: fix "body_type" returned when lines or nicks of a buffer are requested
- relay/api: fix read of one buffer line
- relay/api: automatically disconnect when the command `/upgrade` is executed on the remote
- relay/api: fix send of data to remote after command `/upgrade` executed in the remote client
- relay/api: disconnect from remote in case of error when sending data
- relay/api: disconnect cleanly when the remote is quitting ([#2168](https://github.com/weechat/weechat/issues/2168))
- relay: fix websocket permessage-deflate extension when the client doesn't send the max window bits parameters ([#1549](https://github.com/weechat/weechat/issues/1549))
@@ -33,6 +33,7 @@
#include "../../../weechat-plugin.h"
#include "../../relay.h"
#include "../../relay-auth.h"
#include "../../relay-buffer.h"
#include "../../relay-config.h"
#include "../../relay-http.h"
#include "../../relay-raw.h"
@@ -617,23 +618,18 @@ relay_remote_event_apply_props (void *data,
* Callback for remote buffer input.
*/
int
relay_remote_event_buffer_input_cb (const void *pointer,
void *data,
struct t_gui_buffer *buffer,
const char *input_data)
void
relay_remote_event_buffer_input (struct t_gui_buffer *buffer,
const char *input_data)
{
struct t_relay_remote *ptr_remote;
cJSON *json, *json_body;
long long buffer_id;
/* make C compiler happy */
(void) pointer;
(void) data;
ptr_remote = relay_remote_search (weechat_buffer_get_string (buffer, "localvar_relay_remote"));
ptr_remote = relay_remote_search (
weechat_buffer_get_string (buffer, "localvar_relay_remote"));
if (!ptr_remote)
return WEECHAT_RC_OK;
return;
json = NULL;
@@ -669,12 +665,12 @@ relay_remote_event_buffer_input_cb (const void *pointer,
cJSON_Delete (json);
return WEECHAT_RC_OK;
return;
error:
if (json)
cJSON_Delete (json);
return WEECHAT_RC_OK;
return;
}
/*
@@ -923,7 +919,7 @@ RELAY_REMOTE_EVENT_CALLBACK(buffer)
weechat_hashtable_set (buffer_props, "input_pos", str_number);
ptr_buffer = weechat_buffer_new_props (
full_name, buffer_props,
&relay_remote_event_buffer_input_cb, NULL, NULL,
&relay_buffer_input_cb, NULL, NULL,
NULL, NULL, NULL);
apply_props = 0;
}
@@ -20,6 +20,8 @@
#ifndef WEECHAT_PLUGIN_RELAY_REMOTE_EVENT_H
#define WEECHAT_PLUGIN_RELAY_REMOTE_EVENT_H
#include <cjson/cJSON.h>
#define RELAY_REMOTE_EVENT_ID_INITIAL_SYNC "initial_sync"
#define RELAY_REMOTE_EVENT_CALLBACK(__body_type) \
@@ -43,6 +45,8 @@ struct t_relay_remote_event_cb
t_relay_remote_event_func *func; /* callback (can be NULL) */
};
extern void relay_remote_event_buffer_input (struct t_gui_buffer *buffer,
const char *input_data);
extern void relay_remote_event_recv (struct t_relay_remote *remote,
const char *data);
+14
View File
@@ -29,6 +29,7 @@
#include "relay-buffer.h"
#include "relay-client.h"
#include "relay-config.h"
#include "relay-remote.h"
#include "relay-raw.h"
@@ -172,6 +173,7 @@ relay_buffer_input_cb (const void *pointer, void *data,
const char *input_data)
{
struct t_relay_client *client, *ptr_client, *next_client;
const char *ptr_remote_name, *ptr_remote_id;
/* make C compiler happy */
(void) pointer;
@@ -223,6 +225,18 @@ relay_buffer_input_cb (const void *pointer, void *data,
}
}
}
else
{
ptr_remote_name = weechat_buffer_get_string (buffer,
"localvar_relay_remote");
ptr_remote_id = weechat_buffer_get_string (buffer,
"localvar_relay_remote_id");
if (ptr_remote_name && ptr_remote_name[0]
&& ptr_remote_id && ptr_remote_id[0])
{
relay_remote_buffer_input (buffer, input_data);
}
}
return WEECHAT_RC_OK;
}
+13
View File
@@ -37,6 +37,7 @@
#include "relay-remote.h"
#include "relay-websocket.h"
#ifdef HAVE_CJSON
#include "api/remote/relay-remote-event.h"
#include "api/remote/relay-remote-network.h"
#endif
@@ -957,6 +958,18 @@ relay_remote_disconnect_all ()
}
}
/*
* Callback for input data in a remote buffer.
*/
void
relay_remote_buffer_input (struct t_gui_buffer *buffer, const char *input_data)
{
#ifdef HAVE_CJSON
relay_remote_event_buffer_input (buffer, input_data);
#endif
}
/*
* Deletes a remote.
*/
+2
View File
@@ -111,6 +111,8 @@ extern int relay_remote_reconnect (struct t_relay_remote *remote);
extern void relay_remote_timer ();
extern void relay_remote_disconnect_all ();
extern int relay_remote_rename (struct t_relay_remote *remote, const char *name);
extern void relay_remote_buffer_input (struct t_gui_buffer *buffer,
const char *input_data);
extern void relay_remote_free (struct t_relay_remote *remote);
extern void relay_remote_free_all ();
extern int relay_remote_add_to_infolist (struct t_infolist *infolist,