Go to the documentation of this file.
19 #ifndef GRPC_NO_BINDER
27 #include "absl/memory/memory.h"
28 #include "absl/status/statusor.h"
36 #define RETURN_IF_ERROR(expr) \
38 const absl::Status status = (expr); \
39 if (!status.ok()) return status; \
45 const int32_t kWireFormatVersion = 1;
46 const char kAuthorityMetadataKey[] =
":authority";
55 std::vector<std::pair<std::string, std::string>>
ret;
56 for (
int i = 0;
i < num_header;
i++) {
76 std::shared_ptr<TransportStreamReceiver> transport_stream_receiver,
78 std::shared_ptr<grpc::experimental::binder::SecurityPolicy> security_policy,
83 on_destruct_callback_(on_destruct_callback) {
94 std::unique_ptr<Binder> binder) {
111 std::make_shared<WireWriterImpl>(
std::move(other_end_binder));
168 "Received unknown control message. Shutdown transport gracefully.");
187 if (recvd_setup_transport_) {
189 "Already received a SETUP_TRANSPORT request");
191 recvd_setup_transport_ =
true;
197 " is not allowed to connect to this "
198 "transport according to security policy.");
206 if (
version != kWireFormatVersion) {
208 "The other end respond with version = %d, but we requested "
209 "version %d, trying to continue anyway",
212 std::unique_ptr<Binder> binder{};
217 binder->Initialize();
224 "Received SHUTDOWN_TRANSPORT request but not implemented yet.");
256 bool need_to_send_ack =
false;
269 int cancellation_flags = 0;
272 if (!tx_process_result.
ok()) {
274 tx_process_result.
ToString().c_str());
280 code, tx_process_result);
289 code, tx_process_result, 0);
292 if ((num_incoming_bytes_ - num_acknowledged_bytes_) >=
294 need_to_send_ack =
true;
295 num_bytes = num_incoming_bytes_;
296 num_acknowledged_bytes_ = num_incoming_bytes_;
299 if (need_to_send_ack) {
308 if (tx_process_result.
ok()) {
312 return tx_process_result;
319 gpr_log(
GPR_INFO,
"Total incoming bytes: %" PRId64, num_incoming_bytes_);
324 *cancellation_flags =
flags;
356 "Sequence number too large");
365 if (!initial_metadata_or_error.
ok()) {
366 return initial_metadata_or_error.
status();
372 initial_metadata_or_error->emplace_back(
":path",
378 bool has_authority =
false;
379 for (
const auto& p : *initial_metadata_or_error) {
380 if (p.first == kAuthorityMetadataKey) has_authority =
true;
382 if (!has_authority) {
383 initial_metadata_or_error->emplace_back(kAuthorityMetadataKey,
388 code, *initial_metadata_or_error);
400 message_buffer_[
code] += msg_data;
403 message_buffer_.erase(
code);
418 parse_metadata(parcel);
419 if (!trailing_metadata_or_error.
ok()) {
420 return trailing_metadata_or_error.
status();
Status InvalidArgumentError(absl::string_view message)
virtual std::unique_ptr< TransactionReceiver > ConstructTxReceiver(grpc_core::RefCountedPtr< WireReader > wire_reader_ref, TransactionReceiver::OnTransactCb transact_cb) const =0
absl::Status ProcessStreamingTransaction(transaction_code_t code, ReadableParcel *parcel)
std::string ToString(StatusToStringMode mode=StatusToStringMode::kDefault) const
std::unique_ptr< Binder > other_end_binder_
uint32_t transaction_code_t
const int kFlagMessageDataIsPartial
Status InternalError(absl::string_view message)
Status PermissionDeniedError(absl::string_view message)
std::shared_ptr< grpc::experimental::binder::SecurityPolicy > security_policy_
const int kFlagStatusDescription
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
std::shared_ptr< TransportStreamReceiver > transport_stream_receiver_
absl::Notification connection_noti_
Status FailedPreconditionError(absl::string_view message)
std::shared_ptr< StrictMock< MockTransportStreamReceiver > > transport_stream_receiver_
std::function< void()> on_destruct_callback_
RefCountedPtr< WireReader > Ref() GRPC_MUST_USE_RESULT
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
std::unique_ptr< TransactionReceiver > tx_receiver_
virtual absl::Status ReadBinder(std::unique_ptr< Binder > *data)=0
virtual int32_t GetDataSize() const =0
virtual WritableParcel * GetWritableParcel() const =0
std::shared_ptr< WireWriter > wire_writer_
virtual absl::Status ReadByteArray(std::string *data)=0
std::shared_ptr< grpc::experimental::binder::SecurityPolicy > security_policy_
#define RETURN_IF_ERROR(expr)
absl::Status ProcessStreamingTransactionImpl(transaction_code_t code, ReadableParcel *parcel, int *cancellation_flags) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_)
~WireReaderImpl() override
std::unique_ptr< Binder > RecvSetupTransport()
ABSL_MUST_USE_RESULT bool ok() const
virtual absl::Status WriteInt32(int32_t data)=0
absl::Status ProcessTransaction(transaction_code_t code, ReadableParcel *parcel, int uid)
UniquePtr< SSL_SESSION > ret
virtual void Initialize()=0
virtual absl::Status WriteBinder(HasRawBinder *binder)=0
const int kFlagMessageData
static constexpr int64_t kFlowControlAckBytes
virtual absl::Status ReadString(std::string *str)=0
ABSL_MUST_USE_RESULT bool ok() const
virtual absl::Status ReadInt32(int32_t *data)=0
Status UnimplementedError(absl::string_view message)
virtual absl::Status ReadInt64(int64_t *data)=0
std::vector< std::pair< std::string, std::string > > Metadata
std::shared_ptr< WireWriter > SetupTransport(std::unique_ptr< Binder > binder) override
static bool to_string(zval *from)
void SendSetupTransport(Binder *binder)
virtual absl::Status Transact(BinderTransportTxCode tx_code)=0
WireReaderImpl(std::shared_ptr< TransportStreamReceiver > transport_stream_receiver, bool is_client, std::shared_ptr< grpc::experimental::binder::SecurityPolicy > security_policy, std::function< void()> on_destruct_callback=nullptr)
virtual absl::Status PrepareTransaction()=0
struct expectation expectation
const Status & status() const &
void WaitForNotification() const
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:52