• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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