blob: 387625cde604e6b4d425dfe35ee9c307023a1a16 [file] [log] [blame]
#include <uds/channel_manager.h>
#include <log/log.h>
namespace android {
namespace pdx {
namespace uds {
ChannelManager& ChannelManager::Get() {
static ChannelManager instance;
return instance;
}
void ChannelManager::CloseHandle(int32_t handle) {
std::lock_guard<std::mutex> autolock(mutex_);
auto channel = channels_.find(handle);
if (channel == channels_.end()) {
ALOGE("Invalid channel handle: %d", handle);
} else {
channels_.erase(channel);
}
}
LocalChannelHandle ChannelManager::CreateHandle(LocalHandle data_fd,
LocalHandle event_fd) {
if (data_fd && event_fd) {
std::lock_guard<std::mutex> autolock(mutex_);
int32_t handle = data_fd.Get();
channels_.emplace(handle,
ChannelData{std::move(data_fd), std::move(event_fd)});
return LocalChannelHandle(this, handle);
}
return LocalChannelHandle(nullptr, -1);
}
int ChannelManager::GetEventFd(int32_t handle) {
std::lock_guard<std::mutex> autolock(mutex_);
auto channel = channels_.find(handle);
return channel != channels_.end() ? channel->second.event_fd.Get() : -1;
};
} // namespace uds
} // namespace pdx
} // namespace android