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