summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuciano Iam <lucianito@gmail.com>2020-02-26 23:09:59 +0100
committerRobin Gareus <robin@gareus.org>2020-02-27 03:42:54 +0100
commitec8e0f8ee50de92c10d1d97c136f4f0dbd0a26e0 (patch)
treed2f46cafe22cb90b94a5533b947e5ae01484fb9d
parentbc2cbfc7ec044692e959d5d1e55f5ea4fc76fe85 (diff)
Gracefully reject HTTP requests reaching the websockets surface
-rw-r--r--libs/surfaces/websockets/server.cc16
-rw-r--r--libs/surfaces/websockets/server.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/libs/surfaces/websockets/server.cc b/libs/surfaces/websockets/server.cc
index 88984348c8..e91acb717a 100644
--- a/libs/surfaces/websockets/server.cc
+++ b/libs/surfaces/websockets/server.cc
@@ -295,6 +295,14 @@ WebsocketsServer::write_client (Client wsi)
}
}
+void
+WebsocketsServer::reject_http_client (Client wsi)
+{
+ const char *html_body = "<p>This URL is not meant to be accessed via HTTP; for example using"
+ " a web browser. Refer to Ardour documentation for further information.</p>";
+ lws_return_http_status (wsi, 404, html_body);
+}
+
bool
WebsocketsServer::io_handler (Glib::IOCondition ioc, lws_sockfd_type fd)
{
@@ -388,6 +396,10 @@ WebsocketsServer::lws_callback (struct lws* wsi, enum lws_callback_reasons reaso
server->write_client (wsi);
break;
+ case LWS_CALLBACK_HTTP:
+ server->reject_http_client (wsi);
+ break;
+
case LWS_CALLBACK_FILTER_NETWORK_CONNECTION:
case LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION:
case LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED:
@@ -398,6 +410,10 @@ WebsocketsServer::lws_callback (struct lws* wsi, enum lws_callback_reasons reaso
case LWS_CALLBACK_LOCK_POLL:
case LWS_CALLBACK_UNLOCK_POLL:
case LWS_CALLBACK_WS_PEER_INITIATED_CLOSE:
+ case LWS_CALLBACK_FILTER_HTTP_CONNECTION:
+ case LWS_CALLBACK_HTTP_BIND_PROTOCOL:
+ case LWS_CALLBACK_ADD_HEADERS:
+ case LWS_CALLBACK_HTTP_CONFIRM_UPGRADE:
break;
/* TODO: handle HTTP connections.
diff --git a/libs/surfaces/websockets/server.h b/libs/surfaces/websockets/server.h
index 0871d5ae82..1817fde30a 100644
--- a/libs/surfaces/websockets/server.h
+++ b/libs/surfaces/websockets/server.h
@@ -81,6 +81,7 @@ private:
void del_client (Client);
void recv_client (Client, void* buf, size_t len);
void write_client (Client);
+ void reject_http_client (Client);
bool io_handler (Glib::IOCondition, lws_sockfd_type);