|
@@ -96,7 +96,7 @@ bool WSLServer::PendingPeer::_parse_request(const Vector<String> p_protocols, St
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
-Error WSLServer::PendingPeer::do_handshake(const Vector<String> p_protocols, uint64_t p_timeout, String &r_resource_name) {
|
|
|
|
|
|
+Error WSLServer::PendingPeer::do_handshake(const Vector<String> p_protocols, uint64_t p_timeout, String &r_resource_name, const Vector<String> &p_extra_headers) {
|
|
if (OS::get_singleton()->get_ticks_msec() - time > p_timeout) {
|
|
if (OS::get_singleton()->get_ticks_msec() - time > p_timeout) {
|
|
print_verbose(vformat("WebSocket handshake timed out after %.3f seconds.", p_timeout * 0.001));
|
|
print_verbose(vformat("WebSocket handshake timed out after %.3f seconds.", p_timeout * 0.001));
|
|
return ERR_TIMEOUT;
|
|
return ERR_TIMEOUT;
|
|
@@ -141,6 +141,9 @@ Error WSLServer::PendingPeer::do_handshake(const Vector<String> p_protocols, uin
|
|
if (!protocol.is_empty()) {
|
|
if (!protocol.is_empty()) {
|
|
s += "Sec-WebSocket-Protocol: " + protocol + "\r\n";
|
|
s += "Sec-WebSocket-Protocol: " + protocol + "\r\n";
|
|
}
|
|
}
|
|
|
|
+ for (int i = 0; i < p_extra_headers.size(); i++) {
|
|
|
|
+ s += p_extra_headers[i] + "\r\n";
|
|
|
|
+ }
|
|
s += "\r\n";
|
|
s += "\r\n";
|
|
response = s.utf8();
|
|
response = s.utf8();
|
|
has_request = true;
|
|
has_request = true;
|
|
@@ -167,6 +170,10 @@ Error WSLServer::PendingPeer::do_handshake(const Vector<String> p_protocols, uin
|
|
return OK;
|
|
return OK;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void WSLServer::set_extra_headers(const Vector<String> &p_headers) {
|
|
|
|
+ _extra_headers = p_headers;
|
|
|
|
+}
|
|
|
|
+
|
|
Error WSLServer::listen(int p_port, const Vector<String> p_protocols, bool gd_mp_api) {
|
|
Error WSLServer::listen(int p_port, const Vector<String> p_protocols, bool gd_mp_api) {
|
|
ERR_FAIL_COND_V(is_listening(), ERR_ALREADY_IN_USE);
|
|
ERR_FAIL_COND_V(is_listening(), ERR_ALREADY_IN_USE);
|
|
|
|
|
|
@@ -199,7 +206,7 @@ void WSLServer::poll() {
|
|
for (const Ref<PendingPeer> &E : _pending) {
|
|
for (const Ref<PendingPeer> &E : _pending) {
|
|
String resource_name;
|
|
String resource_name;
|
|
Ref<PendingPeer> ppeer = E;
|
|
Ref<PendingPeer> ppeer = E;
|
|
- Error err = ppeer->do_handshake(_protocols, handshake_timeout, resource_name);
|
|
|
|
|
|
+ Error err = ppeer->do_handshake(_protocols, handshake_timeout, resource_name, _extra_headers);
|
|
if (err == ERR_BUSY) {
|
|
if (err == ERR_BUSY) {
|
|
continue;
|
|
continue;
|
|
} else if (err != OK) {
|
|
} else if (err != OK) {
|