| #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); |
| } |
| |
| ChannelManager::ChannelData* ChannelManager::GetChannelData(int32_t handle) { |
| std::lock_guard<std::mutex> autolock(mutex_); |
| auto channel = channels_.find(handle); |
| return channel != channels_.end() ? &channel->second : nullptr; |
| } |
| |
| } // namespace uds |
| } // namespace pdx |
| } // namespace android |