trafficserver-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From masa...@apache.org
Subject [trafficserver] branch quic-latest updated: draft-08: Support new frame format of NEW_CONNECTION_ID and STOP_SENDING
Date Thu, 14 Dec 2017 06:38:56 GMT
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


The following commit(s) were added to refs/heads/quic-latest by this push:
     new b5f3490  draft-08: Support new frame format of NEW_CONNECTION_ID and STOP_SENDING
b5f3490 is described below

commit b5f3490db7566330f36c49991ded136841593994
Author: Masaori Koshiba <masaori@apache.org>
AuthorDate: Thu Dec 14 15:37:05 2017 +0900

    draft-08: Support new frame format of NEW_CONNECTION_ID and STOP_SENDING
---
 iocore/net/quic/QUICFrame.cc           | 56 +++++++++++++++++++++++++---------
 iocore/net/quic/QUICFrame.h            | 19 +++++++++---
 iocore/net/quic/test/test_QUICFrame.cc | 21 +++++++------
 3 files changed, 68 insertions(+), 28 deletions(-)

diff --git a/iocore/net/quic/QUICFrame.cc b/iocore/net/quic/QUICFrame.cc
index 6127485..fd237ad 100644
--- a/iocore/net/quic/QUICFrame.cc
+++ b/iocore/net/quic/QUICFrame.cc
@@ -1355,12 +1355,6 @@ QUICStreamIdBlockedFrame::_get_stream_id_field_length() const
 // NEW_CONNECTION_ID frame
 //
 
-QUICNewConnectionIdFrame::QUICNewConnectionIdFrame(uint16_t sequence, QUICConnectionId connection_i,
-                                                   QUICStatelessResetToken stateless_reset_token)
-  : _sequence(sequence), _connection_id(connection_i), _stateless_reset_token(stateless_reset_token)
-{
-}
-
 QUICFrameType
 QUICNewConnectionIdFrame::type() const
 {
@@ -1370,7 +1364,7 @@ QUICNewConnectionIdFrame::type() const
 size_t
 QUICNewConnectionIdFrame::size() const
 {
-  return 11;
+  return sizeof(QUICFrameType) + this->_get_sequence_field_length() + sizeof(QUICConnectionId)
+ 16;
 }
 
 void
@@ -1380,7 +1374,7 @@ QUICNewConnectionIdFrame::store(uint8_t *buf, size_t *len) const
   uint8_t *p = buf;
   *p         = static_cast<uint8_t>(QUICFrameType::NEW_CONNECTION_ID);
   ++p;
-  QUICTypeUtil::write_uint_as_nbytes(this->_sequence, 2, p, &n);
+  QUICTypeUtil::write_QUICVariableInt(this->_sequence, p, &n);
   p += n;
   QUICTypeUtil::write_QUICConnectionId(this->_connection_id, 8, p, &n);
   p += n;
@@ -1390,11 +1384,11 @@ QUICNewConnectionIdFrame::store(uint8_t *buf, size_t *len) const
   *len = p - buf;
 }
 
-uint16_t
+uint64_t
 QUICNewConnectionIdFrame::sequence() const
 {
   if (this->_buf) {
-    return QUICTypeUtil::read_nbytes_as_uint(this->_buf + 1, 2);
+    return QUICTypeUtil::read_QUICVariableInt(this->_buf + sizeof(QUICFrameType));
   } else {
     return this->_sequence;
   }
@@ -1404,7 +1398,7 @@ QUICConnectionId
 QUICNewConnectionIdFrame::connection_id() const
 {
   if (this->_buf) {
-    return QUICTypeUtil::read_QUICConnectionId(this->_buf + 3, 8);
+    return QUICTypeUtil::read_QUICConnectionId(this->_buf + this->_get_connection_id_field_offset(),
8);
   } else {
     return this->_connection_id;
   }
@@ -1414,12 +1408,28 @@ QUICStatelessResetToken
 QUICNewConnectionIdFrame::stateless_reset_token() const
 {
   if (this->_buf) {
-    return QUICStatelessResetToken(this->_buf + 11);
+    return QUICStatelessResetToken(this->_buf + this->_get_connection_id_field_offset()
+ sizeof(QUICConnectionId));
   } else {
     return this->_stateless_reset_token;
   }
 }
 
+size_t
+QUICNewConnectionIdFrame::_get_sequence_field_length() const
+{
+  if (this->_buf) {
+    return QUICVariableInt::size(this->_buf + sizeof(QUICFrameType));
+  } else {
+    return QUICVariableInt::size(this->_sequence);
+  }
+}
+
+size_t
+QUICNewConnectionIdFrame::_get_connection_id_field_offset() const
+{
+  return sizeof(QUICFrameType) + this->_get_sequence_field_length();
+}
+
 //
 // STOP_SENDING frame
 //
@@ -1438,7 +1448,7 @@ QUICStopSendingFrame::type() const
 size_t
 QUICStopSendingFrame::size() const
 {
-  return 7;
+  return sizeof(QUICFrameType) + this->_get_stream_id_field_length() + sizeof(QUICAppErrorCode);
 }
 
 void
@@ -1460,7 +1470,7 @@ QUICAppErrorCode
 QUICStopSendingFrame::error_code() const
 {
   if (this->_buf) {
-    return QUICTypeUtil::read_QUICAppErrorCode(this->_buf + 5);
+    return QUICTypeUtil::read_QUICAppErrorCode(this->_buf + this->_get_error_code_field_offset());
   } else {
     return this->_error_code;
   }
@@ -1470,12 +1480,28 @@ QUICStreamId
 QUICStopSendingFrame::stream_id() const
 {
   if (this->_buf) {
-    return QUICTypeUtil::read_QUICStreamId(this->_buf + 1);
+    return QUICTypeUtil::read_QUICStreamId(this->_buf + sizeof(QUICFrameType));
   } else {
     return this->_stream_id;
   }
 }
 
+size_t
+QUICStopSendingFrame::_get_stream_id_field_length() const
+{
+  if (this->_buf) {
+    return QUICVariableInt::size(this->_buf + sizeof(QUICFrameType));
+  } else {
+    return QUICVariableInt::size(this->_stream_id);
+  }
+}
+
+size_t
+QUICStopSendingFrame::_get_error_code_field_offset() const
+{
+  return sizeof(QUICFrameType) + this->_get_stream_id_field_length();
+}
+
 //
 // QUICRetransmissionFrame
 //
diff --git a/iocore/net/quic/QUICFrame.h b/iocore/net/quic/QUICFrame.h
index 319e64c..151d317 100644
--- a/iocore/net/quic/QUICFrame.h
+++ b/iocore/net/quic/QUICFrame.h
@@ -462,16 +462,22 @@ class QUICNewConnectionIdFrame : public QUICFrame
 public:
   QUICNewConnectionIdFrame() : QUICFrame() {}
   QUICNewConnectionIdFrame(const uint8_t *buf, size_t len) : QUICFrame(buf, len) {}
-  QUICNewConnectionIdFrame(uint16_t sequence, QUICConnectionId connection_id, QUICStatelessResetToken
stateless_reset_token);
+  QUICNewConnectionIdFrame(uint64_t seq, QUICConnectionId id, QUICStatelessResetToken token)
+      : _sequence(seq), _connection_id(id), _stateless_reset_token(token) {};
+
   virtual QUICFrameType type() const override;
   virtual size_t size() const override;
   virtual void store(uint8_t *buf, size_t *len) const override;
-  uint16_t sequence() const;
+
+  uint64_t sequence() const;
   QUICConnectionId connection_id() const;
   QUICStatelessResetToken stateless_reset_token() const;
 
 private:
-  uint16_t _sequence              = 0;
+  size_t _get_sequence_field_length() const;
+  size_t _get_connection_id_field_offset() const;
+
+  uint64_t _sequence              = 0;
   QUICConnectionId _connection_id = 0;
   QUICStatelessResetToken _stateless_reset_token;
 };
@@ -486,15 +492,20 @@ public:
   QUICStopSendingFrame() : QUICFrame() {}
   QUICStopSendingFrame(const uint8_t *buf, size_t len) : QUICFrame(buf, len) {}
   QUICStopSendingFrame(QUICStreamId stream_id, QUICAppErrorCode error_code);
+
   virtual QUICFrameType type() const override;
   virtual size_t size() const override;
   virtual void store(uint8_t *buf, size_t *len) const override;
+
   QUICStreamId stream_id() const;
   QUICAppErrorCode error_code() const;
 
 private:
+  size_t _get_stream_id_field_length() const;
+  size_t _get_error_code_field_offset() const;
+
   QUICStreamId _stream_id = 0;
-  QUICAppErrorCode _error_code;
+  QUICAppErrorCode _error_code = 0;
 };
 
 using QUICFrameDeleterFunc = void (*)(QUICFrame *p);
diff --git a/iocore/net/quic/test/test_QUICFrame.cc b/iocore/net/quic/test/test_QUICFrame.cc
index 6ae828f..280aae4 100644
--- a/iocore/net/quic/test/test_QUICFrame.cc
+++ b/iocore/net/quic/test/test_QUICFrame.cc
@@ -757,14 +757,14 @@ TEST_CASE("Load NewConnectionId Frame", "[quic]")
 {
   uint8_t buf1[] = {
     0x0b,                                           // Type
-    0x01, 0x02,                                     // Sequence
+    0x41, 0x02,                                     // Sequence
     0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, // Connection ID
     0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, // Stateless Reset Token
     0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0,
   };
   std::shared_ptr<const QUICFrame> frame1 = QUICFrameFactory::create(buf1, sizeof(buf1));
   CHECK(frame1->type() == QUICFrameType::NEW_CONNECTION_ID);
-  CHECK(frame1->size() == 11);
+  CHECK(frame1->size() == 27);
   std::shared_ptr<const QUICNewConnectionIdFrame> newConnectionIdFrame1 =
     std::dynamic_pointer_cast<const QUICNewConnectionIdFrame>(frame1);
   CHECK(newConnectionIdFrame1 != nullptr);
@@ -775,13 +775,16 @@ TEST_CASE("Load NewConnectionId Frame", "[quic]")
 
 TEST_CASE("Store NewConnectionId Frame", "[quic]")
 {
-  uint8_t buf[65535];
+  uint8_t buf[32];
   size_t len;
 
-  uint8_t expected[] = {0x0b,                                           // Type
-                        0x01, 0x02,                                     // Sequence
-                        0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, // Connection ID
-                        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
+  uint8_t expected[] = {
+    0x0b,                                           // Type
+    0x41, 0x02,                                     // Sequence
+    0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, // Connection ID
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // Stateless Reset Token
+    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+  };
   QUICNewConnectionIdFrame newConnectionIdFrame(0x0102, 0x1122334455667788ULL, {expected
+ 11});
   newConnectionIdFrame.store(buf, &len);
   CHECK(len == 27);
@@ -792,7 +795,7 @@ TEST_CASE("Load STOP_SENDING Frame", "[quic]")
 {
   uint8_t buf[] = {
     0x0c,                   // Type
-    0x12, 0x34, 0x56, 0x78, // Stream ID
+    0x92, 0x34, 0x56, 0x78, // Stream ID
     0x00, 0x01,             // Error Code
   };
   std::shared_ptr<const QUICFrame> frame = QUICFrameFactory::create(buf, sizeof(buf));
@@ -812,7 +815,7 @@ TEST_CASE("Store STOP_SENDING Frame", "[quic]")
 
   uint8_t expected[] = {
     0x0c,                   // Type
-    0x12, 0x34, 0x56, 0x78, // Stream ID
+    0x92, 0x34, 0x56, 0x78, // Stream ID
     0x00, 0x01,             // Error Code
   };
   QUICStopSendingFrame stop_sending_frame(0x12345678, static_cast<QUICAppErrorCode>(0x01));

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

Mime
View raw message