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

[trafficserver] branch quic-latest updated: QUIC: Ensure switch to closed state once

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

scw00 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 1d7d681  QUIC: Ensure switch to closed state once
1d7d681 is described below

commit 1d7d681cd5a6da686d88f066ce3897ad1a0b8c53
Author: scw00 <sc...@apache.org>
AuthorDate: Fri Mar 2 14:13:07 2018 +0800

    QUIC: Ensure switch to closed state once
---
 iocore/net/QUICNetVConnection.cc | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/iocore/net/QUICNetVConnection.cc b/iocore/net/QUICNetVConnection.cc
index f123c43..fcf57cf 100644
--- a/iocore/net/QUICNetVConnection.cc
+++ b/iocore/net/QUICNetVConnection.cc
@@ -465,13 +465,16 @@ QUICNetVConnection::handle_frame(std::shared_ptr<const QUICFrame> frame)
     break;
   case QUICFrameType::APPLICATION_CLOSE:
   case QUICFrameType::CONNECTION_CLOSE:
-    if (this->handler == reinterpret_cast<NetVConnHandler>(&QUICNetVConnection::state_connection_closing) ||
+    if (this->handler == reinterpret_cast<NetVConnHandler>(&QUICNetVConnection::state_connection_closed) ||
         this->handler == reinterpret_cast<NetVConnHandler>(&QUICNetVConnection::state_connection_draining)) {
-      this->_switch_to_close_state();
-    } else {
-      this->_switch_to_draining_state(QUICConnectionErrorUPtr(
-        new QUICConnectionError(std::static_pointer_cast<const QUICApplicationCloseFrame>(frame)->error_code())));
+      return error;
     }
+
+    // 7.9.1. Closing and Draining Connection States
+    // An endpoint MAY transition from the closing period to the draining period if it can confirm that its peer is also closing or
+    // draining. Receiving a closing frame is sufficient confirmation, as is receiving a stateless reset.
+    this->_switch_to_draining_state(QUICConnectionErrorUPtr(
+      new QUICConnectionError(std::static_pointer_cast<const QUICApplicationCloseFrame>(frame)->error_code())));
     break;
   default:
     QUICConDebug("Unexpected frame type: %02x", static_cast<unsigned int>(frame->type()));

-- 
To stop receiving notification emails like this one, please contact
scw00@apache.org.