MySQL 9.3.0
Source Code Documentation
utils_proto.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2025, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef ROUTER_SRC_MYSQL_REST_SERVICE_SRC_MRS_ENDPOINT_HANDLER_HELPER_UTILS_PROTO_H_
27#define ROUTER_SRC_MYSQL_REST_SERVICE_SRC_MRS_ENDPOINT_HANDLER_HELPER_UTILS_PROTO_H_
28
29#include <set>
30#include <string>
31
32#include "http/base/uri.h"
36
37namespace mrs {
38namespace endpoint {
39namespace handler {
40
42 const std::set<std::string> &protocols,
44 // New mrs-schema has only one protocol assigned to the service
45 // and it should work as "enforce".
46 if (1 == protocols.size())
47 return protocols.count(k_https) ? k_usedProtocolHttps : k_usedProtocolHttp;
48
49 if (0 == protocols.count(configuration->does_server_support_https() ? k_https
50 : k_http))
51 return k_usedProtocolNone;
52
53 if (configuration->does_server_support_https()) return k_usedProtocolHttps;
54
55 return k_usedProtocolHttp;
56}
57
59 const std::set<std::string> &protocols,
61 const auto used =
63
64 switch (used) {
66 return k_protocolHttp;
67
69 return k_protocolHttps;
70
72 break;
73 }
74
75 // For now just return what we support
76 // in future lets check if there was X-Forward-proto set.
77 return configuration->does_server_support_https() ? k_protocolHttps
79}
80
82 ::http::base::Uri *uri) {
83 switch (protocol) {
85 uri->set_scheme("http");
86 return;
88 uri->set_scheme("https");
89 return;
90 default:
91 return;
92 }
93}
94
95template <typename EndpointPtr>
96Protocol get_protocol(EndpointPtr endpoint) {
97 auto ep = lock(endpoint);
98 auto endpoint_protocols = get_endpoint_protocol(ep);
99 auto configuration = ep->get_configuration();
100 return handler::get_properly_configured_protocol(endpoint_protocols,
101 configuration.get());
102}
103
104} // namespace handler
105} // namespace endpoint
106} // namespace mrs
107
108#endif /* ROUTER_SRC_MYSQL_REST_SERVICE_SRC_MRS_ENDPOINT_HANDLER_HELPER_UTILS_PROTO_H_ \
109 */
Definition: protocol.h:33
The handler class is the interface for dynamically loadable storage engines.
Definition: handler.h:4618
Definition: uri.h:40
virtual void set_scheme(const std::string &scheme)
Definition: uri.cc:76
Definition: endpoint_configuration.h:35
Protocol get_properly_configured_protocol(const std::set< std::string > &protocols, const mrs::interface::EndpointConfiguration *configuration)
Definition: utils_proto.h:58
UsedProtocol get_properly_configured_used_protocol(const std::set< std::string > &protocols, const mrs::interface::EndpointConfiguration *configuration)
Definition: utils_proto.h:41
void add_protocol_to_host(UsedProtocol protocol, ::http::base::Uri *uri)
Definition: utils_proto.h:81
const std::string k_http
Definition: protocol.h:43
UsedProtocol
Definition: protocol.h:37
@ k_usedProtocolHttp
Definition: protocol.h:39
@ k_usedProtocolHttps
Definition: protocol.h:40
@ k_usedProtocolNone
Definition: protocol.h:38
std::shared_ptr< Type > lock(const std::weak_ptr< Type > &endpoint)
Definition: utilities.h:61
Protocol get_protocol(EndpointPtr endpoint)
Definition: utils_proto.h:96
const std::string k_https
Definition: protocol.h:44
Protocols get_endpoint_protocol(std::shared_ptr< DbServiceEndpoint > &endpoint)
Definition: utilities.h:198
@ k_protocolHttp
Definition: protocol.h:35
@ k_protocolHttps
Definition: protocol.h:35
Definition: authorize_manager.h:48
required string configuration
Definition: replication_asynchronous_connection_failover.proto:49