| #pragma once |
| |
| #include <atomic> |
| #include <string> |
| |
| #include "smbios.grpc.pb.h" |
| #include "smbios_file.h" |
| #include "grpcpp/server_context.h" |
| #include "grpcpp/support/status.h" |
| |
| namespace blobs { |
| |
| constexpr auto objectPrefix = "/xyz/openbmc_project/grpcblobs/system"; |
| |
| class SmbiosTransferServiceImpl final |
| : public phosphor::smbios::grpc_gen::SmbiosTransferService::Service { |
| public: |
| explicit SmbiosTransferServiceImpl(int instanceNumber, |
| const std::string& basePath) |
| : phosphor::smbios::grpc_gen::SmbiosTransferService::Service(), |
| instance(instanceNumber), |
| basePath_(basePath), |
| smbiosAppPidFile_(basePath + "/var/run/smbiosmdrv2app.pid") {} |
| |
| grpc::Status SmbiosTransfer( |
| grpc::ServerContext* context, |
| const phosphor::smbios::SmbiosTransferRequest* request, |
| [[maybe_unused]] phosphor::smbios::SmbiosTransferResponse* response); |
| |
| bool acceptEntry(const SmbiosEntry& entry, bool isWrite); |
| |
| protected: |
| [[nodiscard]] bool claimLinkBusy(); |
| void writeThenStart(const SmbiosEntry& entry, bool isWrite); |
| void sendSignalToSmbiosApp(); |
| |
| private: |
| int instance; |
| std::atomic_flag linkBusy; |
| std::string basePath_; |
| std::string smbiosAppPidFile_; |
| }; |
| |
| } // namespace blobs |