1059e2335SDeepak Kodihalli #pragma once 2059e2335SDeepak Kodihalli 3059e2335SDeepak Kodihalli #include <systemd/sd-event.h> 4059e2335SDeepak Kodihalli 5b0ce996aSGunnar Mills #include <functional> 6*9155b713SAndrew Geissler #include <string> 7b0ce996aSGunnar Mills 8059e2335SDeepak Kodihalli namespace phosphor 9059e2335SDeepak Kodihalli { 10059e2335SDeepak Kodihalli namespace software 11059e2335SDeepak Kodihalli { 12059e2335SDeepak Kodihalli namespace manager 13059e2335SDeepak Kodihalli { 14059e2335SDeepak Kodihalli 15059e2335SDeepak Kodihalli /** @class Watch 16059e2335SDeepak Kodihalli * 17059e2335SDeepak Kodihalli * @brief Adds inotify watch on software image upload directory 18059e2335SDeepak Kodihalli * 19059e2335SDeepak Kodihalli * The inotify watch is hooked up with sd-event, so that on call back, 20059e2335SDeepak Kodihalli * appropriate actions related to a software image upload can be taken. 21059e2335SDeepak Kodihalli */ 22059e2335SDeepak Kodihalli class Watch 23059e2335SDeepak Kodihalli { 24059e2335SDeepak Kodihalli public: 25059e2335SDeepak Kodihalli /** @brief ctor - hook inotify watch with sd-event 26059e2335SDeepak Kodihalli * 27059e2335SDeepak Kodihalli * @param[in] loop - sd-event object 283027bba9SGunnar Mills * @param[in] imageCallback - The callback function for processing 293027bba9SGunnar Mills * the image 30059e2335SDeepak Kodihalli */ 312285fe0fSAdriana Kobylak Watch(sd_event* loop, std::function<int(std::string&)> imageCallback); 32059e2335SDeepak Kodihalli 33059e2335SDeepak Kodihalli Watch(const Watch&) = delete; 34059e2335SDeepak Kodihalli Watch& operator=(const Watch&) = delete; 359953e69bSGunnar Mills Watch(Watch&&) = delete; 369953e69bSGunnar Mills Watch& operator=(Watch&&) = delete; 37059e2335SDeepak Kodihalli 38059e2335SDeepak Kodihalli /** @brief dtor - remove inotify watch and close fd's 39059e2335SDeepak Kodihalli */ 40059e2335SDeepak Kodihalli ~Watch(); 41059e2335SDeepak Kodihalli 42059e2335SDeepak Kodihalli private: 43059e2335SDeepak Kodihalli /** @brief sd-event callback 44059e2335SDeepak Kodihalli * 45059e2335SDeepak Kodihalli * @param[in] s - event source, floating (unused) in our case 46059e2335SDeepak Kodihalli * @param[in] fd - inotify fd 47059e2335SDeepak Kodihalli * @param[in] revents - events that matched for fd 48059e2335SDeepak Kodihalli * @param[in] userdata - pointer to Watch object 49059e2335SDeepak Kodihalli * @returns 0 on success, -1 on fail 50059e2335SDeepak Kodihalli */ 512285fe0fSAdriana Kobylak static int callback(sd_event_source* s, int fd, uint32_t revents, 52059e2335SDeepak Kodihalli void* userdata); 53059e2335SDeepak Kodihalli 54059e2335SDeepak Kodihalli /** @brief image upload directory watch descriptor */ 55059e2335SDeepak Kodihalli int wd = -1; 56059e2335SDeepak Kodihalli 57059e2335SDeepak Kodihalli /** @brief inotify file descriptor */ 58059e2335SDeepak Kodihalli int fd = -1; 593027bba9SGunnar Mills 603027bba9SGunnar Mills /** @brief The callback function for processing the image. */ 613027bba9SGunnar Mills std::function<int(std::string&)> imageCallback; 62059e2335SDeepak Kodihalli }; 63059e2335SDeepak Kodihalli 64059e2335SDeepak Kodihalli } // namespace manager 65059e2335SDeepak Kodihalli } // namespace software 66059e2335SDeepak Kodihalli } // namespace phosphor 67