// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SMBFS_FUSE_SESSION_H_
#define SMBFS_FUSE_SESSION_H_

#include <fuse_lowlevel.h>

#include <memory>
#include <vector>

#include <base/callback.h>
#include <base/files/file_descriptor_watcher_posix.h>
#include <base/sequence_checker.h>

namespace smbfs {

class Filesystem;

class FuseSession {
 public:
  FuseSession(std::unique_ptr<Filesystem> fs, fuse_chan* chan);
  FuseSession(const FuseSession&) = delete;
  FuseSession& operator=(const FuseSession&) = delete;

  ~FuseSession();

  // Start processing FUSE requests. |stop_callback| is run if the filesystem is
  // disconnected by the kernel.
  bool Start(base::OnceClosure stop_callback);

 private:
  class Impl;

  // Callback for channel FD read watcher.
  void OnChannelReadable();

  // Stops processing FUSE requests and runs the |stop_callback_| provided by
  // Start(). May be be called multiple times, but will only run
  // |stop_callback_| on the first call.
  void RequestStop();

  std::unique_ptr<Impl> impl_;
  fuse_chan* const chan_;
  fuse_session* session_ = nullptr;
  std::unique_ptr<base::FileDescriptorWatcher::Controller> read_watcher_;
  base::OnceClosure stop_callback_;

  // Buffer used for reading and processing fuse requests.
  std::vector<char> read_buffer_;

  base::SequenceChecker sequence_checker_;
};

}  // namespace smbfs

#endif  // SMBFS_FUSE_SESSION_H_
