Internal change PiperOrigin-RevId: 413223491
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h index 03a1c56..3b310c8 100644 --- a/quic/core/quic_connection.h +++ b/quic/core/quic_connection.h
@@ -1255,6 +1255,10 @@ context_.tracer.swap(tracer); } + void set_bug_listener(std::unique_ptr<QuicBugListener> bug_listener) { + context_.bug_listener.swap(bug_listener); + } + absl::optional<QuicWallTime> quic_bug_10511_43_timestamp() const { return quic_bug_10511_43_timestamp_; }
diff --git a/quic/core/quic_connection_context.h b/quic/core/quic_connection_context.h index 7cedee6..a1d76e3 100644 --- a/quic/core/quic_connection_context.h +++ b/quic/core/quic_connection_context.h
@@ -52,6 +52,15 @@ virtual void Deactivate() {} }; +// QuicBugListener is a helper class for implementing QUIC_BUG. The QUIC_BUG +// implementation can send the bug information into quic::CurrentBugListener(). +class QUIC_EXPORT_PRIVATE QuicBugListener { + public: + virtual ~QuicBugListener() = default; + virtual void OnQuicBug(const char* bug_id, const char* file, int line, + absl::string_view bug_message) = 0; +}; + // QuicConnectionContext is a per-QuicConnection context that includes // facilities useable by any part of a QuicConnection. A QuicConnectionContext // is owned by a QuicConnection. @@ -68,6 +77,7 @@ static QuicConnectionContext* Current(); std::unique_ptr<QuicConnectionTracer> tracer; + std::unique_ptr<QuicBugListener> bug_listener; }; // QuicConnectionContextSwitcher is a RAII object used for maintaining the @@ -113,6 +123,11 @@ } } +inline QuicBugListener* CurrentBugListener() { + QuicConnectionContext* current = QuicConnectionContext::Current(); + return (current != nullptr) ? current->bug_listener.get() : nullptr; +} + } // namespace quic #endif // QUICHE_QUIC_CORE_QUIC_CONNECTION_CONTEXT_H_