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 |