• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPC_CORE_LIB_GPRPP_HOST_PORT_H
20 #define GRPC_CORE_LIB_GPRPP_HOST_PORT_H
21 
22 #include <grpc/support/port_platform.h>
23 
24 #include <string>
25 
26 #include "absl/strings/string_view.h"
27 
28 namespace grpc_core {
29 
30 // Given a host and port, creates a newly-allocated string of the form
31 // "host:port" or "[ho:st]:port", depending on whether the host contains colons
32 // like an IPv6 literal.  If the host is already bracketed, then additional
33 // brackets will not be added.
34 std::string JoinHostPort(absl::string_view host, int port);
35 
36 /** Given a name in the form "host:port" or "[ho:st]:port", split into hostname
37    and port number.
38 
39    There are two variants of this method:
40    1) absl::string_view output: port and host are returned as views on name.
41    2) std::string output: port and host are copied into newly allocated strings.
42 
43    Prefer variant (1) over (2), because no allocation or copy is performed in
44    variant (1).  Use (2) only when interacting with C API that mandate
45    null-terminated strings.
46 
47    Return true on success, false on failure. Guarantees *host and *port are
48    cleared on failure. */
49 bool SplitHostPort(absl::string_view name, absl::string_view* host,
50                    absl::string_view* port);
51 bool SplitHostPort(absl::string_view name, std::string* host,
52                    std::string* port);
53 
54 }  // namespace grpc_core
55 
56 #endif /* GRPC_CORE_LIB_GPRPP_HOST_PORT_H */
57