E-MailRelay

glocal_unix.cpp
Go to the documentation of this file.
1//
2// Copyright (C) 2001-2024 Graeme Walker <graeme_walker@users.sourceforge.net>
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 as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <http://www.gnu.org/licenses/>.
16// ===
17///
18/// \file glocal_unix.cpp
19///
20
21#include "gdef.h"
22#include "glocal.h"
23#include "ghostname.h"
24#include "gidn.h"
25#include "gresolver.h"
26
27std::string GNet::Local::hostname()
28{
29 std::string name = G::hostname() ;
30 if( name.empty() )
31 return "localhost" ;
32 return name ;
33}
34
35std::string GNet::Local::canonicalName()
36{
37 static std::string result ;
38 static bool first = true ;
39 if( first )
40 {
41 first = false ;
42 std::string name = G::Idn::encode( hostname() ) ;
43 Location location( name.append(":0") ) ;
44 auto pair = Resolver::resolve( location , Resolver::Config().set_with_canonical_name().set_raw() ) ;
45 bool ok = pair.first.empty() ;
46 if( ok && !pair.second.empty() )
47 result = G::Idn::encode( pair.second ) ;
48 else
49 result = name + ".localnet" ;
50 }
51 return result ;
52}
53
GNet::Local::canonicalName
static std::string canonicalName()
Returns the ASCII fully qualified domain name associated with hostname().
Definition: glocal_unix.cpp:35
GNet::Local::hostname
static std::string hostname()
Returns the local hostname. Returns "localhost" on error.
Definition: glocal_unix.cpp:27
GNet::Location
A class that represents the remote target for out-going client connections.
Definition: glocation.h:70
GNet::Resolver::resolve
static std::pair< std::string, std::string > resolve(Location &, const Config &)
Does synchronous name resolution.
Definition: gresolver.cpp:198
ghostname.h
gidn.h
glocal.h
gresolver.h
G::Idn::encode
std::string encode(std::string_view domain)
Returns the given domain with A-lables.
Definition: gidn.cpp:89
G::hostname
std::string hostname()
Returns the hostname.
Definition: ghostname_unix.cpp:27
GNet::Resolver::Config
A configuration structure for GNet::Resolver.
Definition: gresolver.h:52