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/16 06:20:34 UTC
[trafficserver] branch quic-latest updated: Implement PONG
This is an automated email from the ASF dual-hosted git repository.
maskit pushed a commit to branch quic-latest
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/quic-latest by this push:
new abab452 Implement PONG
abab452 is described below
commit abab45200c76b5afb7b4d01e811c95011a5284ef
Author: Masakazu Kitajo <ma...@apache.org>
AuthorDate: Tue Jan 16 15:20:03 2018 +0900
Implement PONG
---
iocore/net/QUICNetVConnection.cc | 5 +++++
iocore/net/quic/QUICFrame.cc | 22 ++++++++++++++++++++++
iocore/net/quic/QUICFrame.h | 10 ++++++++++
3 files changed, 37 insertions(+)
diff --git a/iocore/net/QUICNetVConnection.cc b/iocore/net/QUICNetVConnection.cc
index 87e9c0e..21ccc29 100644
--- a/iocore/net/QUICNetVConnection.cc
+++ b/iocore/net/QUICNetVConnection.cc
@@ -355,6 +355,11 @@ QUICNetVConnection::handle_frame(std::shared_ptr<const QUICFrame> frame)
this->_schedule_packet_write_ready();
break;
+ case QUICFrameType::PING:
+ if (std::static_pointer_cast<const QUICPingFrame>(frame)->data_length() > 0) {
+ this->transmit_frame(QUICFrameFactory::create_pong_frame(*std::static_pointer_cast<const QUICPingFrame>(frame)));
+ }
+ break;
case QUICFrameType::BLOCKED:
// BLOCKED frame is for debugging. Nothing to do here.
break;
diff --git a/iocore/net/quic/QUICFrame.cc b/iocore/net/quic/QUICFrame.cc
index 252d57c..f7445ee 100644
--- a/iocore/net/quic/QUICFrame.cc
+++ b/iocore/net/quic/QUICFrame.cc
@@ -1898,6 +1898,28 @@ QUICFrameFactory::create_max_stream_data_frame(QUICStreamId stream_id, uint64_t
return std::unique_ptr<QUICMaxStreamDataFrame, QUICFrameDeleterFunc>(frame, &QUICFrameDeleter::delete_max_stream_data_frame);
}
+std::unique_ptr<QUICPingFrame, QUICFrameDeleterFunc>
+QUICFrameFactory::create_ping_frame(const uint8_t *data, size_t data_len)
+{
+ ats_unique_buf buf = ats_unique_malloc(data_len);
+ memcpy(buf.get(), data, data_len);
+
+ QUICPingFrame *frame = quicPingFrameAllocator.alloc();
+ new (frame) QUICPingFrame(std::move(buf), data_len);
+ return std::unique_ptr<QUICPingFrame, QUICFrameDeleterFunc>(frame, &QUICFrameDeleter::delete_ping_frame);
+}
+
+std::unique_ptr<QUICPongFrame, QUICFrameDeleterFunc>
+QUICFrameFactory::create_pong_frame(const QUICPingFrame &ping_frame)
+{
+ ats_unique_buf buf = ats_unique_malloc(ping_frame.data_length());
+ memcpy(buf.get(), ping_frame.data(), ping_frame.data_length());
+
+ QUICPongFrame *frame = quicPongFrameAllocator.alloc();
+ new (frame) QUICPongFrame(std::move(buf), ping_frame.data_length());
+ return std::unique_ptr<QUICPongFrame, QUICFrameDeleterFunc>(frame, &QUICFrameDeleter::delete_pong_frame);
+}
+
std::unique_ptr<QUICBlockedFrame, QUICFrameDeleterFunc>
QUICFrameFactory::create_blocked_frame(QUICOffset offset)
{
diff --git a/iocore/net/quic/QUICFrame.h b/iocore/net/quic/QUICFrame.h
index 342defa..0cc90d5 100644
--- a/iocore/net/quic/QUICFrame.h
+++ b/iocore/net/quic/QUICFrame.h
@@ -753,6 +753,16 @@ public:
uint64_t maximum_stream_data);
/*
+ * Creates a PING frame
+ */
+ static std::unique_ptr<QUICPingFrame, QUICFrameDeleterFunc> create_ping_frame(const uint8_t *data, size_t data_len);
+
+ /*
+ * Creates a PONG frame
+ */
+ static std::unique_ptr<QUICPongFrame, QUICFrameDeleterFunc> create_pong_frame(const QUICPingFrame &ping_frame);
+
+ /*
* Creates a BLOCKED frame.
*/
static std::unique_ptr<QUICBlockedFrame, QUICFrameDeleterFunc> create_blocked_frame(QUICOffset offset);
--
To stop receiving notification emails like this one, please contact
['"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>'].