1 // Copyright (c) 2021 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This header contains interfaces that abstract away different backing 6 // protocols for WebTransport. 7 8 #ifndef QUICHE_QUIC_CORE_WEB_TRANSPORT_INTERFACE_H_ 9 #define QUICHE_QUIC_CORE_WEB_TRANSPORT_INTERFACE_H_ 10 11 #include "absl/strings/str_cat.h" 12 #include "quiche/quic/core/quic_types.h" 13 #include "quiche/web_transport/web_transport.h" 14 15 namespace quic { 16 17 using WebTransportSessionError = webtransport::SessionErrorCode; 18 using WebTransportStreamError = webtransport::StreamErrorCode; 19 20 using WebTransportStreamVisitor = webtransport::StreamVisitor; 21 using WebTransportStream = webtransport::Stream; 22 using WebTransportVisitor = webtransport::SessionVisitor; 23 using WebTransportSession = webtransport::Session; 24 MessageStatusToWebTransportStatus(MessageStatus status)25inline webtransport::DatagramStatus MessageStatusToWebTransportStatus( 26 MessageStatus status) { 27 switch (status) { 28 case MESSAGE_STATUS_SUCCESS: 29 return webtransport::DatagramStatus( 30 webtransport::DatagramStatusCode::kSuccess, ""); 31 case MESSAGE_STATUS_BLOCKED: 32 return webtransport::DatagramStatus( 33 webtransport::DatagramStatusCode::kBlocked, 34 "QUIC connection write-blocked"); 35 case MESSAGE_STATUS_TOO_LARGE: 36 return webtransport::DatagramStatus( 37 webtransport::DatagramStatusCode::kTooBig, 38 "Datagram payload exceeded maximum allowed size"); 39 case MESSAGE_STATUS_ENCRYPTION_NOT_ESTABLISHED: 40 case MESSAGE_STATUS_INTERNAL_ERROR: 41 case MESSAGE_STATUS_UNSUPPORTED: 42 return webtransport::DatagramStatus( 43 webtransport::DatagramStatusCode::kInternalError, 44 absl::StrCat("Internal error: ", MessageStatusToString(status))); 45 default: 46 return webtransport::DatagramStatus( 47 webtransport::DatagramStatusCode::kInternalError, 48 absl::StrCat("Unknown status: ", MessageStatusToString(status))); 49 } 50 } 51 52 } // namespace quic 53 54 #endif // QUICHE_QUIC_CORE_WEB_TRANSPORT_INTERFACE_H_ 55