YPC  0.2.0
package.h
1 #pragma once
2 #include "ypc/corecommon/nt_cols.h"
3 #include "ypc/stbox/ebyte.h"
4 #include "ypc/stbox/tsgx/log.h"
5 #include <ff/net/middleware/ntpackage.h>
6 #include <functional>
7 #include <unordered_map>
8 
9 // namespace ypc {
10 
11 template <uint32_t PackageID, typename... ARGS>
12 using sgx_package = ff::net::ntpackage<PackageID, ARGS...>;
13 using sgx_marshaler = ff::net::marshaler;
14 
15 enum {
16  request_data_item = 1,
17  ctrl_type,
18  response_data_item,
19  request_private_key_item,
20  request_skey_from_pkey_item,
21  request_extra_data_usage_license_item,
22  ack_extra_data_usage_license_item,
23  request_extra_data_item,
24  ack_extra_data_item
25 };
26 
27 typedef sgx_package<request_data_item, ypc::nt<stbox::bytes>::reserve>
28  request_pkg_t;
29 typedef sgx_package<response_data_item, ypc::nt<stbox::bytes>::data>
30  response_pkg_t;
31 typedef sgx_package<ctrl_type, ypc::nt<stbox::bytes>::reserve> ctrl_pkg_t;
32 typedef sgx_package<request_private_key_item, ypc::nt<stbox::bytes>::id>
33  request_private_key_pkg_t;
34 typedef sgx_package<request_skey_from_pkey_item, ypc::nt<stbox::bytes>::pkey>
35  request_skey_from_pkey_pkg_t;
36 
37 typedef sgx_package<request_extra_data_usage_license_item,
41  request_extra_data_usage_license_pkg_t;
42 typedef sgx_package<ack_extra_data_usage_license_item,
44  ack_extra_data_usage_license_pkg_t;
45 
46 typedef sgx_package<request_extra_data_item, ypc::nt<stbox::bytes>::data_hash>
47  request_extra_data_pkg_t;
48 typedef sgx_package<ack_extra_data_item, ypc::nt<stbox::bytes>::data>
49  ack_extra_data_pkg_t;
50 
52 public:
53  template <typename PkgType>
54  void
55  add_to_handle_pkg(const std::function<void(std::shared_ptr<PkgType>)> &f) {
56  auto p = [f](const uint8_t *buf, size_t s) {
57  sgx_marshaler m((const char *)buf, s, sgx_marshaler::deserializer);
58  std::shared_ptr<PkgType> pkg(new PkgType());
59  pkg->arch(m);
60  f(pkg);
61  };
62  m_all_handlers.insert(std::make_pair(PkgType::package_id, p));
63  }
64 
65  //(TODO)add_low_level_handler for memory optimization
66 
67  template <typename T> void handle_pkg(const T *buf, size_t len) {
68  handle_pkg((const uint8_t *)buf, len);
69  }
70  void handle_pkg(const uint8_t *buf, size_t len);
71 
72  template <typename PkgType> bool is_pkg_handled() const {
73  return m_all_handlers.find(PkgType::package_id) != m_all_handlers.end();
74  }
75 
76 protected:
77  typedef std::function<void(const uint8_t *buf, size_t s)> base_pkg_handler_t;
78  std::unordered_map<uint32_t, base_pkg_handler_t> m_all_handlers;
79 };
80 //} // namespace ypc
81 
ypc::nt
Definition: nt_cols.h:6
sgx_package_handler
Definition: package.h:51