blob: bf1e01b160a56dc2e54db06c1083bde375ab584d [file] [log] [blame]
#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:
NgHttp2Session(Perspective perspective,
nghttp2_session_callbacks* 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_