77 lines
3.0 KiB
C++
77 lines
3.0 KiB
C++
#ifndef ANDROID_PDX_CLIENT_CHANNEL_H_
|
|
#define ANDROID_PDX_CLIENT_CHANNEL_H_
|
|
|
|
#include <vector>
|
|
|
|
#include <pdx/channel_handle.h>
|
|
#include <pdx/channel_parcelable.h>
|
|
#include <pdx/file_handle.h>
|
|
#include <pdx/status.h>
|
|
|
|
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<int> 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<EventSource> 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<void> SendImpulse(int opcode, const void* buffer,
|
|
size_t length) = 0;
|
|
|
|
virtual Status<int> 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<LocalHandle> 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<LocalChannelHandle> 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<ChannelParcelable> TakeChannelParcelable() = 0;
|
|
};
|
|
|
|
} // namespace pdx
|
|
} // namespace android
|
|
|
|
#endif // ANDROID_PDX_CLIENT_CHANNEL_H_
|