Line data Source code
1 : // 2 : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com) 3 : // 4 : // Distributed under the Boost Software License, Version 1.0. (See accompanying 5 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 : // 7 : // Official repository: https://github.com/cppalliance/http_proto 8 : // 9 : 10 : #include <boost/http_proto/rfc/upgrade_rule.hpp> 11 : #include <boost/http_proto/rfc/token_rule.hpp> 12 : #include <boost/url/grammar/error.hpp> 13 : #include <boost/url/grammar/parse.hpp> 14 : 15 : namespace boost { 16 : namespace http_proto { 17 : 18 : auto 19 41 : upgrade_protocol_rule_t:: 20 : parse( 21 : char const*& it, 22 : char const* end) const noexcept -> 23 : system::result<value_type> 24 : { 25 41 : value_type t; 26 : // token 27 : { 28 : auto rv = grammar::parse( 29 41 : it, end, token_rule); 30 41 : if(! rv) 31 3 : return rv.error(); 32 38 : t.name = *rv; 33 : } 34 : // [ "/" token ] 35 38 : if( it == end || 36 8 : *it != '/') 37 31 : return t; 38 7 : ++it; 39 : auto rv = grammar::parse( 40 7 : it, end, token_rule); 41 7 : if(! rv) 42 0 : return rv.error(); 43 7 : t.version = *rv; 44 7 : return t; 45 : } 46 : 47 : } // http_proto 48 : } // boost