1
0
Fork 0
firefox/netwerk/protocol/http/Capsule.cpp
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

160 lines
4.7 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set sw=2 ts=8 et tw=80 : */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "Capsule.h"
#include "CapsuleEncoder.h"
// For Http2Session::LogIO.
#include "Http2Session.h"
namespace mozilla::net {
// static
void Capsule::LogBuffer(const uint8_t* aBuffer, uint32_t aLength) {
#ifdef DEBUG
Http2Session::LogIO(nullptr, nullptr, "Capsule",
reinterpret_cast<const char*>(aBuffer), aLength);
#endif
}
// static
Capsule Capsule::CloseWebTransportSession(uint32_t aStatus,
const nsACString& aReason) {
CloseWebTransportSessionCapsule capsule;
capsule.mStatus = aStatus;
capsule.mReason = aReason;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportMaxData(uint64_t aValue) {
WebTransportMaxDataCapsule capsule;
capsule.mMaxDataSize = aValue;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportStreamData(uint64_t aID, bool aFin,
nsTArray<uint8_t>&& aData) {
WebTransportStreamDataCapsule capsule;
capsule.mID = aID;
capsule.mFin = aFin;
capsule.mData.AppendElements(std::move(aData));
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportStreamsBlocked(uint64_t aLimit, bool aBidi) {
WebTransportStreamsBlockedCapsule capsule;
capsule.mLimit = aLimit;
capsule.mBidi = aBidi;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportMaxStreams(uint64_t aLimit, bool aBidi) {
WebTransportMaxStreamsCapsule capsule;
capsule.mLimit = aLimit;
capsule.mBidi = aBidi;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportStreamDataBlocked(uint64_t aLimit, uint64_t aID) {
WebTransportStreamDataBlockedCapsule capsule;
capsule.mLimit = aLimit;
capsule.mID = aID;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportMaxStreamData(uint64_t aLimit, uint64_t aID) {
WebTransportMaxStreamDataCapsule capsule;
capsule.mLimit = aLimit;
capsule.mID = aID;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportDataBlocked(uint64_t aLimit) {
WebTransportDataBlockedCapsule capsule;
capsule.mLimit = aLimit;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportStopSending(uint64_t aError, uint64_t aID) {
WebTransportStopSendingCapsule capsule;
capsule.mErrorCode = aError;
capsule.mID = aID;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportResetStream(uint64_t aError, uint64_t aSize,
uint64_t aID) {
WebTransportResetStreamCapsule capsule;
capsule.mErrorCode = aError;
capsule.mReliableSize = aSize;
capsule.mID = aID;
return Capsule(std::move(capsule));
}
// static
Capsule Capsule::WebTransportDatagram(nsTArray<uint8_t>&& aPayload) {
Capsule capsule;
capsule.mCapsule = AsVariant(WebTransportDatagramCapsule());
capsule.mCapsule.as<WebTransportDatagramCapsule>().mPayload.AppendElements(
std::move(aPayload));
return capsule;
}
// static
Capsule Capsule::Unknown(uint64_t aType, nsTArray<uint8_t>&& aData) {
UnknownCapsule capsule;
capsule.mType = aType;
capsule.mData = std::move(aData);
return Capsule(std::move(capsule));
}
CapsuleType Capsule::Type() const {
return mCapsule.match(
[](const UnknownCapsule& aCapsule) { return aCapsule.Type(); },
[](const CloseWebTransportSessionCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportMaxDataCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportStreamDataCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportStreamsBlockedCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportMaxStreamsCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportStreamDataBlockedCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportMaxStreamDataCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportDataBlockedCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportStopSendingCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportResetStreamCapsule& aCapsule) {
return aCapsule.Type();
},
[](const WebTransportDatagramCapsule& aCapsule) {
return aCapsule.Type();
});
}
} // namespace mozilla::net