You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/04/28 23:53:38 UTC
qpid-proton git commit: PROTON-1470: proactor api - updated epoll
proactor.
Repository: qpid-proton
Updated Branches:
refs/heads/master 66cb35e1c -> aed709ded
PROTON-1470: proactor api - updated epoll proactor.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/aed709de
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/aed709de
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/aed709de
Branch: refs/heads/master
Commit: aed709ded2f216c0bbbfb2d4fbcd8df89514c69b
Parents: 66cb35e
Author: Alan Conway <ac...@redhat.com>
Authored: Fri Apr 28 19:22:25 2017 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Fri Apr 28 19:51:29 2017 -0400
----------------------------------------------------------------------
proton-c/CMakeLists.txt | 3 ++-
proton-c/src/proactor/epoll.c | 50 ++++++++++++++++++--------------------
proton-c/src/proactor/libuv.c | 2 +-
proton-c/src/tests/proactor.c | 5 ++--
4 files changed, 30 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/aed709de/proton-c/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/proton-c/CMakeLists.txt b/proton-c/CMakeLists.txt
index 03ee538..0fe55d4 100644
--- a/proton-c/CMakeLists.txt
+++ b/proton-c/CMakeLists.txt
@@ -324,6 +324,7 @@ set (qpid-proton-platform-all
src/reactor/io/posix/selector.c
src/proactor/libuv.c
src/proactor/epoll.c
+ src/proactor/proactor.c
)
# platform specific library build:
@@ -488,7 +489,7 @@ if (PROACTOR STREQUAL "epoll") # OR (NOT PROACTOR AND NOT PROACTOR_OK))
check_symbol_exists(epoll_wait "sys/epoll.h" HAVE_EPOLL)
if (HAVE_EPOLL)
set (PROACTOR_OK epoll)
- set (qpid-proton-proactor src/proactor/epoll.c)
+ set (qpid-proton-proactor src/proactor/epoll.c src/proactor/proactor.c)
set (PROACTOR_LIBS "")
# Skip COMPILE_LANGUAGE_FLAGS, uses post-c99 pthread APIs.
set_source_files_properties (${qpid-proton-proactor} PROPERTIES
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/aed709de/proton-c/src/proactor/epoll.c
----------------------------------------------------------------------
diff --git a/proton-c/src/proactor/epoll.c b/proton-c/src/proactor/epoll.c
index 304644f..ec3a862 100644
--- a/proton-c/src/proactor/epoll.c
+++ b/proton-c/src/proactor/epoll.c
@@ -20,10 +20,12 @@
*/
#include "../core/log_private.h"
-#include "../core/url-internal.h"
+#include "proactor-internal.h"
+
#include <proton/condition.h>
#include <proton/connection_driver.h>
#include <proton/engine.h>
+#include <proton/netaddr.h>
#include <proton/object.h>
#include <proton/proactor.h>
#include <proton/transport.h>
@@ -419,14 +421,8 @@ static void psocket_init(psocket_t* ps, pn_proactor_t* p, bool is_conn, const ch
port = AMQP_PORT;
else if (port && strcmp(port, AMQPS_PORT_NAME) == 0)
port = AMQPS_PORT;
- /* Set to "\001" to indicate a NULL as opposed to an empty string "" */
- strncpy(ps->host, host ? host : "\001", sizeof(ps->host));
- strncpy(ps->port, port ? port : "\001", sizeof(ps->port));
-}
-
-/* Turn "\001" back to NULL */
-static inline const char* fixstr(const char* str) {
- return str[0] == '\001' ? NULL : str;
+ strncpy(ps->host, host, sizeof(ps->host));
+ strncpy(ps->port, port, sizeof(ps->port));
}
typedef struct pconnection_t {
@@ -524,13 +520,13 @@ static void psocket_error(psocket_t *ps, int err, const char* what) {
pn_connection_driver_t *driver = &as_pconnection(ps)->driver;
pn_connection_driver_bind(driver); /* Bind so errors will be reported */
pn_connection_driver_errorf(driver, COND_NAME, "%s %s:%s: %s",
- what, fixstr(ps->host), fixstr(ps->port),
+ what, ps->host, ps->port,
strerror(err));
pn_connection_driver_close(driver);
} else {
pn_listener_t *l = as_listener(ps);
pn_condition_format(l->condition, COND_NAME, "%s %s:%s: %s",
- what, fixstr(ps->host), fixstr(ps->port),
+ what, ps->host, ps->port,
strerror(err));
listener_begin_close(l);
}
@@ -982,8 +978,8 @@ void pconnection_start(pconnection_t *pc) {
void pn_proactor_connect(pn_proactor_t *p, pn_connection_t *c, const char *addr) {
char *buf = strdup(addr);
assert(buf); // TODO: memory safety
- char *scheme, *user, *pass, *host, *port, *path;
- pni_parse_url(buf, &scheme, &user, &pass, &host, &port, &path);
+ char *host = buf;
+ char *port = pni_split_host_port(buf);
pconnection_t *pc = new_pconnection_t(p, c, false, host, port);
assert(pc); // TODO: memory safety
// TODO: check case of proactor shutting down
@@ -993,7 +989,7 @@ void pn_proactor_connect(pn_proactor_t *p, pn_connection_t *c, const char *addr)
struct addrinfo *ai = NULL;
int fd = -1;
- if (!getaddrinfo(host, port, 0, &ai)) {
+ if (!getaddrinfo(*host ? host : NULL, *port ? port : NULL, 0, &ai)) {
fd = socket(ai->ai_family, SOCK_STREAM, ai->ai_protocol);
if (fd >= 0) {
configure_socket(fd);
@@ -1081,8 +1077,8 @@ void pn_proactor_listen(pn_proactor_t *p, pn_listener_t *l, const char *addr, in
{
char *buf = strdup(addr);
assert(buf); // TODO: memory safety
- char *scheme, *user, *pass, *host, *port, *path;
- pni_parse_url(buf, &scheme, &user, &pass, &host, &port, &path);
+ char *host = buf;
+ char *port = pni_split_host_port(buf);
// TODO: check listener not already listening for this or another proactor
lock(&l->context.mutex);
l->context.proactor = p;;
@@ -1095,7 +1091,7 @@ void pn_proactor_listen(pn_proactor_t *p, pn_listener_t *l, const char *addr, in
struct addrinfo *ai = NULL;
int fd = -1;
- if (!getaddrinfo(host, port, 0, &ai)) {
+ if (!getaddrinfo(*host ? host : NULL, *port ? port : NULL, 0, &ai)) {
fd = socket(ai->ai_family, SOCK_STREAM, ai->ai_protocol);
if (fd >= 0) {
int yes = 1;
@@ -1727,29 +1723,31 @@ void pn_proactor_disconnect(pn_proactor_t *p, pn_condition_t *cond) {
wake_notify(&p->context);
}
-const struct sockaddr_storage *pn_netaddr_sockaddr(const pn_netaddr_t *addr) {
- assert(false);
+struct sockaddr *pn_netaddr_sockaddr(pn_netaddr_t *addr) {
return NULL;
}
-const struct pn_netaddr_t *pn_netaddr_local(pn_transport_t *t) {
- assert(false);
+size_t pn_netaddr_socklen(pn_netaddr_t *addr) {
+ return 0;
+}
+
+pn_netaddr_t *pn_netaddr_local(pn_transport_t *t) {
return NULL;
}
-const struct pn_netaddr_t *pn_netaddr_remote(pn_transport_t *t) {
- assert(false);
+pn_netaddr_t *pn_netaddr_remote(pn_transport_t *t) {
return NULL;
}
-size_t pn_netaddr_str(const struct pn_netaddr_t* addr, char *buf, size_t len) {
+int pn_netaddr_str(pn_netaddr_t* addr, char *buf, size_t len) {
struct sockaddr_storage *sa = (struct sockaddr_storage*)addr;
char host[NI_MAXHOST];
char port[NI_MAXSERV];
- int err = getnameinfo((struct sockaddr *)sa, sizeof(*sa), host, sizeof(host), port, sizeof(port),
+ int err = getnameinfo((struct sockaddr *)sa, sizeof(*sa),
+ host, sizeof(host), port, sizeof(port),
NI_NUMERICHOST | NI_NUMERICSERV);
if (!err) {
- return snprintf(buf, len, "%s:%s", host, port); /* FIXME aconway 2017-03-29: ipv6 format? */
+ return snprintf(buf, len, "%s:%s", host, port);
} else {
if (buf) *buf = '\0';
return 0;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/aed709de/proton-c/src/proactor/libuv.c
----------------------------------------------------------------------
diff --git a/proton-c/src/proactor/libuv.c b/proton-c/src/proactor/libuv.c
index 14682c4..22d0163 100644
--- a/proton-c/src/proactor/libuv.c
+++ b/proton-c/src/proactor/libuv.c
@@ -136,7 +136,7 @@ static void work_init(work_t* w, pn_proactor_t* p, struct_type type) {
/* A resolvable address */
typedef struct addr_t {
char host_port[PN_MAX_ADDR];
- char *host, *port; /* Point into addr after destructive pni_url_parse */
+ char *host, *port; /* Point into addr after destructive pni_split_host_port */
uv_getaddrinfo_t getaddrinfo; /* UV getaddrinfo request, contains list of addrinfo */
struct addrinfo* addrinfo; /* The current addrinfo being tried */
} addr_t;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/aed709de/proton-c/src/tests/proactor.c
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/proactor.c b/proton-c/src/tests/proactor.c
index 8cf0d26..2839614 100644
--- a/proton-c/src/tests/proactor.c
+++ b/proton-c/src/tests/proactor.c
@@ -508,7 +508,7 @@ static void test_errors(test_t *t) {
c = pn_connection();
pn_proactor_connect(client, c, port.host_port);
if (TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts))) {
- TEST_STR_IN(t, "connection refused", pn_condition_get_description(last_condition));
+ TEST_STR_IN(t, "refused", pn_condition_get_description(last_condition));
TEST_ETYPE_EQUAL(t, PN_PROACTOR_INACTIVE, PROACTOR_TEST_RUN(pts));
sock_close(port.sock);
PROACTOR_TEST_FREE(pts);
@@ -563,7 +563,8 @@ static void test_ipv4_ipv6(test_t *t) {
#define EXPECT_FAIL(TP, HOST) do { \
pn_proactor_connect(client, pn_connection(), test_port_use_host(&(TP), (HOST))); \
TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts)); \
- TEST_STR_IN(t, "refused", pn_condition_get_description(last_condition)); \
+ if (TEST_CHECK(t, pn_condition_is_set(last_condition))) \
+ TEST_STR_IN(t, "refused", pn_condition_get_description(last_condition)); \
PROACTOR_TEST_DRAIN(pts); \
} while(0)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org