16890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka#ifndef ANDROID_PDX_UDS_CHANNEL_EVENT_SET_H_ 26890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka#define ANDROID_PDX_UDS_CHANNEL_EVENT_SET_H_ 36890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 452ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka#include <vector> 56890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 652ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka#include <pdx/client_channel.h> 76890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka#include <pdx/file_handle.h> 86890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka#include <pdx/status.h> 96890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 106890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabakanamespace android { 116890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabakanamespace pdx { 126890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabakanamespace uds { 136890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 146890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabakaclass ChannelEventSet { 156890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka public: 166890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka ChannelEventSet(); 176890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka ChannelEventSet(ChannelEventSet&&) = default; 186890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka ChannelEventSet& operator=(ChannelEventSet&&) = default; 196890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 2052ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka BorrowedHandle pollin_event_fd() const { return pollin_event_fd_.Borrow(); } 2152ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka BorrowedHandle pollhup_event_fd() const { return pollhup_event_fd_.Borrow(); } 226890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 2352ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka explicit operator bool() const { 2452ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka return !!pollin_event_fd_ && !!pollhup_event_fd_; 2552ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka } 266890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 276890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka int ModifyEvents(int clear_mask, int set_mask); 286890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 296890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka private: 3052ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka LocalHandle pollin_event_fd_; 3152ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka LocalHandle pollhup_event_fd_; 326890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka uint32_t event_bits_ = 0; 336890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 346890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka ChannelEventSet(const ChannelEventSet&) = delete; 356890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka void operator=(const ChannelEventSet&) = delete; 366890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka}; 376890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 386890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabakaclass ChannelEventReceiver { 396890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka public: 406890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka ChannelEventReceiver() = default; 4152ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka ChannelEventReceiver(LocalHandle data_fd, LocalHandle pollin_event_fd, 4252ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka LocalHandle pollhup_event_fd); 436890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka ChannelEventReceiver(ChannelEventReceiver&&) = default; 446890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka ChannelEventReceiver& operator=(ChannelEventReceiver&&) = default; 456890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 4652ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka explicit operator bool() const { 4752ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka return !!pollin_event_fd_ && !!pollhup_event_fd_ && !!data_fd_ && 4852ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka !!epoll_fd_; 4952ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka } 5052ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka 516890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka BorrowedHandle event_fd() const { return epoll_fd_.Borrow(); } 5252ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka 5352ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka BorrowedHandle pollin_event_fd() const { return pollin_event_fd_.Borrow(); } 5452ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka BorrowedHandle pollhup_event_fd() const { return pollhup_event_fd_.Borrow(); } 5552ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka BorrowedHandle data_fd() const { return data_fd_.Borrow(); } 5652ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka 576890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka Status<int> GetPendingEvents() const; 5852ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka Status<int> PollPendingEvents(int timeout_ms) const; 5952ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka 6052ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka std::vector<ClientChannel::EventSource> GetEventSources() const; 616890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 626890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka private: 6352ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka LocalHandle data_fd_; 6452ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka LocalHandle pollin_event_fd_; 6552ea25cf06cef250ec73052611b48556b3fce4d5Corey Tabaka LocalHandle pollhup_event_fd_; 666890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka LocalHandle epoll_fd_; 676890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 686890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka ChannelEventReceiver(const ChannelEventReceiver&) = delete; 696890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka void operator=(const ChannelEventReceiver&) = delete; 706890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka}; 716890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 726890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka} // namespace uds 736890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka} // namespace pdx 746890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka} // namespace android 756890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka 766890d95ec8b96970202518b439bfa8ab2d9dbf77Corey Tabaka#endif // ANDROID_PDX_UDS_CHANNEL_EVENT_SET_H_ 77