mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
Refactor ipv[46].[ch]
These are now combined into an inaddr.[ch], since their purpose is to implement functions for struct in_addr and struct in6_addr. The definitions for in6_addr and its allies are now in a separate header, inaddr_st.h. Closes ticket 26532.
This commit is contained in:
parent
ef106ce788
commit
5d8336c182
@ -49,8 +49,7 @@
|
|||||||
#include "lib/log/util_bug.h"
|
#include "lib/log/util_bug.h"
|
||||||
#include "lib/malloc/util_malloc.h"
|
#include "lib/malloc/util_malloc.h"
|
||||||
#include "lib/net/address.h"
|
#include "lib/net/address.h"
|
||||||
#include "lib/net/ipv4.h"
|
#include "lib/net/inaddr.h"
|
||||||
#include "lib/net/ipv6.h"
|
|
||||||
#include "lib/net/resolve.h"
|
#include "lib/net/resolve.h"
|
||||||
#include "lib/net/socket.h"
|
#include "lib/net/socket.h"
|
||||||
#include "lib/string/compat_ctype.h"
|
#include "lib/string/compat_ctype.h"
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
#include "lib/log/torlog.h"
|
#include "lib/log/torlog.h"
|
||||||
#include "lib/log/escape.h"
|
#include "lib/log/escape.h"
|
||||||
#include "lib/malloc/util_malloc.h"
|
#include "lib/malloc/util_malloc.h"
|
||||||
#include "lib/net/ipv4.h"
|
#include "lib/net/inaddr.h"
|
||||||
#include "lib/string/compat_ctype.h"
|
#include "lib/string/compat_ctype.h"
|
||||||
#include "lib/string/compat_string.h"
|
#include "lib/string/compat_string.h"
|
||||||
#include "lib/string/parse_int.h"
|
#include "lib/string/parse_int.h"
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#include "orconfig.h"
|
#include "orconfig.h"
|
||||||
#include "lib/cc/torint.h"
|
#include "lib/cc/torint.h"
|
||||||
#include "lib/log/util_bug.h"
|
#include "lib/log/util_bug.h"
|
||||||
#include "lib/net/ipv6.h"
|
#include "lib/net/inaddr_st.h"
|
||||||
#include "lib/net/nettypes.h"
|
#include "lib/net/nettypes.h"
|
||||||
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
@ -4,20 +4,20 @@
|
|||||||
/* See LICENSE for licensing information */
|
/* See LICENSE for licensing information */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file ipv6.c
|
* \file inaddr.c
|
||||||
* \brief Functions for encoding and decoding IPv6 addresses
|
* \brief Convert in_addr and in6_addr to and from strings.
|
||||||
*
|
|
||||||
* (Because these functions are generic, they can also handle IPv4 addresses).
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "lib/net/ipv6.h"
|
#include "lib/net/inaddr.h"
|
||||||
#include "lib/net/ipv4.h"
|
|
||||||
#include "lib/string/util_string.h"
|
#include "lib/cc/torint.h"
|
||||||
#include "lib/string/compat_string.h"
|
#include "lib/log/util_bug.h"
|
||||||
|
#include "lib/net/inaddr_st.h"
|
||||||
#include "lib/string/compat_ctype.h"
|
#include "lib/string/compat_ctype.h"
|
||||||
|
#include "lib/string/compat_string.h"
|
||||||
#include "lib/string/printf.h"
|
#include "lib/string/printf.h"
|
||||||
#include "lib/string/scanf.h"
|
#include "lib/string/scanf.h"
|
||||||
#include "lib/log/util_bug.h"
|
#include "lib/string/util_string.h"
|
||||||
|
|
||||||
#ifdef HAVE_ARPA_INET_H
|
#ifdef HAVE_ARPA_INET_H
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
@ -26,6 +26,45 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** Set *addr to the IP address (in dotted-quad notation) stored in *str.
|
||||||
|
* Return 1 on success, 0 if *str is badly formatted.
|
||||||
|
* (Like inet_aton(str,addr), but works on Windows and Solaris.)
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
tor_inet_aton(const char *str, struct in_addr* addr)
|
||||||
|
{
|
||||||
|
unsigned a,b,c,d;
|
||||||
|
char more;
|
||||||
|
if (tor_sscanf(str, "%3u.%3u.%3u.%3u%c", &a,&b,&c,&d,&more) != 4)
|
||||||
|
return 0;
|
||||||
|
if (a > 255) return 0;
|
||||||
|
if (b > 255) return 0;
|
||||||
|
if (c > 255) return 0;
|
||||||
|
if (d > 255) return 0;
|
||||||
|
addr->s_addr = htonl((a<<24) | (b<<16) | (c<<8) | d);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Given an IPv4 in_addr struct *<b>in</b> (in network order, as usual),
|
||||||
|
* write it as a string into the <b>buf_len</b>-byte buffer in
|
||||||
|
* <b>buf</b>. Returns a non-negative integer on success.
|
||||||
|
* Returns -1 on failure.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
tor_inet_ntoa(const struct in_addr *in, char *buf, size_t buf_len)
|
||||||
|
{
|
||||||
|
uint32_t a = ntohl(in->s_addr);
|
||||||
|
return tor_snprintf(buf, buf_len, "%d.%d.%d.%d",
|
||||||
|
(int)(uint8_t)((a>>24)&0xff),
|
||||||
|
(int)(uint8_t)((a>>16)&0xff),
|
||||||
|
(int)(uint8_t)((a>>8 )&0xff),
|
||||||
|
(int)(uint8_t)((a )&0xff));
|
||||||
|
}
|
||||||
|
|
||||||
/** Given <b>af</b>==AF_INET and <b>src</b> a struct in_addr, or
|
/** Given <b>af</b>==AF_INET and <b>src</b> a struct in_addr, or
|
||||||
* <b>af</b>==AF_INET6 and <b>src</b> a struct in6_addr, try to format the
|
* <b>af</b>==AF_INET6 and <b>src</b> a struct in6_addr, try to format the
|
||||||
* address and store it in the <b>len</b>-byte buffer <b>dst</b>. Returns
|
* address and store it in the <b>len</b>-byte buffer <b>dst</b>. Returns
|
@ -4,18 +4,24 @@
|
|||||||
/* See LICENSE for licensing information */
|
/* See LICENSE for licensing information */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file ipv4.h
|
* \file inaddr.h
|
||||||
* \brief Header for ipv4.c
|
* \brief Header for inaddr.c.
|
||||||
**/
|
**/
|
||||||
#ifndef TOR_IPV4_H
|
|
||||||
#define TOR_IPV4_H
|
|
||||||
|
|
||||||
|
#ifndef TOR_INADDR_H
|
||||||
|
#define TOR_INADDR_H
|
||||||
|
|
||||||
|
#include "orconfig.h"
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
struct in_addr;
|
struct in_addr;
|
||||||
|
|
||||||
int tor_inet_aton(const char *str, struct in_addr *addr);
|
int tor_inet_aton(const char *str, struct in_addr *addr);
|
||||||
/** Length of a buffer to allocate to hold the results of tor_inet_ntoa.*/
|
/** Length of a buffer to allocate to hold the results of tor_inet_ntoa.*/
|
||||||
#define INET_NTOA_BUF_LEN 16
|
#define INET_NTOA_BUF_LEN 16
|
||||||
int tor_inet_ntoa(const struct in_addr *in, char *buf, size_t buf_len);
|
int tor_inet_ntoa(const struct in_addr *in, char *buf, size_t buf_len);
|
||||||
|
|
||||||
|
const char *tor_inet_ntop(int af, const void *src, char *dst, size_t len);
|
||||||
|
int tor_inet_pton(int af, const char *src, void *dst);
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -4,25 +4,29 @@
|
|||||||
/* See LICENSE for licensing information */
|
/* See LICENSE for licensing information */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file ipv6.h
|
* \file inaddr_st.h
|
||||||
* \brief Header for ipv6.c
|
*
|
||||||
|
* \brief Define in6_addr, its members, and related types on platforms that
|
||||||
|
* lack it.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#ifndef TOR_IPV6_H
|
#ifndef TOR_INADDR_ST_H
|
||||||
#define TOR_IPV6_H
|
#define TOR_INADDR_ST_H
|
||||||
|
|
||||||
#include "orconfig.h"
|
|
||||||
#include <stddef.h>
|
|
||||||
#ifdef HAVE_NETINET_IN6_H
|
#ifdef HAVE_NETINET_IN6_H
|
||||||
#include <netinet/in6.h>
|
#include <netinet/in6.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "lib/cc/torint.h"
|
#include "lib/cc/torint.h"
|
||||||
|
|
||||||
|
struct in_addr;
|
||||||
|
|
||||||
/** Implementation of struct in6_addr for platforms that do not have it.
|
/** Implementation of struct in6_addr for platforms that do not have it.
|
||||||
* Generally, these platforms are ones without IPv6 support, but we want to
|
* Generally, these platforms are ones without IPv6 support, but we want to
|
||||||
* have a working in6_addr there anyway, so we can use it to parse IPv6
|
* have a working in6_addr there anyway, so we can use it to parse IPv6
|
||||||
@ -85,7 +89,4 @@ struct sockaddr_in6 {
|
|||||||
};
|
};
|
||||||
#endif /* !defined(HAVE_STRUCT_SOCKADDR_IN6) */
|
#endif /* !defined(HAVE_STRUCT_SOCKADDR_IN6) */
|
||||||
|
|
||||||
const char *tor_inet_ntop(int af, const void *src, char *dst, size_t len);
|
#endif /* TOR_INADDR_ST_H */
|
||||||
int tor_inet_pton(int af, const char *src, void *dst);
|
|
||||||
|
|
||||||
#endif
|
|
@ -10,8 +10,7 @@ src_lib_libtor_net_a_SOURCES = \
|
|||||||
src/lib/net/alertsock.c \
|
src/lib/net/alertsock.c \
|
||||||
src/lib/net/buffers_net.c \
|
src/lib/net/buffers_net.c \
|
||||||
src/lib/net/gethostname.c \
|
src/lib/net/gethostname.c \
|
||||||
src/lib/net/ipv4.c \
|
src/lib/net/inaddr.c \
|
||||||
src/lib/net/ipv6.c \
|
|
||||||
src/lib/net/resolve.c \
|
src/lib/net/resolve.c \
|
||||||
src/lib/net/socket.c
|
src/lib/net/socket.c
|
||||||
|
|
||||||
@ -25,8 +24,8 @@ noinst_HEADERS += \
|
|||||||
src/lib/net/alertsock.h \
|
src/lib/net/alertsock.h \
|
||||||
src/lib/net/buffers_net.h \
|
src/lib/net/buffers_net.h \
|
||||||
src/lib/net/gethostname.h \
|
src/lib/net/gethostname.h \
|
||||||
src/lib/net/ipv4.h \
|
src/lib/net/inaddr.h \
|
||||||
src/lib/net/ipv6.h \
|
src/lib/net/inaddr_st.h \
|
||||||
src/lib/net/nettypes.h \
|
src/lib/net/nettypes.h \
|
||||||
src/lib/net/resolve.h \
|
src/lib/net/resolve.h \
|
||||||
src/lib/net/socket.h \
|
src/lib/net/socket.h \
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
/* Copyright (c) 2003-2004, Roger Dingledine
|
|
||||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
|
||||||
* Copyright (c) 2007-2018, The Tor Project, Inc. */
|
|
||||||
/* See LICENSE for licensing information */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \file ipv4.c
|
|
||||||
* \brief Functions for encoding and decoding IPv4 addresses into strings
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include "orconfig.h"
|
|
||||||
#include "lib/cc/torint.h"
|
|
||||||
#include "lib/net/ipv4.h"
|
|
||||||
#include "lib/string/printf.h"
|
|
||||||
#include "lib/string/scanf.h"
|
|
||||||
|
|
||||||
#ifdef HAVE_ARPA_INET_H
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#endif
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include <winsock2.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Set *addr to the IP address (in dotted-quad notation) stored in *str.
|
|
||||||
* Return 1 on success, 0 if *str is badly formatted.
|
|
||||||
* (Like inet_aton(str,addr), but works on Windows and Solaris.)
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
tor_inet_aton(const char *str, struct in_addr* addr)
|
|
||||||
{
|
|
||||||
unsigned a,b,c,d;
|
|
||||||
char more;
|
|
||||||
if (tor_sscanf(str, "%3u.%3u.%3u.%3u%c", &a,&b,&c,&d,&more) != 4)
|
|
||||||
return 0;
|
|
||||||
if (a > 255) return 0;
|
|
||||||
if (b > 255) return 0;
|
|
||||||
if (c > 255) return 0;
|
|
||||||
if (d > 255) return 0;
|
|
||||||
addr->s_addr = htonl((a<<24) | (b<<16) | (c<<8) | d);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Given an IPv4 in_addr struct *<b>in</b> (in network order, as usual),
|
|
||||||
* write it as a string into the <b>buf_len</b>-byte buffer in
|
|
||||||
* <b>buf</b>. Returns a non-negative integer on success.
|
|
||||||
* Returns -1 on failure.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
tor_inet_ntoa(const struct in_addr *in, char *buf, size_t buf_len)
|
|
||||||
{
|
|
||||||
uint32_t a = ntohl(in->s_addr);
|
|
||||||
return tor_snprintf(buf, buf_len, "%d.%d.%d.%d",
|
|
||||||
(int)(uint8_t)((a>>24)&0xff),
|
|
||||||
(int)(uint8_t)((a>>16)&0xff),
|
|
||||||
(int)(uint8_t)((a>>8 )&0xff),
|
|
||||||
(int)(uint8_t)((a )&0xff));
|
|
||||||
}
|
|
@ -41,7 +41,7 @@ ENABLE_GCC_WARNING(redundant-decls)
|
|||||||
#include "lib/log/torlog.h"
|
#include "lib/log/torlog.h"
|
||||||
#include "lib/malloc/util_malloc.h"
|
#include "lib/malloc/util_malloc.h"
|
||||||
#include "lib/net/address.h"
|
#include "lib/net/address.h"
|
||||||
#include "lib/net/ipv4.h"
|
#include "lib/net/inaddr.h"
|
||||||
#include "lib/string/compat_string.h"
|
#include "lib/string/compat_string.h"
|
||||||
#include "lib/string/printf.h"
|
#include "lib/string/printf.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user