mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Remove addr_port_lookup.
This lets us cut the dependency from address.c to resolve.c: the address.c module now has no paths to the libc resolver in it.
This commit is contained in:
parent
2f657a1416
commit
8de48c111c
4
changes/ticket26526
Normal file
4
changes/ticket26526
Normal file
@ -0,0 +1,4 @@
|
||||
o Code simplification and refactoring:
|
||||
- Utility functions that can perform a DNS lookup are now wholly
|
||||
separated from those that can't, in separate headers and C
|
||||
modules. Closes ticket 26526.
|
@ -6,6 +6,9 @@
|
||||
/**
|
||||
* \file address.c
|
||||
* \brief Functions to use and manipulate the tor_addr_t structure.
|
||||
*
|
||||
* This module doesn't have any support for the libc resolver: that is all in
|
||||
* resolve.c.
|
||||
**/
|
||||
|
||||
#define ADDRESS_PRIVATE
|
||||
@ -37,7 +40,6 @@
|
||||
|
||||
#include "lib/net/address.h"
|
||||
#include "lib/net/socket.h"
|
||||
#include "lib/net/resolve.h"
|
||||
#include "lib/container/smartlist.h"
|
||||
#include "lib/ctime/di_ops.h"
|
||||
#include "lib/log/torlog.h"
|
||||
@ -1748,7 +1750,7 @@ tor_addr_port_split(int severity, const char *addrport,
|
||||
tor_assert(addrport);
|
||||
tor_assert(address_out);
|
||||
tor_assert(port_out);
|
||||
/* We need to check for IPv6 manually because addr_port_lookup() doesn't
|
||||
/* We need to check for IPv6 manually because the logic below doesn't
|
||||
* do a good job on IPv6 addresses that lack a port. */
|
||||
if (tor_addr_parse(&a_tmp, addrport) == AF_INET6) {
|
||||
*port_out = 0;
|
||||
@ -1756,30 +1758,11 @@ tor_addr_port_split(int severity, const char *addrport,
|
||||
return 0;
|
||||
}
|
||||
|
||||
return addr_port_lookup(severity, addrport, address_out, NULL, port_out);
|
||||
}
|
||||
|
||||
/** Parse a string of the form "host[:port]" from <b>addrport</b>. If
|
||||
* <b>address</b> is provided, set *<b>address</b> to a copy of the
|
||||
* host portion of the string. If <b>addr</b> is provided, try to
|
||||
* resolve the host portion of the string and store it into
|
||||
* *<b>addr</b> (in host byte order). If <b>port_out</b> is provided,
|
||||
* store the port number into *<b>port_out</b>, or 0 if no port is given.
|
||||
* If <b>port_out</b> is NULL, then there must be no port number in
|
||||
* <b>addrport</b>.
|
||||
* Return 0 on success, -1 on failure.
|
||||
*/
|
||||
int
|
||||
addr_port_lookup(int severity, const char *addrport, char **address,
|
||||
uint32_t *addr, uint16_t *port_out)
|
||||
{
|
||||
const char *colon;
|
||||
char *address_ = NULL;
|
||||
int port_;
|
||||
int ok = 1;
|
||||
|
||||
tor_assert(addrport);
|
||||
|
||||
colon = strrchr(addrport, ':');
|
||||
if (colon) {
|
||||
address_ = tor_strndup(addrport, colon-addrport);
|
||||
@ -1801,22 +1784,13 @@ addr_port_lookup(int severity, const char *addrport, char **address,
|
||||
port_ = 0;
|
||||
}
|
||||
|
||||
if (addr) {
|
||||
/* There's an addr pointer, so we need to resolve the hostname. */
|
||||
if (tor_lookup_hostname(address_,addr)) {
|
||||
log_fn(severity, LD_NET, "Couldn't look up %s", escaped(address_));
|
||||
ok = 0;
|
||||
*addr = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (address && ok) {
|
||||
*address = address_;
|
||||
if (ok) {
|
||||
*address_out = address_;
|
||||
} else {
|
||||
if (address)
|
||||
*address = NULL;
|
||||
*address_out = NULL;
|
||||
tor_free(address_);
|
||||
}
|
||||
|
||||
if (port_out)
|
||||
*port_out = ok ? ((uint16_t) port_) : 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user