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) { ...@@ -57,7 +57,7 @@ unsigned long redis_context_get_timeout(redis_context *ctx) {
static int redis__connect(redis_context *ctx) { static int redis__connect(redis_context *ctx) {
int rv; int rv;
rv = redis_handle_connect_address(&ctx->handle, &ctx->address); rv = redis_handle_connect_address(&ctx->handle, ctx->address);
if (rv != REDIS_OK) { if (rv != REDIS_OK) {
return rv; return rv;
} }
...@@ -70,9 +70,11 @@ static int redis__connect(redis_context *ctx) { ...@@ -70,9 +70,11 @@ static int redis__connect(redis_context *ctx) {
return REDIS_OK; 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; int rv;
ctx->address = addr;
rv = redis__connect(ctx); rv = redis__connect(ctx);
if (rv != REDIS_OK) { if (rv != REDIS_OK) {
redis__clear_address(ctx); redis__clear_address(ctx);
...@@ -83,24 +85,15 @@ static int redis__first_connect(redis_context *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) { int redis_context_connect_in(redis_context *ctx, struct sockaddr_in addr) {
ctx->address.sa_family = AF_INET; return redis_context_connect_address(ctx, redis_address_from_in(addr));
ctx->address.sa_addrlen = sizeof(addr);
ctx->address.sa_addr.in = addr;
return redis__first_connect(ctx);
} }
int redis_context_connect_in6(redis_context *ctx, struct sockaddr_in6 addr) { int redis_context_connect_in6(redis_context *ctx, struct sockaddr_in6 addr) {
ctx->address.sa_family = AF_INET6; return redis_context_connect_address(ctx, redis_address_from_in6(addr));
ctx->address.sa_addrlen = sizeof(addr);
ctx->address.sa_addr.in6 = addr;
return redis__first_connect(ctx);
} }
int redis_context_connect_un(redis_context *ctx, struct sockaddr_un addr) { int redis_context_connect_un(redis_context *ctx, struct sockaddr_un addr) {
ctx->address.sa_family = AF_LOCAL; return redis_context_connect_address(ctx, redis_address_from_un(addr));
ctx->address.sa_addrlen = sizeof(addr);
ctx->address.sa_addr.un = addr;
return redis__first_connect(ctx);
} }
int redis_context_connect_gai(redis_context *ctx, const char *host, int port) { int redis_context_connect_gai(redis_context *ctx, const char *host, int port) {
......
...@@ -21,6 +21,7 @@ int redis_context_destroy(redis_context *ctx); ...@@ -21,6 +21,7 @@ int redis_context_destroy(redis_context *ctx);
int redis_context_set_timeout(redis_context *, unsigned long us); int redis_context_set_timeout(redis_context *, unsigned long us);
unsigned long redis_handle_get_timeout(redis_handle *); 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_in(redis_context *, struct sockaddr_in addr);
int redis_context_connect_in6(redis_context *, struct sockaddr_in6 addr); int redis_context_connect_in6(redis_context *, struct sockaddr_in6 addr);
int redis_context_connect_un(redis_context *, struct sockaddr_un 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) { ...@@ -158,7 +158,7 @@ static int redis__finish_connect(redis_handle *h, int fd) {
return REDIS_OK; 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; int fd;
if (h->fd >= 0) { if (h->fd >= 0) {
...@@ -166,7 +166,7 @@ int redis_handle_connect_address(redis_handle *h, const redis_address *addr) { ...@@ -166,7 +166,7 @@ int redis_handle_connect_address(redis_handle *h, const redis_address *addr) {
return REDIS_ESYS; 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) { if (fd == -1) {
return REDIS_ESYS; return REDIS_ESYS;
} }
...@@ -175,30 +175,15 @@ int redis_handle_connect_address(redis_handle *h, const redis_address *addr) { ...@@ -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) { int redis_handle_connect_in(redis_handle *h, struct sockaddr_in sa) {
redis_address address; return redis_handle_connect_address(h, redis_address_from_in(sa));
address.sa_family = AF_INET;
address.sa_addr.in = sa;
address.sa_addrlen = sizeof(sa);
return redis_handle_connect_address(h, &address);
} }
int redis_handle_connect_in6(redis_handle *h, struct sockaddr_in6 sa) { int redis_handle_connect_in6(redis_handle *h, struct sockaddr_in6 sa) {
redis_address address; return redis_handle_connect_address(h, redis_address_from_in6(sa));
address.sa_family = AF_INET6;
address.sa_addr.in6 = sa;
address.sa_addrlen = sizeof(sa);
return redis_handle_connect_address(h, &address);
} }
int redis_handle_connect_un(redis_handle *h, struct sockaddr_un sa) { int redis_handle_connect_un(redis_handle *h, struct sockaddr_un sa) {
redis_address address; return redis_handle_connect_address(h, redis_address_from_un(sa));
address.sa_family = AF_LOCAL;
address.sa_addr.un = sa;
address.sa_addrlen = sizeof(sa);
return redis_handle_connect_address(h, &address);
} }
int redis_handle_connect_gai(redis_handle *h, int redis_handle_connect_gai(redis_handle *h,
......
...@@ -30,7 +30,7 @@ int redis_handle_destroy(redis_handle *); ...@@ -30,7 +30,7 @@ int redis_handle_destroy(redis_handle *);
int redis_handle_set_timeout(redis_handle *, unsigned long us); int redis_handle_set_timeout(redis_handle *, unsigned long us);
unsigned long redis_handle_get_timeout(redis_handle *h); 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_in(redis_handle *, struct sockaddr_in addr);
int redis_handle_connect_in6(redis_handle *, struct sockaddr_in6 addr); int redis_handle_connect_in6(redis_handle *, struct sockaddr_in6 addr);
int redis_handle_connect_un(redis_handle *, struct sockaddr_un addr); int redis_handle_connect_un(redis_handle *, struct sockaddr_un addr);
......
...@@ -32,13 +32,8 @@ ...@@ -32,13 +32,8 @@
TEST(connect_in_refused) { TEST(connect_in_refused) {
SETUP_CONNECT(); SETUP_CONNECT();
struct sockaddr_in sa; redis_address addr = redis_address_in("127.0.0.1", redis_port() + 1);
memset(&sa, 0, sizeof(sa)); rv = redis_context_connect_in(&c, addr.sa_addr.in);
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);
assert_equal_return(rv, REDIS_ESYS); assert_equal_return(rv, REDIS_ESYS);
assert_equal_int(errno, ECONNREFUSED); assert_equal_int(errno, ECONNREFUSED);
...@@ -51,13 +46,8 @@ TEST(connect_in_refused) { ...@@ -51,13 +46,8 @@ TEST(connect_in_refused) {
TEST(connect_in6_refused) { TEST(connect_in6_refused) {
SETUP_CONNECT(); SETUP_CONNECT();
struct sockaddr_in6 sa; redis_address addr = redis_address_in6("::1", redis_port() + 1);
memset(&sa, 0, sizeof(sa)); rv = redis_context_connect_in6(&c, addr.sa_addr.in6);
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);
assert_equal_return(rv, REDIS_ESYS); assert_equal_return(rv, REDIS_ESYS);
assert_equal_int(errno, ECONNREFUSED); assert_equal_int(errno, ECONNREFUSED);
...@@ -70,12 +60,8 @@ TEST(connect_in6_refused) { ...@@ -70,12 +60,8 @@ TEST(connect_in6_refused) {
TEST(connect_un_noent) { TEST(connect_un_noent) {
SETUP_CONNECT(); SETUP_CONNECT();
struct sockaddr_un sa; redis_address addr = redis_address_un("/tmp/idontexist.sock");
memset(&sa, 0, sizeof(sa)); rv = redis_context_connect_un(&c, addr.sa_addr.un);
sa.sun_family = AF_LOCAL;
strcpy((char*)&sa.sun_path, "/tmp/idontexist.sock");
rv = redis_context_connect_un(&c, sa);
assert_equal_return(rv, REDIS_ESYS); assert_equal_return(rv, REDIS_ESYS);
assert_equal_int(errno, ENOENT); assert_equal_int(errno, ENOENT);
...@@ -88,15 +74,11 @@ TEST(connect_un_noent) { ...@@ -88,15 +74,11 @@ TEST(connect_un_noent) {
TEST(connect_timeout) { TEST(connect_timeout) {
SETUP_CONNECT(); SETUP_CONNECT();
struct sockaddr_in sa; redis_address addr = redis_address_in("10.255.255.254", redis_port());
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);
long long t1, t2; long long t1, t2;
t1 = usec(); t1 = usec();
rv = redis_context_connect_in(&c, sa); rv = redis_context_connect_in(&c, addr.sa_addr.in);
t2 = usec(); t2 = usec();
assert_equal_return(rv, REDIS_ESYS); assert_equal_return(rv, REDIS_ESYS);
...@@ -112,13 +94,8 @@ TEST(connect_timeout) { ...@@ -112,13 +94,8 @@ TEST(connect_timeout) {
TEST(connect_success) { TEST(connect_success) {
SETUP_CONNECT(); SETUP_CONNECT();
struct sockaddr_in sa; redis_address addr = redis_address_in("127.0.0.1", redis_port());
memset(&sa, 0, sizeof(sa)); rv = redis_context_connect_in(&c, addr.sa_addr.in);
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);
assert_equal_return(rv, REDIS_OK); assert_equal_return(rv, REDIS_OK);
/* Address should be set when connection was made */ /* Address should be set when connection was made */
...@@ -278,20 +255,14 @@ TEST(call_command_argv) { ...@@ -278,20 +255,14 @@ TEST(call_command_argv) {
TEST(flush_against_full_kernel_buffer) { TEST(flush_against_full_kernel_buffer) {
SETUP_CONNECT(); SETUP_CONNECT();
struct sockaddr_in sa; redis_address addr = redis_address_in("127.0.0.1", redis_port() + 1);
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);
accept_and_ignore_args args; accept_and_ignore_args args;
args.address.sa_family = sa.sin_family; args.address = addr;
args.address.sa_addrlen = sizeof(sa);
args.address.sa_addr.in = sa;
spawn(accept_and_ignore, &args); 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); assert_equal_return(rv, REDIS_OK);
/* Now write and flush until error */ /* 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