summaryrefslogtreecommitdiff
path: root/chromium/net/third_party/quiche/src/http2/adapter/nghttp2_session.h
blob: d446a07c75b3bcaa90816e17f48ee06c6d0145b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef QUICHE_HTTP2_ADAPTER_NGHTTP2_SESSION_H_
#define QUICHE_HTTP2_ADAPTER_NGHTTP2_SESSION_H_

#include "http2/adapter/http2_session.h"
#include "http2/adapter/nghttp2_util.h"
#include "third_party/nghttp2/src/lib/includes/nghttp2/nghttp2.h"

namespace http2 {
namespace adapter {

// A C++ wrapper around common nghttp2_session operations.
class NgHttp2Session : public Http2Session {
 public:
  // Takes ownership of |options|.
  NgHttp2Session(Perspective perspective,
                 nghttp2_session_callbacks_unique_ptr callbacks,
                 nghttp2_option* options,
                 void* userdata);
  ~NgHttp2Session() override;

  ssize_t ProcessBytes(absl::string_view bytes) override;

  int Consume(Http2StreamId stream_id, size_t num_bytes) override;

  bool want_read() const override;
  bool want_write() const override;
  int GetRemoteWindowSize() const override;

  nghttp2_session* raw_ptr() const { return session_.get(); }

 private:
  using OptionsDeleter = void (&)(nghttp2_option*);

  nghttp2_session_unique_ptr session_;
  std::unique_ptr<nghttp2_option, OptionsDeleter> options_;
  Perspective perspective_;
};

}  // namespace adapter
}  // namespace http2

#endif  // QUICHE_HTTP2_ADAPTER_NGHTTP2_SESSION_H_