1 #ifndef ANDROID_PDX_UDS_CHANNEL_EVENT_SET_H_ 2 #define ANDROID_PDX_UDS_CHANNEL_EVENT_SET_H_ 3 4 #include <vector> 5 6 #include <pdx/client_channel.h> 7 #include <pdx/file_handle.h> 8 #include <pdx/status.h> 9 10 namespace android { 11 namespace pdx { 12 namespace uds { 13 14 class ChannelEventSet { 15 public: 16 ChannelEventSet(); 17 ChannelEventSet(ChannelEventSet&&) = default; 18 ChannelEventSet& operator=(ChannelEventSet&&) = default; 19 pollin_event_fd()20 BorrowedHandle pollin_event_fd() const { return pollin_event_fd_.Borrow(); } pollhup_event_fd()21 BorrowedHandle pollhup_event_fd() const { return pollhup_event_fd_.Borrow(); } 22 23 explicit operator bool() const { 24 return !!pollin_event_fd_ && !!pollhup_event_fd_; 25 } 26 27 int ModifyEvents(int clear_mask, int set_mask); 28 29 private: 30 LocalHandle pollin_event_fd_; 31 LocalHandle pollhup_event_fd_; 32 uint32_t event_bits_ = 0; 33 34 ChannelEventSet(const ChannelEventSet&) = delete; 35 void operator=(const ChannelEventSet&) = delete; 36 }; 37 38 class ChannelEventReceiver { 39 public: 40 ChannelEventReceiver() = default; 41 ChannelEventReceiver(LocalHandle data_fd, LocalHandle pollin_event_fd, 42 LocalHandle pollhup_event_fd); 43 ChannelEventReceiver(ChannelEventReceiver&&) = default; 44 ChannelEventReceiver& operator=(ChannelEventReceiver&&) = default; 45 46 explicit operator bool() const { 47 return !!pollin_event_fd_ && !!pollhup_event_fd_ && !!data_fd_ && 48 !!epoll_fd_; 49 } 50 event_fd()51 BorrowedHandle event_fd() const { return epoll_fd_.Borrow(); } 52 pollin_event_fd()53 BorrowedHandle pollin_event_fd() const { return pollin_event_fd_.Borrow(); } pollhup_event_fd()54 BorrowedHandle pollhup_event_fd() const { return pollhup_event_fd_.Borrow(); } data_fd()55 BorrowedHandle data_fd() const { return data_fd_.Borrow(); } 56 57 Status<int> GetPendingEvents() const; 58 Status<int> PollPendingEvents(int timeout_ms) const; 59 60 std::vector<ClientChannel::EventSource> GetEventSources() const; 61 62 private: 63 LocalHandle data_fd_; 64 LocalHandle pollin_event_fd_; 65 LocalHandle pollhup_event_fd_; 66 LocalHandle epoll_fd_; 67 68 ChannelEventReceiver(const ChannelEventReceiver&) = delete; 69 void operator=(const ChannelEventReceiver&) = delete; 70 }; 71 72 } // namespace uds 73 } // namespace pdx 74 } // namespace android 75 76 #endif // ANDROID_PDX_UDS_CHANNEL_EVENT_SET_H_ 77