WebTransportFlowControl.cpp (2581B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #include "WebTransportFlowControl.h" 7 8 namespace mozilla::net { 9 10 Maybe<CapsuleEncoder> 11 SenderFlowControlStreamType::CreateStreamsBlockedCapsule() { 12 auto blockedNeeded = BlockedNeeded(); 13 if (!blockedNeeded) { 14 return Nothing(); 15 } 16 17 Capsule capsule = Capsule::WebTransportStreamsBlocked( 18 *blockedNeeded, mType == WebTransportStreamType::BiDi); 19 CapsuleEncoder encoder; 20 encoder.EncodeCapsule(capsule); 21 BlockedSent(); 22 return Some(encoder); 23 } 24 25 Maybe<CapsuleEncoder> 26 SenderFlowControlStreamId::CreateStreamDataBlockedCapsule() { 27 auto blockedNeeded = BlockedNeeded(); 28 if (!blockedNeeded) { 29 return Nothing(); 30 } 31 32 Capsule capsule = Capsule::WebTransportStreamDataBlocked(*blockedNeeded, mId); 33 CapsuleEncoder encoder; 34 encoder.EncodeCapsule(capsule); 35 BlockedSent(); 36 return Some(encoder); 37 } 38 39 Maybe<CapsuleEncoder> 40 SenderFlowControlSession::CreateSessionDataBlockedCapsule() { 41 auto blockedNeeded = BlockedNeeded(); 42 if (!blockedNeeded) { 43 return Nothing(); 44 } 45 46 Capsule capsule = Capsule::WebTransportDataBlocked(*blockedNeeded); 47 CapsuleEncoder encoder; 48 encoder.EncodeCapsule(capsule); 49 BlockedSent(); 50 return Some(encoder); 51 } 52 53 Maybe<CapsuleEncoder> ReceiverFlowControlStreamType::CreateMaxStreamsCapsule() { 54 if (!CapsuleNeeded()) { 55 return Nothing(); 56 } 57 58 uint64_t maxStreams = NextLimit(); 59 Capsule capsule = Capsule::WebTransportMaxStreams( 60 maxStreams, mType == WebTransportStreamType::BiDi); 61 CapsuleEncoder encoder; 62 encoder.EncodeCapsule(capsule); 63 CapsuleSent(maxStreams); 64 return Some(encoder); 65 } 66 67 Maybe<CapsuleEncoder> 68 ReceiverFlowControlStreamId::CreateMaxStreamDataCapsule() { 69 if (!CapsuleNeeded()) { 70 return Nothing(); 71 } 72 73 uint64_t maxAllowed = NextLimit(); 74 Capsule capsule = Capsule::WebTransportMaxStreamData(maxAllowed, mId); 75 CapsuleEncoder encoder; 76 encoder.EncodeCapsule(capsule); 77 CapsuleSent(maxAllowed); 78 return Some(encoder); 79 } 80 81 Maybe<CapsuleEncoder> ReceiverFlowControlSession::CreateMaxDataCapsule() { 82 if (!CapsuleNeeded()) { 83 return Nothing(); 84 } 85 86 uint64_t maxAllowed = NextLimit(); 87 Capsule capsule = Capsule::WebTransportMaxData(maxAllowed); 88 CapsuleEncoder encoder; 89 encoder.EncodeCapsule(capsule); 90 CapsuleSent(maxAllowed); 91 return Some(encoder); 92 } 93 94 } // namespace mozilla::net