#ifndef ANDROID_PDX_CLIENT_CHANNEL_H_ #define ANDROID_PDX_CLIENT_CHANNEL_H_ #include #include #include #include #include struct iovec; namespace android { namespace pdx { class ClientChannel { public: virtual ~ClientChannel() = default; // Returns a tag that uniquely identifies a specific underlying IPC transport. virtual uint32_t GetIpcTag() const = 0; virtual int event_fd() const = 0; virtual Status GetEventMask(int events) = 0; struct EventSource { int event_fd; int event_mask; }; // Returns a set of event-generating fds with and event mask for each. These // fds are owned by the ClientChannel and must never be closed by the caller. virtual std::vector GetEventSources() const = 0; virtual LocalChannelHandle& GetChannelHandle() = 0; virtual const LocalChannelHandle& GetChannelHandle() const = 0; virtual void* AllocateTransactionState() = 0; virtual void FreeTransactionState(void* state) = 0; virtual Status SendImpulse(int opcode, const void* buffer, size_t length) = 0; virtual Status SendWithInt(void* transaction_state, int opcode, const iovec* send_vector, size_t send_count, const iovec* receive_vector, size_t receive_count) = 0; virtual Status SendWithFileHandle( void* transaction_state, int opcode, const iovec* send_vector, size_t send_count, const iovec* receive_vector, size_t receive_count) = 0; virtual Status SendWithChannelHandle( void* transaction_state, int opcode, const iovec* send_vector, size_t send_count, const iovec* receive_vector, size_t receive_count) = 0; virtual FileReference PushFileHandle(void* transaction_state, const LocalHandle& handle) = 0; virtual FileReference PushFileHandle(void* transaction_state, const BorrowedHandle& handle) = 0; virtual ChannelReference PushChannelHandle( void* transaction_state, const LocalChannelHandle& handle) = 0; virtual ChannelReference PushChannelHandle( void* transaction_state, const BorrowedChannelHandle& handle) = 0; virtual bool GetFileHandle(void* transaction_state, FileReference ref, LocalHandle* handle) const = 0; virtual bool GetChannelHandle(void* transaction_state, ChannelReference ref, LocalChannelHandle* handle) const = 0; // Returns the internal state of the channel as a parcelable object. The // ClientChannel is invalidated however, the channel is kept alive by the // parcelable object and may be transferred to another process. virtual std::unique_ptr TakeChannelParcelable() = 0; }; } // namespace pdx } // namespace android #endif // ANDROID_PDX_CLIENT_CHANNEL_H_