Tizen 2.0 Release
[platform/core/messaging/email-service.git] / email-ipc / email-activation / email-dbus-activation.c
1 /*\r
2 *  email-service\r
3 *\r
4 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.\r
5 *\r
6 * Contact: Kyuho Jo <kyuho.jo@samsung.com>, Sunghyun Kwon <sh0701.kwon@samsung.com>\r
7 *\r
8 * Licensed under the Apache License, Version 2.0 (the "License");\r
9 * you may not use this file except in compliance with the License.\r
10 * You may obtain a copy of the License at\r
11 *\r
12 * http://www.apache.org/licenses/LICENSE-2.0\r
13 *\r
14 * Unless required by applicable law or agreed to in writing, software\r
15 * distributed under the License is distributed on an "AS IS" BASIS,\r
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
17 * See the License for the specific language governing permissions and\r
18 * limitations under the License.\r
19 *\r
20 */\r
21 \r
22 #include <glib.h>\r
23 #include <pthread.h>\r
24 #include <dbus/dbus-glib.h>\r
25 #include <dbus/dbus-glib-bindings.h>\r
26 #include <sys/utsname.h>\r
27 #include "email-types.h"\r
28 #include "email-debug-log.h"\r
29 #include "email-dbus-activation.h"\r
30 #include "email-service-binding.h"\r
31 #include "email-service-glue.h"\r
32 #include <unistd.h>\r
33 \r
34 GMainLoop *loop = NULL;\r
35 GObject *object = NULL;\r
36 DBusGConnection *connection = NULL;\r
37 \r
38 static pid_t launch_by_client = 0;\r
39 \r
40 void __net_nfc_discovery_polling_cb(int signo);\r
41 bool Check_Redwood();\r
42 \r
43 G_DEFINE_TYPE(EmailService, email_service, G_TYPE_OBJECT)\r
44 \r
45 #define __G_ASSERT(test, return_val, error, domain, error_code)\\r
46 G_STMT_START\\r
47 {\\r
48         if G_LIKELY (!(test)) { \\r
49                 g_set_error (error, domain, error_code, #test); \\r
50                 return (return_val); \\r
51         }\\r
52 }\\r
53 G_STMT_END\r
54 \r
55 \r
56 static void email_service_init(EmailService *email_service)\r
57 {\r
58         EM_DEBUG_LOG("email_service_init entered");\r
59 }\r
60 \r
61 GQuark email_service_error_quark(void)\r
62 {\r
63         EM_DEBUG_LOG("email_service_error_quark entered");\r
64         return g_quark_from_static_string("email_service_error");\r
65 }\r
66 \r
67 \r
68 static void email_service_class_init(EmailServiceClass *email_service_class)\r
69 {\r
70         EM_DEBUG_LOG("email_service_class_init entered");\r
71 \r
72         /*\r
73         dbus_g_object_type_install_info(EMAIL_SERVICE_TYPE, &dbus_glib_nfc_service_object_info);\r
74         */\r
75 }\r
76 \r
77 EXPORT_API int emipc_launch_email_service()\r
78 {\r
79         EM_DEBUG_FUNC_BEGIN();\r
80         int err = EMAIL_ERROR_NONE;\r
81 \r
82         /*DBUS*/\r
83         DBusGConnection *connection = NULL;\r
84         DBusGProxy *proxy = NULL;\r
85         GError *error = NULL;\r
86         guint dbus_result = 0;\r
87 \r
88         //if(!g_thread_supported()) {\r
89         //      g_thread_init(NULL);\r
90         //}\r
91 \r
92         //dbus_g_thread_init();\r
93 \r
94         g_type_init();\r
95 \r
96         //pthread_mutex_lock(&g_client_context.g_client_lock);\r
97 \r
98         connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);\r
99         if (error == NULL) {\r
100                 proxy = dbus_g_proxy_new_for_name(connection, EMAIL_SERVICE_NAME, EMAIL_SERVICE_PATH, EMAIL_SERVICE_NAME);\r
101 \r
102                 if (proxy != NULL) {\r
103                         if (org_tizen_email_service_launch(proxy, &dbus_result, &error) == false) {\r
104                                 EM_DEBUG_EXCEPTION("email_service_launch failed");\r
105                                 if (error != NULL) {\r
106                                         EM_DEBUG_EXCEPTION("message : [%s]", error->message);\r
107                                         g_error_free(error);\r
108                                         return EMAIL_ERROR_IPC_PROTOCOL_FAILURE;\r
109                                 }\r
110                         }\r
111                         EM_DEBUG_LOG("org_tizen_email_service_launch");\r
112 \r
113                         g_object_unref (proxy);\r
114                 }\r
115                 else {\r
116                         EM_DEBUG_EXCEPTION("dbus_g_proxy_new_for_name failed");\r
117                 }\r
118         }\r
119         else {\r
120                 EM_DEBUG_EXCEPTION("ERROR: Can't get on system bus [%s]", error->message);\r
121                 g_error_free(error);\r
122         }\r
123 \r
124         EM_DEBUG_FUNC_END("ret [%d]", err);\r
125         return err;\r
126 }\r
127 \r
128 \r
129 EXPORT_API int emipc_init_dbus_connection()\r
130 {\r
131         EM_DEBUG_FUNC_BEGIN();\r
132         int err = EMAIL_ERROR_NONE;\r
133 \r
134         GError *error = NULL;\r
135         DBusGProxy *proxy = NULL;\r
136         guint ret = 0;\r
137 \r
138         g_type_init();\r
139 \r
140         connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);\r
141         if (error == NULL) {\r
142                 object = (GObject *)g_object_new(EMAIL_SERVICE_TYPE, NULL);\r
143                 dbus_g_connection_register_g_object(connection, EMAIL_SERVICE_PATH, object);\r
144 \r
145                 // register service\r
146                 proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS);\r
147                 if (proxy != NULL) {\r
148                         if (!org_freedesktop_DBus_request_name(proxy, EMAIL_SERVICE_NAME, 0, &ret, &error)) {\r
149                                 EM_DEBUG_EXCEPTION("Unable to register service: %s", error->message);\r
150                                 g_error_free(error);\r
151                         }\r
152 \r
153                         g_object_unref (proxy);\r
154                 }\r
155                 else {\r
156                         EM_DEBUG_EXCEPTION("dbus_g_proxy_new_for_name failed");\r
157                 }\r
158         }\r
159         else {\r
160                 EM_DEBUG_EXCEPTION("ERROR: Can't get on system bus [%s]", error->message);\r
161                 g_error_free(error);\r
162         }\r
163         EM_DEBUG_FUNC_END("err [%d]", err);\r
164         return err;\r
165 }\r
166 \r
167 gboolean email_service_launch(EmailService *email_service, guint *result_val, GError **error)\r
168 {\r
169         EM_DEBUG_LOG("email_service_launch entered");\r
170 \r
171         EM_DEBUG_LOG("email_service_launch PID=[%ld]\n" , getpid());\r
172         EM_DEBUG_LOG("email_service_launch TID=[%ld]" , pthread_self());\r
173 \r
174         launch_by_client = getpid();\r
175 \r
176         return TRUE;\r
177 }\r