Adjust plugin structure for type c 52/271652/8
authorIlho Kim <ilho159.kim@samsung.com>
Thu, 24 Feb 2022 04:43:38 +0000 (13:43 +0900)
committerIlho Kim <ilho159.kim@samsung.com>
Tue, 22 Mar 2022 08:56:48 +0000 (17:56 +0900)
Change-Id: I1d11cd59b6bd63d9986719e786146fc0f1612470
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
21 files changed:
idlc/gen_cion/c_cion_body_gen_base.cc
idlc/gen_cion/c_cion_body_gen_base_cb.h
idlc/gen_cion/c_cion_gen_base.cc
idlc/gen_cion/c_cion_gen_base.h
idlc/gen_cion/c_cion_gen_base_cb.h
idlc/gen_cion/c_cion_group_body_gen.cc
idlc/gen_cion/c_cion_group_body_gen_cb.h
idlc/gen_cion/c_cion_group_header_gen.cc
idlc/gen_cion/c_cion_group_header_gen_cb.h
idlc/gen_cion/c_cion_proxy_body_gen.cc
idlc/gen_cion/c_cion_proxy_body_gen_cb.h
idlc/gen_cion/c_cion_proxy_header_gen.cc
idlc/gen_cion/c_cion_proxy_header_gen_cb.h
idlc/gen_cion/c_cion_stub_body_gen.cc
idlc/gen_cion/c_cion_stub_body_gen_cb.h
idlc/gen_cion/c_cion_stub_header_gen.cc
idlc/gen_cion/c_cion_stub_header_gen_cb.h
idlc/gen_cion/c_transportable.h
idlc/gen_cion/default_c_transportable.cc [new file with mode: 0644]
idlc/gen_cion/default_c_transportable.h [new file with mode: 0644]
idlc/gen_cion/plugin_loader.cc

index b634d9c353120ac43877e87305cfb58e64bed95c..bf6708715d07c473c2d73a358e588949c11ea097 100644 (file)
@@ -755,11 +755,21 @@ void CCionBodyGeneratorBase::GenFilePayloadSend(std::ofstream& stream, bool is_p
 
   std::string code = CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_DEF;
   if (is_proxy) {
-    code = ReplaceAll(code, "<FILE_PAYLOAD_SENDER_DEF>", CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_CLIENT_DEF);
-    code = ReplaceAll(code, "<FILE_PAYLOAD_SENDER>", CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_CLIENT);
+    std::string def(
+        ReplaceAll(CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_CLIENT_DEF,
+            "<CLIENT_T>", GetTransportable().C().GenClientType()));
+    code = ReplaceAll(code, "<FILE_PAYLOAD_SENDER_DEF>", def);
+    code = ReplaceAll(code, "<FILE_PAYLOAD_SEND>",
+        GetTransportable().C().GenClientFileSend("value", "client"));
   } else {
-    code = ReplaceAll(code, "<FILE_PAYLOAD_SENDER_DEF>", CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_SERVER_DEF);
-    code = ReplaceAll(code, "<FILE_PAYLOAD_SENDER>", CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_SERVER);
+    std::string def(
+        ReplaceAll(CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_SERVER_DEF,
+            "<SERVER_T>", GetTransportable().C().GenServerType()));
+    def = ReplaceAll(def, "<PEER_T>", GetTransportable().C().GenPeerInfoType());
+    code = ReplaceAll(code, "<FILE_PAYLOAD_SENDER_DEF>", def);
+    code = ReplaceAll(code, "<FILE_PAYLOAD_SEND>",
+        GetTransportable().C().GenServerFileSend("value",
+            "server", "peer_info"));
   }
   stream << SmartIndent(code);
 }
@@ -848,11 +858,14 @@ std::string CCionBodyGeneratorBase::GenSecurityString(const Interface& iface) {
 
   for (const auto& attr : iface.GetAttributes()) {
     if (attr->GetKey() == "ca_path")
-      security_path += ReplaceAll(CB_INTERFACE_SECURITY_CA, "<ARG>", attr->GetValue());
+      security_path +=
+          GetTransportable().C().GenSetSecurityCA(attr->GetValue());
     else if (attr->GetKey() == "cert_path")
-      security_path += ReplaceAll(CB_INTERFACE_SECURITY_CERT, "<ARG>", attr->GetValue());
+      security_path +=
+          GetTransportable().C().GenSetSecurityCert(attr->GetValue());
     else if (attr->GetKey() == "private_key")
-      security_path += ReplaceAll(CB_INTERFACE_SECURITY_PRIVATE_KEY, "<ARG>", attr->GetValue());
+      security_path +=
+          GetTransportable().C().GenSetSecurityPrivateKey(attr->GetValue());
   }
 
   return RemoveLine(security_path);
index 3b4448c72688ea64d76e8535ba33e789ee443d3f..4da6d3af7ebbc6e2f1666c098db46e9742165c51 100644 (file)
@@ -526,16 +526,10 @@ return CION_ERROR_NONE;
 
 
 constexpr const char CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_CLIENT_DEF[] =
-R"__c_cb(static int __cion_file_payload_send(cion_client_h client, GList *list))__c_cb";
-
-constexpr const char CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_CLIENT[] =
-R"__c_cb(ret = cion_client_send_payload_async(client, pl, NULL, NULL);)__c_cb";
+R"__c_cb(static int __cion_file_payload_send(<CLIENT_T> client, GList *list))__c_cb";
 
 constexpr const char CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_SERVER_DEF[] =
-R"__c_cb(static int __cion_file_payload_send(cion_server_h server, const cion_peer_info_h peer_info, GList *list))__c_cb";
-
-constexpr const char CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_SERVER[] =
-R"__c_cb(ret = cion_server_send_payload_async(server, peer_info, pl, NULL, NULL);)__c_cb";
+R"__c_cb(static int __cion_file_payload_send(<SERVER_T> server, const <PEER_T> peer_info, GList *list))__c_cb";
 
 constexpr const char CB_INTERFACE_METHOD_FILE_PAYLOAD_SENDER_DEF[] =
 R"__c_cb(<FILE_PAYLOAD_SENDER_DEF>
@@ -543,40 +537,16 @@ R"__c_cb(<FILE_PAYLOAD_SENDER_DEF>
   const char *value;
   GList *iter;
   int ret = CION_ERROR_NONE;
-  cion_payload_h pl;
 
   if (g_list_length(list) == 0) {
     _E("Invalid parameter");
     return CION_ERROR_INVALID_PARAMETER;
   }
 
-
   iter = list;
   while (iter) {
     value = iter->data;
-
-    ret = cion_payload_create(&pl, CION_PAYLOAD_TYPE_FILE);
-    if (ret != CION_ERROR_NONE) {
-      _E("Failed to cion_payload_create : %d", ret);
-      return ret;
-    }
-
-    ret = cion_payload_set_file_path(pl, value);
-    if (ret != CION_ERROR_NONE) {
-      _E("Failed to cion_payload_set_file_path : %d - %s", ret, value);
-      cion_payload_destroy(pl);
-      return ret;
-    }
-
-    <FILE_PAYLOAD_SENDER>
-    if (ret != CION_ERROR_NONE) {
-      _E("Failed to cion_client_send_payload_async : %d - %s", ret, value);
-      cion_payload_destroy(pl);
-      return ret;
-    }
-
-    cion_payload_destroy(pl);
-
+<FILE_PAYLOAD_SEND>
     iter = g_list_next(iter);
   }
 
@@ -705,28 +675,4 @@ R"__c_cb(
 payload_files_ = g_list_append(payload_files_, (void *)<ARG>);
 )__c_cb";
 
-/**
- * <ARG> The argument.
- */
-constexpr const char CB_INTERFACE_SECURITY_CA[] =
-R"__c_cb(
-cion_security_set_ca_path(security, "<ARG>");
-)__c_cb";
-
-/**
- * <ARG> The argument.
- */
-constexpr const char CB_INTERFACE_SECURITY_CERT[] =
-R"__c_cb(
-cion_security_set_cert_path(security, "<ARG>");
-)__c_cb";
-
-/**
- * <ARG> The argument.
- */
-constexpr const char CB_INTERFACE_SECURITY_PRIVATE_KEY[] =
-R"__c_cb(
-cion_security_set_private_key_path(security, "<ARG>");
-)__c_cb";
-
 #endif  // IDLC_C_CION_GEN_C_BODY_GEN_BASE_CB_H_
index a6393491c45b09c1eaac1a38234e6dcab9e67f78..e806157815d57410eda357800fc437d6e9362927 100644 (file)
@@ -35,7 +35,7 @@ constexpr const char PREFIX_CION_GROUP[] = "cion_group";
 namespace tidl {
 
 CCionGeneratorBase::CCionGeneratorBase(std::shared_ptr<Document> doc)
-    : Generator(doc) {
+    : CionPluginBase(std::move(doc)) {
   structures_.clear();
   type_map_ = {
       {"char", "char "},
@@ -360,11 +360,14 @@ void CCionGeneratorBase::GenVersion(std::ofstream& stream) {
 
 void CCionGeneratorBase::GenIncludeDefaultHeaders(std::ofstream& stream,
                                               bool body) {
+  std::string str;
   if (body) {
-    stream << CB_BODY_HEADER;
+    str = CB_BODY_HEADER;
   } else {
-    stream << CB_HEADER;
+    str = CB_HEADER;
   }
+
+  stream << ReplaceAll(str, "<INCLUDE>", GetTransportable().C().GenInclude());
 }
 
 void CCionGeneratorBase::GenGNUSourceDefinition(std::ofstream& stream) {
index 3b76d41b67cf89e2765e37216628ac8130b84431..4bd0a14ad624f11f57dd9796ccf4131a78720c46 100644 (file)
 
 #include "idlc/ast/type.h"
 #include "idlc/ast/structure.h"
-#include "idlc/gen/generator.h"
+#include "idlc/gen_cion/cion_plugin_base.h"
 
 namespace tidl {
 
-class CCionGeneratorBase : public Generator {
+class CCionGeneratorBase : public CionPluginBase {
  public:
   explicit CCionGeneratorBase(std::shared_ptr<Document> doc);
   virtual ~CCionGeneratorBase() = default;
index 2918072620e5b03ab61036d8301d9e8144fdf88b..bd6aeede3bc39ec4f5c7918d5c08a99b3cc217c1 100644 (file)
@@ -37,7 +37,7 @@ constexpr const char CB_HEADER[] =
 R"__c_cb(
 #include <stdbool.h>
 #include <bundle.h>
-#include <cion.h>
+<INCLUDE>
 )__c_cb";
 
 constexpr const char CB_BODY_HEADER[] =
@@ -49,7 +49,7 @@ R"__c_cb(
 #include <libgen.h>
 #include <glib.h>
 #include <dlog.h>
-#include <cion.h>
+<INCLUDE>
 #include <rpc-port-parcel.h>
 )__c_cb";
 
index e6f8b4ff7768a4a922531e519742458a21876747..e8bc72fe327613e011cd6646370f17a4398b7137 100644 (file)
@@ -60,6 +60,8 @@ void CCionGroupBodyGen::GenInterfaceDef(std::ofstream& stream,
   ReplaceAll(CB_INTERFACE_BASE_DEF)
       .Change("<PREFIX>", GetHandlePrefix())
       .Change("<NAME>", iface.GetID())
+      .Change("<SECURITY_T>", GetTransportable().C().GenSecurityType())
+      .Change("<GROUP_T>", GetTransportable().C().GenGroupType())
       .Transform([&](std::string code) {
         return SmartIndent(code);
       })
@@ -113,7 +115,9 @@ void CCionGroupBodyGen::GenInterfaceEnum(std::ofstream& stream,
 
 // @see #CB_INTERFACE_METHOD_HANDLER_TYPE
 void CCionGroupBodyGen::GenInterfaceMethodHandlerType(std::ofstream& stream) {
-  stream << SmartIndent(CB_INTERFACE_METHOD_HANDLER_TYPE);
+  std::string code(ReplaceAll(CB_INTERFACE_METHOD_HANDLER_TYPE,
+      "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType()));
+  stream << SmartIndent(code);
 }
 
 void CCionGroupBodyGen::GenInterfaces(std::ofstream& stream) {
@@ -190,11 +194,21 @@ void CCionGroupBodyGen::GenInterfaceBase(std::ofstream& stream,
   std::string prefix = GetHandlePrefix();
   std::string name = iface.GetID();
   ReplaceAll(CB_INTERFACE_BASE)
+      .Change("<GROUP_CREATE>", GetTransportable().C().GenGroupCreate())
       .Change("<PREFIX>", prefix)
       .Change("<NAME>", name)
       .ChangeToUpper("<UPPERCASE_PREFIX>", prefix)
       .ChangeToUpper("<UPPERCASE_NAME>", name)
       .Change("<SET_SECURITY>", GenSecurityString(iface))
+      .Change("<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType())
+      .Change("<SECURITY_T>", GetTransportable().C().GenSecurityType())
+      .Change("<PAYLOAD_T>", GetTransportable().C().GenPayloadType())
+      .Change("<PAYLOAD_TYPE_E>", GetTransportable().C().GenPayloadTypeEnum())
+      .Change("<PAYLOAD_GET_TYPE>", GetTransportable().C().GenPayloadGetType())
+      .Change("<ERROR_NONE>", GetTransportable().C().GenErrorNone())
+      .Change("<PAYLOAD_TYPE_DATA>", GetTransportable().C().GenPayloadTypeData())
+      .Change("<PAYLOAD_GET_DATA>", GetTransportable().C().GenPayloadGetData())
+      .Change("<GROUP_DESTROY>", GetTransportable().C().GenGroupDestroy())
       .Transform([&](std::string str) {
         return SmartIndent(str);
       })
@@ -213,7 +227,8 @@ void CCionGroupBodyGen::GenInterfaceMethodHandlerBase(std::ofstream& stream,
           GenMethodHandlerParcelRead(iface, decl) },
       { "<METHOD_HANDLER_CALLBACK_INVOKE>",
           GenMethodHandlerCallbackInvoke(decl) },
-      { "<METHOD_HANDLER_ARGS_FREE>", GenMethodHandlerArgsFree(iface, decl) }
+      { "<METHOD_HANDLER_ARGS_FREE>", GenMethodHandlerArgsFree(iface, decl) },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() }
   })
   .Transform([&](std::string str){
     return SmartIndent(str);
@@ -437,7 +452,9 @@ std::string CCionGroupBodyGen::GenMethodAsyncBase(const Interface& iface,
       .ChangeToUpper("<UPPERCASE_PREFIX>", prefix)
       .ChangeToUpper("<UPPERCASE_NAME>", name)
       .ChangeToUpper("<UPPERCASE_METHOD_NAME>", method_name)
-      .Change("<METHOD_PARCEL_WRITE>", GenMethodParcelWrite(iface, decl)));
+      .Change("<METHOD_PARCEL_WRITE>", GenMethodParcelWrite(iface, decl))
+      .Change("<PAYLOAD_T>", GetTransportable().C().GenPayloadType())
+      .Change("<GROUP_PUBLISH>", GetTransportable().C().GenGroupPublish()));
   return code;
 }
 
index 5aca04f4417db34b5743d3660124792e429cca7d..d1c8a94eaf2993b5c5af23bc94584b088d42dcb1 100644 (file)
@@ -20,7 +20,7 @@
 
 constexpr const char CB_INTERFACE_METHOD_HANDLER_TYPE[] =
 R"__c_cb(
-typedef int (*cion_group_method_handler)(const cion_peer_info_h peer_info, rpc_port_parcel_h parcel, void *data);
+typedef int (*cion_group_method_handler)(const <PEER_INFO_T> peer_info, rpc_port_parcel_h parcel, void *data);
 )__c_cb";
 
 /**
@@ -84,8 +84,8 @@ constexpr const char CB_INTERFACE_BASE_DEF[] =
 R"__c_cb(
 typedef struct <PREFIX>_<NAME>_s {
   char *topic_name;
-  cion_group_h group;
-  cion_security_h security;
+  <GROUP_T> group;
+  <SECURITY_T> security;
   <PREFIX>_<NAME>_callback_s callback;
   GRecMutex mutex;
   void *user_data;
@@ -104,7 +104,7 @@ typedef struct <PREFIX>_<NAME>_s {
  */
 constexpr const char CB_INTERFACE_METHOD_HANDLER_BASE[] =
 R"__c_cb(
-static int __<PREFIX>_<NAME>_method_<METHOD_NAME>_handler(const cion_peer_info_h peer_info, rpc_port_parcel_h parcel, void *user_data)
+static int __<PREFIX>_<NAME>_method_<METHOD_NAME>_handler(const <PEER_INFO_T> peer_info, rpc_port_parcel_h parcel, void *user_data)
 {
   <PREFIX>_<NAME>_t *h = user_data;
   int ret_ = CION_ERROR_NONE;
@@ -133,7 +133,7 @@ static int __<PREFIX>_<NAME>_method_<METHOD_NAME>_handler(const cion_peer_info_h
  */
 constexpr const char CB_INTERFACE_BASE[] =
 R"__c_cb(
-static int __<PREFIX>_<NAME>_process_received_event(<PREFIX>_<NAME>_t *h, const cion_peer_info_h peer_info, rpc_port_parcel_h parcel)
+static int __<PREFIX>_<NAME>_process_received_event(<PREFIX>_<NAME>_t *h, const <PEER_INFO_T> peer_info, rpc_port_parcel_h parcel)
 {
   int ret = CION_ERROR_NONE;
   int cmd = -1;
@@ -151,7 +151,7 @@ static int __<PREFIX>_<NAME>_process_received_event(<PREFIX>_<NAME>_t *h, const
 }
 
 static void __<PREFIX>_<NAME>_joined_cb(const char *topic_name,
-               const cion_peer_info_h peer_info, void *user_data)
+               const <PEER_INFO_T> peer_info, void *user_data)
 {
   <PREFIX>_<NAME>_h h = user_data;
 
@@ -160,7 +160,7 @@ static void __<PREFIX>_<NAME>_joined_cb(const char *topic_name,
 }
 
 static void __<PREFIX>_<NAME>_left_cb(const char *topic_name,
-    const cion_peer_info_h peer_info, void *user_data)
+    const <PEER_INFO_T> peer_info, void *user_data)
 {
   <PREFIX>_<NAME>_h h = user_data;
 
@@ -170,25 +170,25 @@ static void __<PREFIX>_<NAME>_left_cb(const char *topic_name,
 }
 
 static void __<PREFIX>_<NAME>_received(const char *topic_name,
-    const cion_peer_info_h peer_info, cion_payload_h payload, void *user_data)
+    const <PEER_INFO_T> peer_info, <PAYLOAD_T> payload, void *user_data)
 {
   <PREFIX>_<NAME>_h h = user_data;
   rpc_port_parcel_h parcel;
   unsigned char *data;
-  cion_payload_type_e type;
+  <PAYLOAD_TYPE_E> type;
   int ret;
   unsigned int data_len;
 
   _W("topic_name(%s)", topic_name);
 
-  ret = cion_payload_get_type(payload, &type);
-  if (ret != CION_ERROR_NONE || type != CION_PAYLOAD_TYPE_DATA) {
+  <PAYLOAD_GET_TYPE>
+  if (ret != <ERROR_NONE> || type != <PAYLOAD_TYPE_DATA>) {
     _E("Faled to cion_payload_get_type : [%d][%d]", ret, type);
     return;
   }
 
-  ret = cion_payload_get_data(payload, &data, &data_len);
-  if (ret != CION_ERROR_NONE) {
+  <PAYLOAD_GET_DATA>
+  if (ret != <ERROR_NONE>) {
      _E("Faled to cion_payload_get_data : %d", ret);
      return;
    }
@@ -209,7 +209,7 @@ int <PREFIX>_<NAME>_create(const char *topic_name, <PREFIX>_<NAME>_callback_s *c
 {
   <PREFIX>_<NAME>_t *handle;
   int ret;
-  cion_security_h security;
+  <SECURITY_T> security;
 
   if (topic_name == nullptr || callback == nullptr || h == nullptr) {
     _E("Invalid parameter");
@@ -235,56 +235,7 @@ int <PREFIX>_<NAME>_create(const char *topic_name, <PREFIX>_<NAME>_callback_s *c
     <PREFIX>_<NAME>_destroy(handle);
     return CION_ERROR_OUT_OF_MEMORY;
   }
-
-  ret = cion_security_create(&security);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to create security handle. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  <SET_SECURITY>
-  handle->security = security;
-
-  ret = cion_group_create(&handle->group, topic_name, handle->security);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to create group handle. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  handle->callback = *callback;
-  handle->user_data = user_data;
-
-  ret = cion_group_add_joined_cb(handle->group, __<PREFIX>_<NAME>_joined_cb, handle);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add connection result cb. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  ret = cion_group_add_left_cb(handle->group, __<PREFIX>_<NAME>_left_cb, handle);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add disconnected event cb. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  ret = cion_group_add_payload_received_cb(handle->group, __<PREFIX>_<NAME>_received, handle);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add received event cb. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  ret = cion_group_subscribe(handle->group);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to subscribe event. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  *h = handle;
+  <GROUP_CREATE>
 
   return CION_ERROR_NONE;
 }
@@ -300,13 +251,7 @@ int <PREFIX>_<NAME>_destroy(<PREFIX>_<NAME>_h h)
   g_rec_mutex_unlock(&h->mutex);
   g_rec_mutex_clear(&h->mutex);
 
-  if (h->group) {
-    cion_group_unsubscribe(h->group);
-    cion_group_destroy(h->group);
-  }
-
-  if (h->security)
-    cion_security_destroy(h->security);
+  <GROUP_DESTROY>
 
   if (h->topic_name)
     free(h->topic_name);
@@ -337,7 +282,7 @@ void <PREFIX>_<NAME>_invoke_<METHOD_NAME>(<PREFIX>_<NAME>_h h<METHOD_PARAMS>)
   int res_;
   unsigned int data_size_;
   unsigned char *data_;
-  cion_payload_h pl_ = nullptr;
+  <PAYLOAD_T> pl_ = nullptr;
 
   if (h == nullptr<METHOD_PARAMS_CHECK>) {
     _E("Invalid parameter");
@@ -370,27 +315,8 @@ void <PREFIX>_<NAME>_invoke_<METHOD_NAME>(<PREFIX>_<NAME>_h h<METHOD_PARAMS>)
     _E("Failed to get raw. error(%d)", res_);
     goto out;
   }
-
-  res_ = cion_payload_create(&pl_, CION_PAYLOAD_TYPE_DATA);
-  if (res_ != CION_ERROR_NONE) {
-    _E("Failed to cion_payload_create : %d", res_);
-    goto out;
-  }
-
-  res_ = cion_payload_set_data(pl_, (const unsigned char*)data_, data_size_);
-  if (res_ != CION_ERROR_NONE) {
-    _E("Failed to cion_payload_set_data : %d", res_);
-    goto out;
-  }
-
-  res_ = cion_group_publish(h->group, pl_);
-  if (res_ != CION_ERROR_NONE) {
-    _E("Failed to cion_group_publish : %d", res_);
-    goto out;
-  }
-
+  <GROUP_PUBLISH>
 out:
-  cion_payload_destroy(pl_);
   set_last_result(res_);
   g_rec_mutex_unlock(&h->mutex);
 
index a80cf4e27251f05b5e176eb55e352d9f29b9356f..6aaedbf60769d9c1908e8b8766cb82217a2c643c 100644 (file)
@@ -73,6 +73,7 @@ void CCionGroupHeaderGen::GenInterfaceCallbackBase(std::ofstream& stream,
   ReplaceAll(CB_INTERFACE_CALLBACK_BASE)
       .Change("<PREFIX>", GetHandlePrefix())
       .Change("<NAME>", iface.GetID())
+      .Change("<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType())
       .Transform([&](std::string code) {
         return SmartIndent(code);
       })
@@ -87,7 +88,8 @@ void CCionGroupHeaderGen::GenInterfaceMethodCallbackBase(std::ofstream& stream,
       { "<PREFIX>", GetHandlePrefix() },
       { "<NAME>", iface.GetID() },
       { "<METHOD_NAME>", decl.GetID() },
-      { "<METHOD_PARAMS>", GenMethodParams(iface, decl) }
+      { "<METHOD_PARAMS>", GenMethodParams(iface, decl) },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() }
   })
   .Transform([&](std::string code) {
     return SmartIndent(code);
index f8b3859009d1906a3a4a5d45b12c800a2f9d4f04..6dfbc520bbad0481f99941344170004a95b30b4a 100644 (file)
@@ -46,7 +46,7 @@ R"__c_cb(
  * @see #<PREFIX>_<NAME>_callback_s
  */
 typedef void (*<PREFIX>_<NAME>_joined_cb)(<PREFIX>_<NAME>_h h,
-               const cion_peer_info_h peer_info, void *user_data);
+               const <PEER_INFO_T> peer_info, void *user_data);
 
 /**
  * @brief Called when a peer leaves a topic.
@@ -59,7 +59,7 @@ typedef void (*<PREFIX>_<NAME>_joined_cb)(<PREFIX>_<NAME>_h h,
  * @see #<PREFIX>_<NAME>_callback_s
  */
 typedef void (*<PREFIX>_<NAME>_left_cb)(<PREFIX>_<NAME>_h h,
-               const cion_peer_info_h peer_info, void *user_data);
+               const <PEER_INFO_T> peer_info, void *user_data);
 
 )__c_cb";
 
@@ -141,7 +141,7 @@ R"__c_cb(
  * @see cion_peer_info_clone()
  * @see #<PREFIX>_<NAME>_callback_s;
  */
-typedef <RETURN_TYPE> (*<PREFIX>_<NAME>_<METHOD_NAME>_cb)(const cion_peer_info_h peer_info<METHOD_PARAMS>, void *user_data);
+typedef <RETURN_TYPE> (*<PREFIX>_<NAME>_<METHOD_NAME>_cb)(const <PEER_INFO_T> peer_info<METHOD_PARAMS>, void *user_data);
 )__c_cb";
 
 /**
index b3472f8e0dd27504de3af55f623c2ea7ad426402..d11de20119fc9533edee57ee8890335c54cf25cb 100644 (file)
@@ -92,7 +92,10 @@ void CCionProxyBodyGen::GenInterfaceBaseDef(std::ofstream& stream,
     const Interface& iface) {
   ReplaceAll(CB_INTERFACE_BASE_DEF, {
       { "<PREFIX>", GetHandlePrefix() },
-      { "<NAME>", iface.GetID() }
+      { "<NAME>", iface.GetID() },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() },
+      { "<CLIENT_T>", GetTransportable().C().GenClientType() },
+      { "<SECURITY_T>", GetTransportable().C().GenSecurityType() }
   })
   .Transform([&](std::string code) {
     return SmartIndent(code);
@@ -139,11 +142,32 @@ void CCionProxyBodyGen::GenInterfaceBase(std::ofstream& stream,
   std::string name = iface.GetID();
 
   ReplaceAll(CB_INTERFACE_BASE)
+      .Change("<CLIENT_TRY_CONNECT>",
+          GetTransportable().C().GenClientTryConnect("h->client", "peer_info"))
+      .Change("<CLIENT_DISCONNECT>",
+          GetTransportable().C().GenClientDisconnect("h->client"))
+      .Change("<CLIENT_TRY_DISCOVERY>",
+          GetTransportable().C().GenClientTryDiscovery("h->client"))
+      .Change("<CLIENT_STOP_DISCOVERY>",
+          GetTransportable().C().GenClientStopDiscovery("h->client"))
+      .Change("<CLIENT_CREATE>", GetTransportable().C().GenClientCreate())
       .Change("<PREFIX>", prefix)
       .Change("<NAME>", name)
       .ChangeToUpper("<UPPERCASE_PREFIX>", prefix)
       .ChangeToUpper("<UPPERCASE_NAME>", name)
       .Change("<SET_SECURITY>", GenSecurityString(iface))
+      .Change("<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType())
+      .Change("<PAYLOAD_T>", GetTransportable().C().GenPayloadType())
+      .Change("<PAYLOAD_TRANSFER_STATUS_T>",
+          GetTransportable().C().GenPayloadTransferStatusType())
+      .Change("<SECURITY_T>", GetTransportable().C().GenSecurityType())
+      .Change("<PAYLOAD_TYPE_E>", GetTransportable().C().GenPayloadTypeEnum())
+      .Change("<PAYLOAD_GET_TYPE>", GetTransportable().C().GenPayloadGetType())
+      .Change("<ERROR_NONE>", GetTransportable().C().GenErrorNone())
+      .Change("<PAYLOAD_TYPE_DATA>", GetTransportable().C().GenPayloadTypeData())
+      .Change("<PAYLOAD_TYPE_FILE>", GetTransportable().C().GenPayloadTypeFile())
+      .Change("<PAYLOAD_GET_DATA>", GetTransportable().C().GenPayloadGetData())
+      .Change("<CLIENT_DESTROY>", GetTransportable().C().GenClientDestroy())
       .Transform([&](std::string code) {
         return SmartIndent(code);
       })
@@ -493,7 +517,11 @@ std::string CCionProxyBodyGen::GenMethodAsyncBase(const Interface& iface,
       .ChangeToUpper("<UPPERCASE_METHOD_NAME>", method_name)
       .Change("<METHOD_PARCEL_WRITE>", GenMethodParcelWrite(iface, decl))
       .Change("<METHOD_DELEGATE_APPEND>", GenMethodDelegateAppend(iface,
-          decl)));
+          decl))
+      .Change("<PAYLOAD_T>", GetTransportable().C().GenPayloadType())
+      .Change("<CLIENT_SEND_ASYNC>",
+          GetTransportable().C().GenClientSendAsync(
+              "h->client", "pl_", "data_size_")));
 
   return code;
 }
@@ -594,7 +622,10 @@ std::string CCionProxyBodyGen::GenMethodBase(const Interface& iface,
       .Change("<METHOD_PARCEL_WRITE>", GenMethodParcelWrite(iface, decl))
       .Change("<METHOD_PARCEL_READ>", GenMethodParcelRead(iface, decl))
       .Change("<METHOD_DELEGATE_APPEND>", GenMethodDelegateAppend(iface,
-          decl)));
+          decl))
+      .Change("<CLIENT_SEND>", GetTransportable().C().GenClientSend(
+          "h->client", "data_", "data_size_",
+          "return_data_", "return_data_size_")));
   return code;
 }
 
index 2eab657447a805c735e383116f42f1d5eca9ce34..40f6fa1cb10dca2ec99891d37f441e4f98b77f41 100644 (file)
@@ -451,8 +451,8 @@ constexpr const char CB_INTERFACE_BASE_DEF[] =
 R"__c_cb(
 typedef struct <PREFIX>_<NAME>_s {
   char *service_name;
-  cion_client_h client;
-  cion_security_h security;
+  <CLIENT_T> client;
+  <SECURITY_T> security;
   <PREFIX>_<NAME>_callback_s callback;
   void *user_data;
   GList *delegates;
@@ -511,7 +511,7 @@ static void __<PREFIX>_<NAME>_consume_command(unsigned char *data, unsigned int
   *p = nullptr;
 }
 
-static void __<PREFIX>_<NAME>_connection_result(const char *service_name, const cion_peer_info_h peer_info,
+static void __<PREFIX>_<NAME>_connection_result(const char *service_name, const <PEER_INFO_T> peer_info,
     const cion_connection_result_h result, void *user_data)
 {
   <PREFIX>_<NAME>_h h = user_data;
@@ -521,7 +521,7 @@ static void __<PREFIX>_<NAME>_connection_result(const char *service_name, const
 }
 
 static void __<PREFIX>_<NAME>_disconnected(const char *service_name,
-    const cion_peer_info_h peer_info, void *user_data)
+    const <PEER_INFO_T> peer_info, void *user_data)
 {
   <PREFIX>_<NAME>_h h = user_data;
 
@@ -531,7 +531,7 @@ static void __<PREFIX>_<NAME>_disconnected(const char *service_name,
 }
 
 static void __<PREFIX>_<NAME>_discovered(const char *service_name,
-    const cion_peer_info_h peer_info, void *user_data)
+    const <PEER_INFO_T> peer_info, void *user_data)
 {
   <PREFIX>_<NAME>_h h = user_data;
 
@@ -540,29 +540,29 @@ static void __<PREFIX>_<NAME>_discovered(const char *service_name,
 }
 
 static void __<PREFIX>_<NAME>_received(const char *service_name,
-    const cion_peer_info_h peer_info, const cion_payload_h payload,
-    cion_payload_transfer_status_e status,
+    const <PEER_INFO_T> peer_info, const <PAYLOAD_T> payload,
+    <PAYLOAD_TRANSFER_STATUS_T> status,
     void *user_data)
 {
   <PREFIX>_<NAME>_h h = user_data;
   rpc_port_parcel_h parcel;
   unsigned char *data;
-  cion_payload_type_e type;
+  <PAYLOAD_TYPE_E> type;
   int cmd = -1;
   int ret;
   unsigned int data_len;
 
   _W("service_name(%s)", service_name);
 
-  ret = cion_payload_get_type(payload, &type);
-  if (ret != CION_ERROR_NONE) {
+  <PAYLOAD_GET_TYPE>
+  if (ret != <ERROR_NONE>) {
          _E("Faled to cion_payload_get_type : %d", ret);
          return;
   }
 
-  if (type == CION_PAYLOAD_TYPE_DATA) {
-    ret = cion_payload_get_data(payload, &data, &data_len);
-    if (ret != CION_ERROR_NONE) {
+  if (type == <PAYLOAD_TYPE_DATA>) {
+    <PAYLOAD_GET_DATA>
+    if (ret != <ERROR_NONE>) {
       _E("Faled to cion_payload_get_data : %d", ret);
       return;
     }
@@ -585,7 +585,7 @@ static void __<PREFIX>_<NAME>_received(const char *service_name,
     __<PREFIX>_<NAME>_process_received_event(&h->delegates, parcel);
     rpc_port_parcel_destroy(parcel);
 
-  } else if (type == CION_PAYLOAD_TYPE_FILE) {
+  } else if (type == <PAYLOAD_TYPE_FILE>) {
     if (h->callback.file_received)
       h->callback.file_received(peer_info, payload, status, h->user_data);
   }
@@ -596,7 +596,7 @@ int <PREFIX>_<NAME>_create(const char *service_name, <PREFIX>_<NAME>_callback_s
 {
   <PREFIX>_<NAME>_t *handle;
   int ret;
-  cion_security_h security;
+  <SECURITY_T> security;
 
   if (service_name == nullptr || callback == nullptr || h == nullptr) {
     _E("Invalid parameter");
@@ -622,47 +622,7 @@ int <PREFIX>_<NAME>_create(const char *service_name, <PREFIX>_<NAME>_callback_s
     <PREFIX>_<NAME>_destroy(handle);
     return CION_ERROR_OUT_OF_MEMORY;
   }
-
-  ret = cion_security_create(&security);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to create security handle. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  <SET_SECURITY>
-  handle->security = security;
-
-  ret = cion_client_create(&handle->client, service_name, handle->security);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to create proxy handle. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  handle->callback = *callback;
-  handle->user_data = user_data;
-
-  ret = cion_client_add_connection_result_cb(handle->client, __<PREFIX>_<NAME>_connection_result, handle);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add connection result cb. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  ret = cion_client_add_disconnected_cb(handle->client, __<PREFIX>_<NAME>_disconnected, handle);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add disconnected event cb. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
-
-  ret = cion_client_add_payload_received_cb(handle->client, __<PREFIX>_<NAME>_received, handle);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add received event cb. error(%d)", ret);
-    <PREFIX>_<NAME>_destroy(handle);
-    return ret;
-  }
+  <CLIENT_CREATE>
 
   *h = handle;
 
@@ -682,13 +642,7 @@ int <PREFIX>_<NAME>_destroy(<PREFIX>_<NAME>_h h)
 
   if (h->delegates)
     g_list_free_full(h->delegates, free);
-
-  if (h->client)
-    cion_client_destroy(h->client);
-
-  if (h->security)
-    cion_security_destroy(h->security);
-
+  <CLIENT_DESTROY>
   if (h->service_name)
     free(h->service_name);
 
@@ -697,7 +651,7 @@ int <PREFIX>_<NAME>_destroy(<PREFIX>_<NAME>_h h)
   return CION_ERROR_NONE;
 }
 
-int <PREFIX>_<NAME>_try_connect(<PREFIX>_<NAME>_h h, const cion_peer_info_h peer_info)
+int <PREFIX>_<NAME>_try_connect(<PREFIX>_<NAME>_h h, const <PEER_INFO_T> peer_info)
 {
   int ret;
 
@@ -706,11 +660,7 @@ int <PREFIX>_<NAME>_try_connect(<PREFIX>_<NAME>_h h, const cion_peer_info_h peer
     return CION_ERROR_INVALID_PARAMETER;
   }
 
-  ret = cion_client_connect(h->client, peer_info);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to connect to stub. error(%d)", ret);
-    return ret;
-  }
+  <CLIENT_TRY_CONNECT>
 
   return CION_ERROR_NONE;
 }
@@ -725,11 +675,7 @@ int <PREFIX>_<NAME>_disconnect(<PREFIX>_<NAME>_h h)
     return CION_ERROR_INVALID_PARAMETER;
   }
 
-  ret = cion_client_disconnect(h->client);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to disconnect to stub. error(%d)", ret);
-    return ret;
-  }
+  <CLIENT_DISCONNECT>
 
   return CION_ERROR_NONE;
 }
@@ -743,11 +689,7 @@ int <PREFIX>_<NAME>_try_discovery(<PREFIX>_<NAME>_h h)
         return CION_ERROR_INVALID_PARAMETER;
    }
 
-  ret = cion_client_try_discovery(h->client, __<PREFIX>_<NAME>_discovered, h);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to discovery to stub. error(%d)", ret);
-    return ret;
-  }
+  <CLIENT_TRY_DISCOVERY>
 
   return CION_ERROR_NONE;
 }
@@ -761,11 +703,7 @@ int <PREFIX>_<NAME>_stop_discovery(<PREFIX>_<NAME>_h h)
        return CION_ERROR_INVALID_PARAMETER;
   }
 
- ret = cion_client_stop_discovery(h->client);
- if (ret != CION_ERROR_NONE) {
-   _E("Failed to stop discovery to stub. error(%d)", ret);
-   return ret;
- }
+  <CLIENT_STOP_DISCOVERY>
 
  return CION_ERROR_NONE;
 }
@@ -791,7 +729,7 @@ void <PREFIX>_<NAME>_invoke_<METHOD_NAME>(<PREFIX>_<NAME>_h h<METHOD_PARAMS>)
   int res_;
   unsigned int data_size_;
   unsigned char *data_;
-  cion_payload_h pl_ = nullptr;
+  <PAYLOAD_T> pl_ = nullptr;
   <FILE_LIST_DEF>
 
   if (h == nullptr<METHOD_PARAMS_CHECK>) {
@@ -827,28 +765,10 @@ void <PREFIX>_<NAME>_invoke_<METHOD_NAME>(<PREFIX>_<NAME>_h h<METHOD_PARAMS>)
     goto out;
   }
 
-  res_ = cion_payload_create(&pl_, CION_PAYLOAD_TYPE_DATA);
-  if (res_ != CION_ERROR_NONE) {
-    _E("Failed to cion_payload_create : %d", res_);
-    goto out;
-  }
-
-  res_ = cion_payload_set_data(pl_, (const unsigned char*)data_, data_size_);
-  if (res_ != CION_ERROR_NONE) {
-    _E("Failed to cion_payload_set_data : %d", res_);
-    goto out;
-  }
-
-  res_ = cion_client_send_payload_async(h->client, pl_, NULL, NULL);
-  if (res_ != CION_ERROR_NONE) {
-    _E("Failed to cion_client_send_payload_async : %d", res_);
-    goto out;
-  }
-
+  <CLIENT_SEND_ASYNC>
   <FILE_LIST_SEND>
 
 out:
-  cion_payload_destroy(pl_);
   rpc_port_parcel_destroy(parcel_);
 
   <FILE_LIST_FREE>
@@ -920,12 +840,7 @@ R"__c_cb(
     goto out;
   }
 
-  res_ = cion_client_send_data(h->client, data_, data_size_ , 5 * 1000, &return_data_, &return_data_size_);
-
-  if (res_ != CION_ERROR_NONE) {
-    _E("Failed to send parcel. error(%d)", res_);
-    goto out;
-  }
+  <CLIENT_SEND>
 
   rpc_port_parcel_destroy(parcel_);
   parcel_ = nullptr;
index 4e9c4f48b0f978fdc978081619e2d4cc48e9edd0..528af9b86a22a7a7f9460ff58eb67d0191d17972 100644 (file)
@@ -114,7 +114,11 @@ void CCionProxyHeaderGen::GenInterfaceBase(std::ofstream& stream,
     const Interface& iface) {
   std::string code(ReplaceAll(CB_INTERFACE_BASE, {
       { "<PREFIX>", GetHandlePrefix() },
-      { "<NAME>", iface.GetID() }
+      { "<NAME>", iface.GetID() },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() },
+      { "<PAYLOAD_T>", GetTransportable().C().GenPayloadType() },
+      { "<PAYLOAD_TRANSFER_STATUS_T>",
+          GetTransportable().C().GenPayloadTransferStatusType() }
   }));
 
   stream << SmartIndent(code);
index 352ff089442d4652e431be01dd957a732c586489..969fe40e588300202cef0b2dedd883c8e2ae4668 100644 (file)
@@ -233,7 +233,7 @@ typedef void (*<PREFIX>_<NAME>_disconnected_cb)(<PREFIX>_<NAME>_h h, void *user_
  * @par Sample code:
  * @code
 
-void <PREFIX>_<NAME>_stub_discovered_cb(const cion_peer_info_h peer_info, void *user_data)
+void <PREFIX>_<NAME>_stub_discovered_cb(const <PEER_INFO_T> peer_info, void *user_data)
 {
   <PREFIX>_<NAME>_h handle = user_data;
   char *app_id = NULL;
@@ -247,7 +247,7 @@ void <PREFIX>_<NAME>_stub_discovered_cb(const cion_peer_info_h peer_info, void *
 }
  * @endcode
  */
-typedef void (*<PREFIX>_<NAME>_stub_discovered_cb)(const cion_peer_info_h peer_info, void *user_data);
+typedef void (*<PREFIX>_<NAME>_stub_discovered_cb)(const <PEER_INFO_T> peer_info, void *user_data);
 
 
 /**
@@ -266,8 +266,8 @@ typedef void (*<PREFIX>_<NAME>_stub_discovered_cb)(const cion_peer_info_h peer_i
  * @par Sample code:
  * @code
 
-void <PREFIX>_<NAME>__file_received_cb(const cion_peer_info_h peer_info, const cion_payload_h payload,
-               cion_payload_transfer_status_e status, void *user_data)
+void <PREFIX>_<NAME>__file_received_cb(const <PEER_INFO_T> peer_info, const <PAYLOAD_T> payload,
+               <PAYLOAD_TRANSFER_STATUS_T> status, void *user_data)
 {
   <PREFIX>_<NAME>_h handle = user_data;
 
@@ -305,8 +305,8 @@ end:
 }
  * @endcode
  */
-typedef void (*<PREFIX>_<NAME>_file_received_cb)(const cion_peer_info_h peer_info, const cion_payload_h payload,
-    cion_payload_transfer_status_e status, void *user_data);
+typedef void (*<PREFIX>_<NAME>_file_received_cb)(const <PEER_INFO_T> peer_info, const <PAYLOAD_T> payload,
+    <PAYLOAD_TRANSFER_STATUS_T> status, void *user_data);
 
 /**
  * @brief The structure type containing the set of callback functions for handling proxy events.
@@ -369,7 +369,7 @@ int <PREFIX>_<NAME>_destroy(<PREFIX>_<NAME>_h h);
  * @retval #CION_ERROR_INVALID_OPERATION Invalid operation
  * @retval #CION_ERROR_IO_ERROR IO error
  */
-int <PREFIX>_<NAME>_try_connect(<PREFIX>_<NAME>_h h, const cion_peer_info_h peer_info);
+int <PREFIX>_<NAME>_try_connect(<PREFIX>_<NAME>_h h, const <PEER_INFO_T> peer_info);
 
 /**
  * @brief Disconnects from a server.
index 7e09b51758d49c6269959e820fd3c78b71debedb..c6bccc5a8a7a2ddb17351a58fdfadaf23e054818 100644 (file)
@@ -57,7 +57,10 @@ void CCionStubBodyGen::GenThreadEnableDefinition(std::ofstream& stream) {
 
 // @see #CB_INTERFACE_METHOD_HANDLER_TYPE
 void CCionStubBodyGen::GenInterfaceMethodHandlerType(std::ofstream& stream) {
-  stream << SmartIndent(CB_INTERFACE_METHOD_HANDLER_TYPE);
+  std::string code(ReplaceAll(CB_INTERFACE_METHOD_HANDLER_TYPE,
+      "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType()));
+
+  stream << SmartIndent(code);
 }
 
 void CCionStubBodyGen::GenInterfaceEnums(std::ofstream& stream) {
@@ -185,7 +188,8 @@ void CCionStubBodyGen::GenInterfaceDelegateDef(std::ofstream& stream,
   std::string code(ReplaceAll(CB_INTERFACE_DELEGATE_DEF, {
       { "<PREFIX>", GetHandlePrefix() },
       { "<NAME>", iface.GetID() },
-      { "<DELEGATE_NAME>", decl.GetID() }
+      { "<DELEGATE_NAME>", decl.GetID() },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() }
   }));
 
   stream << SmartIndent(code);
@@ -196,7 +200,9 @@ void CCionStubBodyGen::GenInterfaceBaseDef(std::ofstream& stream,
     const Interface& iface) {
   std::string code(ReplaceAll(CB_INTERFACE_BASE_DEF, {
       { "<PREFIX>", GetHandlePrefix() },
-      { "<NAME>", iface.GetID() }
+      { "<NAME>", iface.GetID() },
+      { "<SERVER_T>", GetTransportable().C().GenServerType() },
+      { "<SECURITY_T>", GetTransportable().C().GenSecurityType() }
   }));
 
   stream << SmartIndent(code);
@@ -237,7 +243,8 @@ void CCionStubBodyGen::GenInterfaceContextBase(std::ofstream& stream,
     const Interface& iface) {
   std::string code(ReplaceAll(CB_INTERFACE_CONTEXT_BASE, {
       { "<PREFIX>", GetHandlePrefix() },
-      { "<NAME>", iface.GetID() }
+      { "<NAME>", iface.GetID() },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() }
   }));
 
   stream << SmartIndent(code);
@@ -334,13 +341,25 @@ void CCionStubBodyGen::GenInterfaceDelegateBase(std::ofstream& stream,
       { "<PREFIX>", GetHandlePrefix() },
       { "<FILE_LIST_SEND>", file_send },
       { "<FILE_LIST_FREE>", file_free },
+      { "<SERVER_SEND_ASYNC>", GetTransportable().C().GenServerSendAsync(
+          "__<NAME>.stub", "", "pl_", "data_size_") },
       { "<NAME>", iface.GetID() },
       { "<DELEGATE_NAME>", decl.GetID() },
       { "<DELEGATE_PARAMS>", GenDelegateParams(iface, decl) },
       { "<FILE_LIST_DEF>", file_def },
       { "<DELEGATE_PARAMS_CHECK>", GenDelegateParamsCheck(iface, decl) },
       { "<DELEGATE_ENUM_VALUE>", enum_value },
-      { "<DELEGATE_PARCEL_WRITE>", GenDelegateParcelWrite(iface, decl) }
+      { "<DELEGATE_PARCEL_WRITE>", GenDelegateParcelWrite(iface, decl) },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() },
+      { "<PAYLOAD_T>", GetTransportable().C().GenPayloadType() },
+      { "<PEER_INFO_DESTROY>",
+          GetTransportable().C().GenPeerInfoDestroy("h->peer_info") },
+      { "<PEER_INFO_CLONE1>",
+          GetTransportable().C()
+              .GenPeerInfoClone("h->peer_info", "&handle->peer_info") },
+      { "<PEER_INFO_CLONE2>",
+          GetTransportable().C()
+              .GenPeerInfoClone("peer_info", "&h->peer_info") }
   }));
 
   stream << SmartIndent(code);
@@ -602,7 +621,8 @@ void CCionStubBodyGen::GenInterfaceMethodHandlerBase(std::ofstream& stream,
       { "<METHOD_HANDLER_CALLBACK_INVOKE>", GenMethodHandlerCallbackInvoke(decl) },
       { "<METHOD_HANDLER_PARCEL_WRITE>",  GenMethodHandlerParcelWrite(iface, decl) },
       { "<FILE_LIST_FREE>", file_free },
-      { "<METHOD_HANDLER_ARGS_FREE>", GenMethodHandlerArgsFree(iface, decl) }
+      { "<METHOD_HANDLER_ARGS_FREE>", GenMethodHandlerArgsFree(iface, decl) },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() }
   }));
 
   stream << SmartIndent(code);
@@ -647,9 +667,28 @@ void CCionStubBodyGen::GenInterfaceMethodTable(std::ofstream& stream,
 void CCionStubBodyGen::GenInterfaceBase(std::ofstream& stream,
     const Interface& iface) {
   std::string code(ReplaceAll(CB_INTERFACE_BASE, {
+      { "<SERVER_REGISTER>", GetTransportable().C().GenServerRegister() },
+      { "<SERVER_UNREGISTER>", GetTransportable().C().GenServerUnregister() },
+      { "<SERVER_ACCEPT>", GetTransportable().C().GenServerAccept() },
+      { "<SERVER_REJECT>", GetTransportable().C().GenServerReject() },
+      { "<SERVER_SET_DISPLAY_NAME>",
+          GetTransportable().C().GenServerSetDisplayName() },
       { "<PREFIX>", GetHandlePrefix() },
       { "<NAME>", iface.GetID() },
-      { "<SET_SECURITY>", GenSecurityString(iface) }
+      { "<SET_SECURITY>", GenSecurityString(iface) },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() },
+      { "<PAYLOAD_T>", GetTransportable().C().GenPayloadType() },
+      { "<PAYLOAD_TRANSFER_STATUS_T>",
+          GetTransportable().C().GenPayloadTransferStatusType() },
+      { "<SECURITY_T>", GetTransportable().C().GenSecurityType() },
+      { "<PAYLOAD_TYPE_E>", GetTransportable().C().GenPayloadTypeEnum() },
+      { "<PAYLOAD_GET_TYPE>", GetTransportable().C().GenPayloadGetType() },
+      { "<ERROR_NONE>", GetTransportable().C().GenErrorNone() },
+      { "<PAYLOAD_TYPE_DATA>", GetTransportable().C().GenPayloadTypeData() },
+      { "<PAYLOAD_TYPE_FILE>", GetTransportable().C().GenPayloadTypeFile() },
+      { "<PAYLOAD_GET_DATA>", GetTransportable().C().GenPayloadGetData() },
+      { "<SERVER_FOREACH_CONNECTED_PEER_INFO>", GetTransportable().C().GenServerForeachConnectedPeerInfo(iface.GetID()) },
+      { "<SERVER_SET_ONDEMAND_LAUNCH_ENABLED>", GetTransportable().C().GenServerSetOnDemandLaunchEnabled(iface.GetID()) }
   }));
 
   stream << SmartIndent(code);
index 80414e3241eaaf93b5981bb49314a42195d9c69b..b28eaee840868c9d5ee9bb5d88eaf5cfab5f8782 100644 (file)
@@ -27,7 +27,7 @@ R"__c_cb(
  */
 constexpr const char CB_INTERFACE_METHOD_HANDLER_TYPE[] =
 R"__c_cb(
-typedef int (*cion_stub_method_handler)(const cion_peer_info_h peer_info, rpc_port_parcel_h parcel, rpc_port_parcel_h return_parcel, void *data);
+typedef int (*cion_stub_method_handler)(const <PEER_INFO_T> peer_info, rpc_port_parcel_h parcel, rpc_port_parcel_h return_parcel, void *data);
 )__c_cb";
 
 /**
@@ -82,8 +82,8 @@ R"__c_cb(
 constexpr const char CB_INTERFACE_BASE_DEF[] =
 R"__c_cb(
 typedef struct <PREFIX>_<NAME>_s {
-  cion_server_h stub;
-  cion_security_h security;
+  <SERVER_T> stub;
+  <SECURITY_T> security;
   <PREFIX>_<NAME>_callback_s callback;
   void *user_data;
   GRecMutex mutex;
@@ -101,7 +101,7 @@ constexpr const char CB_INTERFACE_DELEGATE_DEF[] =
 R"__c_cb(
 typedef struct <PREFIX>_<NAME>_<DELEGATE_NAME>_s {
   rpc_port_parcelable_t parcelable;
-  cion_peer_info_h peer_info;
+  <PEER_INFO_T> peer_info;
   int id;
   int seq_id;
   bool once;
@@ -115,7 +115,7 @@ typedef struct <PREFIX>_<NAME>_<DELEGATE_NAME>_s {
  */
 constexpr const char CB_INTERFACE_CONTEXT_BASE[] =
 R"__c_cb(
-static int __<PREFIX>_<NAME>_process_received_event(<PREFIX>_<NAME>_t *h, const cion_peer_info_h peer_info, rpc_port_parcel_h parcel, rpc_port_parcel_h return_parcel)
+static int __<PREFIX>_<NAME>_process_received_event(<PREFIX>_<NAME>_t *h, const <PEER_INFO_T> peer_info, rpc_port_parcel_h parcel, rpc_port_parcel_h return_parcel)
 {
   int ret = CION_ERROR_NONE;
   int cmd = -1;
@@ -220,7 +220,7 @@ int <PREFIX>_<NAME>_<DELEGATE_NAME>_destroy(<PREFIX>_<NAME>_<DELEGATE_NAME>_h h)
 
   _W("id(%d), seq_id(%d), once(%s)", h->id, h->seq_id, h->once ? "true" : "false");
   if (h->peer_info)
-    cion_peer_info_destroy(h->peer_info);
+    <PEER_INFO_DESTROY>
 
   free(h);
 
@@ -243,7 +243,7 @@ int <PREFIX>_<NAME>_<DELEGATE_NAME>_clone(<PREFIX>_<NAME>_<DELEGATE_NAME>_h h, <
     return ret;
   }
 
-  cion_peer_info_clone(h->peer_info, &handle->peer_info);
+  <PEER_INFO_CLONE1>
   handle->seq_id = h->seq_id;
   handle->once = h->once;
   handle->valid = h->valid;
@@ -311,14 +311,14 @@ int <PREFIX>_<NAME>_<DELEGATE_NAME>_get_tag(<PREFIX>_<NAME>_<DELEGATE_NAME>_h h,
   return CION_ERROR_NONE;
 }
 
-static int __<PREFIX>_<NAME>_<DELEGATE_NAME>_set_peerInfo(<PREFIX>_<NAME>_<DELEGATE_NAME>_h h, const cion_peer_info_h peer_info)
+static int __<PREFIX>_<NAME>_<DELEGATE_NAME>_set_peerInfo(<PREFIX>_<NAME>_<DELEGATE_NAME>_h h, const <PEER_INFO_T> peer_info)
 {
   if (h == nullptr || peer_info == nullptr) {
     _E("Invalid parameter");
     return CION_ERROR_INVALID_PARAMETER;
   }
 
-  return cion_peer_info_clone(peer_info, &h->peer_info);
+  return <PEER_INFO_CLONE2>
 }
 
 int <PREFIX>_<NAME>_<DELEGATE_NAME>_invoke(<PREFIX>_<NAME>_<DELEGATE_NAME>_h h<DELEGATE_PARAMS>)
@@ -327,8 +327,8 @@ int <PREFIX>_<NAME>_<DELEGATE_NAME>_invoke(<PREFIX>_<NAME>_<DELEGATE_NAME>_h h<D
   int ret_;
   unsigned int data_size_;
   unsigned char *data_;
-  cion_payload_h pl_ = nullptr;
-  cion_peer_info_h peer_info;
+  <PAYLOAD_T> pl_ = nullptr;
+  <PEER_INFO_T> peer_info;
   <FILE_LIST_DEF>
 
 
@@ -365,30 +365,13 @@ int <PREFIX>_<NAME>_<DELEGATE_NAME>_invoke(<PREFIX>_<NAME>_<DELEGATE_NAME>_h h<D
 
    }
 
-   ret_ = cion_payload_create(&pl_, CION_PAYLOAD_TYPE_DATA);
-   if (ret_ != CION_ERROR_NONE) {
-        _E("Failed to cion_payload_create : %d", ret_);
-        goto out;
-   }
-
-   ret_ = cion_payload_set_data(pl_, (const unsigned char*)data_, data_size_);
-   if (ret_ != CION_ERROR_NONE) {
-        _E("Failed to cion_payload_set_data : %d", ret_);
-        goto out;
-   }
-
-   ret_ = cion_server_send_payload_async(__<NAME>.stub, peer_info, pl_, NULL, NULL);
-   if (ret_ != CION_ERROR_NONE) {
-        _E("Failed to cion_client_send_payload_async : %d", ret_);
-        goto out;
-   }
+  <SERVER_SEND_ASYNC>
 
    <FILE_LIST_SEND>
 
   h->valid = false;
 
 out:
-  cion_payload_destroy(pl_);
   rpc_port_parcel_destroy(parcel_);
   <FILE_LIST_FREE>
   g_rec_mutex_unlock(&__<NAME>.mutex);
@@ -442,7 +425,7 @@ rpc_port_parcel_write_<PARCEL_TYPE>(parcel_, <ARG>);
  */
 constexpr const char CB_INTERFACE_METHOD_HANDLER_BASE[] =
 R"__c_cb(
-static int __<PREFIX>_<NAME>_method_<METHOD_NAME>_handler(const cion_peer_info_h peer_info, rpc_port_parcel_h parcel, rpc_port_parcel_h return_parcel, void *user_data)
+static int __<PREFIX>_<NAME>_method_<METHOD_NAME>_handler(const <PEER_INFO_T> peer_info, rpc_port_parcel_h parcel, rpc_port_parcel_h return_parcel, void *user_data)
 {
   <PREFIX>_<NAME>_t *h = user_data;
   int ret_ = CION_ERROR_NONE;
@@ -662,7 +645,7 @@ R"__c_cb(
 constexpr const char CB_INTERFACE_BASE[] =
 R"__c_cb(
 static void __<PREFIX>_<NAME>_disconnected_cb(const char *service_name,
-    const cion_peer_info_h peer_info, void *user_data)
+    const <PEER_INFO_T> peer_info, void *user_data)
 {
   <PREFIX>_<NAME>_t *h = user_data;
 
@@ -670,7 +653,7 @@ static void __<PREFIX>_<NAME>_disconnected_cb(const char *service_name,
   h->callback.disconnected(peer_info, h->user_data);
 }
 
-static void __<PREFIX>_<NAME>_connection_result_cb(const char *service_name, const cion_peer_info_h peer_info,
+static void __<PREFIX>_<NAME>_connection_result_cb(const char *service_name, const <PEER_INFO_T> peer_info,
     const cion_connection_result_h result, void *user_data)
 {
   <PREFIX>_<NAME>_t *h = user_data;
@@ -680,28 +663,28 @@ static void __<PREFIX>_<NAME>_connection_result_cb(const char *service_name, con
 }
 
 static void __<PREFIX>_<NAME>_payload_received_cb(const char *service_name,
-    const cion_peer_info_h peer_info, const cion_payload_h payload,
-    cion_payload_transfer_status_e status,
+    const <PEER_INFO_T> peer_info, const <PAYLOAD_T> payload,
+    <PAYLOAD_TRANSFER_STATUS_T> status,
     void *user_data)
 {
   <PREFIX>_<NAME>_t* h = user_data;
   rpc_port_parcel_h parcel;
   unsigned char *data;
-  cion_payload_type_e type;
+  <PAYLOAD_TYPE_E> type;
   int ret;
   unsigned int data_len;
 
   _W("service_name(%s)", service_name);
 
-  ret = cion_payload_get_type(payload, &type);
-  if (ret != CION_ERROR_NONE) {
+  <PAYLOAD_GET_TYPE>
+  if (ret != <ERROR_NONE>) {
          _E("Faled to cion_payload_get_type : %d", ret);
          return;
   }
 
-  if (type == CION_PAYLOAD_TYPE_DATA) {
-    ret = cion_payload_get_data(payload, &data, &data_len);
-    if (ret != CION_ERROR_NONE) {
+  if (type == <PAYLOAD_TYPE_DATA>) {
+    <PAYLOAD_GET_DATA>
+    if (ret != <ERROR_NONE>) {
       _E("Faled to cion_payload_get_data : %d", ret);
       return;
     }
@@ -716,7 +699,7 @@ static void __<PREFIX>_<NAME>_payload_received_cb(const char *service_name,
     __<PREFIX>_<NAME>_process_received_event(h, peer_info, parcel, NULL);
     rpc_port_parcel_destroy(parcel);
 
-  } else if (type == CION_PAYLOAD_TYPE_FILE) {
+  } else if (type == <PAYLOAD_TYPE_FILE>) {
     if (h->callback.file_received)
     h->callback.file_received(peer_info, payload, status, h->user_data);
   }
@@ -724,7 +707,7 @@ static void __<PREFIX>_<NAME>_payload_received_cb(const char *service_name,
 }
 
 static void __<PREFIX>_<NAME>_data_received_cb(const char *service_name,
-    const cion_peer_info_h peer_info, const unsigned char *data,
+    const <PEER_INFO_T> peer_info, const unsigned char *data,
     unsigned int data_size, unsigned char **return_data,
     unsigned int *return_data_size, void *user_data)
 {
@@ -768,7 +751,7 @@ static void __<PREFIX>_<NAME>_data_received_cb(const char *service_name,
 }
 
 static void __<PREFIX>_<NAME>_connection_request_cb(const char *service_name,
-    const cion_peer_info_h peer_info, void *user_data)
+    const <PEER_INFO_T> peer_info, void *user_data)
 {
   <PREFIX>_<NAME>_t *h = user_data;
 
@@ -780,7 +763,7 @@ static void __<PREFIX>_<NAME>_connection_request_cb(const char *service_name,
 int <PREFIX>_<NAME>_register(const char *service_name, const char *display_name, <PREFIX>_<NAME>_callback_s *callback, void *user_data)
 {
   int ret;
-  cion_security_h security;
+  <SECURITY_T> security;
 
   if (callback == nullptr || callback->connection_result == nullptr || callback->disconnected == nullptr || callback->connection_request == nullptr) {
     _E("Invalid parameter");
@@ -796,56 +779,7 @@ int <PREFIX>_<NAME>_register(const char *service_name, const char *display_name,
   __<NAME>.callback = *callback;
   __<NAME>.user_data = user_data;
 
-  ret = cion_security_create(&security);
-   if (ret != CION_ERROR_NONE) {
-        _E("Failed to create security handle. error(%d)", ret);
-        return ret;
-   }
-
-   <SET_SECURITY>
-   __<NAME>.security = security;
-
-  ret = cion_server_create(&__<NAME>.stub, service_name, display_name, __<NAME>.security);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to create stub handle. error(%d)", ret);
-    <PREFIX>_<NAME>_unregister();
-    return ret;
-  }
-
-  ret = cion_server_add_connection_result_cb(__<NAME>.stub, __<PREFIX>_<NAME>_connection_result_cb, &__<NAME>);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add connection result event callback");
-    <PREFIX>_<NAME>_unregister();
-    return ret;
-  }
-
-  ret = cion_server_add_payload_received_cb(__<NAME>.stub, __<PREFIX>_<NAME>_payload_received_cb, &__<NAME>);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add payload recieved event callback");
-    <PREFIX>_<NAME>_unregister();
-    return ret;
-  }
-
-  ret = cion_server_add_disconnected_cb(__<NAME>.stub, __<PREFIX>_<NAME>_disconnected_cb, &__<NAME>);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to add disconnected event callback");
-    <PREFIX>_<NAME>_unregister();
-    return ret;
-  }
-
-  ret = cion_server_set_data_received_cb(__<NAME>.stub, __<PREFIX>_<NAME>_data_received_cb, &__<NAME>);
-   if (ret != CION_ERROR_NONE) {
-        _E("Failed to add data recieved event callback");
-        <PREFIX>_<NAME>_unregister();
-        return ret;
-   }
-
-  ret = cion_server_listen(__<NAME>.stub, __<PREFIX>_<NAME>_connection_request_cb, &__<NAME>);
-  if (ret != CION_ERROR_NONE) {
-    _E("Failed to listen events. error(%d)", ret);
-    <PREFIX>_<NAME>_unregister();
-    return ret;
-  }
+  <SERVER_REGISTER>
 
   return CION_ERROR_NONE;
 }
@@ -856,13 +790,7 @@ int <PREFIX>_<NAME>_unregister(void)
   g_rec_mutex_unlock(&__<NAME>.mutex);
   g_rec_mutex_clear(&__<NAME>.mutex);
 
-  if (__<NAME>.security)
-    cion_security_destroy(__<NAME>.security);
-
-  if (__<NAME>.stub) {
-    cion_server_destroy(__<NAME>.stub);
-    __<NAME>.stub = nullptr;
-  }
+  <SERVER_UNREGISTER>
 
   return CION_ERROR_NONE;
 }
@@ -875,13 +803,13 @@ int <PREFIX>_<NAME>_foreach_peer_info(<PREFIX>_<NAME>_peer_info_cb callback, voi
   }
 
   g_rec_mutex_lock(&__<NAME>.mutex);
-  cion_server_foreach_connected_peer_info(__<NAME>.stub, callback, user_data);
+  <SERVER_FOREACH_CONNECTED_PEER_INFO>
   g_rec_mutex_unlock(&__<NAME>.mutex);
 
   return CION_ERROR_NONE;
 }
 
-int <PREFIX>_<NAME>_accept(const cion_peer_info_h peer_info)
+int <PREFIX>_<NAME>_accept(const <PEER_INFO_T> peer_info)
 {
   int ret;
 
@@ -889,15 +817,12 @@ int <PREFIX>_<NAME>_accept(const cion_peer_info_h peer_info)
         _E("Invalid parameter");
         return CION_ERROR_INVALID_PARAMETER;
   }
-
-  ret = cion_server_accept(__<NAME>.stub, peer_info);
-  if (ret != CION_ERROR_NONE)
-    _E("Failed to accept. error(%d)", ret);
+  <SERVER_ACCEPT>
 
   return ret;
 }
 
-int <PREFIX>_<NAME>_reject(const cion_peer_info_h peer_info, const char *reason)
+int <PREFIX>_<NAME>_reject(const <PEER_INFO_T> peer_info, const char *reason)
 {
   int ret;
 
@@ -906,9 +831,7 @@ int <PREFIX>_<NAME>_reject(const cion_peer_info_h peer_info, const char *reason)
         return CION_ERROR_INVALID_PARAMETER;
   }
 
-  ret = cion_server_reject(__<NAME>.stub, peer_info, reason);
-  if (ret != CION_ERROR_NONE)
-    _E("Failed to reject. error(%d)", ret);
+  <SERVER_REJECT>
 
   return ret;
 }
@@ -922,22 +845,14 @@ int <PREFIX>_<NAME>_set_display_name(const char *display_name)
          return CION_ERROR_INVALID_PARAMETER;
    }
 
-  ret = cion_server_set_display_name(__<NAME>.stub, display_name);
-  if (ret != CION_ERROR_NONE)
-    _E("Failed to set display name. error(%d)", ret);
+  <SERVER_SET_DISPLAY_NAME>
 
   return ret;
 }
 
 int <PREFIX>_<NAME>_set_ondemand_launch_enabled(bool enable)
 {
-  int ret;
-
-  ret = cion_server_set_on_demand_launch_enabled(__<NAME>.stub, enable);
-  if (ret != CION_ERROR_NONE)
-    _E("Failed to set ondemand launch enable. error(%d)", ret);
-
-  return ret;
+  <SERVER_SET_ONDEMAND_LAUNCH_ENABLED>
 }
 
 )__c_cb";
index 9a6c4850ccf1b97d55a58af4b4116b818259f5c9..c1fc7eb1042d04d7428616607fa15292b2d769df 100644 (file)
@@ -87,7 +87,11 @@ void CCionStubHeaderGen::GenInterfaceCallbackBase(std::ofstream& stream,
     const Interface& iface) {
   std::string code(ReplaceAll(CB_INTERFACE_CALLBACK_BASE, {
       { "<PREFIX>", GetHandlePrefix() },
-      { "<NAME>", iface.GetID() }
+      { "<NAME>", iface.GetID() },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() },
+      { "<PAYLOAD_T>", GetTransportable().C().GenPayloadType() },
+      { "<PAYLOAD_TRANSFER_STATUS_T>",
+          GetTransportable().C().GenPayloadTransferStatusType() }
   }));
 
   stream << SmartIndent(code);
@@ -115,7 +119,8 @@ void CCionStubHeaderGen::GenInterfaceMethodCallbackBase(std::ofstream& stream,
       { "<PREFIX>", GetHandlePrefix() },
       { "<NAME>", iface.GetID() },
       { "<METHOD_NAME>", decl.GetID() },
-      { "<METHOD_PARAMS>", GenMethodParams(iface, decl) }
+      { "<METHOD_PARAMS>", GenMethodParams(iface, decl) },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() }
   }));
 
   stream << SmartIndent(code);
@@ -196,7 +201,8 @@ void CCionStubHeaderGen::GenInterfaceBase(std::ofstream& stream,
   std::string code(ReplaceAll(CB_INTERFACE_BASE, {
       { "<PREFIX>", GetHandlePrefix() },
       { "<NAME>", iface.GetID() },
-      { "<METHOD_CALLBACK_DECLS>", GenMethodCallbackDecls(iface) }
+      { "<METHOD_CALLBACK_DECLS>", GenMethodCallbackDecls(iface) },
+      { "<PEER_INFO_T>", GetTransportable().C().GenPeerInfoType() }
   }));
 
   stream << SmartIndent(code);
index 80c860741f29d95fcb710be58cf342ea10923238..44a80da549587cefb5b27d8a23ab3b8732a76bfc 100644 (file)
@@ -161,7 +161,7 @@ R"__c_cb(
  * @see #<PREFIX>_<NAME>_callback_s
  * @see #cion_peer_info_clone()
  */
-typedef void (*<PREFIX>_<NAME>_connection_result_cb)(const cion_peer_info_h peer_info,
+typedef void (*<PREFIX>_<NAME>_connection_result_cb)(const <PEER_INFO_T> peer_info,
     const cion_connection_result_h result, void *user_data);
 
 /**
@@ -174,7 +174,7 @@ typedef void (*<PREFIX>_<NAME>_connection_result_cb)(const cion_peer_info_h peer
  * @see #<PREFIX>_<NAME>_callback_s
  * @see #cion_peer_info_clone()
  */
-typedef void (*<PREFIX>_<NAME>_disconnected_cb)(const cion_peer_info_h peer_info, void *user_data);
+typedef void (*<PREFIX>_<NAME>_disconnected_cb)(const <PEER_INFO_T> peer_info, void *user_data);
 
 /**
  * @brief Called to get the proxy once for each connected proxy.
@@ -186,7 +186,7 @@ typedef void (*<PREFIX>_<NAME>_disconnected_cb)(const cion_peer_info_h peer_info
  * @pre <PREFIX>_<NAME>_foreach_peer_info_cb() will invoke this callback.
  * @see <PREFIX>_<NAME>_foreach_peer_info_cb()
  */
-typedef bool (*<PREFIX>_<NAME>_peer_info_cb)(const cion_peer_info_h peer_info, void *user_data);
+typedef bool (*<PREFIX>_<NAME>_peer_info_cb)(const <PEER_INFO_T> peer_info, void *user_data);
 
 /**
  * @brief Called when the payload is received.
@@ -204,8 +204,8 @@ typedef bool (*<PREFIX>_<NAME>_peer_info_cb)(const cion_peer_info_h peer_info, v
  * @par Sample code:
  * @code
 
-void <PREFIX>_<NAME>__file_received_cb(const cion_peer_info_h peer_info, const cion_payload_h payload,
-               cion_payload_transfer_status_e status, void *user_data)
+void <PREFIX>_<NAME>__file_received_cb(const <PEER_INFO_T> peer_info, const <PAYLOAD_T> payload,
+               <PAYLOAD_TRANSFER_STATUS_T> status, void *user_data)
 {
   <PREFIX>_<NAME>_h handle = user_data;
 
@@ -243,8 +243,8 @@ end:
 
  * @endcode
  */
-typedef void (*<PREFIX>_<NAME>_file_received_cb)(const cion_peer_info_h peer_info, const cion_payload_h payload,
-    cion_payload_transfer_status_e status, void *user_data);
+typedef void (*<PREFIX>_<NAME>_file_received_cb)(const <PEER_INFO_T> peer_info, const <PAYLOAD_T> payload,
+    <PAYLOAD_TRANSFER_STATUS_T> status, void *user_data);
 
 /**
  * @brief Called when a connection is requested.
@@ -258,7 +258,7 @@ typedef void (*<PREFIX>_<NAME>_file_received_cb)(const cion_peer_info_h peer_inf
  * @par Sample code:
  * @code
 
-void <PREFIX>_<NAME>_connection_request_cb(const cion_peer_info_h peer_info, void *user_data)
+void <PREFIX>_<NAME>_connection_request_cb(const <PEER_INFO_T> peer_info, void *user_data)
 {
 
   char *app_version = NULL;
@@ -275,7 +275,7 @@ void <PREFIX>_<NAME>_connection_request_cb(const cion_peer_info_h peer_info, voi
 }
  * @endcode
  */
-typedef void (*<PREFIX>_<NAME>_connection_request_cb)(const cion_peer_info_h peer_info, void *user_data);
+typedef void (*<PREFIX>_<NAME>_connection_request_cb)(const <PEER_INFO_T> peer_info, void *user_data);
 
 )__c_cb";
 
@@ -295,7 +295,7 @@ R"__c_cb(
  * @param[in] user_data The user data passed from the registration function
  * @see #<PREFIX>_<NAME>_callback_s;
  */
-typedef <RETURN_TYPE> (*<PREFIX>_<NAME>_<METHOD_NAME>_cb)(const cion_peer_info_h peer_info<METHOD_PARAMS>, void *user_data);
+typedef <RETURN_TYPE> (*<PREFIX>_<NAME>_<METHOD_NAME>_cb)(const <PEER_INFO_T> peer_info<METHOD_PARAMS>, void *user_data);
 )__c_cb";
 
 /**
@@ -374,7 +374,7 @@ int <PREFIX>_<NAME>_foreach_peer_info(<PREFIX>_<NAME>_peer_info_cb callback, voi
  * @see   <PREFIX>_<NAME>_register()
  * @see   <PREFIX>_<NAME>_connection_request_cb()
  */
-int <PREFIX>_<NAME>_accept(const cion_peer_info_h peer_info);
+int <PREFIX>_<NAME>_accept(const <PEER_INFO_T> peer_info);
 
 /**
  * @brief Rejects the connection request from a peer.
@@ -388,7 +388,7 @@ int <PREFIX>_<NAME>_accept(const cion_peer_info_h peer_info);
  * @see   <PREFIX>_<NAME>_register()
  * @see   <PREFIX>_<NAME>_connection_request_cb()
  */
-int <PREFIX>_<NAME>_reject(const cion_peer_info_h peer_info, const char *reason);
+int <PREFIX>_<NAME>_reject(const <PEER_INFO_T> peer_info, const char *reason);
 
 /**
  * @brief Sets the stub display name.
index 83f93356f810b767ae0945e2912ac94fb4796800..c8a3d83bb63417f482f91418f3fb535ae77f5c41 100644 (file)
@@ -17,6 +17,7 @@
 #ifndef IDLC_GEN_CION_C_TRANSPORTABLE_H_
 #define IDLC_GEN_CION_C_TRANSPORTABLE_H_
 
+#include <list>
 #include <string>
 
 namespace tidl {
@@ -36,8 +37,10 @@ class CTransportable {
       std::string peer) const = 0;
   virtual std::string GenClientFileSend(std::string path,
       std::string client) const = 0;
+  virtual std::string GenGroupType() const = 0;
   virtual std::string GenPayloadTransferStatusType() const = 0;
   virtual std::string GenPeerInfoType() const = 0;
+  virtual std::string GenPeerInfoDestroy(std::string peer) const = 0;
   virtual std::string GenPayloadType() const = 0;
   virtual std::string GenClientType() const = 0;
   virtual std::string GenSecurityType() const = 0;
@@ -56,6 +59,24 @@ class CTransportable {
   virtual std::string GenServerAccept() const = 0;
   virtual std::string GenServerReject() const = 0;
   virtual std::string GenServerSetDisplayName() const = 0;
+  virtual std::string GenGroupPublish() const = 0;
+  virtual std::string GenPayloadTypeEnum() const = 0;
+  virtual std::string GenPayloadTypeData() const = 0;
+  virtual std::string GenPayloadTypeFile() const = 0;
+  virtual std::string GenPayloadGetType() const = 0;
+  virtual std::string GenErrorNone() const = 0;
+  virtual std::string GenPayloadGetData() const = 0;
+  virtual std::string GenClientCreate() const = 0;
+  virtual std::string GenGroupCreate() const = 0;
+  virtual std::string GenGroupDestroy() const = 0;
+  virtual std::string GenClientDestroy() const = 0;
+  virtual std::string GenSetSecurityCA(std::string arg) const = 0;
+  virtual std::string GenSetSecurityCert(std::string arg) const = 0;
+  virtual std::string GenSetSecurityPrivateKey(std::string arg) const = 0;
+  virtual std::string GenPeerInfoClone(std::string src_peer,
+      std::string dest_peer) const = 0;
+  virtual std::string GenServerForeachConnectedPeerInfo(std::string name) const = 0;
+  virtual std::string GenServerSetOnDemandLaunchEnabled(std::string name) const = 0;
 };
 
 }  // namespace tidl
diff --git a/idlc/gen_cion/default_c_transportable.cc b/idlc/gen_cion/default_c_transportable.cc
new file mode 100644 (file)
index 0000000..a858a97
--- /dev/null
@@ -0,0 +1,657 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "idlc/gen_cion/default_c_transportable.h"
+
+#include <utility>
+
+#include "idlc/gen/replace_all.h"
+
+namespace {
+
+constexpr const char __CLINET_FILE_SEND[] =
+R"__c_cb(
+    cion_payload_h pl;
+    int ret = cion_payload_create(&pl, CION_PAYLOAD_TYPE_FILE);
+
+    if (ret != CION_ERROR_NONE) {
+      _E("Failed to cion_payload_create : %d", ret);
+      return ret;
+    }
+
+    ret = cion_payload_set_file_path(pl, <FILE_PATH>);
+    if (ret != CION_ERROR_NONE) {
+      _E("Failed to cion_payload_set_file_path : %d - %s", ret, value);
+      cion_payload_destroy(pl);
+      return ret;
+    }
+
+    ret = cion_client_send_payload_async(<CLIENT_H>, pl, NULL, NULL);
+    if (ret != CION_ERROR_NONE) {
+      _E("Failed to cion_client_send_payload_async : %d - %s", ret, value);
+      cion_payload_destroy(pl);
+      return ret;
+    }
+
+    cion_payload_destroy(pl);
+)__c_cb";
+
+constexpr const char __SERVER_FILE_SEND[] =
+R"__c_cb(
+    cion_payload_h pl;
+    int r = cion_payload_create(&pl, CION_PAYLOAD_TYPE_FILE);
+
+    if (r != CION_ERROR_NONE) {
+      _E("Failed to cion_payload_create : %d", r);
+      return r;
+    }
+
+    r = cion_payload_set_file_path(pl, <FILE_PATH>);
+    if (r != CION_ERROR_NONE) {
+      _E("Failed to cion_payload_set_file_path : %d - %s", r, value);
+      cion_payload_destroy(pl);
+      return r;
+    }
+
+    r = cion_server_send_payload_async(<SERVER_H>, <PEER_H>, pl, NULL, NULL);
+    if (r != CION_ERROR_NONE) {
+      _E("Failed to cion_server_send_payload_async : %d - %s", r, value);
+      cion_payload_destroy(pl);
+      return r;
+    }
+
+    cion_payload_destroy(pl);
+)__c_cb";
+
+constexpr const char __SERVER_REGISTER[] =
+R"__c_cb(
+  ret = cion_security_create(&security);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to create security handle. error(%d)", ret);
+    return ret;
+  }
+
+   <SET_SECURITY>
+   __<NAME>.security = security;
+
+  ret = cion_server_create(&__<NAME>.stub, service_name, display_name, __<NAME>.security);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to create stub handle. error(%d)", ret);
+    <PREFIX>_<NAME>_unregister();
+    return ret;
+  }
+
+  ret = cion_server_add_connection_result_cb(__<NAME>.stub, __<PREFIX>_<NAME>_connection_result_cb, &__<NAME>);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add connection result event callback");
+    <PREFIX>_<NAME>_unregister();
+    return ret;
+  }
+
+  ret = cion_server_add_payload_received_cb(__<NAME>.stub, __<PREFIX>_<NAME>_payload_received_cb, &__<NAME>);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add payload recieved event callback");
+    <PREFIX>_<NAME>_unregister();
+    return ret;
+  }
+
+  ret = cion_server_add_disconnected_cb(__<NAME>.stub, __<PREFIX>_<NAME>_disconnected_cb, &__<NAME>);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add disconnected event callback");
+    <PREFIX>_<NAME>_unregister();
+    return ret;
+  }
+
+  ret = cion_server_set_data_received_cb(__<NAME>.stub, __<PREFIX>_<NAME>_data_received_cb, &__<NAME>);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add data recieved event callback");
+    <PREFIX>_<NAME>_unregister();
+    return ret;
+  }
+
+  ret = cion_server_listen(__<NAME>.stub, __<PREFIX>_<NAME>_connection_request_cb, &__<NAME>);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to listen events. error(%d)", ret);
+    <PREFIX>_<NAME>_unregister();
+    return ret;
+  }
+)__c_cb";
+
+
+
+constexpr const char __SERVER_UNREGISTER[] =
+R"__c_cb(
+  if (__<NAME>.security)
+    cion_security_destroy(__<NAME>.security);
+
+  if (__<NAME>.stub) {
+    cion_server_destroy(__<NAME>.stub);
+    __<NAME>.stub = nullptr;
+  }
+)__c_cb";
+
+constexpr const char __SERVER_ACCEPT[] =
+R"__c_cb(
+  ret = cion_server_accept(__<NAME>.stub, peer_info);
+  if (ret != CION_ERROR_NONE)
+    _E("Failed to accept. error(%d)", ret);
+)__c_cb";
+
+constexpr const char __SERVER_REJECT[] =
+R"__c_cb(
+  ret = cion_server_reject(__<NAME>.stub, peer_info, reason);
+  if (ret != CION_ERROR_NONE)
+    _E("Failed to reject. error(%d)", ret);
+)__c_cb";
+
+constexpr const char __SERVER_SET_DISPLAY_NAME[] =
+R"__c_cb(
+  ret = cion_server_set_display_name(__<NAME>.stub, display_name);
+  if (ret != CION_ERROR_NONE)
+    _E("Failed to set display name. error(%d)", ret);
+)__c_cb";
+
+constexpr const char __CLIENT_TRY_CONNECT[] =
+R"__c_cb(
+  ret = cion_client_connect(<CLIENT>, <PEER>);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to connect to stub. error(%d)", ret);
+    return ret;
+  }
+)__c_cb";
+
+constexpr const char __CLIENT_DISCONNECT[] =
+R"__c_cb(
+  ret = cion_client_disconnect(<CLIENT>);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to disconnect to stub. error(%d)", ret);
+    return ret;
+  }
+)__c_cb";
+
+constexpr const char __CLIENT_TRY_DISCOVERY[] =
+R"__c_cb(
+  ret = cion_client_try_discovery(<CLIENT>, __<PREFIX>_<NAME>_discovered, h);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to discovery to stub. error(%d)", ret);
+    return ret;
+  }
+)__c_cb";
+
+constexpr const char __CLIENT_STOP_DISCOVERY[] =
+R"__c_cb(
+  ret = cion_client_stop_discovery(<CLIENT>);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to stop discovery to stub. error(%d)", ret);
+    return ret;
+  }
+)__c_cb";
+
+constexpr const char __CLIENT_SEND_ASYNC[] =
+R"__c_cb(
+  res_ = cion_payload_create(&<PAYLOAD>, CION_PAYLOAD_TYPE_DATA);
+  if (res_ != CION_ERROR_NONE) {
+    _E("Failed to cion_payload_create : %d", res_);
+    cion_payload_destroy(<PAYLOAD>);
+    goto out;
+  }
+
+  res_ = cion_payload_set_data(<PAYLOAD>, (const unsigned char*)data_, <SIZE>);
+  if (res_ != CION_ERROR_NONE) {
+    _E("Failed to cion_payload_set_data : %d", res_);
+    cion_payload_destroy(<PAYLOAD>);
+    goto out;
+  }
+
+  res_ = cion_client_send_payload_async(<CLIENT>, <PAYLOAD>, NULL, NULL);
+  cion_payload_destroy(<PAYLOAD>);
+  if (res_ != CION_ERROR_NONE) {
+    _E("Failed to cion_client_send_payload_async : %d", res_);
+    goto out;
+  }
+)__c_cb";
+
+constexpr const char __CLIENT_SEND[] =
+R"__c_cb(
+  res_ = cion_client_send_data(<CLIENT>, <DATA>, <DATA_SIZE> , 5 * 1000, &<RET_DATA>, &<RET_DATA_SIZE>);
+
+  if (res_ != CION_ERROR_NONE) {
+    _E("Failed to send parcel. error(%d)", res_);
+    goto out;
+  }
+)__c_cb";
+
+constexpr const char __SERVER_SEND_ASYNC[] =
+R"__c_cb(
+  ret_ = cion_payload_create(&<PAYLOAD>, CION_PAYLOAD_TYPE_DATA);
+  if (ret_ != CION_ERROR_NONE) {
+    _E("Failed to cion_payload_create : %d", ret_);
+    cion_payload_destroy(<PAYLOAD>);
+    goto out;
+  }
+
+  ret_ = cion_payload_set_data(<PAYLOAD>, (const unsigned char*)data_, <SIZE>);
+  if (ret_ != CION_ERROR_NONE) {
+    _E("Failed to cion_payload_set_data : %d", ret_);
+    cion_payload_destroy(<PAYLOAD>);
+    goto out;
+  }
+
+  ret_ = cion_server_send_payload_async(<SERVER>, peer_info, <PAYLOAD>, NULL, NULL);
+  cion_payload_destroy(<PAYLOAD>);
+  if (ret_ != CION_ERROR_NONE) {
+    _E("Failed to cion_client_send_payload_async : %d", ret_);
+    goto out;
+  }
+)__c_cb";
+
+constexpr const char __GROUP_PUBLISH[] =
+R"__c_cb(
+  res_ = cion_payload_create(&pl_, CION_PAYLOAD_TYPE_DATA);
+  if (res_ != CION_ERROR_NONE) {
+    _E("Failed to cion_payload_create : %d", res_);
+    cion_payload_destroy(pl_);
+    goto out;
+  }
+
+  res_ = cion_payload_set_data(pl_, (const unsigned char*)data_, data_size_);
+  if (res_ != CION_ERROR_NONE) {
+    _E("Failed to cion_payload_set_data : %d", res_);
+    cion_payload_destroy(pl_);
+    goto out;
+  }
+
+  res_ = cion_group_publish(h->group, pl_);
+  cion_payload_destroy(pl_);
+  if (res_ != CION_ERROR_NONE) {
+    _E("Failed to cion_group_publish : %d", res_);
+    goto out;
+  }
+)__c_cb";
+
+constexpr const char __CLIENT_CREATE[] =
+R"__c_cb(
+  ret = cion_security_create(&security);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to create security handle. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  <SET_SECURITY>
+  handle->security = security;
+
+  ret = cion_client_create(&handle->client, service_name, handle->security);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to create proxy handle. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  handle->callback = *callback;
+  handle->user_data = user_data;
+
+  ret = cion_client_add_connection_result_cb(handle->client, __<PREFIX>_<NAME>_connection_result, handle);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add connection result cb. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  ret = cion_client_add_disconnected_cb(handle->client, __<PREFIX>_<NAME>_disconnected, handle);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add disconnected event cb. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  ret = cion_client_add_payload_received_cb(handle->client, __<PREFIX>_<NAME>_received, handle);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add received event cb. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+)__c_cb";
+
+constexpr const char __GROUP_CREATE[] =
+R"__c_cb(
+  ret = cion_security_create(&security);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to create security handle. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  <SET_SECURITY>
+  handle->security = security;
+
+  ret = cion_group_create(&handle->group, topic_name, handle->security);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to create group handle. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  handle->callback = *callback;
+  handle->user_data = user_data;
+
+  ret = cion_group_add_joined_cb(handle->group, __<PREFIX>_<NAME>_joined_cb, handle);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add connection result cb. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  ret = cion_group_add_left_cb(handle->group, __<PREFIX>_<NAME>_left_cb, handle);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add disconnected event cb. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  ret = cion_group_add_payload_received_cb(handle->group, __<PREFIX>_<NAME>_received, handle);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to add received event cb. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  ret = cion_group_subscribe(handle->group);
+  if (ret != CION_ERROR_NONE) {
+    _E("Failed to subscribe event. error(%d)", ret);
+    <PREFIX>_<NAME>_destroy(handle);
+    return ret;
+  }
+
+  *h = handle;
+)__c_cb";
+
+constexpr const char __GROUP_DESTROY[] =
+R"__c_cb(
+  if (h->group) {
+    cion_group_unsubscribe(h->group);
+    cion_group_destroy(h->group);
+  }
+
+  if (h->security)
+    cion_security_destroy(h->security);
+)__c_cb";
+
+constexpr const char __CLIENT_DESTROY[] =
+R"__c_cb(
+  if (h->client)
+    cion_client_destroy(h->client);
+
+  if (h->security)
+    cion_security_destroy(h->security);
+)__c_cb";
+
+constexpr const char __SET_SECURITY_CA[] =
+R"__c_cb(
+cion_security_set_ca_path(security, "<ARG>");
+)__c_cb";
+
+constexpr const char __SET_SECURITY_CERT[] =
+R"__c_cb(
+cion_security_set_cert_path(security, "<ARG>");
+)__c_cb";
+
+constexpr const char __SET_SECURITY_PRIVATE_KEY[] =
+R"__c_cb(
+cion_security_set_private_key_path(security, "<ARG>");
+)__c_cb";
+
+constexpr const char __PEER_INFO_CLONE[] =
+    "cion_peer_info_clone(<SRC_PEER>, <DEST_PEER>);";
+
+constexpr const char __SERVER_FOREACH_CONNECTED_PEER_INFO[] =
+    "cion_server_foreach_connected_peer_info(__<NAME>.stub, callback, user_data);";
+
+constexpr const char __SERVER_SET_ONDEMAND_LAUNCH_ENABLED[] =
+R"__c_cb(
+  int ret;
+
+  ret = cion_server_set_on_demand_launch_enabled(__<NAME>.stub, enable);
+  if (ret != CION_ERROR_NONE)
+    _E("Failed to set ondemand launch enable. error(%d)", ret);
+
+  return ret;
+)__c_cb";
+
+}  // namespace
+
+namespace tidl {
+
+std::string DefaultCTransportable::GenInclude() const {
+  return "#include <cion.h>";
+}
+
+std::string DefaultCTransportable::GenClientSendAsync(std::string client,
+    std::string payload, std::string size) const {
+  return std::string(ReplaceAll(__CLIENT_SEND_ASYNC, {
+      { "<CLIENT>", client },
+      { "<PAYLOAD>", payload},
+      { "<SIZE>", size} }));
+}
+
+std::string DefaultCTransportable::GenClientSend(std::string client,
+    std::string data, std::string data_size,
+    std::string ret_data, std::string ret_data_size) const {
+  return std::string(ReplaceAll(__CLIENT_SEND, {
+      { "<CLIENT>", client },
+      { "<DATA>", data},
+      { "<DATA_SIZE>", data_size},
+      { "<RET_DATA>", ret_data},
+      { "<RET_DATA_SIZE>", ret_data_size} }));
+}
+
+std::string DefaultCTransportable::GenServerSendAsync(std::string server,
+    std::string client,
+    std::string payload, std::string size) const {
+  return std::string(ReplaceAll(__SERVER_SEND_ASYNC, {
+      { "<SERVER>", server },
+      { "<CLIENT>", client},
+      { "<PAYLOAD>", payload},
+      { "<SIZE>", size} }));
+}
+
+std::string DefaultCTransportable::GenServerFileSend(std::string path,
+    std::string server, std::string peer) const {
+  return std::string(ReplaceAll(__SERVER_FILE_SEND, {
+      { "<FILE_PATH>", path },
+      { "<SERVER_H>", server },
+      { "<PEER_H>", peer } }));
+}
+
+std::string DefaultCTransportable::GenClientFileSend(std::string path,
+    std::string client) const {
+  return std::string(ReplaceAll(__CLINET_FILE_SEND, {
+      { "<FILE_PATH>", path },
+      { "<CLIENT_H>", client } }));
+}
+
+std::string DefaultCTransportable::GenGroupType() const {
+  return "cion_group_h";
+}
+
+std::string DefaultCTransportable::GenPayloadTransferStatusType() const {
+  return "cion_payload_transfer_status_e";
+}
+
+std::string DefaultCTransportable::GenPeerInfoType() const {
+  return "cion_peer_info_h";
+}
+
+std::string DefaultCTransportable::GenPeerInfoDestroy(std::string peer) const {
+  return std::string(ReplaceAll("cion_peer_info_destroy(<PEER>);", {
+      { "<PEER>", peer } }));
+}
+
+std::string DefaultCTransportable::GenPayloadType() const {
+  return "cion_payload_h";
+}
+
+std::string DefaultCTransportable::GenClientType() const {
+  return "cion_client_h";
+}
+
+std::string DefaultCTransportable::GenSecurityType() const {
+  return "cion_security_h";
+}
+
+std::string DefaultCTransportable::GenServerType() const {
+  return "cion_server_h";
+}
+
+std::string DefaultCTransportable::GenClientTryConnect(std::string client,
+    std::string peer) const {
+  return std::string(ReplaceAll(__CLIENT_TRY_CONNECT, {
+      { "<CLIENT>", client },
+      { "<PEER>", peer } }));
+}
+
+std::string DefaultCTransportable::GenClientDisconnect(
+    std::string client) const {
+  return std::string(ReplaceAll(__CLIENT_DISCONNECT, {
+      { "<CLIENT>", client } }));
+}
+
+std::string DefaultCTransportable::GenClientTryDiscovery(
+    std::string client) const {
+  return std::string(ReplaceAll(__CLIENT_TRY_DISCOVERY, {
+      { "<CLIENT>", client } }));
+}
+
+std::string DefaultCTransportable::GenClientStopDiscovery(
+    std::string client) const {
+  return std::string(ReplaceAll(__CLIENT_STOP_DISCOVERY, {
+      { "<CLIENT>", client } }));
+}
+
+std::string DefaultCTransportable::GenServerRegister() const {
+  return __SERVER_REGISTER;
+}
+
+std::string DefaultCTransportable::GenServerUnregister() const {
+  return __SERVER_UNREGISTER;
+}
+
+std::string DefaultCTransportable::GenClientExtraHeader() const {
+  return "";
+}
+
+std::string DefaultCTransportable::GenClientExtraBody() const {
+  return "";
+}
+
+std::string DefaultCTransportable::GenServerExtraHeader() const {
+  return "";
+}
+
+std::string DefaultCTransportable::GenServerExtraBody() const {
+  return "";
+}
+
+std::string DefaultCTransportable::GenServerAccept() const {
+  return __SERVER_ACCEPT;
+}
+
+std::string DefaultCTransportable::GenServerReject() const {
+  return __SERVER_REJECT;
+}
+
+std::string DefaultCTransportable::GenServerSetDisplayName() const {
+  return __SERVER_SET_DISPLAY_NAME;
+}
+
+std::string DefaultCTransportable::GenGroupPublish() const {
+  return __GROUP_PUBLISH;
+}
+
+std::string DefaultCTransportable::GenPayloadTypeEnum() const {
+  return "cion_payload_type_e";
+}
+
+std::string DefaultCTransportable::GenPayloadTypeData() const {
+  return "CION_PAYLOAD_TYPE_DATA";
+}
+
+std::string DefaultCTransportable::GenPayloadTypeFile() const {
+  return "CION_PAYLOAD_TYPE_FILE";
+}
+
+std::string DefaultCTransportable::GenPayloadGetType() const {
+  return "ret = cion_payload_get_type(payload, &type);";
+}
+
+std::string DefaultCTransportable::GenErrorNone() const {
+  return "CION_ERROR_NONE";
+}
+
+std::string DefaultCTransportable::GenPayloadGetData() const {
+  return "ret = cion_payload_get_data(payload, &data, &data_len);";
+}
+
+std::string DefaultCTransportable::GenClientCreate() const {
+  return __CLIENT_CREATE;
+}
+
+std::string DefaultCTransportable::GenGroupCreate() const {
+  return __GROUP_CREATE;
+}
+
+std::string DefaultCTransportable::GenGroupDestroy() const {
+  return __GROUP_DESTROY;
+}
+
+std::string DefaultCTransportable::GenClientDestroy() const {
+  return __CLIENT_DESTROY;
+}
+
+std::string DefaultCTransportable::GenSetSecurityCA(std::string arg) const {
+  return std::string(ReplaceAll(__SET_SECURITY_CA, {
+      { "<ARG>", arg } }));
+}
+
+std::string DefaultCTransportable::GenSetSecurityCert(std::string arg) const {
+  return std::string(ReplaceAll(__SET_SECURITY_CERT, {
+      { "<ARG>", arg } }));
+}
+
+std::string DefaultCTransportable::GenSetSecurityPrivateKey(std::string arg) const {
+  return std::string(ReplaceAll(__SET_SECURITY_PRIVATE_KEY, {
+      { "<ARG>", arg } }));
+}
+
+std::string DefaultCTransportable::GenPeerInfoClone(std::string src_peer,
+      std::string dest_peer) const {
+  return std::string(ReplaceAll(__PEER_INFO_CLONE, {
+      { "<SRC_PEER>", src_peer },
+      { "<DEST_PEER>", dest_peer } }));
+}
+
+std::string DefaultCTransportable::GenServerForeachConnectedPeerInfo(
+    std::string name) const {
+  return std::string(ReplaceAll(__SERVER_FOREACH_CONNECTED_PEER_INFO, {
+      { "<NAME>", name } }));
+}
+
+std::string DefaultCTransportable::GenServerSetOnDemandLaunchEnabled(std::string name) const {
+  return std::string(ReplaceAll(__SERVER_SET_ONDEMAND_LAUNCH_ENABLED, {
+      { "<NAME>", name } }));
+}
+
+}  // namespace tidl
diff --git a/idlc/gen_cion/default_c_transportable.h b/idlc/gen_cion/default_c_transportable.h
new file mode 100644 (file)
index 0000000..4c1983c
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef IDLC_GEN_CION_DEFAULT_C_TRANSPORTABLE_H_
+#define IDLC_GEN_CION_DEFAULT_C_TRANSPORTABLE_H_
+
+#include <string>
+
+#include "idlc/gen_cion/c_transportable.h"
+
+namespace tidl {
+
+class DefaultCTransportable : public CTransportable {
+ public:
+  virtual ~DefaultCTransportable() = default;
+  std::string GenInclude() const override;
+  std::string GenClientSendAsync(std::string client,
+      std::string payload, std::string size) const override;
+  std::string GenClientSend(std::string client, std::string data,
+      std::string data_size, std::string ret_data,
+      std::string ret_data_size) const override;
+  std::string GenServerSendAsync(std::string server, std::string client,
+      std::string payload, std::string size) const override;
+  std::string GenServerFileSend(std::string path,
+      std::string server, std::string peer) const override;
+  std::string GenClientFileSend(std::string path,
+      std::string client) const override;
+  std::string GenGroupType() const override;
+  std::string GenPayloadTransferStatusType() const override;
+  std::string GenPeerInfoType() const override;
+  std::string GenPeerInfoDestroy(std::string peer) const override;
+  std::string GenPayloadType() const override;
+  std::string GenClientType() const override;
+  std::string GenSecurityType() const override;
+  std::string GenServerType() const override;
+  std::string GenClientTryConnect(std::string client,
+      std::string peer) const override;
+  std::string GenClientDisconnect(std::string client) const override;
+  std::string GenClientTryDiscovery(std::string client) const override;
+  std::string GenClientStopDiscovery(std::string client) const override;
+  std::string GenServerRegister() const override;
+  std::string GenServerUnregister() const override;
+  std::string GenClientExtraHeader() const override;
+  std::string GenClientExtraBody() const override;
+  std::string GenServerExtraHeader() const override;
+  std::string GenServerExtraBody() const override;
+  std::string GenServerAccept() const override;
+  std::string GenServerReject() const override;
+  std::string GenServerSetDisplayName() const override;
+  std::string GenGroupPublish() const override;
+  std::string GenPayloadTypeEnum() const override;
+  std::string GenPayloadTypeData() const override;
+  std::string GenPayloadTypeFile() const override;
+  std::string GenPayloadGetType() const override;
+  std::string GenErrorNone() const override;
+  std::string GenPayloadGetData() const override;
+  std::string GenClientCreate() const override;
+  std::string GenGroupCreate() const override;
+  std::string GenGroupDestroy() const override;
+  std::string GenClientDestroy() const override;
+  std::string GenSetSecurityCA(std::string arg) const override;
+  std::string GenSetSecurityCert(std::string arg) const override;
+  std::string GenSetSecurityPrivateKey(std::string arg) const override;
+  std::string GenPeerInfoClone(std::string src_peer,
+      std::string dest_peer) const override;
+  std::string GenServerForeachConnectedPeerInfo(std::string name) const override;
+  std::string GenServerSetOnDemandLaunchEnabled(std::string name) const override;
+};
+
+}  // namespace tidl
+
+#endif  // IDLC_GEN_CION_DEFAULT_C_TRANSPORTABLE_H_
index e71d7833bb94f95a9030eb3e7de587e98e4836a6..21812ff6f2768deb0251c13b75e32d3af121a55c 100644 (file)
 
 #include "idlc/gen_cion/plugin_loader.h"
 
+#include "idlc/gen_cion/default_c_transportable.h"
+
 namespace tidl {
 
 PluginLoader::PluginLoader(const std::string& plugin_path) {
   if (plugin_path.empty()) {
-    // C_.reset(new DefaultCTransportable());
+    C_.reset(new DefaultCTransportable());
     // Cpp_.reset(new DefaultCppTransportable());
     // Cs_.reset(new DefaultCsTransportable());
     // Java_.reset(new DefaultJavaTransportable());