forked from boostorg/beast
fix #195 This function returns `true` when the passed HTTP Request indicates a WebSocket Upgrade. It does not validate the contents of the fields: it just trivially accepts requests which can only be a WebSocket Upgrade message. Callers who wish to manually read HTTP requests in their server implementation can use this function to determine if the request should be routed to an instance of websocket::stream.
37 lines
850 B
C++
37 lines
850 B
C++
//
|
|
// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//
|
|
|
|
#ifndef BEAST_WEBSOCKET_IMPL_RFC6455_IPP
|
|
#define BEAST_WEBSOCKET_IMPL_RFC6455_IPP
|
|
|
|
#include <beast/http/rfc7230.hpp>
|
|
|
|
namespace beast {
|
|
namespace websocket {
|
|
|
|
template<class Fields>
|
|
bool
|
|
is_upgrade(http::header<true, Fields> const& req)
|
|
{
|
|
if(req.version < 11)
|
|
return false;
|
|
if(req.method != "GET")
|
|
return false;
|
|
if(! http::is_upgrade(req))
|
|
return false;
|
|
if(! http::token_list{req.fields["Upgrade"]}.exists("websocket"))
|
|
return false;
|
|
if(! req.fields.exists("Sec-WebSocket-Version"))
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
} // websocket
|
|
} // beast
|
|
|
|
#endif
|