| OLD | NEW |
| (Empty) |
| 1 {%- import "interface_macros.tmpl" as interface_macros -%} | |
| 2 {%- import "struct_macros.tmpl" as struct_macros -%} | |
| 3 | |
| 4 // NOTE: This file was generated by the Mojo bindings generator. | |
| 5 #if defined(__clang__) | |
| 6 #pragma clang diagnostic push | |
| 7 #pragma clang diagnostic ignored "-Wunused-private-field" | |
| 8 #endif | |
| 9 | |
| 10 #include "{{module.path}}-sync.h" | |
| 11 | |
| 12 #include <math.h> | |
| 13 #include <ostream> | |
| 14 #include <string> | |
| 15 #include <utility> | |
| 16 | |
| 17 #include "mojo/public/cpp/bindings/lib/array_serialization.h" | |
| 18 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h" | |
| 19 #include "mojo/public/cpp/bindings/lib/bounds_checker.h" | |
| 20 #include "mojo/public/cpp/bindings/lib/map_data_internal.h" | |
| 21 #include "mojo/public/cpp/bindings/lib/map_serialization.h" | |
| 22 #include "mojo/public/cpp/bindings/lib/message_builder.h" | |
| 23 #include "mojo/public/cpp/bindings/lib/message_validation.h" | |
| 24 #include "mojo/public/cpp/bindings/lib/string_serialization.h" | |
| 25 #include "mojo/public/cpp/bindings/lib/synchronous_connector.h" | |
| 26 #include "mojo/public/cpp/bindings/lib/validate_params.h" | |
| 27 #include "mojo/public/cpp/bindings/lib/validation_errors.h" | |
| 28 #include "mojo/public/cpp/bindings/lib/validation_util.h" | |
| 29 #include "mojo/public/cpp/bindings/message.h" | |
| 30 #include "mojo/public/cpp/bindings/message_validator.h" | |
| 31 #include "mojo/public/cpp/environment/logging.h" | |
| 32 #include "mojo/public/interfaces/bindings/interface_control_messages.mojom.h" | |
| 33 #include "{{module.path}}-internal.h" | |
| 34 #include "{{module.path}}-common.h" | |
| 35 | |
| 36 {%- for namespace in namespaces_as_array %} | |
| 37 namespace {{namespace}} { | |
| 38 {%- endfor %} | |
| 39 | |
| 40 // --- Interface definitions --- | |
| 41 {% for interface in interfaces %} | |
| 42 {%- set base_name = "internal::%s_Base"|format(interface.name) -%} | |
| 43 {{interface.name}}_SynchronousProxy::{{interface.name}}_SynchronousProxy( | |
| 44 mojo::internal::SynchronousConnector* connector, | |
| 45 mojo::internal::MessageValidatorList&& validators) | |
| 46 : connector_(connector), validators_(std::move(validators)) { | |
| 47 } | |
| 48 | |
| 49 {% for method in interface.methods %} | |
| 50 {%- set message_name = | |
| 51 "%s::MessageOrdinals::%s"|format(base_name, method.name) %} | |
| 52 {%- set params_struct = method.param_struct %} | |
| 53 {%- set params_description = | |
| 54 "%s.%s request"|format(interface.name, method.name) %} | |
| 55 bool {{interface.name}}_SynchronousProxy::{{method.name}}( | |
| 56 {{- interface_macros.declare_sync_request_params(method)}}) | |
| 57 {%- if method.response_parameters == None %} const {% endif %} { | |
| 58 {{struct_macros.get_serialized_size(params_struct, "in_%s")}} | |
| 59 | |
| 60 auto msg_name = static_cast<uint32_t>({{message_name}}); | |
| 61 {%- if method.response_parameters != None %} | |
| 62 mojo::RequestMessageBuilder builder(msg_name, size); | |
| 63 {%- else %} | |
| 64 mojo::MessageBuilder builder(msg_name, size); | |
| 65 {%- endif %} | |
| 66 | |
| 67 {{struct_macros.serialize(params_struct, | |
| 68 "{{interface.name}}::{{method.name}}", "in_%s", | |
| 69 "out_params", "builder.buffer()", false)}} | |
| 70 out_params->EncodePointersAndHandles(builder.message()->mutable_handles()); | |
| 71 | |
| 72 if (!connector_->Write(builder.message())) | |
| 73 return false; | |
| 74 | |
| 75 {%- if method.response_parameters != None %} | |
| 76 mojo::Message response_msg; | |
| 77 if (!connector_->BlockingRead(&response_msg)) | |
| 78 return false; | |
| 79 | |
| 80 // Validate the incoming message. | |
| 81 std::string response_err; | |
| 82 if (mojo::internal::RunValidatorsOnMessage(validators_, &response_msg, | |
| 83 &response_err) | |
| 84 != mojo::internal::ValidationError::NONE) { | |
| 85 MOJO_LOG(WARNING) << response_err; | |
| 86 return false; | |
| 87 } | |
| 88 | |
| 89 {#- TODO(vardhan): Add support for synchronous control messages. #} | |
| 90 if (mojo::internal::ControlMessageHandler::IsControlMessage(&response_msg)) { | |
| 91 MOJO_LOG(ERROR) << "Synchronous interface bindings currently don't support " | |
| 92 "interface control messages."; | |
| 93 return false; | |
| 94 } | |
| 95 if (response_msg.name() != msg_name) { | |
| 96 MOJO_LOG(ERROR) << "Expecting response for message = " << msg_name << | |
| 97 ", but received message = " << response_msg.name(); | |
| 98 return false; | |
| 99 } | |
| 100 | |
| 101 internal::{{interface.name}}_{{method.name}}_ResponseParams_Data* | |
| 102 response_params = reinterpret_cast<internal::{{interface.name}}_{{method.n
ame}}_ResponseParams_Data*>( | |
| 103 response_msg.mutable_payload()); | |
| 104 response_params->DecodePointersAndHandles(response_msg.mutable_handles()); | |
| 105 | |
| 106 {{struct_macros.deserialize(method.response_param_struct, "response_params", | |
| 107 "(*out_%s)")}} | |
| 108 {%- endif %} | |
| 109 return true; | |
| 110 } | |
| 111 {%- endfor %} | |
| 112 {%- endfor %} | |
| 113 | |
| 114 {%- for namespace in namespaces_as_array|reverse %} | |
| 115 } // namespace {{namespace}} | |
| 116 {%- endfor %} | |
| 117 | |
| 118 #if defined(__clang__) | |
| 119 #pragma clang diagnostic pop | |
| 120 #endif | |
| OLD | NEW |