You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ma...@apache.org on 2018/01/15 03:03:03 UTC

[trafficserver] 02/02: Support taking address and port on traffic_quic cmd

This is an automated email from the ASF dual-hosted git repository.

masaori pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit a149a1f251e54a0904e38906459bacf8dae38278
Author: Masaori Koshiba <ma...@apache.org>
AuthorDate: Mon Jan 15 12:00:04 2018 +0900

    Support taking address and port on traffic_quic cmd
---
 cmd/traffic_quic/quic_client.cc  | 58 ++++++++++++++++++++++++++--------------
 cmd/traffic_quic/quic_client.h   | 12 ++++++---
 cmd/traffic_quic/traffic_quic.cc |  6 ++---
 iocore/net/QUICNetProcessor.cc   |  6 ++---
 4 files changed, 53 insertions(+), 29 deletions(-)

diff --git a/cmd/traffic_quic/quic_client.cc b/cmd/traffic_quic/quic_client.cc
index 7225cfe..ec53e04 100644
--- a/cmd/traffic_quic/quic_client.cc
+++ b/cmd/traffic_quic/quic_client.cc
@@ -23,6 +23,44 @@
 
 #include "quic_client.h"
 
+QUICClient::~QUICClient()
+{
+  freeaddrinfo(this->_remote_addr_info);
+}
+
+void
+QUICClient::start()
+{
+  SET_HANDLER(&QUICClient::state_http_server_open);
+
+  struct addrinfo hints;
+
+  memset(&hints, 0, sizeof(struct addrinfo));
+  hints.ai_family   = AF_UNSPEC;
+  hints.ai_socktype = SOCK_DGRAM;
+  hints.ai_flags    = 0;
+  hints.ai_protocol = 0;
+
+  int res = getaddrinfo(this->_remote_addr, this->_remote_port, &hints, &this->_remote_addr_info);
+  if (res < 0) {
+    Debug("quic_client", "Error: %s (%d)", strerror(errno), errno);
+    return;
+  }
+
+  for (struct addrinfo *info = this->_remote_addr_info; info != nullptr; info = info->ai_next) {
+    NetVCOptions opt;
+    opt.ip_proto  = NetVCOptions::USE_UDP;
+    opt.ip_family = info->ai_family;
+
+    SCOPED_MUTEX_LOCK(lock, this->mutex, this_ethread());
+
+    Action *action = quic_NetProcessor.connect_re(this, info->ai_addr, &opt);
+    if (action == ACTION_RESULT_DONE) {
+      break;
+    }
+  }
+}
+
 // Similar to HttpSM::state_http_server_open(int event, void *data)
 int
 QUICClient::state_http_server_open(int event, void *data)
@@ -48,23 +86,3 @@ QUICClient::state_http_server_open(int event, void *data)
 
   return 0;
 }
-
-void
-QUICClient::start()
-{
-  SET_HANDLER(&QUICClient::state_http_server_open);
-
-  // TODO: getdddrinfo
-  sockaddr_in addr;
-  addr.sin_family      = AF_INET;
-  addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-  addr.sin_port        = htons(this->_remote_port);
-
-  NetVCOptions opt;
-  opt.ip_proto  = NetVCOptions::USE_UDP;
-  opt.ip_family = addr.sin_family;
-
-  SCOPED_MUTEX_LOCK(lock, this->mutex, this_ethread());
-
-  quic_NetProcessor.connect_re(this, reinterpret_cast<sockaddr const *>(&addr), &opt);
-}
diff --git a/cmd/traffic_quic/quic_client.h b/cmd/traffic_quic/quic_client.h
index 715d72a..05d0c47 100644
--- a/cmd/traffic_quic/quic_client.h
+++ b/cmd/traffic_quic/quic_client.h
@@ -30,11 +30,17 @@
 class QUICClient : public Continuation
 {
 public:
-  QUICClient(const char *addr, int port) : Continuation(new_ProxyMutex()), _remote_port(port) { SET_HANDLER(&QUICClient::start); };
+  QUICClient(const char *addr, const char *port) : Continuation(new_ProxyMutex()), _remote_addr(addr), _remote_port(port)
+  {
+    SET_HANDLER(&QUICClient::start);
+  };
+  ~QUICClient();
+
   void start();
   int state_http_server_open(int event, void *data);
 
 private:
-  // char *_remote_addr = nullptr;
-  int _remote_port = 0;
+  const char *_remote_addr;
+  const char *_remote_port;
+  struct addrinfo *_remote_addr_info = nullptr;
 };
diff --git a/cmd/traffic_quic/traffic_quic.cc b/cmd/traffic_quic/traffic_quic.cc
index 88450d5..f153e8f 100644
--- a/cmd/traffic_quic/traffic_quic.cc
+++ b/cmd/traffic_quic/traffic_quic.cc
@@ -47,13 +47,13 @@ main(int argc, const char **argv)
   AppVersionInfo appVersionInfo;
   appVersionInfo.setup(PACKAGE_NAME, "traffic_quic", PACKAGE_VERSION, __DATE__, __TIME__, BUILD_MACHINE, BUILD_PERSON, "");
 
-  char addr[1024]       = "";
-  int port              = 4433;
+  char addr[1024]       = "127.0.0.1";
+  char port[16]         = "4433";
   char debug_tags[1024] = "quic|udp";
 
   const ArgumentDescription argument_descriptions[] = {
     {"addr", 'a', "Address", "S1023", addr, nullptr, nullptr},
-    {"port", 'p', "Port", "I", &port, nullptr, nullptr},
+    {"port", 'p', "Port", "S15", port, nullptr, nullptr},
     {"debug", 'T', "Vertical-bar-separated Debug Tags", "S1023", debug_tags, nullptr, nullptr},
     HELP_ARGUMENT_DESCRIPTION(),
     VERSION_ARGUMENT_DESCRIPTION(),
diff --git a/iocore/net/QUICNetProcessor.cc b/iocore/net/QUICNetProcessor.cc
index 31740f5..01a4462 100644
--- a/iocore/net/QUICNetProcessor.cc
+++ b/iocore/net/QUICNetProcessor.cc
@@ -119,7 +119,7 @@ QUICNetProcessor::connect_re(Continuation *cont, sockaddr const *remote_addr, Ne
   ink_assert(t);
 
   sockaddr_in local_addr;
-  local_addr.sin_family      = AF_INET;
+  local_addr.sin_family      = remote_addr->sa_family;
   local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
   local_addr.sin_port        = 0;
 
@@ -142,7 +142,7 @@ QUICNetProcessor::connect_re(Continuation *cont, sockaddr const *remote_addr, Ne
   // FIXME: create QUICPacketHandler for Client (origin server side)
   QUICPacketHandler *packet_handler = new QUICPacketHandler(accept_opt, this->_ssl_ctx);
   packet_handler->init_accept(t);
-  packet_handler->action_ = new NetAcceptAction();
+  packet_handler->action_  = new NetAcceptAction();
   *packet_handler->action_ = cont;
 
   con->setBinding(reinterpret_cast<sockaddr const *>(&local_addr));
@@ -152,7 +152,7 @@ QUICNetProcessor::connect_re(Continuation *cont, sockaddr const *remote_addr, Ne
   PollDescriptor *pd = pc->pollDescriptor;
 
   errno = 0;
-  res = con->ep.start(pd, con, EVENTIO_READ);
+  res   = con->ep.start(pd, con, EVENTIO_READ);
   if (res < 0) {
     Debug("udpnet", "Error: %s (%d)", strerror(errno), errno);
   }

-- 
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.