summaryrefslogtreecommitdiffstats
path: root/netwerk/protocol/http/Http3StreamBase.h
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/protocol/http/Http3StreamBase.h')
-rw-r--r--netwerk/protocol/http/Http3StreamBase.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/netwerk/protocol/http/Http3StreamBase.h b/netwerk/protocol/http/Http3StreamBase.h
new file mode 100644
index 0000000000..4705cd3ebf
--- /dev/null
+++ b/netwerk/protocol/http/Http3StreamBase.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+#ifndef mozilla_net_Http3StreamBase_h
+#define mozilla_net_Http3StreamBase_h
+
+#include "nsAHttpTransaction.h"
+#include "ARefBase.h"
+#include "mozilla/WeakPtr.h"
+#include "nsIClassOfService.h"
+
+namespace mozilla::net {
+
+class Http3Session;
+class Http3Stream;
+class Http3WebTransportSession;
+class Http3WebTransportStream;
+
+class Http3StreamBase : public SupportsWeakPtr, public ARefBase {
+ public:
+ Http3StreamBase(nsAHttpTransaction* trans, Http3Session* session)
+ : mTransaction(trans), mSession(session) {}
+
+ virtual Http3WebTransportSession* GetHttp3WebTransportSession() = 0;
+ virtual Http3WebTransportStream* GetHttp3WebTransportStream() = 0;
+ virtual Http3Stream* GetHttp3Stream() = 0;
+
+ bool HasStreamId() const { return mStreamId != UINT64_MAX; }
+ uint64_t StreamId() const { return mStreamId; }
+
+ [[nodiscard]] virtual nsresult ReadSegments() = 0;
+ [[nodiscard]] virtual nsresult WriteSegments() = 0;
+
+ virtual bool Done() const = 0;
+
+ virtual void SetResponseHeaders(nsTArray<uint8_t>& aResponseHeaders, bool fin,
+ bool interim) = 0;
+
+ void SetQueued(bool aStatus) { mQueued = aStatus; }
+ bool Queued() const { return mQueued; }
+
+ virtual void Close(nsresult aResult) = 0;
+
+ nsAHttpTransaction* Transaction() { return mTransaction; }
+
+ // Mirrors nsAHttpTransaction
+ virtual bool Do0RTT() { return false; }
+ virtual nsresult Finish0RTT(bool aRestart) { return NS_OK; }
+
+ virtual bool RecvdFin() const { return mFin; }
+ virtual bool RecvdReset() const { return mResetRecv; }
+ virtual void SetRecvdReset() { mResetRecv = true; }
+
+ protected:
+ ~Http3StreamBase() = default;
+ uint64_t mStreamId{UINT64_MAX};
+ RefPtr<nsAHttpTransaction> mTransaction;
+ Http3Session* mSession;
+ bool mQueued{false};
+ bool mFin{false};
+ bool mResetRecv{false};
+};
+
+} // namespace mozilla::net
+
+#endif // mozilla_net_Http3StreamBase_h