tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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