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>.