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);
}
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);
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>
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);
}
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_
namespace tidl {
CCionGeneratorBase::CCionGeneratorBase(std::shared_ptr<Document> doc)
- : Generator(doc) {
+ : CionPluginBase(std::move(doc)) {
structures_.clear();
type_map_ = {
{"char", "char "},
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) {
#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;
R"__c_cb(
#include <stdbool.h>
#include <bundle.h>
-#include <cion.h>
+<INCLUDE>
)__c_cb";
constexpr const char CB_BODY_HEADER[] =
#include <libgen.h>
#include <glib.h>
#include <dlog.h>
-#include <cion.h>
+<INCLUDE>
#include <rpc-port-parcel.h>
)__c_cb";
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);
})
// @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) {
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);
})
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);
.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;
}
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";
/**
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;
*/
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;
*/
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;
}
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;
}
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;
}
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;
}
{
<PREFIX>_<NAME>_t *handle;
int ret;
- cion_security_h security;
+ <SECURITY_T> security;
if (topic_name == nullptr || callback == nullptr || h == nullptr) {
_E("Invalid parameter");
<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;
}
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);
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");
_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);
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);
})
{ "<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);
* @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.
* @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";
* @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";
/**
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);
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);
})
.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;
}
.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;
}
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;
*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;
}
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;
}
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;
}
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;
}
__<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);
}
{
<PREFIX>_<NAME>_t *handle;
int ret;
- cion_security_h security;
+ <SECURITY_T> security;
if (service_name == nullptr || callback == nullptr || h == nullptr) {
_E("Invalid parameter");
<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;
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);
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;
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;
}
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;
}
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;
}
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;
}
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>) {
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>
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;
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);
* @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;
}
* @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);
/**
* @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;
}
* @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.
* @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.
// @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) {
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);
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);
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);
{ "<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);
{ "<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);
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);
*/
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";
/**
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;
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;
*/
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;
_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);
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;
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>)
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>
}
- 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);
*/
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;
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;
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;
}
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;
}
__<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);
}
}
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)
{
}
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;
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");
__<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;
}
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;
}
}
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;
_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;
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;
}
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";
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);
{ "<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);
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);
* @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);
/**
* @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.
* @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.
* @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;
* @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.
* @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;
}
* @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";
* @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";
/**
* @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.
* @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.
#ifndef IDLC_GEN_CION_C_TRANSPORTABLE_H_
#define IDLC_GEN_CION_C_TRANSPORTABLE_H_
+#include <list>
#include <string>
namespace tidl {
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;
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
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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_
#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());