From 24cc2a9065a4e962fb05addac47322930099a4b5 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Mon, 11 Feb 2002 10:16:18 +0000 Subject: [PATCH] Last bits of the merger. --- src/netutl.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/netutl.h | 32 ++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 src/netutl.c create mode 100644 src/netutl.h diff --git a/src/netutl.c b/src/netutl.c new file mode 100644 index 00000000..14ed5cef --- /dev/null +++ b/src/netutl.c @@ -0,0 +1,105 @@ +/* + netutl.c -- some supporting network utility code + Copyright (C) 1998-2002 Ivo Timmermans + 2000-2002 Guus Sliepen + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: netutl.c,v 1.12.4.23 2002/02/11 10:16:18 guus Exp $ +*/ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "errno.h" +#include "conf.h" +#include "net.h" +#include "netutl.h" + +#include "system.h" + +char *hostlookup(unsigned long addr) +{ + char *name; + struct hostent *host = NULL; + struct in_addr in; + int lookup_hostname = 0; +cp + in.s_addr = addr; + + get_config_bool(lookup_config(config_tree, "Hostnames"), &lookup_hostname); + + if(lookup_hostname) + host = gethostbyaddr((char *)&in, sizeof(in), AF_INET); + + if(!lookup_hostname || !host) + { + asprintf(&name, "%s", inet_ntoa(in)); + } + else + { + asprintf(&name, "%s", host->h_name); + } +cp + return name; +} + +/* + Turn a string into an IP address + return NULL on failure + Should support IPv6 and other stuff in the future. +*/ +ipv4_t str2address(char *str) +{ + ipv4_t address; + struct hostent *h; +cp + if(!(h = gethostbyname(str))) + { + if(debug_lvl >= DEBUG_ERROR) + syslog(LOG_WARNING, _("Error looking up `%s': %s\n"), str, strerror(errno)); + + return 0; + } + + address = ntohl(*((ipv4_t*)(h->h_addr_list[0]))); +cp + return address; +} + +char *address2str(ipv4_t address) +{ + char *str; +cp + asprintf(&str, "%hu.%hu.%hu.%hu", + (unsigned short int)((address >> 24) & 255), + (unsigned short int)((address >> 16) & 255), + (unsigned short int)((address >> 8) & 255), + (unsigned short int)(address & 255)); +cp + return str; +} diff --git a/src/netutl.h b/src/netutl.h new file mode 100644 index 00000000..3d1584f6 --- /dev/null +++ b/src/netutl.h @@ -0,0 +1,32 @@ +/* + netutl.h -- header file for netutl.c + Copyright (C) 1998-2002 Ivo Timmermans + 2000-2002 Guus Sliepen + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: netutl.h,v 1.2.4.9 2002/02/11 10:16:18 guus Exp $ +*/ + +#ifndef __TINC_NETUTL_H__ +#define __TINC_NETUTL_H__ + +#include "net.h" + +extern char *hostlookup(unsigned long); +extern ipv4_t str2address(char*); +extern char *address2str(ipv4_t); + +#endif /* __TINC_NETUTL_H__ */ -- 2.39.5