1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-02 07:46:38 +02:00

relay: enable websocket extension "permessage-deflate" with "api" relay only

This commit is contained in:
Sébastien Helleu
2024-06-02 09:05:40 +02:00
parent 7b90b1fbf4
commit 26fa0ea1b8
21 changed files with 245 additions and 199 deletions
@@ -207,7 +207,8 @@ relay_remote_network_check_auth (struct t_relay_remote *remote,
relay_websocket_parse_extensions (
weechat_hashtable_get (http_resp->headers, "sec-websocket-extensions"),
remote->ws_deflate);
remote->ws_deflate,
1); /* ws_deflate_allowed */
if (!accept_ok)
{
+1 -1
View File
@@ -1759,7 +1759,7 @@ relay_config_init ()
relay_config_file, relay_config_section_network,
"websocket_permessage_deflate", "boolean",
N_("enable websocket extension \"permessage-deflate\" to compress "
"websocket frames, with \"api\" and \"weechat\" protocols; "
"websocket frames (\"api\" protocol only); "
"if disabled, WeeChat (as server) will not enable "
"permessage-deflate even if the client supports it, and when "
"connecting to a remote WeeChat (api relay only), "
+17 -4
View File
@@ -385,6 +385,10 @@ error:
/*
* Parses and saves a HTTP header in hashtable "headers".
*
* The parameter "ws_deflate_allowed" controls whether the websocket extension
* "permessage-deflate" is allowed or not (it is allowed only with "api"
* protocol).
*
* Returns:
* 1: OK, header saved
* 0: error: invalid format
@@ -392,7 +396,8 @@ error:
int
relay_http_parse_header (struct t_relay_http_request *request,
const char *header)
const char *header,
int ws_deflate_allowed)
{
char *pos, *name, *name_lower, *error, **items;
const char *ptr_value;
@@ -465,7 +470,12 @@ relay_http_parse_header (struct t_relay_http_request *request,
* extensions
*/
if (strcmp (name_lower, "sec-websocket-extensions") == 0)
relay_websocket_parse_extensions (ptr_value, request->ws_deflate);
{
relay_websocket_parse_extensions (
ptr_value,
request->ws_deflate,
ws_deflate_allowed);
}
free (name);
free (name_lower);
@@ -891,7 +901,7 @@ void
relay_http_recv (struct t_relay_client *client, const char *data)
{
char *new_partial, *pos;
int length;
int length, ws_deflate_allowed;
if (client->partial_message)
{
@@ -924,8 +934,11 @@ relay_http_recv (struct t_relay_client *client, const char *data)
}
else
{
ws_deflate_allowed = (client->protocol == RELAY_PROTOCOL_API) ?
1 : 0;
relay_http_parse_header (client->http_req,
client->partial_message);
client->partial_message,
ws_deflate_allowed);
}
pos[0] = '\r';
pos++;
+3 -1
View File
@@ -301,7 +301,8 @@ relay_websocket_client_handshake_valid (struct t_relay_http_request *request)
void
relay_websocket_parse_extensions (const char *extensions,
struct t_relay_websocket_deflate *ws_deflate)
struct t_relay_websocket_deflate *ws_deflate,
int ws_deflate_allowed)
{
char **exts, **params, **items, *error;
int i, j, num_exts, num_params, num_items;
@@ -319,6 +320,7 @@ relay_websocket_parse_extensions (const char *extensions,
params = weechat_string_split (exts[i], ";", " ", 0, 0, &num_params);
if (params && (num_params >= 1)
&& (strcmp (params[0], "permessage-deflate") == 0)
&& ws_deflate_allowed
&& (weechat_config_boolean (relay_config_network_websocket_permessage_deflate)))
{
ws_deflate->enabled = 1;
+2 -1
View File
@@ -71,7 +71,8 @@ extern int relay_websocket_is_valid_http_get (enum t_relay_protocol protocol,
const char *message);
extern int relay_websocket_client_handshake_valid (struct t_relay_http_request *request);
extern void relay_websocket_parse_extensions (const char *extensions,
struct t_relay_websocket_deflate *ws_deflate);
struct t_relay_websocket_deflate *ws_deflate,
int ws_deflate_allowed);
extern char *relay_websocket_build_handshake (struct t_relay_http_request *request);
extern int relay_websocket_decode_frame (const unsigned char *buffer,
unsigned long long length,