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