3 * Copyright 2015 gRPC authors.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #ifndef GRPC_CORE_LIB_GPRPP_HOST_PORT_H
20 #define GRPC_CORE_LIB_GPRPP_HOST_PORT_H
22 #include <grpc/support/port_platform.h>
24 #include "src/core/lib/gprpp/memory.h"
25 #include "src/core/lib/gprpp/string_view.h"
29 /** Given a host and port, creates a newly-allocated string of the form
30 "host:port" or "[ho:st]:port", depending on whether the host contains colons
31 like an IPv6 literal. If the host is already bracketed, then additional
32 brackets will not be added.
34 Usage is similar to gpr_asprintf: returns the number of bytes written
35 (excluding the final '\0'), and *out points to a string.
37 In the unlikely event of an error, returns -1 and sets *out to NULL. */
38 int JoinHostPort(UniquePtr<char>* out, const char* host, int port);
40 /** Given a name in the form "host:port" or "[ho:st]:port", split into hostname
43 There are two variants of this method:
44 1) StringView output: port and host are returned as views on name.
45 2) char* output: port and host are copied into newly allocated strings.
47 Prefer variant (1) over (2), because no allocation or copy is performed in
48 variant (1). Use (2) only when interacting with C API that mandate
49 null-terminated strings.
51 Return true on success, false on failure. Guarantees *host and *port are
52 cleared on failure. */
53 bool SplitHostPort(StringView name, StringView* host, StringView* port);
54 bool SplitHostPort(StringView name, UniquePtr<char>* host,
55 UniquePtr<char>* port);
57 } // namespace grpc_core
59 #endif /* GRPC_CORE_LIB_GPRPP_HOST_PORT_H */