iSulad/0011-Fix-stuck-problem-caused-by-websocket-traffic-restri.patch

103 lines
3.7 KiB
Diff
Raw Normal View History

From 47714fbf8944a14c64751af223edcb8a743177cd Mon Sep 17 00:00:00 2001
From: wujing <wujing50@huawei.com>
Date: Fri, 3 Jul 2020 16:49:06 +0800
Subject: [PATCH 11/12] Fix stuck problem caused by websocket traffic
restrictions
Signed-off-by: wujing <wujing50@huawei.com>
---
src/websocket/service/ws_server.cc | 16 ++--------------
src/websocket/service/ws_server.h | 16 +++-------------
2 files changed, 5 insertions(+), 27 deletions(-)
diff --git a/src/websocket/service/ws_server.cc b/src/websocket/service/ws_server.cc
index 01f1dd3..bd1f39b 100644
--- a/src/websocket/service/ws_server.cc
+++ b/src/websocket/service/ws_server.cc
@@ -288,18 +288,8 @@ int WebsocketServer::Wswrite(struct lws *wsi, void *in, size_t len)
return 0;
}
-void WebsocketServer::Receive(struct lws *wsi, void *user, void *in, size_t len)
+void WebsocketServer::Receive(struct lws *wsi, void *in, size_t len)
{
- if (user != nullptr) {
- struct per_session_data__echo *pss = (struct per_session_data__echo *)user;
- pss->final = lws_is_final_fragment(wsi);
- pss->binary = lws_frame_is_binary(wsi);
-
- (void)memcpy(&pss->buf[LWS_PRE], in, len);
- pss->len = (unsigned int)len;
- pss->rx += len;
- lws_rx_flow_control(wsi, 0);
- }
if (m_wsis.find(wsi) == m_wsis.end()) {
ERROR("invailed websocket session!");
return;
@@ -353,13 +343,11 @@ int WebsocketServer::Callback(struct lws *wsi, enum lws_callback_reasons reason,
return -1;
}
WebsocketServer::GetInstance()->SetLwsSendedFlag(wsi, true);
- lws_rx_flow_control(wsi, 1);
}
break;
case LWS_CALLBACK_RECEIVE: {
std::lock_guard<std::mutex> lock(m_mutex);
- WebsocketServer::GetInstance()->Receive(wsi, nullptr, (char *)in, len);
- lws_rx_flow_control(wsi, 0);
+ WebsocketServer::GetInstance()->Receive(wsi, (char *)in, len);
}
break;
case LWS_CALLBACK_CLOSED: {
diff --git a/src/websocket/service/ws_server.h b/src/websocket/service/ws_server.h
index 761d7ab..35f0c5f 100644
--- a/src/websocket/service/ws_server.h
+++ b/src/websocket/service/ws_server.h
@@ -27,7 +27,7 @@
#include "url.h"
#include "errors.h"
-#define MAX_ECHO_PAYLOAD 1024
+#define MAX_ECHO_PAYLOAD 4096
#define MAX_ARRAY_LEN 2
#define MAX_BUF_LEN 256
#define MAX_PROTOCOL_NUM 2
@@ -37,16 +37,6 @@
#define BUF_BASE_SIZE 1024
#define LWS_TIMEOUT 50
-struct per_session_data__echo {
- size_t rx, tx;
- unsigned char buf[LWS_PRE + MAX_ECHO_PAYLOAD + 1];
- unsigned int len;
- unsigned int index;
- int final;
- int continuation;
- int binary;
-};
-
enum WebsocketChannel {
STDINCHANNEL = 0,
STDOUTCHANNEL,
@@ -95,7 +85,7 @@ private:
std::vector<std::string> split(std::string str, char r);
static void EmitLog(int level, const char *line);
int CreateContext();
- inline void Receive(struct lws *client, void *user, void *in, size_t len);
+ inline void Receive(struct lws *client, void *in, size_t len);
int Wswrite(struct lws *wsi, void *in, size_t len);
inline int DumpHandshakeInfo(struct lws *wsi) noexcept;
static int Callback(struct lws *wsi, enum lws_callback_reasons reason,
@@ -110,7 +100,7 @@ private:
volatile int m_force_exit = 0;
std::thread m_pthread_service;
const struct lws_protocols m_protocols[MAX_PROTOCOL_NUM] = {
- { "channel.k8s.io", Callback, sizeof(struct per_session_data__echo), MAX_ECHO_PAYLOAD, },
+ { "channel.k8s.io", Callback, 0, MAX_ECHO_PAYLOAD, },
{ NULL, NULL, 0, 0 }
};
RouteCallbackRegister m_handler;
--
2.20.1