/usr/include/boost/beast/websocket/detail
NameSizeModeActions
decorator.hpp67110644editdlrm
frame.hpp56790644editdlrm
hybi13.hpp11040644editdlrm
hybi13.ipp17300644editdlrm
impl_base.hpp126110644editdlrm
mask.hpp13500644editdlrm
mask.ipp14140644editdlrm
pmd_extension.hpp27630644editdlrm
pmd_extension.ipp96830644editdlrm
prng.hpp11890644editdlrm
prng.ipp30510644editdlrm
service.hpp15710644editdlrm
service.ipp13240644editdlrm
soft_mutex.hpp22410644editdlrm
type_traits.hpp8980644editdlrm
utf8_checker.hpp23400644editdlrm
utf8_checker.ipp96060644editdlrm
Edit: /usr/include/boost/beast/websocket/detail/mask.ipp (1414B)
// // Copyright (c) 2016-2019 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) // // Official repository: https://github.com/boostorg/beast // #ifndef BOOST_BEAST_WEBSOCKET_DETAIL_MASK_IPP #define BOOST_BEAST_WEBSOCKET_DETAIL_MASK_IPP #include namespace boost { namespace beast { namespace websocket { namespace detail { void prepare_key(prepared_key& prepared, std::uint32_t key) { prepared[0] = (key >> 0) & 0xff; prepared[1] = (key >> 8) & 0xff; prepared[2] = (key >> 16) & 0xff; prepared[3] = (key >> 24) & 0xff; } inline void rol(prepared_key& v, std::size_t n) { auto v0 = v; for(std::size_t i = 0; i < v.size(); ++i ) v[i] = v0[(i + n) % v.size()]; } // Apply mask in place // void mask_inplace(net::mutable_buffer const& b, prepared_key& key) { auto n = b.size(); auto const mask = key; // avoid aliasing auto p = static_cast(b.data()); while(n >= 4) { for(int i = 0; i < 4; ++i) p[i] ^= mask[i]; p += 4; n -= 4; } if(n > 0) { for(std::size_t i = 0; i < n; ++i) p[i] ^= mask[i]; rol(key, n); } } } // detail } // websocket } // beast } // boost #endif