103 lines
3.7 KiB
Diff
103 lines
3.7 KiB
Diff
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
|
|
|