Commit 307e29ac authored by Pieter Noordhuis's avatar Pieter Noordhuis
Browse files

Use address helpers where applicable

parent fbdcfae4
......@@ -57,7 +57,7 @@ unsigned long redis_context_get_timeout(redis_context *ctx) {
static int redis__connect(redis_context *ctx) {
int rv;
rv = redis_handle_connect_address(&ctx->handle, &ctx->address);
rv = redis_handle_connect_address(&ctx->handle, ctx->address);
if (rv != REDIS_OK) {
return rv;
}
......@@ -70,9 +70,11 @@ static int redis__connect(redis_context *ctx) {
return REDIS_OK;
}
static int redis__first_connect(redis_context *ctx) {
int redis_context_connect_address(redis_context *ctx, const redis_address addr) {
int rv;
ctx->address = addr;
rv = redis__connect(ctx);
if (rv != REDIS_OK) {
redis__clear_address(ctx);
......@@ -83,24 +85,15 @@ static int redis__first_connect(redis_context *ctx) {
}
int redis_context_connect_in(redis_context *ctx, struct sockaddr_in addr) {
ctx->address.sa_family = AF_INET;
ctx->address.sa_addrlen = sizeof(addr);
ctx->address.sa_addr.in = addr;
return redis__first_connect(ctx);
return redis_context_connect_address(ctx, redis_address_from_in(addr));
}
int redis_context_connect_in6(redis_context *ctx, struct sockaddr_in6 addr) {
ctx->address.sa_family = AF_INET6;
ctx->address.sa_addrlen = sizeof(addr);
ctx->address.sa_addr.in6 = addr;
return redis__first_connect(ctx);
return redis_context_connect_address(ctx, redis_address_from_in6(addr));
}
int redis_context_connect_un(redis_context *ctx, struct sockaddr_un addr) {
ctx->address.sa_family = AF_LOCAL;
ctx->address.sa_addrlen = sizeof(addr);
ctx->address.sa_addr.un = addr;
return redis__first_connect(ctx);
return redis_context_connect_address(ctx, redis_address_from_un(addr));
}
int redis_context_connect_gai(redis_context *ctx, const char *host, int port) {
......
......@@ -21,6 +21,7 @@ int redis_context_destroy(redis_context *ctx);
int redis_context_set_timeout(redis_context *, unsigned long us);
unsigned long redis_handle_get_timeout(redis_handle *);
int redis_context_connect_address(redis_context *, const redis_address addr);
int redis_context_connect_in(redis_context *, struct sockaddr_in addr);
int redis_context_connect_in6(redis_context *, struct sockaddr_in6 addr);
int redis_context_connect_un(redis_context *, struct sockaddr_un addr);
......
......@@ -158,7 +158,7 @@ static int redis__finish_connect(redis_handle *h, int fd) {
return REDIS_OK;
}
int redis_handle_connect_address(redis_handle *h, const redis_address *addr) {
int redis_handle_connect_address(redis_handle *h, const redis_address addr) {
int fd;
if (h->fd >= 0) {
......@@ -166,7 +166,7 @@ int redis_handle_connect_address(redis_handle *h, const redis_address *addr) {
return REDIS_ESYS;
}
fd = redis__handle_connect(addr->sa_family, &addr->sa_addr.addr, addr->sa_addrlen);
fd = redis__handle_connect(addr.sa_family, &addr.sa_addr.addr, addr.sa_addrlen);
if (fd == -1) {
return REDIS_ESYS;
}
......@@ -175,30 +175,15 @@ int redis_handle_connect_address(redis_handle *h, const redis_address *addr) {
}
int redis_handle_connect_in(redis_handle *h, struct sockaddr_in sa) {
redis_address address;
address.sa_family = AF_INET;
address.sa_addr.in = sa;
address.sa_addrlen = sizeof(sa);
return redis_handle_connect_address(h, &address);
return redis_handle_connect_address(h, redis_address_from_in(sa));
}
int redis_handle_connect_in6(redis_handle *h, struct sockaddr_in6 sa) {
redis_address address;
address.sa_family = AF_INET6;
address.sa_addr.in6 = sa;
address.sa_addrlen = sizeof(sa);
return redis_handle_connect_address(h, &address);
return redis_handle_connect_address(h, redis_address_from_in6(sa));
}
int redis_handle_connect_un(redis_handle *h, struct sockaddr_un sa) {
redis_address address;
address.sa_family = AF_LOCAL;
address.sa_addr.un = sa;
address.sa_addrlen = sizeof(sa);
return redis_handle_connect_address(h, &address);
return redis_handle_connect_address(h, redis_address_from_un(sa));
}
int redis_handle_connect_gai(redis_handle *h,
......
......@@ -30,7 +30,7 @@ int redis_handle_destroy(redis_handle *);
int redis_handle_set_timeout(redis_handle *, unsigned long us);
unsigned long redis_handle_get_timeout(redis_handle *h);
int redis_handle_connect_address(redis_handle *, const redis_address *);
int redis_handle_connect_address(redis_handle *, const redis_address addr);
int redis_handle_connect_in(redis_handle *, struct sockaddr_in addr);
int redis_handle_connect_in6(redis_handle *, struct sockaddr_in6 addr);
int redis_handle_connect_un(redis_handle *, struct sockaddr_un addr);
......
......@@ -32,13 +32,8 @@
TEST(connect_in_refused) {
SETUP_CONNECT();
struct sockaddr_in sa;
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(redis_port() + 1);
assert(inet_pton(AF_INET, "127.0.0.1", &sa.sin_addr) == 1);
rv = redis_context_connect_in(&c, sa);
redis_address addr = redis_address_in("127.0.0.1", redis_port() + 1);
rv = redis_context_connect_in(&c, addr.sa_addr.in);
assert_equal_return(rv, REDIS_ESYS);
assert_equal_int(errno, ECONNREFUSED);
......@@ -51,13 +46,8 @@ TEST(connect_in_refused) {
TEST(connect_in6_refused) {
SETUP_CONNECT();
struct sockaddr_in6 sa;
memset(&sa, 0, sizeof(sa));
sa.sin6_family = AF_INET6;
sa.sin6_port = htons(redis_port() + 1);
assert(inet_pton(AF_INET6, "::1", &sa.sin6_addr) == 1);
rv = redis_context_connect_in6(&c, sa);
redis_address addr = redis_address_in6("::1", redis_port() + 1);
rv = redis_context_connect_in6(&c, addr.sa_addr.in6);
assert_equal_return(rv, REDIS_ESYS);
assert_equal_int(errno, ECONNREFUSED);
......@@ -70,12 +60,8 @@ TEST(connect_in6_refused) {
TEST(connect_un_noent) {
SETUP_CONNECT();
struct sockaddr_un sa;
memset(&sa, 0, sizeof(sa));
sa.sun_family = AF_LOCAL;
strcpy((char*)&sa.sun_path, "/tmp/idontexist.sock");
rv = redis_context_connect_un(&c, sa);
redis_address addr = redis_address_un("/tmp/idontexist.sock");
rv = redis_context_connect_un(&c, addr.sa_addr.un);
assert_equal_return(rv, REDIS_ESYS);
assert_equal_int(errno, ENOENT);
......@@ -88,15 +74,11 @@ TEST(connect_un_noent) {
TEST(connect_timeout) {
SETUP_CONNECT();
struct sockaddr_in sa;
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(redis_port());
assert(inet_pton(AF_INET, "10.255.255.254", &sa.sin_addr) == 1);
redis_address addr = redis_address_in("10.255.255.254", redis_port());
long long t1, t2;
t1 = usec();
rv = redis_context_connect_in(&c, sa);
rv = redis_context_connect_in(&c, addr.sa_addr.in);
t2 = usec();
assert_equal_return(rv, REDIS_ESYS);
......@@ -112,13 +94,8 @@ TEST(connect_timeout) {
TEST(connect_success) {
SETUP_CONNECT();
struct sockaddr_in sa;
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(redis_port());
assert(inet_pton(AF_INET, "127.0.0.1", &sa.sin_addr) == 1);
rv = redis_context_connect_in(&c, sa);
redis_address addr = redis_address_in("127.0.0.1", redis_port());
rv = redis_context_connect_in(&c, addr.sa_addr.in);
assert_equal_return(rv, REDIS_OK);
/* Address should be set when connection was made */
......@@ -278,20 +255,14 @@ TEST(call_command_argv) {
TEST(flush_against_full_kernel_buffer) {
SETUP_CONNECT();
struct sockaddr_in sa;
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(redis_port() + 1);
assert(inet_pton(AF_INET, "127.0.0.1", &sa.sin_addr) == 1);
redis_address addr = redis_address_in("127.0.0.1", redis_port() + 1);
accept_and_ignore_args args;
args.address.sa_family = sa.sin_family;
args.address.sa_addrlen = sizeof(sa);
args.address.sa_addr.in = sa;
args.address = addr;
spawn(accept_and_ignore, &args);
rv = redis_context_connect_in(&c, sa);
rv = redis_context_connect_in(&c, addr.sa_addr.in);
assert_equal_return(rv, REDIS_OK);
/* Now write and flush until error */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment