| #include "http2/adapter/nghttp2_session.h" | 
 |  | 
 | #include "common/platform/api/quiche_logging.h" | 
 |  | 
 | namespace http2 { | 
 | namespace adapter { | 
 |  | 
 | NgHttp2Session::NgHttp2Session(Perspective perspective, | 
 |                                nghttp2_session_callbacks_unique_ptr callbacks, | 
 |                                const nghttp2_option* options, void* userdata) | 
 |     : session_(MakeSessionPtr(nullptr)), perspective_(perspective) { | 
 |   nghttp2_session* session; | 
 |   switch (perspective_) { | 
 |     case Perspective::kClient: | 
 |       nghttp2_session_client_new2(&session, callbacks.get(), userdata, options); | 
 |       break; | 
 |     case Perspective::kServer: | 
 |       nghttp2_session_server_new2(&session, callbacks.get(), userdata, options); | 
 |       break; | 
 |   } | 
 |   session_ = MakeSessionPtr(session); | 
 | } | 
 |  | 
 | NgHttp2Session::~NgHttp2Session() { | 
 |   // Can't invoke want_read() or want_write(), as they are virtual methods. | 
 |   const bool pending_reads = nghttp2_session_want_read(session_.get()) != 0; | 
 |   const bool pending_writes = nghttp2_session_want_write(session_.get()) != 0; | 
 |   QUICHE_LOG_IF(WARNING, pending_reads || pending_writes) | 
 |       << "Shutting down connection with pending reads: " << pending_reads | 
 |       << " or pending writes: " << pending_writes; | 
 | } | 
 |  | 
 | int64_t NgHttp2Session::ProcessBytes(absl::string_view bytes) { | 
 |   return nghttp2_session_mem_recv( | 
 |       session_.get(), reinterpret_cast<const uint8_t*>(bytes.data()), | 
 |       bytes.size()); | 
 | } | 
 |  | 
 | int NgHttp2Session::Consume(Http2StreamId stream_id, size_t num_bytes) { | 
 |   return nghttp2_session_consume(session_.get(), stream_id, num_bytes); | 
 | } | 
 |  | 
 | bool NgHttp2Session::want_read() const { | 
 |   return nghttp2_session_want_read(session_.get()) != 0; | 
 | } | 
 |  | 
 | bool NgHttp2Session::want_write() const { | 
 |   return nghttp2_session_want_write(session_.get()) != 0; | 
 | } | 
 |  | 
 | int NgHttp2Session::GetRemoteWindowSize() const { | 
 |   return nghttp2_session_get_remote_window_size(session_.get()); | 
 | } | 
 |  | 
 | }  // namespace adapter | 
 | }  // namespace http2 |