1ded66d0fSJason Ling #pragma once
2ded66d0fSJason Ling 
3ded66d0fSJason Ling #include "data_handler.hpp"
4ded66d0fSJason Ling 
5ded66d0fSJason Ling #include <unistd.h>
6ded66d0fSJason Ling 
7ded66d0fSJason Ling #include <stdplus/handle/managed.hpp>
8ded66d0fSJason Ling 
9ded66d0fSJason Ling #include <cstdint>
10ded66d0fSJason Ling #include <optional>
11ded66d0fSJason Ling #include <vector>
12ded66d0fSJason Ling 
13ded66d0fSJason Ling namespace ipmi_flash
14ded66d0fSJason Ling {
15ded66d0fSJason Ling 
16ded66d0fSJason Ling /**
17ded66d0fSJason Ling  * Data Handler for receiving the image over a network port
18ded66d0fSJason Ling  */
19ded66d0fSJason Ling class NetDataHandler : public DataInterface
20ded66d0fSJason Ling {
21ded66d0fSJason Ling   public:
NetDataHandler()22*1038836cSPatrick Williams     NetDataHandler() : listenFd(std::nullopt), connFd(std::nullopt) {}
23ded66d0fSJason Ling 
24ded66d0fSJason Ling     bool open() override;
25ded66d0fSJason Ling     bool close() override;
26ded66d0fSJason Ling     std::vector<std::uint8_t> copyFrom(std::uint32_t length) override;
27ded66d0fSJason Ling     bool writeMeta(const std::vector<std::uint8_t>& configuration) override;
28ded66d0fSJason Ling     std::vector<std::uint8_t> readMeta() override;
29ded66d0fSJason Ling 
30ded66d0fSJason Ling     static constexpr std::uint16_t listenPort = 623;
31ded66d0fSJason Ling     static constexpr int timeoutS = 5;
32ded66d0fSJason Ling 
33ded66d0fSJason Ling   private:
closefd(int && fd)34ded66d0fSJason Ling     static void closefd(int&& fd)
35ded66d0fSJason Ling     {
36ded66d0fSJason Ling         ::close(fd);
37ded66d0fSJason Ling     }
38ded66d0fSJason Ling     using Fd = stdplus::Managed<int>::Handle<closefd>;
39ded66d0fSJason Ling 
40ded66d0fSJason Ling     Fd listenFd;
41ded66d0fSJason Ling     Fd connFd;
42ded66d0fSJason Ling };
43ded66d0fSJason Ling 
44ded66d0fSJason Ling } // namespace ipmi_flash
45