summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt11
-rw-r--r--LICENSE.APLv2202
-rwxr-xr-xNOTICE3
-rw-r--r--account-common.manifest6
-rw-r--r--common/CMakeLists.txt51
-rw-r--r--common/account-common.pc.in13
-rw-r--r--common/account_mgr.xml166
-rw-r--r--common/include/account-private.h352
-rw-r--r--common/include/account_free.h54
-rw-r--r--common/include/account_ipc_marshal.h59
-rw-r--r--common/include/dbg.h39
-rw-r--r--common/src/account_free.c284
-rw-r--r--common/src/account_ipc_marshal.c1341
-rw-r--r--packaging/account-common.spec69
14 files changed, 2650 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..a050c24
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,11 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(account-common C)
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(EXEC_PREFIX "\${prefix}")
+SET(LIBDIR "\${prefix}/lib")
+SET(INCLUDEDIR "\${prefix}/include ")
+SET(VERSION_MAJOR 0)
+SET(VERSION "${VERSION_MAJOR}.0.6")
+
+ADD_SUBDIRECTORY(common)
diff --git a/LICENSE.APLv2 b/LICENSE.APLv2
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/LICENSE.APLv2
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/NOTICE b/NOTICE
new file mode 100755
index 0000000..0e0f016
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,3 @@
+Copyright (c) Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Apache License, Version 2.
+Please, see the LICENSE.APLv2 file for Apache License terms and conditions.
diff --git a/account-common.manifest b/account-common.manifest
new file mode 100644
index 0000000..81ace0c
--- /dev/null
+++ b/account-common.manifest
@@ -0,0 +1,6 @@
+<manifest>
+ <request>
+ <domain name="_"/>
+ </request>
+</manifest>
+
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
new file mode 100644
index 0000000..9e18ec6
--- /dev/null
+++ b/common/CMakeLists.txt
@@ -0,0 +1,51 @@
+
+SET(SRCS
+ ./src/account_ipc_marshal.c
+ ./src/account_free.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/common/include)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(clientpkgs REQUIRED
+ dlog
+ glib-2.0
+ gio-unix-2.0
+ capi-base-common
+)
+
+FOREACH(flag ${clientpkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror")
+SET(CMAKE_LDFLAGS "-Wl,-zdefs")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{FACTORYFS}\"")
+ADD_DEFINITIONS("-DSLP_DEBUG")
+
+ADD_CUSTOM_COMMAND(
+ WORKING_DIRECTORY
+ OUTPUT account-mgr-stub.c
+ COMMAND gdbus-codegen --interface-prefix org.tizen.
+ --generate-c-code account-mgr-stub ./account_mgr.xml
+ COMMENT "Generating Account Client GDBus .c/.h")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS} account-mgr-stub.c)
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION})
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${clientpkgs_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib/account-common)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib)
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/common/account-mgr-stub.h DESTINATION include)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/common/include/account_ipc_marshal.h DESTINATION include)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/common/include/account_free.h DESTINATION include)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/common/include/account-private.h DESTINATION include)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/common/include/dbg.h DESTINATION include)
+
+CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/common/${PROJECT_NAME}.pc.in ${CMAKE_SOURCE_DIR}/common/${PROJECT_NAME}.pc @ONLY)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/common/${PROJECT_NAME}.pc DESTINATION lib/pkgconfig)
diff --git a/common/account-common.pc.in b/common/account-common.pc.in
new file mode 100644
index 0000000..e306b59
--- /dev/null
+++ b/common/account-common.pc.in
@@ -0,0 +1,13 @@
+# Package Information for pkg-config
+
+prefix=@PREFIX@
+exec_prefix=@EXEC_PREFIX@
+libdir=@LIBDIR@
+includedir=@INCLUDEDIR@
+
+Name: account-common
+Description: Account common library
+Version: @VERSION@
+#Requires: capi-base-common
+Libs: -L${libdir} -laccount-common
+Cflags: -I${includedir}
diff --git a/common/account_mgr.xml b/common/account_mgr.xml
new file mode 100644
index 0000000..32cf6bf
--- /dev/null
+++ b/common/account_mgr.xml
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<node name="/org/tizen/account/manager">
+ <interface name="org.tizen.account.manager">
+ <method name="account_add">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="a{sv}" name="account_data" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="i" name="account_db_id" direction="out" />
+ </method>
+ <method name="account_type_add">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="a{sv}" name="account_type_data" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="i" name="account_type_db_id" direction="out" />
+ </method>
+ <method name="account_query_all">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="aa{sv}" name="account_data" direction="out" />
+ </method>
+ <method name="account_type_query_all">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="aa{sv}" name="account_type_data" direction="out" />
+ </method>
+ <method name="account_delete_from_db_by_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="i" name="account_db_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_delete_from_db_by_user_name">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="user_name" direction="in" />
+ <arg type="s" name="package_name" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_delete_from_db_by_package_name">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="package_name" direction="in" />
+ <arg type="b" name="permission" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_update_to_db_by_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="a{sv}" name="account_data" direction="in" />
+ <arg type="i" name="account_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_get_total_count_from_db">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="b" name="include_hidden" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="i" name="count" direction="out" />
+ </method>
+ <method name="account_query_account_by_account_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="i" name="account_db_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="a{sv}" name="account_data" direction="out" />
+ </method>
+ <method name="account_update_to_db_by_user_name">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="a{sv}" name="account_data" direction="in" />
+ <arg type="s" name="user_name" direction="in" />
+ <arg type="s" name="package_name" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_type_query_label_by_locale">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="app_id" direction="in" />
+ <arg type="s" name="locale" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="s" name="label_name" direction="out" />
+ </method>
+ <method name="account_type_query_by_provider_feature">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="key" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="aa{sv}" name="account_type_list_data" direction="out" />
+ </method>
+ <method name="account_query_account_by_user_name">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="user_name" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="aa{sv}" name="account_list_data" direction="out" />
+ </method>
+ <method name="account_query_account_by_package_name">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="package_name" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="aa{sv}" name="account_list_data" direction="out" />
+ </method>
+ <method name="account_query_account_by_capability">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="capability_type" direction="in" />
+ <arg type="i" name="capability_value" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="aa{sv}" name="account_list_data" direction="out" />
+ </method>
+ <method name="account_query_account_by_capability_type">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="capability_type" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="aa{sv}" name="account_list_data" direction="out" />
+ </method>
+ <method name="account_query_capability_by_account_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="i" name="account_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="aa{sv}" name="account_list_data" direction="out" />
+ </method>
+ <method name="account_update_sync_status_by_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="i" name="account_db_id" direction="in" />
+ <arg type="i" name="sync_status" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_type_query_provider_feature_by_app_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="app_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="a(ss)" name="feature_list_data" direction="out" />
+ </method>
+ <method name="account_type_query_supported_feature">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="app_id" direction="in" />
+ <arg type="s" name="capability" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="i" name="is_supported" direction="out" />
+ </method>
+ <method name="account_type_update_to_db_by_app_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="a{sv}" name="account_type_variant" direction="in" />
+ <arg type="s" name="app_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_type_delete_by_app_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="app_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_type_query_label_by_app_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="app_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="a(sss)" name="label_list_variant" direction="out" />
+ </method>
+ <method name="account_type_query_by_app_id">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="app_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ <arg type="a{sv}" name="account_type_variant" direction="out" />
+ </method>
+ <method name="account_type_query_app_id_exist">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="s" name="app_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ <method name="account_update_to_db_by_id_ex">
+ <arg type="s" name="account_db_path" direction="in" />
+ <arg type="a{sv}" name="account_variant" direction="in" />
+ <arg type="i" name="account_id" direction="in" />
+ <arg type="s" name="cookie" direction="in" />
+ </method>
+ </interface>
+</node>
diff --git a/common/include/account-private.h b/common/include/account-private.h
new file mode 100644
index 0000000..8ce3d14
--- /dev/null
+++ b/common/include/account-private.h
@@ -0,0 +1,352 @@
+/*
+ * account
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Wonyoung Lee <wy1115.lee@samsung.com>, Sungchan Kim <sungchan81.kim@samsung.com>
+ *
+ * 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 __ACCOUNT_PRIVATE_H__
+#define __ACCOUNT_PRIVATE_H__
+
+#include <stdlib.h>
+#include <tizen.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <glib.h>
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "ACCOUNT"
+
+#define ACCOUNT_VERBOSE(fmt, arg...) \
+ LOGD(": " fmt "\n", ##arg);
+#define ACCOUNT_DEBUG(fmt, arg...) \
+ LOGD(": " fmt "\n", ##arg);
+#define ACCOUNT_ERROR(fmt, arg...) \
+ LOGE(": " fmt "\n", ##arg);
+#define ACCOUNT_FATAL(fmt, arg...) \
+ LOGF(": " fmt "\n", ##arg);
+#define ACCOUNT_SLOGD(fmt, arg...) \
+ SECURE_LOGD(": " fmt "\n", ##arg);
+#define ACCOUNT_SLOGI(fmt, arg...) \
+ SECURE_LOGI(": " fmt "\n", ##arg);
+#define ACCOUNT_SLOGE(fmt, arg...) \
+ SECURE_LOGE(": " fmt "\n", ##arg);
+
+#define ACCOUNT_RETURN_VAL(eval, expr, ret_val, X)\
+ if (!(eval)) \
+{\
+ expr; \
+ return ret_val;\
+} else {;}
+
+#define ACCOUNT_SNPRINTF(dest,size,format,arg...) \
+ do { \
+ snprintf(dest,size-1,format,##arg); \
+ }while(0)
+ /* If the same pointer is passed to free twice, known as a double free. To avoid this, set pointers to
+NULL after passing them to free: free(NULL) is safe (it does nothing).
+ */
+
+#define ACCOUNT_MEMSET(dest,value,size) \
+ do { \
+ memset(dest,value,size); \
+ }while(0)
+
+#define ACCOUNT_CATCH_ERROR(eval, expr, error_val, X) \
+ if (!(eval)) \
+{\
+ expr; \
+ error_code = (error_val);\
+ goto CATCH;\
+} else {;}
+
+#define ACCOUNT_CATCH_ERROR_P(eval, expr, error_val, X) \
+ if (!(eval)) \
+{\
+ expr; \
+ *error_code = (error_val);\
+ goto CATCH;\
+} else {;}
+
+#define _ACCOUNT_FREE(ptr) \
+ if (ptr != NULL) { \
+ free(ptr); \
+ ptr = NULL; \
+ } \
+
+
+#define _ACCOUNT_GFREE(ptr) \
+ if (ptr != NULL) { \
+ g_free(ptr); \
+ ptr = NULL; \
+ } \
+
+#define ACCOUNT_DB_NAME "/opt/usr/dbspace/.account.db"
+#define ACCOUNT_TABLE "account"
+#define CAPABILITY_TABLE "capability"
+#define ACCOUNT_CUSTOM_TABLE "account_custom"
+#define ACCOUNT_TYPE_TABLE "account_type"
+#define LABEL_TABLE "label"
+#define PROVIDER_FEATURE_TABLE "provider_feature"
+#define ACCOUNT_SQLITE_SEQ "sqlite_sequence"
+#define ACCOUNT_SQL_LEN_MAX 1024
+#define ACCOUNT_TABLE_TOTAL_COUNT 6
+
+#define FACEBOOK_PKG_NAME "com.samsung.facebook"
+#define EMAIL_PKG_NAME "email-setting-efl"
+#define EXCHANGE_PKG_NAME "activesync-ui"
+#define IMS_SERVICE_PKG_NAME "ims-service"
+#define SAMSUNGACCOUNTFRONT_PKG_NAME "com.samsung.samsung-account-front"
+//#define SAMSUNGACCOUNT_PKG_NAME "gr47by21a5.SamsungAccount"
+#define SAMSUNGACCOUNT_PKG_NAME "com.samsung.samsungaccount"
+#define CHATON_PKG_NAME "xnq5eh9vop.ChatON"
+#define DROPBOX_PKG_NAME "com.samsung.dropbox"
+#define SYNCHRONISE_PKG_NAME "setting-synchronise-efl"
+
+#define USER_TXT_CNT 5
+#define USER_INT_CNT 5
+
+
+/* account uri list */
+#define ACCOUNT_DATA_SERVICE_PROVIDER "http://tizen.org/account/data/service_provider"
+#define ACCOUNT_OPERATION_SIGNIN_OLD "http://tizen.org/account/operation/signin"
+
+// private account operation type
+#define ACCOUNT_OPERATION_FMM "http://tizen.org/account/operation/fmm"
+#define ACCOUNT_OPERATION_MYACCOUNT "http://tizen.org/account/operation/signin_from_myaccount"
+// End of private account operation type
+
+#define ACCOUNT_SUPPORTS_CAPABILITY_POST "http://tizen.org/account/capability/post"
+#define ACCOUNT_SUPPORTS_CAPABILITY_VOIP "http://tizen.org/account/capability/voip"
+#define ACCOUNT_SUPPORTS_CAPABILITY_SAMSUNG_APPS "http://tizen.org/account/capability/samsungapps"
+#define ACCOUNT_SUPPORTS_CAPABILITY_TASK "http://tizen.org/account/capability/task"
+#define ACCOUNT_SUPPORTS_CAPABILITY_MOBILE_TRACKER "http://tizen.org/account/capability/mobiletracker"
+#define ACCOUNT_SUPPORTS_CAPABILITY_S_NOTE "http://tizen.org/account/capability/snote"
+#define ACCOUNT_SUPPORTS_CAPABILITY_GALLERY "http://tizen.org/account/capability/gallery"
+#define ACCOUNT_SUPPORTS_CAPABILITY_MEMO "http://tizen.org/account/capability/memo"
+#define ACCOUNT_SUPPORTS_CAPABILITY_CHAT "http://tizen.org/account/capability/chat"
+#define ACCOUNT_SUPPORTS_CAPABILITY_BOOKMARK "http://tizen.org/account/capability/bookmark"
+#define ACCOUNT_SUPPORTS_CAPABILITY_SYNCHRONISE "http://tizen.org/account/capability/synchronise"
+#define ACCOUNT_SUPPORTS_CAPABILITY_TIZEN_EMAIL "http://tizen.org/account/capability/tizen_email"
+#define ACCOUNT_SUPPORTS_CAPABILITY_INTERNET "http://tizen.org/account/capability/internet"
+#define ACCOUNT_SUPPORTS_CAPABILITY_DOCOMO_SCHEDULE_MEMO "http://tizen.org/account/capability/docomo"
+/* end of account uri list */
+
+typedef struct _account_sso_access_list_s
+{
+ GList *acl;
+}account_sso_access_list_s;
+
+typedef struct _account_s
+{
+ int id;
+ char* user_name;
+ char* email_address;
+ char* display_name;
+ char* icon_path;
+ char* source;
+ char* package_name;
+ char* access_token;
+ char* domain_name; /*< domain name [Ex: google, facebook, twitter, samsung, ...] */
+// char* auth_method;
+ int auth_type;
+ int secret;
+ int sync_support;
+ int user_data_int[USER_INT_CNT];
+ char* user_data_txt[USER_TXT_CNT];
+ GSList* capablity_list;
+ GList* account_list;
+ GSList* custom_list;
+// GList* domain_list;
+// GList* mechanism_list;
+// account_sso_access_list_s *acl;
+}account_s;
+
+typedef struct _capability_s
+{
+ int id;
+ char* type;
+ int value;
+ char* package_name;
+ char* user_name;
+ int account_id;
+}account_capability_s;
+
+
+typedef struct _account_custom_s
+{
+ int account_id;
+ char* app_id;
+ char* key;
+ char* value;
+}account_custom_s;
+
+typedef struct _account_type_s
+{
+ int id;
+ char* app_id;
+ char* service_provider_id;
+ char* icon_path;
+ char* small_icon_path;
+ bool multiple_account_support;
+ GSList* label_list;
+// GList* account_type_list;
+ GSList* provider_feature_list;
+}account_type_s;
+
+
+typedef struct _label_s
+{
+ char* app_id;
+ char* label;
+ char* locale;
+}label_s;
+
+typedef struct _provider_feature_s
+{
+ char* key;
+ char* app_id;
+}provider_feature_s;
+
+typedef struct _account_auth_data_s
+{
+ GVariant* auth_data;
+}account_auth_data_s;
+
+/**
+ * @brief Enumarations for account handle fields.
+ */
+
+typedef enum {
+ ACCOUNT_FIELD_NONE = -1,
+ ACCOUNT_FIELD_ID,
+ ACCOUNT_FIELD_USER_NAME,
+ ACCOUNT_FIELD_EMAIL_ADDRESS,
+ ACCOUNT_FIELD_DISPLAY_NAME,
+ ACCOUNT_FIELD_ICON_PATH,
+ ACCOUNT_FIELD_SOURCE,
+ ACCOUNT_FIELD_PACKAGE_NAME,
+ ACCOUNT_FIELD_ACCESS_TOKEN,
+ ACCOUNT_FIELD_DOMAIN_NAME,
+// ACCOUNT_FIELD_AUTH_METHOD,
+ ACCOUNT_FIELD_AUTH_TYPE,
+ ACCOUNT_FIELD_SECRET,
+ ACCOUNT_FIELD_SYNC_SUPPORT,
+ ACCOUNT_FIELD_USER_TEXT_0,
+ ACCOUNT_FIELD_USER_TEXT_1,
+ ACCOUNT_FIELD_USER_TEXT_2,
+ ACCOUNT_FIELD_USER_TEXT_3,
+ ACCOUNT_FIELD_USER_TEXT_4,
+ ACCOUNT_FIELD_USER_INT_0,
+ ACCOUNT_FIELD_USER_INT_1,
+ ACCOUNT_FIELD_USER_INT_2,
+ ACCOUNT_FIELD_USER_INT_3,
+ ACCOUNT_FIELD_USER_INT_4,
+ ACCOUNT_DB_FIELD_END
+} ACCOUNT_DB_IDX;
+
+/**
+ * @brief Enumarations for capability fields.
+ */
+
+typedef enum {
+ CAPABILITY_FIELD_NONE = -1,
+ CAPABILITY_FIELD_ID,
+ CAPABILITY_FIELD_KEY,
+ CAPABILITY_FIELD_VALUE,
+ CAPABILITY_FIELD_PACKAGE_NAME,
+ CAPABILITY_FIELD_USER_NAME,
+ CAPABILITY_FIELD_ACCOUNT_ID,
+ CAPABILITY_FIELD_END,
+}CAPABILITY_DB_IDX;
+
+
+typedef enum {
+ ACCOUNT_CUSTOM_FIELD_NONE = -1,
+ ACCOUNT_CUSTOM_FIELD_ACCOUNT_ID,
+ ACCOUNT_CUSTOM_FIELD_APP_ID,
+ ACCOUNT_CUSTOM_FIELD_KEY,
+ ACCOUNT_CUSTOM_FIELD_VALUE,
+ ACCOUNT_CUSTOM_FIELD_END,
+}ACCOUNT_CUSTOM_DB_IDX;
+
+typedef enum {
+ ACCOUNT_TYPE_FIELD_NONE = -1,
+ ACCOUNT_TYPE_FIELD_ID,
+ ACCOUNT_TYPE_FIELD_APP_ID,
+ ACCOUNT_TYPE_FIELD_SERVICE_PROVIDER_ID,
+ ACCOUNT_TYPE_FIELD_ICON_PATH,
+ ACCOUNT_TYPE_FIELD_SMALL_ICON_PATH,
+ ACCOUNT_TYPE_FIELD_MULTIPLE_ACCOUNT_SUPPORT,
+ ACCOUNT_TYPE_FIELD_END,
+}ACCOUNT_TYPE_DB_IDX;
+
+typedef enum {
+ LABEL_FIELD_NONE = -1,
+ LABEL_FIELD_APP_ID,
+ LABEL_FIELD_LABEL,
+ LABEL_FIELD_LOCALE,
+ LABEL_FIELD_END,
+}LABEL_DB_IDX;
+
+typedef enum {
+ PROVIDER_FEATURE_FIELD_NONE = -1,
+ PROVIDER_FEATURE_FIELD_APP_ID,
+ PROVIDER_FEATURE_FIELD_KEY,
+ PROVIDER_FEATURE_FIELD_END,
+}PROVIDER_FEATURE_DB_IDX;
+
+typedef struct GSList account_iterator_s;
+
+#define ACCOUNT_SSO_MAX_LIST_COUNT 100
+#define ACCOUNT_SSO_MAX_APP_NAME_LENGTH 128
+
+#define _ACCOUNT_SVC_ERROR_DOMAIN "accounts-svc"
+#define _ACCOUNT_SVC_ERROR_PREFIX "org.tizen.account.manager.Error"
+
+#define EAS_CMDLINE "/usr/bin/eas-engine"
+#define EMAIL_SERVICE_CMDLINE "/usr/bin/email-service"
+#define IMS_ENGINE_CMDLINE "/usr/bin/ims-srv"
+#define IMS_AGENT_CMDLINE "/usr/bin/ims-agent"
+#define MDM_SERVER_CMDLINE "/usr/bin/mdm-server"
+
+#define RCS_APPID "com.samsung.rcs-im"
+#define IMS_SERVICE_APPID "ims-service"
+#define ACTIVESYNC_APPID "eas-ui"
+#define EMAIL_APPID "email-setting-efl"
+#define SYNCHRONISE_APPID "setting-synchronise-efl"
+#define DS_AGENT_CMDLINE "/usr/bin/oma-ds-agent"
+
+#define FACEBOOK_SDK_APPID "com.samsung.facebook-service"
+#define FACEBOOK_APPID "com.samsung.facebook"
+
+//Used by both accounts and gtme. However as of now, gtme does not have any dependency on account, so duplicating the same
+#define MAX_SYS_CONTEXT_SIZE 1024
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ACCOUNT_PRIVATE_H__*/
diff --git a/common/include/account_free.h b/common/include/account_free.h
new file mode 100644
index 0000000..016d021
--- /dev/null
+++ b/common/include/account_free.h
@@ -0,0 +1,54 @@
+/*
+ * account
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Jiseob Jang <jiseob.jang@samsung.com>
+ *
+ * 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 __ACCOUNT_FREE_H__
+#define __ACCOUNT_FREE_H__
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <glib.h>
+#include <account-private.h>
+
+int _account_glist_account_free(GList* list);
+int _account_gslist_account_free(GSList *list);
+int _account_gslist_capability_free(GSList* list);
+int _account_gslist_custom_free(GSList* list);
+int _account_free_account_with_items(account_s *data);
+int _account_free_capability_with_items(account_capability_s *data);
+int _account_free_custom_with_items(account_custom_s *data);
+//int _account_type_glist_free(GList* list);
+int _account_type_gslist_account_type_free(GSList *list);
+int _account_type_gslist_label_free(GSList* list);
+int _account_type_gslist_feature_free(GSList* list);
+int _account_type_item_free(account_type_s *data);
+int _account_type_free_account_type_with_items(account_type_s *data);
+int _account_type_free_label_with_items(label_s *data);
+int _account_type_free_feature_with_items(provider_feature_s *data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ACCOUNT_FREE_H__*/
diff --git a/common/include/account_ipc_marshal.h b/common/include/account_ipc_marshal.h
new file mode 100644
index 0000000..ce94d9b
--- /dev/null
+++ b/common/include/account_ipc_marshal.h
@@ -0,0 +1,59 @@
+/*
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * 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 __ACC_IPC_MARSHAL_H__
+#define __ACC_IPC_MARSHAL_H__
+
+#include "account-private.h"
+
+GVariant* marshal_account(const account_s* account);
+account_s* umarshal_account(GVariant* in_data);
+
+GVariant* marshal_account_type(const account_type_s* account_type);
+account_type_s* umarshal_account_type(GVariant* in_data);
+
+GVariant* marshal_account_list_double(GList* account_list);
+GVariant* marshal_account_list(GSList* account_list);
+GSList* unmarshal_account_list(GVariant* variant);
+
+GVariant* marshal_account_type_list(GSList* account_type_list);
+GSList* unmarshal_account_type_list(GVariant* variant);
+
+GVariant* marshal_capability_list(GSList* capability_list);
+GSList* unmarshal_capability_list(GVariant* variant);
+
+GVariant* marshal_custom_list(GSList* capability_list);
+GSList* unmarshal_custom_list(GVariant* variant);
+
+GVariant* marshal_user_int_array(const int* user_data_int_array);
+GVariant* marshal_user_txt_array(char* const* user_txt_array);
+
+int* unmarshal_user_int_array(GVariant* variant);
+char** unmarshal_user_txt_array(GVariant* variant);
+
+account_s* create_empty_account_instance(void);
+
+GVariant * provider_feature_list_to_variant (GSList *list);
+GSList* variant_to_provider_feature_list(GVariant *variant);
+
+GVariant *label_list_to_variant (GSList *list);
+GSList *variant_to_label_list (GVariant *variant);
+
+account_type_s* create_empty_account_type_instance(void);
+
+#endif
diff --git a/common/include/dbg.h b/common/include/dbg.h
new file mode 100644
index 0000000..cb23b6b
--- /dev/null
+++ b/common/include/dbg.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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 __DBG_H__
+
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "ACCOUNT"
+
+#ifndef _ERR
+#define _ERR(fmt, args...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#ifndef _DBG
+#define _DBG(fmt, args...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+#ifndef _INFO
+#define _INFO(fmt, args...) LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#endif
+
+
+#endif /* __DBG_H__ */
diff --git a/common/src/account_free.c b/common/src/account_free.c
new file mode 100644
index 0000000..de9e1dd
--- /dev/null
+++ b/common/src/account_free.c
@@ -0,0 +1,284 @@
+/*
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * 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 "account-private.h"
+#include "dbg.h"
+#include "account_free.h"
+
+int _account_glist_account_free(GList* list)
+{
+ if(!list){
+ return -1;
+ }
+
+ GList* iter;
+
+ for (iter = list; iter != NULL; iter = g_list_next(iter)) {
+ account_s *account_record = (account_s*)iter->data;
+ _account_free_account_with_items(account_record);
+ }
+
+ g_list_free(list);
+ list = NULL;
+
+ return 0;
+}
+
+int _account_gslist_account_free(GSList *list)
+{
+ if(!list){
+ return -1;
+ }
+
+ GSList* iter;
+
+ for (iter = list; iter != NULL; iter = g_slist_next(iter)) {
+ account_s *account_data = (account_s*)iter->data;
+ _account_free_account_with_items(account_data);
+ }
+
+ g_slist_free(list);
+ list = NULL;
+
+ return 0;
+}
+
+int _account_gslist_capability_free(GSList* list)
+{
+ if(!list){
+ return -1;
+ }
+
+ GSList* iter;
+
+ for (iter = list; iter != NULL; iter = g_slist_next(iter)) {
+ account_capability_s *cap_data = (account_capability_s*)iter->data;
+ _account_free_capability_with_items(cap_data);
+ }
+
+ g_slist_free(list);
+ list = NULL;
+
+ return 0;
+}
+
+int _account_gslist_custom_free(GSList* list)
+{
+ if(!list){
+ return -1;
+ }
+
+ GSList* iter;
+
+ for (iter = list; iter != NULL; iter = g_slist_next(iter)) {
+ account_custom_s *custom_data = (account_custom_s*)iter->data;
+ _account_free_custom_with_items(custom_data);
+ }
+
+ g_slist_free(list);
+ list = NULL;
+
+ return 0;
+}
+
+int _account_free_capability_with_items(account_capability_s *data)
+{
+ if(!data)
+ return -1;
+
+ _ACCOUNT_FREE(data->type);
+ _ACCOUNT_FREE(data->package_name);
+ _ACCOUNT_FREE(data->user_name);
+
+ _ACCOUNT_FREE(data);
+
+ return 0;
+}
+
+int _account_free_custom_with_items(account_custom_s *data)
+{
+ if(!data)
+ return -1;
+
+ _ACCOUNT_FREE(data->app_id);
+ _ACCOUNT_FREE(data->key);
+ _ACCOUNT_FREE(data->value);
+
+ _ACCOUNT_FREE(data);
+
+ return 0;
+}
+
+int _account_free_account_with_items(account_s *data)
+{
+ if(!data)
+ return -1;
+
+ _ACCOUNT_FREE(data->user_name);
+ _ACCOUNT_FREE(data->email_address);
+ _ACCOUNT_FREE(data->display_name);
+ _ACCOUNT_FREE(data->icon_path);
+ _ACCOUNT_FREE(data->source);
+ _ACCOUNT_FREE(data->package_name);
+ _ACCOUNT_FREE(data->domain_name);
+ _ACCOUNT_FREE(data->access_token);
+
+ int i;
+ for(i=0;i<USER_TXT_CNT;i++)
+ _ACCOUNT_FREE(data->user_data_txt[i]);
+
+ _account_gslist_capability_free(data->capablity_list);
+ _account_glist_account_free(data->account_list);
+ _account_gslist_custom_free(data->custom_list);
+
+ _ACCOUNT_FREE(data);
+
+ return 0;
+}
+
+int _account_type_free_label_with_items(label_s *data)
+{
+ if(!data)
+ return -1;
+
+ _ACCOUNT_FREE(data->app_id);
+ _ACCOUNT_FREE(data->label);
+ _ACCOUNT_FREE(data->locale);
+
+ _ACCOUNT_FREE(data);
+
+ return 0;
+}
+
+int _account_type_free_feature_with_items(provider_feature_s *data)
+{
+ if(!data)
+ return -1;
+
+ _ACCOUNT_FREE(data->app_id);
+ _ACCOUNT_FREE(data->key);
+
+ _ACCOUNT_FREE(data);
+ return 0;
+}
+
+int _account_type_gslist_feature_free(GSList* list)
+{
+ if(!list)
+ return -1;
+
+ GSList* iter;
+
+ for (iter = list; iter != NULL; iter = g_slist_next(iter)) {
+ provider_feature_s *feature_data = (provider_feature_s*)iter->data;
+ _account_type_free_feature_with_items(feature_data);
+ }
+
+ g_slist_free(list);
+ list = NULL;
+
+ return 0;
+}
+
+int _account_type_gslist_label_free(GSList* list)
+{
+ if(!list)
+ return -1;
+
+ GSList* iter;
+
+ for (iter = list; iter != NULL; iter = g_slist_next(iter)) {
+ label_s *label_data = (label_s*)iter->data;
+ _account_type_free_label_with_items(label_data);
+ }
+
+ g_slist_free(list);
+ list = NULL;
+
+ return 0;
+}
+
+int _account_type_item_free(account_type_s *data)
+{
+ if(!data)
+ return -1;
+
+ _ACCOUNT_FREE(data->app_id);
+ _ACCOUNT_FREE(data->service_provider_id);
+ _ACCOUNT_FREE(data->icon_path);
+ _ACCOUNT_FREE(data->small_icon_path);
+
+ return 0;
+}
+/*
+int _account_type_glist_free(GList* list)
+{
+ if(!list)
+ return -1;
+
+ GList* iter;
+
+ for (iter = list; iter != NULL; iter = g_list_next(iter)) {
+ account_type_s *account_type_record = (account_type_s*)iter->data;
+ _account_type_item_free(account_type_record);
+ _ACCOUNT_FREE(account_type_record);
+ }
+
+ g_list_free(list);
+ list = NULL;
+
+ return 0;
+}
+*/
+int _account_type_free_account_type_with_items(account_type_s *data)
+{
+ if(!data)
+ return -1;
+
+ _account_type_item_free(data);
+
+ _account_type_gslist_label_free(data->label_list);
+ _account_type_gslist_feature_free(data->provider_feature_list);
+// _account_type_glist_free(data->account_type_list);
+
+ _ACCOUNT_FREE(data);
+
+ return 0;
+}
+
+int _account_type_gslist_account_type_free(GSList* list)
+{
+ _INFO("_account_type_gslist_account_type_free(GSList* list) start");
+ if(!list)
+ return -1;
+
+ GSList* iter;
+
+ for (iter = list; iter != NULL; iter = g_slist_next(iter)) {
+ account_type_s *account_type_data = (account_type_s*)iter->data;
+ _INFO("before _account_type_free_account_type_with_items(account_type_data)");
+ _account_type_free_account_type_with_items(account_type_data);
+ _INFO("after _account_type_free_account_type_with_items(account_type_data)");
+ }
+
+ g_slist_free(list);
+ list = NULL;
+
+ _INFO("_account_type_gslist_account_type_free(GSList* list) end");
+ return 0;
+}
diff --git a/common/src/account_ipc_marshal.c b/common/src/account_ipc_marshal.c
new file mode 100644
index 0000000..1e7dd0a
--- /dev/null
+++ b/common/src/account_ipc_marshal.c
@@ -0,0 +1,1341 @@
+/*
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * 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 <stdio.h> //snprintf
+#include <stdlib.h> //calloc
+#include <string.h>
+
+#include "account_ipc_marshal.h"
+#include "dbg.h"
+
+#define ACCOUNT_DATA_KEY_ID "id"
+#define ACCOUNT_DATA_KEY_USER_NAME "user_name"
+#define ACCOUNT_DATA_KEY_EMAIL "email_address"
+#define ACCOUNT_DATA_KEY_DISPLAY_NAME "display_name"
+#define ACCOUNT_DATA_KEY_ICON_PATH "icon_path"
+#define ACCOUNT_DATA_KEY_SOURCE "source"
+#define ACCOUNT_DATA_KEY_PACKAGE_NAME "package_name"
+#define ACCOUNT_DATA_KEY_ACCESS_TOKEN "access_token"
+#define ACCOUNT_DATA_KEY_DOMAIN_NAME "domain_name"
+#define ACCOUNT_DATA_KEY_AUTH_TYPE "auth_type"
+#define ACCOUNT_DATA_KEY_SECRET "secret"
+#define ACCOUNT_DATA_KEY_SYNC_SUPPORT "sync_support"
+#define ACCOUNT_DATA_KEY_USER_DATA_INT "user_data_int"
+#define ACCOUNT_DATA_KEY_USER_DATA_TXT "user_data_txt"
+#define ACCOUNT_DATA_KEY_CAPABILITY_LIST "capability_list"
+#define ACCOUNT_DATA_KEY_ACCOUNT_LIST "account_list"
+#define ACCOUNT_DATA_KEY_CUSTOM_LIST "custom_list"
+
+#define ACCOUNT_TYPE_DATA_KEY_ID "id"
+#define ACCOUNT_TYPE_DATA_KEY_APP_ID "app_id"
+#define ACCOUNT_TYPE_DATA_KEY_SERVICE_PROVIDER_ID "service_provider_id"
+#define ACCOUNT_TYPE_DATA_KEY_ICON_PATH "icon_path"
+#define ACCOUNT_TYPE_DATA_KEY_SMALL_ICON_PATH "small_icon_path"
+#define ACCOUNT_TYPE_DATA_KEY_MULTI_SUPPORT "multiple_account_support"
+#define ACCOUNT_TYPE_DATA_KEY_LABEL_LIST "label_list"
+#define ACCOUNT_TYPE_DATA_KEY_ACC_TYPE_LIST "account_type_list"
+#define ACCOUNT_TYPE_DATA_KEY_PROVIDER_FEATURE_LIST "provider_feature_list"
+
+#define ACCOUNT_CAPABILITY_DATA_KEY_ID "id"
+#define ACCOUNT_CAPABILITY_DATA_KEY_TYPE "type"
+#define ACCOUNT_CAPABILITY_DATA_KEY_VALUE "value"
+#define ACCOUNT_CAPABILITY_DATA_KEY_PACKAGE_NAME "package_name"
+#define ACCOUNT_CAPABILITY_DATA_KEY_USER_NAME "user_name"
+#define ACCOUNT_CAPABILITY_DATA_KEY_ACC_ID "account_id"
+
+#define ACCOUNT_CUSTOM_DATA_KEY_ACC_ID "account_id"
+#define ACCOUNT_CUSTOM_DATA_KEY_APP_ID "app_id"
+#define ACCOUNT_CUSTOM_DATA_KEY_KEY "key"
+#define ACCOUNT_CUSTOM_DATA_KEY_VALUE "value"
+
+static label_s*
+_variant_to_label(GVariant *variant)
+{
+ gchar *app_id = NULL;
+ gchar *label = NULL;
+ gchar *locale = NULL;
+
+ g_return_val_if_fail (variant != NULL, NULL);
+
+ g_variant_get (variant, "(sss)", &app_id, &label, &locale);
+
+ label_s* label_data = (label_s*) calloc(1, sizeof(label_s));
+
+ if( label_data == NULL ) {
+ _ERR("provider_feature_s calloc failed - out of memory.");
+ return NULL;
+ }
+
+ label_data->app_id = g_strdup(app_id);
+ label_data->label = g_strdup(label);
+ label_data->locale = g_strdup(locale);
+
+ g_free (app_id);
+ g_free (label);
+ g_free (locale);
+
+ return label_data;
+}
+
+GSList*
+variant_to_label_list(GVariant *variant)
+{
+ GSList *list = NULL;
+ GVariantIter iter;
+ GVariant *value;
+
+ g_return_val_if_fail (variant != NULL, NULL);
+
+ g_variant_iter_init (&iter, variant);
+ while ((value = g_variant_iter_next_value (&iter))) {
+ list = g_slist_append (list,
+ _variant_to_label(value));
+ g_variant_unref (value);
+ }
+
+ return list;
+}
+
+
+static GVariant *
+_label_to_variant (label_s *label_data)
+{
+ GVariant *variant;
+
+ g_return_val_if_fail (label_data != NULL, NULL);
+
+ variant = g_variant_new ("(sss)",
+ label_data->app_id ? label_data->app_id : "",
+ label_data->label ? label_data->label : "",
+ label_data->locale ? label_data->locale : "");
+
+ return variant;
+}
+
+GVariant *
+label_list_to_variant (GSList *list)
+{
+ GVariantBuilder builder;
+ GVariant *variant;
+ label_s *label_data;
+
+ GSList* iter;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+ for (iter = list ; iter != NULL; iter = g_slist_next (iter))
+ {
+ label_data = (label_s*) (iter->data);
+ g_variant_builder_add_value (
+ &builder,
+ _label_to_variant(label_data));
+ }
+ variant = g_variant_builder_end (&builder);
+
+ return variant;
+}
+
+
+static provider_feature_s*
+_variant_to_provider_feature(GVariant *variant)
+{
+ gchar *key = NULL;
+ gchar *app_id = NULL;
+
+ g_return_val_if_fail (variant != NULL, NULL);
+
+ g_variant_get (variant, "(ss)", &key, &app_id);
+
+ provider_feature_s* provider_feature_data = (provider_feature_s*) calloc(1, sizeof(provider_feature_s));
+
+ if( provider_feature_data == NULL ) {
+ _ERR("provider_feature_s calloc failed - out of memory.");
+ return NULL;
+ }
+
+ provider_feature_data->key = g_strdup(key);
+ provider_feature_data->app_id = g_strdup(app_id);
+
+ g_free (key);
+ g_free (app_id);
+
+ return provider_feature_data;
+}
+
+GSList*
+variant_to_provider_feature_list(GVariant *variant)
+{
+ GSList *list = NULL;
+ GVariantIter iter;
+ GVariant *value;
+
+ g_return_val_if_fail (variant != NULL, NULL);
+
+ g_variant_iter_init (&iter, variant);
+ while ((value = g_variant_iter_next_value (&iter))) {
+ list = g_slist_append (list,
+ _variant_to_provider_feature(value));
+ g_variant_unref (value);
+ }
+
+ return list;
+}
+
+static GVariant *
+_provider_feature_to_variant (const provider_feature_s *pro_feature_data)
+{
+ GVariant *variant;
+
+ g_return_val_if_fail (pro_feature_data != NULL, NULL);
+
+ variant = g_variant_new ("(ss)",
+ pro_feature_data->key ? pro_feature_data->key : "",
+ pro_feature_data->app_id ? pro_feature_data->app_id : "");
+
+ return variant;
+}
+
+GVariant *
+provider_feature_list_to_variant (GSList *list)
+{
+ GVariantBuilder builder;
+ GVariant *variant;
+ provider_feature_s *provider_feature_data;
+
+ GSList* iter;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+ for (iter = list ; iter != NULL; iter = g_slist_next (iter)) {
+ provider_feature_data = (provider_feature_s *) (iter->data);
+ g_variant_builder_add_value (
+ &builder,
+ _provider_feature_to_variant(provider_feature_data));
+ }
+ variant = g_variant_builder_end (&builder);
+
+ return variant;
+}
+
+GVariant *
+marshal_account(const account_s* account)
+{
+ _INFO("_marshal_account start");
+
+ const account_s* in_data = account;
+ GVariantBuilder builder;
+ int i;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
+
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_ID,
+ g_variant_new_int32 (in_data->id));
+
+ if (in_data->user_name != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_USER_NAME,
+ g_variant_new_string (in_data->user_name));
+ }
+ if (in_data->email_address != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_EMAIL,
+ g_variant_new_string (in_data->email_address));
+ }
+ if (in_data->display_name != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_DISPLAY_NAME,
+ g_variant_new_string (in_data->display_name));
+ }
+ if (in_data->icon_path != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_ICON_PATH,
+ g_variant_new_string (in_data->icon_path));
+ }
+ if (in_data->source != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_SOURCE,
+ g_variant_new_string (in_data->source));
+ }
+ if (in_data->package_name != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_PACKAGE_NAME,
+ g_variant_new_string (in_data->package_name));
+ }
+ if (in_data->access_token != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_ACCESS_TOKEN,
+ g_variant_new_string (in_data->access_token));
+ }
+ if (in_data->domain_name != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_DOMAIN_NAME,
+ g_variant_new_string (in_data->domain_name));
+ }
+
+ g_variant_builder_add (&builder, "{sv}", ACCOUNT_DATA_KEY_AUTH_TYPE, g_variant_new_int32 (in_data->auth_type));
+
+ g_variant_builder_add (&builder, "{sv}", ACCOUNT_DATA_KEY_SECRET, g_variant_new_int32 (in_data->secret));
+
+ g_variant_builder_add (&builder, "{sv}", ACCOUNT_DATA_KEY_SYNC_SUPPORT, g_variant_new_int32 (in_data->sync_support));
+
+ for(i=0; i<USER_INT_CNT; i++)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_USER_DATA_INT,
+ marshal_user_int_array((const int*) in_data->user_data_int));
+ }
+
+ for(i=0; i<USER_TXT_CNT; i++)
+ {
+ GVariant *variant = marshal_user_txt_array((char* const*)in_data->user_data_txt);
+ if( variant ) {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_USER_DATA_TXT,
+ variant);
+ }
+ }
+
+ if (in_data->capablity_list != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_CAPABILITY_LIST,
+ marshal_capability_list (in_data->capablity_list));
+ }
+
+ if (in_data->custom_list != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_DATA_KEY_CUSTOM_LIST,
+ marshal_custom_list (in_data->custom_list));
+ }
+
+ //TODO: add support for rest
+
+ _INFO("__marshal_account end");
+
+ return g_variant_builder_end (&builder);
+}
+
+account_s* umarshal_account(GVariant* in_data)
+{
+ _INFO("umarshal_account start");
+
+ if (in_data == NULL)
+ {
+ _ERR("Null input");
+ return NULL;
+ }
+
+ GVariant* temp_var = in_data;
+ gchar* print_type = NULL;
+ print_type = g_variant_print(temp_var, TRUE);
+ if (print_type == NULL)
+ {
+ _ERR("Invalid input");
+ return NULL;
+ }
+
+ account_s* account = (account_s*)calloc(1, sizeof(account_s));
+ if (account == NULL)
+ {
+ _ERR("Out of memory");
+ return NULL;
+ }
+
+ GVariantIter iter;
+ gchar *key = NULL;
+ GVariant *value = NULL;
+
+ g_variant_iter_init (&iter, in_data);
+
+ while (g_variant_iter_loop (&iter, "{sv}", &key, &value))
+ {
+ if (!strcmp(key, ACCOUNT_DATA_KEY_ID))
+ {
+ account->id = g_variant_get_int32 (value);
+ }
+
+ if (!strcmp(key, ACCOUNT_DATA_KEY_USER_NAME))
+ {
+ account->user_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_EMAIL))
+ {
+ account->email_address = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_DISPLAY_NAME))
+ {
+ account->display_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_ICON_PATH))
+ {
+ account->icon_path = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_SOURCE))
+ {
+ account->source = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_PACKAGE_NAME))
+ {
+ account->package_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_ACCESS_TOKEN))
+ {
+ account->access_token = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_DOMAIN_NAME))
+ {
+ account->domain_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_AUTH_TYPE))
+ {
+ account->auth_type = g_variant_get_int32 (value);
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_SECRET))
+ {
+ account->secret = g_variant_get_int32 (value);
+ }
+
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_SYNC_SUPPORT))
+ {
+ account->sync_support = g_variant_get_int32 (value);
+ }
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_USER_DATA_INT))
+ {
+ int i;
+ int* tmp_user_ints = unmarshal_user_int_array(value);
+ for(i=0; i<USER_INT_CNT; i++)
+ {
+ account->user_data_int[i] = tmp_user_ints[i];
+ }
+ _ACCOUNT_FREE(tmp_user_ints);
+ }
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_USER_DATA_TXT))
+ {
+ int i;
+ char** tmp_user_txts = unmarshal_user_txt_array(value);
+ for(i=0; i<USER_TXT_CNT; i++)
+ {
+ account->user_data_txt[i] = strdup(tmp_user_txts[i]);
+ _ACCOUNT_FREE(tmp_user_txts[i]);
+ }
+ _ACCOUNT_FREE(tmp_user_txts);
+ }
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_CAPABILITY_LIST))
+ {
+ account->capablity_list = unmarshal_capability_list (value);
+ }
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_CUSTOM_LIST))
+ {
+ account->custom_list = unmarshal_custom_list (value);
+ }
+ //TODO: support for rest
+ }
+
+ _INFO("unmarshal_account end");
+ return account;
+}
+
+GVariant* marshal_account_list_double(GList* account_list)
+{
+ _INFO("marshal_account_list start");
+ if (account_list == NULL)
+ {
+ _ERR("input NULL.");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+ account_s *account_data;
+
+ GList* iter;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+
+ for (iter = account_list ; iter != NULL; iter = g_list_next (iter))
+ {
+ account_data = (account_s *) (iter->data);
+ g_variant_builder_add_value(&builder, marshal_account(account_data));
+ }
+ _INFO("marshal_account_list end");
+ return g_variant_builder_end (&builder);
+}
+
+GVariant* marshal_account_list(GSList* account_list)
+{
+ _INFO("marshal_account_list start");
+ if (account_list == NULL)
+ {
+ _ERR("input NULL.");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+ account_s *account_data;
+
+ GSList* iter;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+
+ for (iter = account_list ; iter != NULL; iter = g_slist_next (iter))
+ {
+ account_data = (account_s *) (iter->data);
+ g_variant_builder_add_value(&builder, marshal_account(account_data));
+ _INFO("end one iteration of account_list");
+ }
+ _INFO("marshal_account_list end");
+ return g_variant_builder_end (&builder);
+}
+
+GSList* unmarshal_account_list(GVariant* variant)
+{
+ _INFO("unmarshal_account_list start");
+ GSList *list = NULL;
+ GVariantIter iter;
+ GVariantIter* iter_row = NULL;
+ const gchar *key = NULL;
+ GVariant *value = NULL;
+
+ if (variant == NULL)
+ {
+ _ERR("input NULL");
+ return NULL;
+ }
+
+// gchar* var_type = g_variant_print (variant, TRUE);
+// _INFO("var_type = %s", var_type);
+
+ g_variant_iter_init (&iter, variant);
+
+ while (g_variant_iter_loop (&iter, "a{sv}", &iter_row))
+ {
+ account_s* account = (account_s*)calloc(1, sizeof(account_s));
+
+ while (g_variant_iter_loop(iter_row, "{sv}", &key, &value))
+ {
+ if (!g_strcmp0(key, ACCOUNT_DATA_KEY_ID))
+ {
+ account->id = g_variant_get_int32 (value);
+ }
+
+ if (!g_strcmp0(key, ACCOUNT_DATA_KEY_USER_NAME))
+ {
+ account->user_name = g_strdup(g_variant_get_string(value, NULL));
+ }
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_EMAIL))
+ {
+ account->email_address = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_DISPLAY_NAME))
+ {
+ account->display_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_ICON_PATH))
+ {
+ account->icon_path = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_SOURCE))
+ {
+ account->source = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_PACKAGE_NAME))
+ {
+ account->package_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_ACCESS_TOKEN))
+ {
+ account->access_token = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_DOMAIN_NAME))
+ {
+ account->domain_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_AUTH_TYPE))
+ {
+ account->auth_type = g_variant_get_int32 (value);
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_SECRET))
+ {
+ account->secret = g_variant_get_int32 (value);
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_DATA_KEY_SYNC_SUPPORT))
+ {
+ account->sync_support = g_variant_get_int32 (value);
+ }
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_USER_DATA_INT))
+ {
+ int i;
+ int* tmp_user_ints = unmarshal_user_int_array(value);
+ for(i=0; i<USER_INT_CNT; i++)
+ {
+ account->user_data_int[i] = tmp_user_ints[i];
+ }
+ _ACCOUNT_FREE(tmp_user_ints);
+ }
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_USER_DATA_TXT))
+ {
+ int i;
+ char** tmp_user_txts = unmarshal_user_txt_array(value);
+ for(i=0; i<USER_TXT_CNT; i++)
+ {
+ account->user_data_txt[i] = strdup(tmp_user_txts[i]);
+ _ACCOUNT_FREE(tmp_user_txts[i]);
+ }
+ _ACCOUNT_FREE(tmp_user_txts);
+ }
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_CAPABILITY_LIST))
+ {
+ account->capablity_list = unmarshal_capability_list (value);
+ }
+ else if (!strcmp(key, ACCOUNT_DATA_KEY_CUSTOM_LIST))
+ {
+ account->custom_list = unmarshal_custom_list (value);
+ }
+ }
+ list = g_slist_append (list, account);
+
+ }
+
+ _INFO("unmarshal_account_list end");
+ return list;
+}
+
+GVariant* marshal_account_type_list(GSList* account_type_list)
+{
+ _INFO("marshal_account_type_list start");
+ if (account_type_list == NULL)
+ {
+ _ERR("input NULL.");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+ account_type_s *account_type_data = NULL;
+
+ GSList* iter;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+
+ for (iter = account_type_list ; iter != NULL; iter = g_slist_next (iter))
+ {
+ account_type_data = (account_type_s *) (iter->data);
+ g_variant_builder_add_value(&builder, marshal_account_type((account_type_s*)account_type_data));
+ }
+
+ _INFO("marshal_account_type_list end");
+ return g_variant_builder_end (&builder);
+}
+
+account_s* create_empty_account_instance(void)
+{
+ _INFO("create_empty_account_instance start");
+
+ account_s *data = (account_s*)malloc(sizeof(account_s));
+
+ if (data == NULL)
+ {
+ ACCOUNT_ERROR("Memory Allocation Failed");
+ return NULL;
+ }
+
+ ACCOUNT_MEMSET(data, 0, sizeof(account_s));
+
+ data->id = -1;
+ data->user_name = NULL;
+ data->email_address = NULL;
+ data->display_name = NULL;
+ data->icon_path = NULL;
+ data->source = NULL;
+ data->package_name = NULL;
+ data->access_token = NULL;
+ data->domain_name = NULL;
+ data->auth_type = 0;
+ data->secret = 0;
+ data->sync_support = false;
+ data->capablity_list = NULL;
+ data->account_list = NULL;
+ data->custom_list = NULL;
+
+ _INFO("create_empty_account_instance end");
+
+ return data;
+}
+
+account_type_s* create_empty_account_type_instance(void)
+{
+ _INFO("create_empty_account_type_instance start");
+ account_type_s *data = (account_type_s*)malloc(sizeof(account_type_s));
+
+ if (data == NULL)
+ {
+ ACCOUNT_ERROR("Memory Allocation Failed");
+ return NULL;
+ }
+
+ ACCOUNT_MEMSET(data, 0, sizeof(account_type_s));
+
+ data->id = -1;
+ data->app_id = NULL;
+ data->service_provider_id = NULL;
+ data->icon_path = NULL;
+ data->small_icon_path = NULL;
+ data->multiple_account_support = false;
+ data->label_list = NULL;
+// data->account_type_list = NULL;
+ data->provider_feature_list = NULL;
+
+ _INFO("create_empty_account_type_instance end");
+ return data;
+}
+
+GSList* unmarshal_account_type_list(GVariant* variant)
+{
+ _INFO("unmarshal_account_type_list start");
+ GSList *list = NULL;
+ GVariantIter iter;
+ GVariantIter* iter_row = NULL;
+ const gchar *key = NULL;
+ GVariant *value = NULL;
+
+ if (variant == NULL)
+ {
+ _ERR("input NULL");
+ return NULL;
+ }
+
+// gchar* var_type = g_variant_print (variant, TRUE);
+// _INFO("var_type = %s", var_type);
+
+ g_variant_iter_init (&iter, variant);
+
+ while (g_variant_iter_loop (&iter, "a{sv}", &iter_row))
+ {
+ account_type_s* account_type = create_empty_account_type_instance();
+
+ while (g_variant_iter_loop(iter_row, "{sv}", &key, &value))
+ {
+ if (!g_strcmp0(key, ACCOUNT_TYPE_DATA_KEY_ID))
+ {
+ account_type->id = g_variant_get_int32(value);
+ }
+ else if (!g_strcmp0(key, ACCOUNT_TYPE_DATA_KEY_APP_ID))
+ {
+ account_type->app_id = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_TYPE_DATA_KEY_SERVICE_PROVIDER_ID))
+ {
+ account_type->service_provider_id = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_TYPE_DATA_KEY_ICON_PATH))
+ {
+ account_type->icon_path = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_TYPE_DATA_KEY_SMALL_ICON_PATH))
+ {
+ account_type->small_icon_path = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_TYPE_DATA_KEY_MULTI_SUPPORT))
+ {
+ account_type->multiple_account_support = g_variant_get_int32 (value);
+ }
+ else if (!g_strcmp0(key, ACCOUNT_TYPE_DATA_KEY_LABEL_LIST))
+ {
+ account_type->label_list = variant_to_label_list(value);
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_TYPE_DATA_KEY_PROVIDER_FEATURE_LIST))
+ {
+ account_type->provider_feature_list = variant_to_provider_feature_list(value);
+ }
+
+ }
+ list = g_slist_append (list, account_type);
+
+ }
+
+ _INFO("unmarshal_account_type_list end");
+ return list;
+}
+
+GVariant* marshal_account_type(const account_type_s* account_type)
+{
+ _INFO("marshal_account_type start");
+ if (account_type == NULL)
+ {
+ _ERR("NULL input");
+ return NULL;
+ }
+
+ const account_type_s* in_data = account_type;
+ GVariantBuilder builder;
+
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT);
+
+
+ if (in_data->app_id != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_TYPE_DATA_KEY_APP_ID,
+ g_variant_new_string (in_data->app_id));
+ }
+
+ if (in_data->service_provider_id != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_TYPE_DATA_KEY_SERVICE_PROVIDER_ID,
+ g_variant_new_string (in_data->service_provider_id));
+ }
+
+ if (in_data->icon_path != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_TYPE_DATA_KEY_ICON_PATH,
+ g_variant_new_string (in_data->icon_path));
+ }
+
+ if (in_data->small_icon_path != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_TYPE_DATA_KEY_SMALL_ICON_PATH,
+ g_variant_new_string (in_data->small_icon_path));
+ }
+
+ if (in_data->multiple_account_support == false)
+ {
+ g_variant_builder_add (&builder, "{sv}", ACCOUNT_TYPE_DATA_KEY_MULTI_SUPPORT,
+ g_variant_new_int32 (0));
+ }
+ else
+ {
+ g_variant_builder_add (&builder, "{sv}", ACCOUNT_TYPE_DATA_KEY_MULTI_SUPPORT,
+ g_variant_new_int32 (1));
+ }
+
+ if (in_data->label_list != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_TYPE_DATA_KEY_LABEL_LIST,
+ label_list_to_variant(in_data->label_list));
+ }
+
+ if (in_data->provider_feature_list != NULL)
+ {
+ g_variant_builder_add (&builder, "{sv}",
+ ACCOUNT_TYPE_DATA_KEY_PROVIDER_FEATURE_LIST,
+ provider_feature_list_to_variant(in_data->provider_feature_list));
+ }
+
+
+ _INFO("marshal_account_type end");
+
+ return g_variant_builder_end (&builder);
+}
+
+account_type_s* umarshal_account_type(GVariant* in_data)
+{
+ _INFO("unmarshal_account_type start");
+ if (in_data == NULL)
+ {
+ _ERR("Null input");
+ return NULL;
+ }
+
+ account_type_s* account_type = (account_type_s*)calloc(1, sizeof(account_type_s));
+ if (account_type == NULL)
+ {
+ _ERR("Out of memory");
+ return NULL;
+ }
+
+ GVariantIter iter;
+ gchar *key = NULL;
+ GVariant *value = NULL;
+
+ g_variant_iter_init (&iter, in_data);
+ while (g_variant_iter_loop (&iter, "{sv}", &key, &value))
+ {
+ if (!strcmp(key, ACCOUNT_TYPE_DATA_KEY_APP_ID))
+ {
+ account_type->app_id = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_TYPE_DATA_KEY_SERVICE_PROVIDER_ID))
+ {
+ account_type->service_provider_id = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_TYPE_DATA_KEY_ICON_PATH))
+ {
+ account_type->icon_path = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_TYPE_DATA_KEY_SMALL_ICON_PATH))
+ {
+ account_type->small_icon_path = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!strcmp(key, ACCOUNT_TYPE_DATA_KEY_MULTI_SUPPORT))
+ {
+ account_type->multiple_account_support = g_variant_get_int32 (value);
+ }
+
+ else if (!strcmp(key, ACCOUNT_TYPE_DATA_KEY_LABEL_LIST))
+ {
+ account_type->label_list = variant_to_label_list(value);
+ }
+
+ else if (!strcmp(key, ACCOUNT_TYPE_DATA_KEY_PROVIDER_FEATURE_LIST))
+ {
+ account_type->provider_feature_list = variant_to_provider_feature_list(value);
+ }
+
+ }
+ //TODO: support for collections
+
+ _INFO("unmarshal_account_type end");
+
+ return account_type;
+}
+
+GVariant* marshal_account_capability(account_capability_s* capability)
+{
+ _INFO("marshal_account_capability start");
+
+ if (capability == NULL)
+ {
+ _ERR("Null input");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
+
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CAPABILITY_DATA_KEY_ID, g_variant_new_int32(capability->id));
+
+ if (capability->type != NULL)
+ {
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CAPABILITY_DATA_KEY_TYPE, g_variant_new_string(capability->type));
+
+ }
+
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CAPABILITY_DATA_KEY_VALUE, g_variant_new_int32(capability->value));
+
+ if (capability->package_name != NULL)
+ {
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CAPABILITY_DATA_KEY_PACKAGE_NAME, g_variant_new_string(capability->package_name));
+
+ }
+
+ if (capability->user_name != NULL)
+ {
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CAPABILITY_DATA_KEY_USER_NAME, g_variant_new_string(capability->user_name));
+
+ }
+
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CAPABILITY_DATA_KEY_ACC_ID, g_variant_new_int32(capability->account_id));
+
+ _INFO("marshal_account_capability end");
+
+ return g_variant_builder_end(&builder);
+}
+
+GVariant* marshal_capability_list(GSList* capability_list)
+{
+ _INFO("marshal_capability_list start");
+ if (capability_list == NULL)
+ {
+ _ERR("input NULL.");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+ account_capability_s *account_capability_data = NULL;
+
+ GSList* iter;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+
+ for (iter = capability_list ; iter != NULL; iter = g_slist_next (iter))
+ {
+ account_capability_data = (account_capability_s *) (iter->data);
+ g_variant_builder_add_value(&builder, marshal_account_capability(account_capability_data));
+ }
+ _INFO("marshal_capability_list end");
+ return g_variant_builder_end (&builder);
+}
+
+GVariant* marshal_account_custom(account_custom_s* custom)
+{
+ _INFO("marshal_account_custom start");
+
+ if (custom == NULL)
+ {
+ _ERR("Null input");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
+
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CUSTOM_DATA_KEY_ACC_ID, g_variant_new_int32(custom->account_id));
+
+ if (custom->app_id != NULL)
+ {
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CUSTOM_DATA_KEY_APP_ID, g_variant_new_string(custom->app_id));
+ }
+
+ if (custom->key != NULL)
+ {
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CUSTOM_DATA_KEY_KEY, g_variant_new_string(custom->key));
+ }
+
+ if (custom->value != NULL)
+ {
+ g_variant_builder_add(&builder, "{sv}",
+ ACCOUNT_CUSTOM_DATA_KEY_VALUE, g_variant_new_string(custom->value));
+ }
+
+ _INFO("marshal_account_custom end");
+
+ return g_variant_builder_end(&builder);
+}
+
+GVariant* marshal_custom_list(GSList* custom_list)
+{
+ _INFO("marshal_custom_list start");
+ if (custom_list == NULL)
+ {
+ _ERR("input NULL.");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+ account_custom_s *account_custom_data = NULL;
+
+ GSList* iter;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+
+ for (iter = custom_list ; iter != NULL; iter = g_slist_next (iter))
+ {
+ account_custom_data = (account_custom_s *) (iter->data);
+ g_variant_builder_add_value(&builder, marshal_account_custom(account_custom_data));
+ }
+ _INFO("marshal_custom_list end");
+ return g_variant_builder_end (&builder);
+}
+
+GSList* unmarshal_capability_list(GVariant* variant)
+{
+ _INFO("unmarshal_capability_list start");
+ GSList *list = NULL;
+ GVariantIter iter;
+ GVariantIter* iter_row = NULL;
+ const gchar *key = NULL;
+ GVariant *value = NULL;
+
+ if (variant == NULL)
+ {
+ _ERR("input NULL");
+ return NULL;
+ }
+
+// gchar* var_type = g_variant_print (variant, TRUE);
+// _INFO("var_type = %s", var_type);
+
+ g_variant_iter_init (&iter, variant);
+
+
+ while (g_variant_iter_loop (&iter, "a{sv}", &iter_row))
+ {
+ account_capability_s* account_capability = (account_capability_s*)calloc(1, sizeof(account_capability_s));
+
+ while (g_variant_iter_loop(iter_row, "{sv}", &key, &value))
+ {
+ if (!g_strcmp0(key, ACCOUNT_CAPABILITY_DATA_KEY_ID))
+ {
+ account_capability->id = g_variant_get_int32(value);
+ }
+ else if (!g_strcmp0(key, ACCOUNT_CAPABILITY_DATA_KEY_TYPE))
+ {
+ account_capability->type = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_CAPABILITY_DATA_KEY_VALUE))
+ {
+ account_capability->value = g_variant_get_int32(value);
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_CAPABILITY_DATA_KEY_PACKAGE_NAME))
+ {
+ account_capability->package_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_CAPABILITY_DATA_KEY_USER_NAME))
+ {
+ account_capability->user_name = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_CAPABILITY_DATA_KEY_ACC_ID))
+ {
+ account_capability->account_id = g_variant_get_int32(value);
+ }
+
+ }
+ list = g_slist_append (list, account_capability);
+ }
+
+ _INFO("unmarshal_capability_list end");
+ return list;
+}
+
+GSList* unmarshal_custom_list(GVariant* variant)
+{
+ _INFO("unmarshal_custom_list start");
+ GSList *list = NULL;
+ GVariantIter iter;
+ GVariantIter* iter_row = NULL;
+ const gchar *key = NULL;
+ GVariant *value = NULL;
+
+ if (variant == NULL)
+ {
+ _ERR("input NULL");
+ return NULL;
+ }
+
+// gchar* var_type = g_variant_print (variant, TRUE);
+// _INFO("var_type = %s", var_type);
+
+ g_variant_iter_init (&iter, variant);
+
+ while (g_variant_iter_loop (&iter, "a{sv}", &iter_row))
+ {
+ account_custom_s* account_custom = (account_custom_s*)calloc(1, sizeof(account_custom_s));
+
+ while (g_variant_iter_loop(iter_row, "{sv}", &key, &value))
+ {
+ if (!g_strcmp0(key, ACCOUNT_CUSTOM_DATA_KEY_ACC_ID))
+ {
+ account_custom->account_id = g_variant_get_int32(value);
+ }
+ else if (!g_strcmp0(key, ACCOUNT_CUSTOM_DATA_KEY_APP_ID))
+ {
+ account_custom->app_id = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_CUSTOM_DATA_KEY_KEY))
+ {
+ account_custom->key = g_strdup(g_variant_get_string (value, NULL));
+ }
+
+ else if (!g_strcmp0(key, ACCOUNT_CUSTOM_DATA_KEY_VALUE))
+ {
+ account_custom->value = g_strdup(g_variant_get_string (value, NULL));
+ }
+ }
+ list = g_slist_append (list, account_custom);
+ }
+
+ _INFO("unmarshal_custom_list end");
+ return list;
+}
+
+GVariant* marshal_user_int_array(const int* user_data_int_array)
+{
+ int i;
+
+ _INFO("marshal_user_data_int_list start");
+ if (user_data_int_array == NULL)
+ {
+ _ERR("input NULL.");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+
+ for(i = 0; i < USER_INT_CNT; i++)
+ {
+ char key[256];
+ ACCOUNT_SNPRINTF(key, strlen(ACCOUNT_DATA_KEY_USER_DATA_INT)+3, "%s%d", ACCOUNT_DATA_KEY_USER_DATA_INT, i);
+ g_variant_builder_add(&builder, "{sv}",
+ key,
+ g_variant_new_int32(user_data_int_array[i]));
+ }
+
+ _INFO("marshal_user_data_int_list end");
+ return g_variant_builder_end (&builder);
+}
+
+GVariant* marshal_user_txt_array(char* const* user_data_txt_array)
+{
+ int i;
+ bool is_all_null = true;
+
+ _INFO("marshal_user_data_int_list start");
+ if (user_data_txt_array == NULL)
+ {
+ _ERR("input NULL.");
+ return NULL;
+ }
+
+ GVariantBuilder builder;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
+
+ for(i = 0; i < USER_TXT_CNT; i++)
+ {
+ char key[256];
+ if (user_data_txt_array[i]) {
+ ACCOUNT_SNPRINTF(key, strlen(ACCOUNT_DATA_KEY_USER_DATA_TXT)+3, "%s%d", ACCOUNT_DATA_KEY_USER_DATA_TXT, i);
+ g_variant_builder_add(&builder, "{sv}",
+ key,
+ g_variant_new_string(user_data_txt_array[i]));
+ is_all_null = false;
+ }
+ }
+
+ _INFO("marshal_user_data_int_list end");
+
+ if (is_all_null) {
+ g_variant_builder_clear (&builder);
+ return NULL;
+ }
+
+ return g_variant_builder_end (&builder);
+}
+
+int* unmarshal_user_int_array(GVariant* variant)
+{
+ _INFO("unmarshal_user_int_array start");
+ GVariantIter iter;
+ const gchar *key = NULL;
+ char compare_key[USER_INT_CNT][256];
+ GVariant *value = NULL;
+ int* user_data_int;
+ int i;
+
+ if (variant == NULL)
+ {
+ _ERR("input NULL");
+ return NULL;
+ }
+
+// gchar* var_type = g_variant_print (variant, TRUE);
+// _INFO("var_type = %s", var_type);
+
+ g_variant_iter_init (&iter, variant);
+
+ user_data_int = (int*)calloc(USER_INT_CNT, sizeof(int));
+
+ for(i=0; i<USER_INT_CNT; i++)
+ {
+ ACCOUNT_SNPRINTF(compare_key[i], strlen(ACCOUNT_DATA_KEY_USER_DATA_INT)+3, "%s%d", ACCOUNT_DATA_KEY_USER_DATA_INT, i);
+ }
+
+ while (g_variant_iter_loop (&iter, "{sv}", &key, &value))
+ {
+ for(i=0; i<USER_INT_CNT; i++)
+ {
+ if (!g_strcmp0(key, compare_key[i]))
+ {
+ user_data_int[i] = g_variant_get_int32(value);
+ }
+ }
+ }
+
+ _INFO("unmarshal_user_int_array end");
+ return user_data_int;
+}
+
+char** unmarshal_user_txt_array(GVariant* variant)
+{
+ _INFO("unmarshal_user_txt_array start");
+ GVariantIter iter;
+ const gchar *key = NULL;
+ char compare_key[USER_TXT_CNT][256];
+ GVariant *value = NULL;
+ char** user_data_txts;
+ int i;
+
+ if (variant == NULL)
+ {
+ _ERR("input NULL");
+ return NULL;
+ }
+
+// gchar* var_type = g_variant_print (variant, TRUE);
+// _INFO("var_type = %s", var_type);
+
+ g_variant_iter_init (&iter, variant);
+
+ user_data_txts = (char**)calloc(USER_TXT_CNT, sizeof(char*));
+
+ for(i=0; i<USER_TXT_CNT; i++)
+ {
+ ACCOUNT_SNPRINTF(compare_key[i], strlen(ACCOUNT_DATA_KEY_USER_DATA_TXT)+3, "%s%d", ACCOUNT_DATA_KEY_USER_DATA_TXT, i);
+ }
+
+ while (g_variant_iter_loop (&iter, "{sv}", &key, &value))
+ {
+ for(i=0; i<USER_TXT_CNT; i++)
+ {
+ if (!g_strcmp0(key, compare_key[i]))
+ {
+ user_data_txts[i] = g_strdup(g_variant_get_string (value, NULL));
+ }
+ }
+ }
+
+ _INFO("unmarshal_user_txt_array end");
+ return user_data_txts;
+}
diff --git a/packaging/account-common.spec b/packaging/account-common.spec
new file mode 100644
index 0000000..2c5b1db
--- /dev/null
+++ b/packaging/account-common.spec
@@ -0,0 +1,69 @@
+
+Name: account-common
+Summary: Account common library
+Version: 0.0.6
+Release: 1
+Group: Social & Content/API
+License: Apache-2.0
+Source0: account-common-%{version}.tar.gz
+
+BuildRequires: cmake
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(capi-base-common)
+BuildRequires: pkgconfig(glib-2.0) >= 2.26
+BuildRequires: pkgconfig(gio-unix-2.0)
+BuildRequires: python-xml
+
+Requires(post): /sbin/ldconfig
+Requires(post): /usr/bin/sqlite3
+Requires(postun): /sbin/ldconfig
+
+%description
+Account common libraryXB-Public-Package: no
+
+%package devel
+Summary: Development files for %{name}
+Group: Development/Libraries
+Requires: %{name} = %{version}-%{release}
+%description devel
+Development files for %{name}
+
+%prep
+%setup -q
+
+%build
+#export CFLAGS+=" -Wextra -Wcast-align -Wcast-qual -Wshadow -Wwrite-strings -Wswitch-default"
+#export CXXFLAGS+=" -Wextra -Wcast-align -Wcast-qual -Wshadow -Wwrite-strings -Wswitch-default -Wnon-virtual-dtor -Wno-c++0x-compat"
+#export CFLAGS+=" -Wno-unused-parameter -Wno-empty-body"
+#export CXXFLAGS+=" -Wno-unused-parameter -Wno-empty-body"
+
+#export CFLAGS+=" -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-strict-aliasing -fno-unroll-loops -fsigned-char -fstrict-overflow -fno-common"
+#export CXXFLAGS+=" -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-strict-aliasing -fno-unroll-loops -fsigned-char -fstrict-overflow"
+
+#export CFLAGS="${CFLAGS} -fPIC -fvisibility=hidden"
+export CFLAGS="${CFLAGS} -fPIC"
+cmake . -DCMAKE_INSTALL_PREFIX=/usr
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+mkdir -p %{buildroot}/usr/share/license
+cp %{_builddir}/%{name}-%{version}/LICENSE.APLv2 %{buildroot}/usr/share/license/%{name}
+%make_install
+
+mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants
+
+rm -rf %{buildroot}/usr/lib/account-common
+
+%files
+%manifest account-common.manifest
+%defattr(-,root,root,-)
+/usr/share/license/%{name}
+%{_libdir}/*.so.*
+
+%files devel
+%defattr(-,root,root,-)
+%{_libdir}/*.so
+%{_libdir}/pkgconfig/account-common.pc
+%{_includedir}/*.h