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