Browse Source

Merge pull request #32750 from Faless/js/fix_ws_refactor

Fix HTML5 build after 67a4c30.
Rémi Verschelde 5 years ago
parent
commit
3564547208

+ 8 - 2
modules/websocket/emws_client.cpp

@@ -64,9 +64,15 @@ EMSCRIPTEN_KEEPALIVE void _esws_on_close(void *obj, int code, char *reason, int
 }
 }
 
-Error EMWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const PoolVector<String> p_protocols, const Vector<String> p_custom_headers) {
+Error EMWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const Vector<String> p_protocols, const Vector<String> p_custom_headers) {
+
+	String proto_string;
+	for (int i = 0; i < p_protocols.size(); i++) {
+		if (i != 0)
+			proto_string += ",";
+		proto_string += p_protocols[i];
+	}
 
-	String proto_string = p_protocols.join(",");
 	String str = "ws://";
 
 	if (p_custom_headers.size()) {

+ 1 - 1
modules/websocket/emws_client.h

@@ -50,7 +50,7 @@ public:
 	bool _is_connecting;
 
 	Error set_buffers(int p_in_buffer, int p_in_packets, int p_out_buffer, int p_out_packets);
-	Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const PoolVector<String> p_protocol = PoolVector<String>(), const Dictionary p_custom_headers = Dictionary());
+	Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const Vector<String> p_protocol = Vector<String>(), const Vector<String> p_custom_headers = Vector<String>());
 	Ref<WebSocketPeer> get_peer(int p_peer_id) const;
 	void disconnect_from_host(int p_code = 1000, String p_reason = "");
 	IP_Address get_connected_host() const;

+ 1 - 1
modules/websocket/emws_server.cpp

@@ -33,7 +33,7 @@
 #include "emws_server.h"
 #include "core/os/os.h"
 
-Error EMWSServer::listen(int p_port, PoolVector<String> p_protocols, bool gd_mp_api) {
+Error EMWSServer::listen(int p_port, Vector<String> p_protocols, bool gd_mp_api) {
 
 	return FAILED;
 }

+ 1 - 1
modules/websocket/emws_server.h

@@ -43,7 +43,7 @@ class EMWSServer : public WebSocketServer {
 
 public:
 	Error set_buffers(int p_in_buffer, int p_in_packets, int p_out_buffer, int p_out_packets);
-	Error listen(int p_port, PoolVector<String> p_protocols = PoolVector<String>(), bool gd_mp_api = false);
+	Error listen(int p_port, Vector<String> p_protocols = Vector<String>(), bool gd_mp_api = false);
 	void stop();
 	bool is_listening() const;
 	bool has_peer(int p_id) const;

+ 6 - 2
modules/websocket/wsl_client.cpp

@@ -181,8 +181,12 @@ Error WSLClient::connect_to_host(String p_host, String p_path, uint16_t p_port,
 	_connection = _tcp;
 	_use_ssl = p_ssl;
 	_host = p_host;
-	_protocols.clear();
-	_protocols.append_array(p_protocols);
+	// Strip edges from protocols.
+	_protocols.resize(p_protocols.size());
+	String *pw = _protocols.ptrw();
+	for (int i = 0; i < p_protocols.size(); i++) {
+		pw[i] = p_protocols[i].strip_edges();
+	}
 
 	_key = WSLPeer::generate_key();
 	// TODO custom extra headers (allow overriding this too?)

+ 9 - 3
modules/websocket/wsl_server.cpp

@@ -80,11 +80,12 @@ bool WSLServer::PendingPeer::_parse_request(const Vector<String> p_protocols) {
 	if (headers.has("sec-websocket-protocol")) {
 		Vector<String> protos = headers["sec-websocket-protocol"].split(",");
 		for (int i = 0; i < protos.size(); i++) {
+			String proto = protos[i].strip_edges();
 			// Check if we have the given protocol
 			for (int j = 0; j < p_protocols.size(); j++) {
-				if (protos[i] != p_protocols[j])
+				if (proto != p_protocols[j])
 					continue;
-				protocol = protos[i];
+				protocol = proto;
 				break;
 			}
 			// Found a protocol
@@ -158,7 +159,12 @@ Error WSLServer::listen(int p_port, const Vector<String> p_protocols, bool gd_mp
 	ERR_FAIL_COND_V(is_listening(), ERR_ALREADY_IN_USE);
 
 	_is_multiplayer = gd_mp_api;
-	_protocols.append_array(p_protocols);
+	// Strip edges from protocols.
+	_protocols.resize(p_protocols.size());
+	String *pw = _protocols.ptrw();
+	for (int i = 0; i < p_protocols.size(); i++) {
+		pw[i] = p_protocols[i].strip_edges();
+	}
 	_server->listen(p_port);
 
 	return OK;