| #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; |
| } |
| |
| ssize_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 |