123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #ifndef BOOST_BEAST_WEBSOCKET_DETAIL_PMD_EXTENSION_HPP
- #define BOOST_BEAST_WEBSOCKET_DETAIL_PMD_EXTENSION_HPP
- #include <boost/beast/core/error.hpp>
- #include <boost/beast/websocket/option.hpp>
- #include <boost/beast/http/rfc7230.hpp>
- #include <utility>
- #include <type_traits>
- namespace boost {
- namespace beast {
- namespace websocket {
- namespace detail {
- struct pmd_offer
- {
- bool accept;
-
- int server_max_window_bits;
-
- int client_max_window_bits;
-
- bool server_no_context_takeover;
-
- bool client_no_context_takeover;
- };
- BOOST_BEAST_DECL
- int
- parse_bits(string_view s);
- BOOST_BEAST_DECL
- void
- pmd_read_impl(pmd_offer& offer, http::ext_list const& list);
- BOOST_BEAST_DECL
- static_string<512>
- pmd_write_impl(pmd_offer const& offer);
- BOOST_BEAST_DECL
- static_string<512>
- pmd_negotiate_impl(
- pmd_offer& config,
- pmd_offer const& offer,
- permessage_deflate const& o);
- template<class Allocator>
- void
- pmd_read(pmd_offer& offer,
- http::basic_fields<Allocator> const& fields)
- {
- http::ext_list list{
- fields["Sec-WebSocket-Extensions"]};
- detail::pmd_read_impl(offer, list);
- }
- template<class Allocator>
- void
- pmd_write(http::basic_fields<Allocator>& fields,
- pmd_offer const& offer)
- {
- auto s = detail::pmd_write_impl(offer);
- fields.set(http::field::sec_websocket_extensions, to_string_view(s));
- }
- template<class Allocator>
- void
- pmd_negotiate(
- http::basic_fields<Allocator>& fields,
- pmd_offer& config,
- pmd_offer const& offer,
- permessage_deflate const& o)
- {
- if(! (offer.accept && o.server_enable))
- {
- config.accept = false;
- return;
- }
- config.accept = true;
- auto s = detail::pmd_negotiate_impl(config, offer, o);
- if(config.accept)
- fields.set(http::field::sec_websocket_extensions, to_string_view(s));
- }
- BOOST_BEAST_DECL
- void
- pmd_normalize(pmd_offer& offer);
- }
- }
- }
- }
- #if BOOST_BEAST_HEADER_ONLY
- #include <boost/beast/websocket/detail/pmd_extension.ipp>
- #endif
- #endif
|