blob: bf31f40843d10711491123f52bd10b55c5a665fb [file] [log] [blame]
Patrick Venture64919ec2018-11-15 11:52:07 -08001#pragma once
2
3#include "image_handler.hpp"
4
5#include <cstdint>
6#include <fstream>
7#include <memory>
8#include <string>
9#include <vector>
10
Patrick Venture1d5a31c2019-05-20 11:38:22 -070011namespace ipmi_flash
Patrick Venture64919ec2018-11-15 11:52:07 -080012{
13
14class FileHandler : public ImageHandlerInterface
15{
16 public:
17 /**
18 * Create a FileHandler. This object is basically a filewriter.
19 *
20 * @param[in] filename - file to use for the contents, fully
21 * qualified file system path.
22 */
23 explicit FileHandler(const std::string& filename) : filename(filename)
Patrick Venture9b37b092020-05-28 20:58:57 -070024 {}
Patrick Venture64919ec2018-11-15 11:52:07 -080025
Jason Ling56a22732020-10-23 19:53:17 -070026 bool open(const std::string& path,
27 std::ios_base::openmode mode = std::ios::out) override;
Patrick Venture64919ec2018-11-15 11:52:07 -080028 void close() override;
29 bool write(std::uint32_t offset,
30 const std::vector<std::uint8_t>& data) override;
Jason Ling56a22732020-10-23 19:53:17 -070031 virtual std::optional<std::vector<uint8_t>>
32 read(std::uint32_t offset, std::uint32_t size) override;
Patrick Venturecc7d1602018-11-15 13:58:33 -080033 int getSize() override;
Patrick Venture64919ec2018-11-15 11:52:07 -080034
35 private:
36 /** the active hash path, ignore. */
37 std::string path;
38
39 /** The file handle. */
Jason Ling56a22732020-10-23 19:53:17 -070040 std::fstream file;
Patrick Venture64919ec2018-11-15 11:52:07 -080041
42 /** The filename (including path) to use to write bytes. */
43 std::string filename;
44};
45
Patrick Venture1d5a31c2019-05-20 11:38:22 -070046} // namespace ipmi_flash