SET(CA "connectivity_abstraction")
SET(OCTBSTACK "octbstack")
+IF(${TZ_VER} EQUAL "3")
+CONFIGURE_FILE(${PROJECT_NAME}.conf.in ${PROJECT_NAME}.conf @ONLY)
+INSTALL(FILES ${PROJECT_NAME}.conf DESTINATION ${SYSCONF_INSTALL_DIR}/dbus-1/system.d/)
+ENDIF(${TZ_VER} EQUAL "3")
+
ADD_SUBDIRECTORY(common)
ADD_SUBDIRECTORY(lib)
ADD_SUBDIRECTORY(daemon)
unsigned int sub_id;
GVariant *arg_client;
GError *error = NULL;
- icl_on_observe_s *cb_container;
- int ret, signal_number;
int64_t observe_handle;
+ icl_on_observe_s *cb_container;
+ int ret, signal_number, error_code;
char signal_name[IC_DBUS_SIGNAL_LENGTH] = {0};
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
arg_query, signal_number, &observe_handle, NULL, &error);
if (error) {
ERR("ic_dbus_call_observer_start_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
g_variant_unref(arg_query);
g_variant_unref(arg_client);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (0 == observe_handle) {
API int iotcon_observer_stop(iotcon_client_h resource)
{
- int ret;
+ int ret, error_code;
GError *error = NULL;
GVariant *arg_options;
arg_options, &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_observer_stop_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
ERR("iotcon-daemon Fail(%d)", ret);
API int iotcon_find_resource(const char *host_address, const char *resource_type,
iotcon_found_resource_cb cb, void *user_data)
{
- int ret;
- int signal_number;
unsigned int sub_id;
GError *error = NULL;
+ int ret, error_code, signal_number;
icl_found_resource_s *cb_container;
char signal_name[IC_DBUS_SIGNAL_LENGTH] = {0};
ic_utils_dbus_encode_str(resource_type), signal_number, &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_find_resource_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
}
+inline int icl_dbus_convert_dbus_error(int error)
+{
+ int ret;
+
+ if (G_DBUS_ERROR_ACCESS_DENIED == error)
+ ret = IOTCON_ERROR_PERMISSION_DENIED;
+ else
+ ret = IOTCON_ERROR_DBUS;
+
+ return ret;
+}
+
+
int icl_dbus_start()
{
unsigned int id;
void *user_data);
int icl_dbus_convert_daemon_error(int error);
+int icl_dbus_convert_dbus_error(int error);
int icl_dbus_start();
int icl_dbus_stop();
API int iotcon_register_device_info(const char *device_name)
{
- int ret;
+ int ret, error_code;
GError *error = NULL;
GVariant *arg_info;
NULL, &error);
if (error) {
ERR("ic_dbus_call_register_device_info_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
g_variant_unref(arg_info);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_get_device_info(const char *host_address, iotcon_device_info_cb cb,
void *user_data)
{
- int ret;
GError *error = NULL;
unsigned int sub_id;
- int signal_number;
+ int ret, signal_number, error_code;
char signal_name[IC_DBUS_SIGNAL_LENGTH] = {0};
icl_device_info_s *cb_container;
signal_number, &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_get_device_info_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
* The length of manufacturer_url should be less than and equal to 32. */
API int iotcon_register_platform_info(iotcon_platform_info_s *platform_info)
{
- int ret;
+ int ret, error_code;
GError *error = NULL;
GVariant *arg_info;
NULL, &error);
if (error) {
ERR("ic_dbus_call_register_platform_info_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
g_variant_unref(arg_info);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_get_platform_info(const char *host_address, iotcon_platform_info_cb cb,
void *user_data)
{
- int ret;
GError *error = NULL;
unsigned int sub_id;
- int signal_number;
+ int ret, signal_number, error_code;
char signal_name[IC_DBUS_SIGNAL_LENGTH] = {0};
icl_platform_info_s *cb_container;
signal_number, &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_get_platform_info_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_start_presence(unsigned int time_to_live)
{
- FN_CALL;
- int ret;
+ int ret, error_code;
GError *error = NULL;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
&error);
if (error) {
ERR("ic_dbus_call_start_presence_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_stop_presence(void)
{
FN_CALL;
- int ret;
+ int ret, error_code;
GError *error = NULL;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
ic_dbus_call_stop_presence_sync(icl_dbus_get_object(), &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_stop_presence_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
FN_CALL;
GError *error = NULL;
unsigned int sub_id;
- int signal_number;
+ int signal_number, error_code;
char signal_name[IC_DBUS_SIGNAL_LENGTH] = {0};
icl_presence_s *presence_container;
resource_type, signal_number, &(presence_container->handle), NULL, &error);
if (error) {
ERR("ic_dbus_call_subscribe_presence_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
free(presence_container);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (0 == presence_container->handle) {
API int iotcon_unsubscribe_presence(iotcon_presence_h presence)
{
FN_CALL;
- int ret;
+ int ret, error_code;
GError *error = NULL;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
&ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_unsubscribe_presence_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
void *user_data,
iotcon_resource_h *resource_handle)
{
- int signal_number;
unsigned int sub_id;
GError *error = NULL;
const gchar **types;
- char sig_name[IC_DBUS_SIGNAL_LENGTH];
iotcon_resource_h resource;
+ int signal_number, error_code;
+ char sig_name[IC_DBUS_SIGNAL_LENGTH];
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_INVALID_PARAMETER);
RETV_IF(NULL == uri_path, IOTCON_ERROR_INVALID_PARAMETER);
properties, signal_number, &(resource->handle), NULL, &error);
if (error) {
ERR("ic_dbus_call_register_resource_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
free(types);
free(resource);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
free(types);
API int iotcon_unregister_resource(iotcon_resource_h resource)
{
FN_CALL;
- int ret;
+ int ret, error_code;
GError *error = NULL;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
&ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_unregister_resource_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_resource_bind_interface(iotcon_resource_h resource, int iface)
{
FN_CALL;
- int ret;
+ int ret, error_code;
GError *error = NULL;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
iface, &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_bind_interface_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_resource_bind_type(iotcon_resource_h resource, const char *resource_type)
{
FN_CALL;
- int ret;
+ int ret, error_code;
GError *error = NULL;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
&ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_bind_type_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_resource_bind_child_resource(iotcon_resource_h parent,
iotcon_resource_h child)
{
- FN_CALL;
- int ret;
- int i;
GError *error = NULL;
+ int i, ret, error_code;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
RETV_IF(NULL == parent, IOTCON_ERROR_INVALID_PARAMETER);
child->handle, &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_bind_resource_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_resource_unbind_child_resource(iotcon_resource_h parent,
iotcon_resource_h child)
{
- int ret;
- int i;
GError *error = NULL;
+ int i, ret, error_code;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
RETV_IF(NULL == parent, IOTCON_ERROR_INVALID_PARAMETER);
child->handle, &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_unbind_resource_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_notify_list_of_observers(iotcon_resource_h resource, iotcon_notimsg_h msg,
iotcon_observers_h observers)
{
- int ret;
+ int ret, error_code;
GError *error = NULL;
GVariant *noti_msg;
GVariant *obs;
noti_msg, obs, &ret, NULL, &error);
if (error) {
ERR("ic_dbus_call_notify_list_of_observers_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
g_variant_unref(obs);
g_variant_unref(noti_msg);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_resource_notify_all(iotcon_resource_h resource)
{
- int ret;
+ int ret, error_code;
GError *error = NULL;
RETV_IF(NULL == icl_dbus_get_object(), IOTCON_ERROR_DBUS);
&error);
if (error) {
ERR("ic_dbus_call_notify_all_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
API int iotcon_response_send(iotcon_response_h resp)
{
FN_CALL;
- int ret;
+ int ret, error_code;
GError *error = NULL;
GVariant *arg_response;
&error);
if (error) {
ERR("ic_dbus_call_send_response_sync() Fail(%s)", error->message);
+ error_code = icl_dbus_convert_dbus_error(error->code);
g_error_free(error);
g_variant_unref(arg_response);
- return IOTCON_ERROR_DBUS;
+ return error_code;
}
if (IOTCON_ERROR_NONE != ret) {
--- /dev/null
+<manifest>
+ <define>
+ <domain name="iotcon-test" />
+ <request>
+ <smack request="iotcon" type="rw" />
+ <smack request="device::app_logging" type="w" />
+ <smack request="device::sys_logging" type="w" />
+ </request>
+ </define>
+ <request>
+ <domain name="iotcon-test" />
+ </request>
+</manifest>
--- /dev/null
+<manifest>
+ <define>
+ <domain name="iotcon" />
+ <permit>
+ <smack permit="system::use_internet" type="w" />
+ <smack permit="dbus" type="rwx" />
+ </permit>
+ <request>
+ <smack request="system::use_internet" type="w" />
+ <smack request="connman::get" type="w" />
+ <smack request="dbus" type="rwx" />
+ <smack request="device::app_logging" type="w" />
+ <smack request="device::sys_logging" type="w" />
+ </request>
+ </define>
+ <assign>
+ <filesystem path="/usr/share/license/iotcon" label="_" />
+ <filesystem path="/usr/share/dbus-1/services/org.tizen.iotcon.dbus.service" label="_" />
+
+ <dbus name="org.tizen.iotcon.dbus" own="iotcon" bus="system">
+ <node name="/org/tizen/iotcon/dbus">
+ <interface name="org.tizen.iotcon.dbus">
+ <annotation name="com.tizen.smack" value="iotcon"/>
+ </interface>
+ </node>
+ </dbus>
+ </assign>
+ <request>
+ <domain name="iotcon" />
+ </request>
+</manifest>
--- /dev/null
+<manifest>
+ <request>
+ <domain name="_" />
+ </request>
+</manifest>
--- /dev/null
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+
+<busconfig>
+ <policy user="root">
+ <allow own="@DBUS_INTERFACE@"/>
+ <allow send_destination="@DBUS_INTERFACE@" send_interface="@DBUS_INTERFACE@"/>
+ </policy>
+
+ <policy context="default">
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="registerResource"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="unregisterResource"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="bindInterface"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="bindType"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="bindResource"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="unbindResource"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="notifyListOfObservers"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="notifyAll"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="sendResponse"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="findResource"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="get"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="put"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="post"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="delete"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="observerStart"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="observerStop"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="getDeviceInfo"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="getPlatformInfo"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="subscribePresence"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="unsubscribePresence"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="startPresence"
+ privilege="http://tizen.org/privilege/internet"/>
+ <check send_destination="@DBUS_INTERFACE@"
+ send_interface="@DBUS_INTERFACE@" send_member="stopPresence"
+ privilege="http://tizen.org/privilege/internet"/>
+ </policy>
+</busconfig>
+++ /dev/null
-<manifest>
- <define>
- <domain name="iotcon" />
- <permit>
- <smack permit="_" type="rw" />
- <smack permit="net-config" type="rwx"/>
- <smack permit="dbus" type="rwx" />
- <smack permit="system::use_internet" type="rw" />
- <smack permit="connman::get" type="rw" />
- <smack permit="libiotcon" type="rwx" />
- </permit>
- <request>
- <smack request="net-config" type="rwx"/>
- <smack request="connman::get" type="rw" />
- <smack request="dbus" type="rwx" />
- <smack request="libiotcon" type="rwxt" />
- <smack request="_" type="rw" />
- <smack request="system::use_internet" type="rw" />
- </request>
- </define>
- <request>
- <domain name="iotcon" />
- </request>
-</manifest>
License: Apache-2.0
Source0: %{name}-%{version}.tar.gz
Source1: %{name}.service
-Source1001: %{name}.manifest
-Source1002: lib%{name}.manifest
+Source1001: %{name}-v3.manifest
+Source1002: %{name}-v2.manifest
+Source1003: lib%{name}-v2.manifest
+Source1004: %{name}-test-v2.manifest
+Source2001: %{name}.conf.in
BuildRequires: cmake
BuildRequires: boost-devel
BuildRequires: iotivity-devel
%prep
%setup -q
-cp %{SOURCE1001} .
-cp %{SOURCE1002} .
+%if %tizen_version_major == 3
+cp %{SOURCE1001} ./%{name}.manifest
+cp %{SOURCE1001} ./lib%{name}.manifest
+cp %{SOURCE1001} ./%{name}-test.manifest
+cp %{SOURCE2001} .
+%else
+cp %{SOURCE1002} ./%{name}.manifest
+cp %{SOURCE1003} ./lib%{name}.manifest
+cp %{SOURCE1004} ./%{name}-test.manifest
+%endif
%build
MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
-%cmake . -DMAJORVER=${MAJORVER} -DFULLVER=%{version} -DBIN_INSTALL_DIR:PATH=%{_bindir}
+%cmake . -DMAJORVER=${MAJORVER} -DFULLVER=%{version} -DBIN_INSTALL_DIR:PATH=%{_bindir} \
+ -DTZ_VER=%{tizen_version_major}
%install
%if 0%{?tizen_version_major} < 3
%{_datadir}/license/%{name}
%else
+%config %{_sysconfdir}/dbus-1/system.d/%{name}.conf
%license LICENSE.APLv2
%endif
%{_includedir}/%{name}/*.h
%files test
+%manifest %{name}-test.manifest
%defattr(-,root,root,-)
%{_bindir}/crud-test-client
%{_bindir}/crud-test-server
--- /dev/null
+<manifest>
+ <request>
+ <domain name="_" />
+ </request>
+</manifest>
+++ /dev/null
-<manifest>
- <define>
- <domain name="libiotcon" />
- <permit>
- <smack permit="_" type="rw" />
- <smack permit="dbus" type="rwx" />
- </permit>
- <request>
- <smack request="dbus" type="rwx" />
- <smack request="_" type="rw" />
- </request>
- </define>
- <assign>
- <filesystem path="/usr/lib/libiotcon.so*" label="_" exec_label="none"/>
- </assign>
- <request>
- <domain name="libiotcon" />
- </request>
-</manifest>