binder.h
Go to the documentation of this file.
1 // Copyright 2021 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef GRPC_CORE_EXT_TRANSPORT_BINDER_WIRE_FORMAT_BINDER_H
16 #define GRPC_CORE_EXT_TRANSPORT_BINDER_WIRE_FORMAT_BINDER_H
17 
19 
20 #include <cstdint>
21 #include <functional>
22 #include <memory>
23 #include <string>
24 
25 #include "absl/status/status.h"
26 #include "absl/strings/string_view.h"
27 
30 
31 namespace grpc_binder {
32 
33 class HasRawBinder {
34  public:
35  virtual ~HasRawBinder() = default;
36  virtual void* GetRawBinder() = 0;
37 };
38 
39 class Binder;
40 
41 // TODO(waynetu): We might need other methods as well.
42 // TODO(waynetu): Find a better way to express the returned status than
43 // binder_status_t.
45  public:
46  virtual ~WritableParcel() = default;
47  virtual int32_t GetDataSize() const = 0;
48  virtual absl::Status WriteInt32(int32_t data) = 0;
49  virtual absl::Status WriteInt64(int64_t data) = 0;
50  virtual absl::Status WriteBinder(HasRawBinder* binder) = 0;
53 
56  if (!status.ok()) return status;
57  if (buffer.empty()) return absl::OkStatus();
58  return WriteByteArray(reinterpret_cast<const int8_t*>(buffer.data()),
59  buffer.length());
60  }
61 };
62 
63 // TODO(waynetu): We might need other methods as well.
64 // TODO(waynetu): Find a better way to express the returned status than
65 // binder_status_t.
67  public:
68  virtual ~ReadableParcel() = default;
69  virtual int32_t GetDataSize() const = 0;
70  virtual absl::Status ReadInt32(int32_t* data) = 0;
71  virtual absl::Status ReadInt64(int64_t* data) = 0;
72  virtual absl::Status ReadBinder(std::unique_ptr<Binder>* data) = 0;
74  virtual absl::Status ReadString(std::string* str) = 0;
75 };
76 
78  public:
79  using OnTransactCb =
81 
82  ~TransactionReceiver() override = default;
83 };
84 
85 class WireReader;
86 
87 class Binder : public HasRawBinder {
88  public:
89  ~Binder() override = default;
90 
91  virtual void Initialize() = 0;
92  virtual absl::Status PrepareTransaction() = 0;
94 
95  virtual WritableParcel* GetWritableParcel() const = 0;
96 
97  // TODO(waynetu): Can we decouple the receiver from the binder?
98  virtual std::unique_ptr<TransactionReceiver> ConstructTxReceiver(
100  TransactionReceiver::OnTransactCb transact_cb) const = 0;
101 };
102 
103 } // namespace grpc_binder
104 
105 #endif // GRPC_CORE_EXT_TRANSPORT_BINDER_WIRE_FORMAT_BINDER_H
xds_interop_client.str
str
Definition: xds_interop_client.py:487
grpc_binder::Binder::ConstructTxReceiver
virtual std::unique_ptr< TransactionReceiver > ConstructTxReceiver(grpc_core::RefCountedPtr< WireReader > wire_reader_ref, TransactionReceiver::OnTransactCb transact_cb) const =0
orphanable.h
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
grpc_binder
Definition: connection_id_generator.cc:45
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
transaction_code_t
uint32_t transaction_code_t
Definition: binder_constants.h:24
absl::OkStatus
Status OkStatus()
Definition: third_party/abseil-cpp/absl/status/status.h:882
binder_constants.h
status
absl::Status status
Definition: rls.cc:251
grpc_binder::HasRawBinder::~HasRawBinder
virtual ~HasRawBinder()=default
grpc_binder::WritableParcel::WriteString
virtual absl::Status WriteString(absl::string_view s)=0
grpc_binder::TransactionReceiver::~TransactionReceiver
~TransactionReceiver() override=default
tx_code
int tx_code
Definition: fake_binder_test.cc:241
grpc_binder::BinderTransportTxCode
BinderTransportTxCode
Definition: binder_constants.h:31
grpc_binder::TransactionReceiver
Definition: binder.h:77
grpc_core::RefCountedPtr
Definition: ref_counted_ptr.h:35
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
grpc_binder::WireReader
Definition: wire_reader.h:29
grpc_binder::ReadableParcel::ReadBinder
virtual absl::Status ReadBinder(std::unique_ptr< Binder > *data)=0
grpc_binder::ReadableParcel::GetDataSize
virtual int32_t GetDataSize() const =0
grpc_binder::WritableParcel::GetDataSize
virtual int32_t GetDataSize() const =0
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
buffer
char buffer[1024]
Definition: libuv/docs/code/idle-compute/main.c:8
grpc_binder::Binder::GetWritableParcel
virtual WritableParcel * GetWritableParcel() const =0
grpc_binder::ReadableParcel::~ReadableParcel
virtual ~ReadableParcel()=default
grpc_binder::WritableParcel
Definition: binder.h:44
grpc_binder::ReadableParcel::ReadByteArray
virtual absl::Status ReadByteArray(std::string *data)=0
absl::Status
ABSL_NAMESPACE_BEGIN class ABSL_MUST_USE_RESULT Status
Definition: abseil-cpp/absl/status/internal/status_internal.h:36
grpc_binder::TransactionReceiver::OnTransactCb
std::function< absl::Status(transaction_code_t, ReadableParcel *, int uid)> OnTransactCb
Definition: binder.h:80
grpc_binder::WritableParcel::WriteInt32
virtual absl::Status WriteInt32(int32_t data)=0
grpc_binder::WritableParcel::WriteByteArrayWithLength
absl::Status WriteByteArrayWithLength(absl::string_view buffer)
Definition: binder.h:54
absl::Status
Definition: third_party/abseil-cpp/absl/status/status.h:424
grpc_binder::Binder::Initialize
virtual void Initialize()=0
grpc_binder::WritableParcel::WriteBinder
virtual absl::Status WriteBinder(HasRawBinder *binder)=0
grpc_binder::ReadableParcel::ReadString
virtual absl::Status ReadString(std::string *str)=0
absl::Status::ok
ABSL_MUST_USE_RESULT bool ok() const
Definition: third_party/abseil-cpp/absl/status/status.h:802
grpc_binder::ReadableParcel::ReadInt32
virtual absl::Status ReadInt32(int32_t *data)=0
grpc_binder::HasRawBinder::GetRawBinder
virtual void * GetRawBinder()=0
grpc_binder::WritableParcel::WriteByteArray
virtual absl::Status WriteByteArray(const int8_t *buffer, int32_t length)=0
grpc_binder::HasRawBinder
Definition: binder.h:33
grpc_binder::ReadableParcel::ReadInt64
virtual absl::Status ReadInt64(int64_t *data)=0
int8_t
signed char int8_t
Definition: stdint-msvc2008.h:75
grpc_binder::Binder::~Binder
~Binder() override=default
grpc_binder::ReadableParcel
Definition: binder.h:66
grpc_binder::Binder
Definition: binder.h:87
function
std::function< bool(GrpcTool *, int, const char **, const CliCredentials &, GrpcToolOutputCallback)> function
Definition: grpc_tool.cc:250
length
std::size_t length
Definition: abseil-cpp/absl/time/internal/test_util.cc:57
int32_t
signed int int32_t
Definition: stdint-msvc2008.h:77
grpc_binder::Binder::Transact
virtual absl::Status Transact(BinderTransportTxCode tx_code)=0
grpc_binder::Binder::PrepareTransaction
virtual absl::Status PrepareTransaction()=0
grpc_binder::WritableParcel::~WritableParcel
virtual ~WritableParcel()=default
port_platform.h
grpc_binder::WritableParcel::WriteInt64
virtual absl::Status WriteInt64(int64_t data)=0


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:38