| /* Operations on network stuff. |
| Copyright (C) 2018-2021 Free Software Foundation, Inc. |
| |
| This file is part of GDB. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| #ifndef COMMON_NETSTUFF_H |
| #define COMMON_NETSTUFF_H |
| |
| #include <string> |
| |
| /* Like NI_MAXHOST/NI_MAXSERV, but enough for numeric forms. */ |
| #define GDB_NI_MAX_ADDR 64 |
| #define GDB_NI_MAX_PORT 16 |
| |
| /* Helper class to guarantee that we always call 'freeaddrinfo'. */ |
| |
| class scoped_free_addrinfo |
| { |
| public: |
| /* Default constructor. */ |
| explicit scoped_free_addrinfo (struct addrinfo *ainfo) |
| : m_res (ainfo) |
| { |
| } |
| |
| /* Destructor responsible for free'ing M_RES by calling |
| 'freeaddrinfo'. */ |
| ~scoped_free_addrinfo (); |
| |
| DISABLE_COPY_AND_ASSIGN (scoped_free_addrinfo); |
| |
| private: |
| /* The addrinfo resource. */ |
| struct addrinfo *m_res; |
| }; |
| |
| /* The struct we return after parsing the connection spec. */ |
| |
| struct parsed_connection_spec |
| { |
| /* The hostname. */ |
| std::string host_str; |
| |
| /* The port, if any. */ |
| std::string port_str; |
| }; |
| |
| |
| /* Parse SPEC (which is a string in the form of "ADDR:PORT") and |
| return a 'parsed_connection_spec' structure with the proper fields |
| filled in. Also adjust HINT accordingly. */ |
| extern parsed_connection_spec |
| parse_connection_spec_without_prefix (std::string spec, |
| struct addrinfo *hint); |
| |
| /* Parse SPEC (which is a string in the form of |
| "[tcp[6]:|udp[6]:]ADDR:PORT") and return a 'parsed_connection_spec' |
| structure with the proper fields filled in. Also adjust HINT |
| accordingly. */ |
| extern parsed_connection_spec parse_connection_spec (const char *spec, |
| struct addrinfo *hint); |
| |
| #endif /* COMMON_NETSTUFF_H */ |