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_SRC_CORE_UTIL_HOST_PORT_H 20 #define GRPC_SRC_CORE_UTIL_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 42 /// strings. 43 44 /// Prefer variant (1) over (2), because no allocation or copy is performed in 45 /// variant (1). Use (2) only when interacting with C API that mandate 46 /// null-terminated strings. 47 48 /// Return true on success, false on failure. Guarantees *host and *port are 49 /// cleared on failure. 50 bool SplitHostPort(absl::string_view name, absl::string_view* host, 51 absl::string_view* port); 52 bool SplitHostPort(absl::string_view name, std::string* host, 53 std::string* port); 54 55 } // namespace grpc_core 56 57 #endif // GRPC_SRC_CORE_UTIL_HOST_PORT_H 58