Home | History | Annotate | Download | only in libpdx_uds
      1 #include <uds/channel_manager.h>
      2 
      3 #include <log/log.h>
      4 
      5 namespace android {
      6 namespace pdx {
      7 namespace uds {
      8 
      9 ChannelManager& ChannelManager::Get() {
     10   static ChannelManager instance;
     11   return instance;
     12 }
     13 
     14 void ChannelManager::CloseHandle(int32_t handle) {
     15   std::lock_guard<std::mutex> autolock(mutex_);
     16   auto channel = channels_.find(handle);
     17   if (channel == channels_.end()) {
     18     ALOGE("Invalid channel handle: %d", handle);
     19   } else {
     20     channels_.erase(channel);
     21   }
     22 }
     23 
     24 LocalChannelHandle ChannelManager::CreateHandle(LocalHandle data_fd,
     25                                                 LocalHandle pollin_event_fd,
     26                                                 LocalHandle pollhup_event_fd) {
     27   if (data_fd && pollin_event_fd && pollhup_event_fd) {
     28     std::lock_guard<std::mutex> autolock(mutex_);
     29     const int32_t handle = data_fd.Get();
     30     channels_.emplace(
     31         handle,
     32         ChannelEventReceiver{std::move(data_fd), std::move(pollin_event_fd),
     33                              std::move(pollhup_event_fd)});
     34     return LocalChannelHandle(this, handle);
     35   } else {
     36     ALOGE(
     37         "ChannelManager::CreateHandle: Invalid arguments: data_fd=%d "
     38         "pollin_event_fd=%d pollhup_event_fd=%d",
     39         data_fd.Get(), pollin_event_fd.Get(), pollhup_event_fd.Get());
     40     return LocalChannelHandle(nullptr, -1);
     41   }
     42 }
     43 
     44 ChannelEventReceiver* ChannelManager::GetChannelData(int32_t handle) {
     45   std::lock_guard<std::mutex> autolock(mutex_);
     46   auto channel = channels_.find(handle);
     47   return channel != channels_.end() ? &channel->second : nullptr;
     48 }
     49 
     50 }  // namespace uds
     51 }  // namespace pdx
     52 }  // namespace android
     53