OLD | NEW |
1 {%- import "interface_macros.tmpl" as interface_macros %} | 1 {%- import "interface_macros.tmpl" as interface_macros %} |
2 {%- import "struct_macros.tmpl" as struct_macros %} | 2 {%- import "struct_macros.tmpl" as struct_macros %} |
3 | 3 |
4 {%- set class_name = interface.name %} | 4 {%- set class_name = interface.name %} |
5 {%- set proxy_name = interface.name ~ "Proxy" %} | 5 {%- set proxy_name = interface.name ~ "Proxy" %} |
6 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} | 6 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} |
7 | 7 |
8 {%- macro alloc_params(struct, params, message, serialization_context, | 8 {%- macro alloc_params(struct, params, message, serialization_context, |
9 description) %} | 9 description) %} |
10 ({{serialization_context}})->handles.Swap(({{message}})->mutable_handles()); | 10 ({{serialization_context}})->handles.Swap(({{message}})->mutable_handles()); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 if (!callback_.is_null()) { | 138 if (!callback_.is_null()) { |
139 mojo::internal::MessageDispatchContext context(message); | 139 mojo::internal::MessageDispatchContext context(message); |
140 callback_.Run({{pass_params(method.response_parameters)}}); | 140 callback_.Run({{pass_params(method.response_parameters)}}); |
141 } | 141 } |
142 return true; | 142 return true; |
143 } | 143 } |
144 {%- endif %} | 144 {%- endif %} |
145 {%- endfor %} | 145 {%- endfor %} |
146 | 146 |
147 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) | 147 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) |
148 : ControlMessageProxy(receiver) { | 148 : receiver_(receiver) { |
149 } | 149 } |
150 | 150 |
151 {#--- Proxy definitions #} | 151 {#--- Proxy definitions #} |
152 | 152 |
153 {%- for method in interface.methods %} | 153 {%- for method in interface.methods %} |
154 {%- set message_name = | 154 {%- set message_name = |
155 "internal::k%s_%s_Name"|format(interface.name, method.name) %} | 155 "internal::k%s_%s_Name"|format(interface.name, method.name) %} |
156 {%- set params_struct = method.param_struct %} | 156 {%- set params_struct = method.param_struct %} |
157 {%- set params_description = | 157 {%- set params_description = |
158 "%s.%s request"|format(interface.name, method.name) %} | 158 "%s.%s request"|format(interface.name, method.name) %} |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 // TODO(darin): !ok returned here indicates a malformed message, and that may | 289 // TODO(darin): !ok returned here indicates a malformed message, and that may |
290 // be good reason to close the connection. However, we don't have a way to do | 290 // be good reason to close the connection. However, we don't have a way to do |
291 // that from here. We should add a way. | 291 // that from here. We should add a way. |
292 delete responder_; | 292 delete responder_; |
293 responder_ = nullptr; | 293 responder_ = nullptr; |
294 } | 294 } |
295 {%- endif -%} | 295 {%- endif -%} |
296 {%- endfor %} | 296 {%- endfor %} |
297 | 297 |
298 {{class_name}}Stub::{{class_name}}Stub() | 298 {{class_name}}Stub::{{class_name}}Stub() |
299 : sink_(nullptr), | 299 : sink_(nullptr) { |
300 control_message_handler_({{interface.name}}::Version_) { | |
301 } | 300 } |
302 | 301 |
303 {{class_name}}Stub::~{{interface.name}}Stub() {} | 302 {{class_name}}Stub::~{{interface.name}}Stub() {} |
304 | 303 |
305 {#--- Stub definition #} | 304 {#--- Stub definition #} |
306 | 305 |
307 bool {{class_name}}Stub::Accept(mojo::Message* message) { | 306 bool {{class_name}}Stub::Accept(mojo::Message* message) { |
308 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) | |
309 return control_message_handler_.Accept(message); | |
310 {%- if interface.methods %} | 307 {%- if interface.methods %} |
311 switch (message->header()->name) { | 308 switch (message->header()->name) { |
312 {%- for method in interface.methods %} | 309 {%- for method in interface.methods %} |
313 case internal::k{{class_name}}_{{method.name}}_Name: { | 310 case internal::k{{class_name}}_{{method.name}}_Name: { |
314 {%- if method.response_parameters == None %} | 311 {%- if method.response_parameters == None %} |
315 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 312 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
316 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*
>( | 313 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*
>( |
317 message->mutable_payload()); | 314 message->mutable_payload()); |
318 | 315 |
319 {%- set desc = class_name~"::"~method.name %} | 316 {%- set desc = class_name~"::"~method.name %} |
(...skipping 10 matching lines...) Expand all Loading... |
330 {%- endif %} | 327 {%- endif %} |
331 } | 328 } |
332 {%- endfor %} | 329 {%- endfor %} |
333 } | 330 } |
334 {%- endif %} | 331 {%- endif %} |
335 return false; | 332 return false; |
336 } | 333 } |
337 | 334 |
338 bool {{class_name}}Stub::AcceptWithResponder( | 335 bool {{class_name}}Stub::AcceptWithResponder( |
339 mojo::Message* message, mojo::MessageReceiverWithStatus* responder) { | 336 mojo::Message* message, mojo::MessageReceiverWithStatus* responder) { |
340 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) | |
341 return control_message_handler_.AcceptWithResponder(message, responder); | |
342 {%- if interface.methods %} | 337 {%- if interface.methods %} |
343 switch (message->header()->name) { | 338 switch (message->header()->name) { |
344 {%- for method in interface.methods %} | 339 {%- for method in interface.methods %} |
345 case internal::k{{class_name}}_{{method.name}}_Name: { | 340 case internal::k{{class_name}}_{{method.name}}_Name: { |
346 {%- if method.response_parameters != None %} | 341 {%- if method.response_parameters != None %} |
347 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 342 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
348 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*
>( | 343 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*
>( |
349 message->mutable_payload()); | 344 message->mutable_payload()); |
350 | 345 |
351 {%- set desc = class_name~"::"~method.name %} | 346 {%- set desc = class_name~"::"~method.name %} |
(...skipping 19 matching lines...) Expand all Loading... |
371 } | 366 } |
372 {%- endfor %} | 367 {%- endfor %} |
373 } | 368 } |
374 {%- endif %} | 369 {%- endif %} |
375 return false; | 370 return false; |
376 } | 371 } |
377 | 372 |
378 {#--- Request validator definitions #} | 373 {#--- Request validator definitions #} |
379 | 374 |
380 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { | 375 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
| 376 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
| 377 return true; |
| 378 |
381 mojo::internal::ValidationContext validation_context( | 379 mojo::internal::ValidationContext validation_context( |
382 message->data(), message->data_num_bytes(), message->handles()->size(), | 380 message->data(), message->data_num_bytes(), message->handles()->size(), |
383 message, "{{class_name}} RequestValidator"); | 381 message, "{{class_name}} RequestValidator"); |
384 | 382 |
385 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { | |
386 if (!mojo::internal::ValidateControlRequest(message, &validation_context)) | |
387 return false; | |
388 return true; | |
389 } | |
390 | |
391 switch (message->header()->name) { | 383 switch (message->header()->name) { |
392 {%- for method in interface.methods %} | 384 {%- for method in interface.methods %} |
393 case internal::k{{class_name}}_{{method.name}}_Name: { | 385 case internal::k{{class_name}}_{{method.name}}_Name: { |
394 {%- if method.response_parameters != None %} | 386 {%- if method.response_parameters != None %} |
395 if (!mojo::internal::ValidateMessageIsRequestExpectingResponse( | 387 if (!mojo::internal::ValidateMessageIsRequestExpectingResponse( |
396 message, &validation_context)) { | 388 message, &validation_context)) { |
397 return false; | 389 return false; |
398 } | 390 } |
399 {%- else %} | 391 {%- else %} |
400 if (!mojo::internal::ValidateMessageIsRequestWithoutResponse( | 392 if (!mojo::internal::ValidateMessageIsRequestWithoutResponse( |
(...skipping 16 matching lines...) Expand all Loading... |
417 // Unrecognized message. | 409 // Unrecognized message. |
418 ReportValidationError( | 410 ReportValidationError( |
419 &validation_context, | 411 &validation_context, |
420 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 412 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
421 return false; | 413 return false; |
422 } | 414 } |
423 | 415 |
424 {#--- Response validator definitions #} | 416 {#--- Response validator definitions #} |
425 {% if interface|has_callbacks %} | 417 {% if interface|has_callbacks %} |
426 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { | 418 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
| 419 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
| 420 return true; |
| 421 |
427 mojo::internal::ValidationContext validation_context( | 422 mojo::internal::ValidationContext validation_context( |
428 message->data(), message->data_num_bytes(), message->handles()->size(), | 423 message->data(), message->data_num_bytes(), message->handles()->size(), |
429 message, "{{class_name}} ResponseValidator"); | 424 message, "{{class_name}} ResponseValidator"); |
430 | 425 |
431 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { | |
432 if (!mojo::internal::ValidateControlResponse(message, &validation_context)) | |
433 return false; | |
434 return true; | |
435 } | |
436 | |
437 if (!mojo::internal::ValidateMessageIsResponse(message, &validation_context)) | 426 if (!mojo::internal::ValidateMessageIsResponse(message, &validation_context)) |
438 return false; | 427 return false; |
439 switch (message->header()->name) { | 428 switch (message->header()->name) { |
440 {%- for method in interface.methods if method.response_parameters != None %} | 429 {%- for method in interface.methods if method.response_parameters != None %} |
441 case internal::k{{class_name}}_{{method.name}}_Name: { | 430 case internal::k{{class_name}}_{{method.name}}_Name: { |
442 if (!mojo::internal::ValidateMessagePayload< | 431 if (!mojo::internal::ValidateMessagePayload< |
443 internal::{{class_name}}_{{method.name}}_ResponseParams_Data>( | 432 internal::{{class_name}}_{{method.name}}_ResponseParams_Data>( |
444 message, &validation_context)) { | 433 message, &validation_context)) { |
445 return false; | 434 return false; |
446 } | 435 } |
447 return true; | 436 return true; |
448 } | 437 } |
449 {%- endfor %} | 438 {%- endfor %} |
450 default: | 439 default: |
451 break; | 440 break; |
452 } | 441 } |
453 | 442 |
454 // Unrecognized message. | 443 // Unrecognized message. |
455 ReportValidationError( | 444 ReportValidationError( |
456 &validation_context, | 445 &validation_context, |
457 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 446 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
458 return false; | 447 return false; |
459 } | 448 } |
460 {%- endif -%} | 449 {%- endif -%} |
OLD | NEW |