request_response.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #include "app_manager_export.h"
  6. #include "coap_ext.h"
  7. #include "wasm_export.h"
  8. #include "bh_assert.h"
  9. extern void
  10. module_request_handler(request_t *request, void *user_data);
  11. bool
  12. wasm_response_send(wasm_exec_env_t exec_env, char *buffer, int size)
  13. {
  14. if (buffer != NULL) {
  15. response_t response[1];
  16. if (NULL == unpack_response(buffer, size, response))
  17. return false;
  18. am_send_response(response);
  19. return true;
  20. }
  21. return false;
  22. }
  23. void
  24. wasm_register_resource(wasm_exec_env_t exec_env, char *url)
  25. {
  26. wasm_module_inst_t module_inst = get_module_inst(exec_env);
  27. if (url != NULL) {
  28. unsigned int mod_id =
  29. app_manager_get_module_id(Module_WASM_App, module_inst);
  30. bh_assert(mod_id != ID_NONE);
  31. am_register_resource(url, module_request_handler, mod_id);
  32. }
  33. }
  34. void
  35. wasm_post_request(wasm_exec_env_t exec_env, char *buffer, int size)
  36. {
  37. wasm_module_inst_t module_inst = get_module_inst(exec_env);
  38. if (buffer != NULL) {
  39. request_t req[1];
  40. if (!unpack_request(buffer, size, req))
  41. return;
  42. // TODO: add permission check, ensure app can't do harm
  43. // set sender to help dispatch the response to the sender ap
  44. unsigned int mod_id =
  45. app_manager_get_module_id(Module_WASM_App, module_inst);
  46. bh_assert(mod_id != ID_NONE);
  47. req->sender = mod_id;
  48. if (req->action == COAP_EVENT) {
  49. am_publish_event(req);
  50. return;
  51. }
  52. am_dispatch_request(req);
  53. }
  54. }
  55. void
  56. wasm_sub_event(wasm_exec_env_t exec_env, char *url)
  57. {
  58. wasm_module_inst_t module_inst = get_module_inst(exec_env);
  59. if (url != NULL) {
  60. unsigned int mod_id =
  61. app_manager_get_module_id(Module_WASM_App, module_inst);
  62. bh_assert(mod_id != ID_NONE);
  63. am_register_event(url, mod_id);
  64. }
  65. }