f93f0406f63d645b3cf45f13cbf3567a6251758c
[platform/core/connectivity/asp-manager.git] / src / asp-manager-gdbus.c
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /*****************************************************************************
18  * Standard headers
19  *****************************************************************************/
20
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <stdbool.h>
25 #include <time.h>
26
27 /*****************************************************************************
28  * System headers
29  *****************************************************************************/
30
31 #include<glib.h>
32 #include <gio/gio.h>
33
34 #include<dlog.h>
35
36 /*****************************************************************************
37  * Application Service Platform manager headers
38  *****************************************************************************/
39 #include "asp-manager.h"
40 #include "asp-manager-util.h"
41 #include "asp-manager-gdbus.h"
42 #include "asp-service.h"
43 #include "asp-session.h"
44 #include "asp-tech.h"
45
46 #include "generated-code.h"
47
48 /*****************************************************************************
49  * Macros and Typedefs
50  *****************************************************************************/
51
52 #define ASP_DBUS_SERVICE        "net.asp"
53 #define ASP_DBUS_SERVICE_ASP_PATH               "/net/asp"
54 #define ASP_DBUS_SERVICE_ASP_SERVICE_PATH               "/net/asp/service"
55 #define ASP_DBUS_SERVICE_ASP_SESSION_PATH               "/net/asp/session"
56
57 static const gchar *asp_err_strs[] = {
58                 "NO_ERR",
59                 "MEM_ERR",
60                 "INVALID_PARAM",
61                 "OPER_FAILED",
62                 "NO_SERVICE",
63                 "NO_SESSION",
64 };
65
66 #define ASP_RETURN_SERVICE_ERR(invocation, err_num) g_dbus_method_invocation_return_dbus_error \
67         ((invocation), \
68                         SERVICE_DBUS_ERROR_NAME, \
69                         asp_err_strs[-(err_num)])
70
71 #define ASP_RETURN_SESSION_ERR(invocation, err_num) g_dbus_method_invocation_return_dbus_error \
72                 ((invocation), \
73                                 SESSION_DBUS_ERROR_NAME, \
74                                 asp_err_strs[-(err_num)])
75
76 /*****************************************************************************
77  * Global Variables
78  *****************************************************************************/
79
80 /*****************************************************************************
81  * Local Functions Definition
82  *****************************************************************************/
83
84 static void __g_variant_to_g_hash_table(GVariant *variant, GHashTable* hash, bool key_only)
85 {
86         GVariantIter *iter = NULL;
87         GVariant* var = NULL;
88         gchar *key = NULL;
89         gchar *key_str = NULL;
90         gchar *value_str = NULL;
91         __ASP_LOG_FUNC_ENTER__;
92
93         if (key_only) {
94                 g_variant_get(variant, "as", &iter);
95                 while (g_variant_iter_loop(iter, "s", &key)) {
96                         key_str = g_strdup(key);
97                         g_hash_table_insert(hash, key_str, NULL);
98                 }
99         } else {
100                 g_variant_get(variant, "a{sv}", &iter);
101                 while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
102
103                         key_str = g_strdup(key);
104                         value_str = g_variant_dup_string(var, NULL);
105                         g_hash_table_insert(hash, key_str, value_str);
106                 }
107         }
108         __ASP_LOG_FUNC_EXIT__;
109         return;
110 }
111
112 static gboolean __asp_manager_gdbus_advertise_service(AspService *object,
113                 GDBusMethodInvocation *invocation,
114                 GVariant *parameters,
115                 const gboolean *user_data)
116 {
117         __ASP_LOG_FUNC_ENTER__;
118         GVariantIter *iter = NULL;
119         gchar *key = NULL;
120         GVariant *var = NULL;
121         asp_service_advertise_s service;
122         asp_s *asp = NULL;
123         gint32 result = 0;
124
125         asp = (asp_s *)user_data;
126         if (!asp) {
127                 ASP_LOGE("Failed to get memory for asp structure");
128                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
129                 __ASP_LOG_FUNC_EXIT__;
130                 return TRUE;
131         }
132         DEBUG_PARAMS(parameters);
133
134         memset(&service, 0, sizeof(asp_service_advertise_s));
135         service.service_info_map = NULL;
136
137         g_variant_get(parameters, "a{sv}", &iter);
138         if(!iter) {
139                 ASP_LOGE("Failed to get iter");
140                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
141                 __ASP_LOG_FUNC_EXIT__;
142                 return TRUE;
143         }
144
145         while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
146
147                 if (!g_strcmp0(key, "adv_id"))
148                         g_variant_get(var, "u", &(service.adv_id));
149                 else if (!g_strcmp0(key, "discovery_tech"))
150                         g_variant_get(var, "i", &(service.discovery_tech));
151                 else if (!g_strcmp0(key, "preferred_connection"))
152                         g_variant_get(var, "y", &(service.preferred_connection));
153                 else if (!g_strcmp0(key, "auto_accept"))
154                         g_variant_get(var, "i", &(service.auto_accept));
155                 else if (!g_strcmp0(key, "status"))
156                         g_variant_get(var, "y", &(service.status));
157                 else if (!g_strcmp0(key, "role"))
158                         g_variant_get(var, "y", &(service.role));
159                 else if (!g_strcmp0(key, "config_method"))
160                         g_variant_get(var, "u", &(service.config_method));
161                 else if (!g_strcmp0(key, "instance_name"))
162                         g_variant_get(var, "&s", &(service.instance_name));
163                 else if (!g_strcmp0(key, "service_type"))
164                         g_variant_get(var, "&s", &(service.service_type));
165                 else if (!g_strcmp0(key, "service_info")) {
166                         service.service_info_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
167                         __g_variant_to_g_hash_table(var, service.service_info_map, false);
168                 } else if (!g_strcmp0(key, "rsp_info"))
169                         g_variant_get(var, "&s", &(service.rsp_info));
170                 else
171                         ;/* Do Nothing */
172         }
173
174         result = asp_service_advertise(&service, 0);
175         g_hash_table_remove_all(service.service_info_map);
176         if (result < 0) {
177                 ASP_LOGE("Failed to advertise service");
178                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
179                 goto out;
180         }
181
182         asp_service_complete_advertise_service(object, invocation, result);
183
184 out:
185         g_variant_iter_free(iter);
186         __ASP_LOG_FUNC_EXIT__;
187         return TRUE;
188 }
189
190 static gboolean __asp_manager_gdbus_service_status_change(AspService *object,
191                 GDBusMethodInvocation *invocation,
192                 GVariant *parameters,
193                 const gboolean *user_data)
194 {
195         __ASP_LOG_FUNC_ENTER__;
196         GVariantIter *iter = NULL;
197         gchar *key = NULL;
198         GVariant *var = NULL;
199         asp_service_advertise_s service;
200         asp_s *asp = NULL;
201         gint32 result = 0;
202
203         asp = (asp_s *)user_data;
204         if (!asp) {
205                 ASP_LOGE("Failed to get memory for asp structure");
206                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
207                 __ASP_LOG_FUNC_EXIT__;
208                 return TRUE;
209         }
210         DEBUG_PARAMS(parameters);
211
212         memset(&service, 0, sizeof(asp_service_advertise_s));
213         g_variant_get(parameters, "a{sv}", &iter);
214         if(!iter) {
215                 ASP_LOGE("Failed to get iter");
216                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
217                 __ASP_LOG_FUNC_EXIT__;
218                 return TRUE;
219         }
220
221         while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
222
223                 if (!g_strcmp0(key, "adv_id"))
224                         g_variant_get(var, "u", &(service.adv_id));
225                 else if (!g_strcmp0(key, "discovery_tech"))
226                         g_variant_get(var, "i", &(service.discovery_tech));
227                 else if (!g_strcmp0(key, "preferred_connection"))
228                         g_variant_get(var, "y", &(service.preferred_connection));
229                 else if (!g_strcmp0(key, "auto_accept"))
230                         g_variant_get(var, "i", &(service.auto_accept));
231                 else if (!g_strcmp0(key, "status"))
232                         g_variant_get(var, "y", &(service.status));
233                 else if (!g_strcmp0(key, "role"))
234                         g_variant_get(var, "y", &(service.role));
235                 else if (!g_strcmp0(key, "config_method"))
236                         g_variant_get(var, "u", &(service.config_method));
237                 else if (!g_strcmp0(key, "instance_name"))
238                                 g_variant_get(var, "&s", &(service.instance_name));
239                 else if (!g_strcmp0(key, "service_type"))
240                                 g_variant_get(var, "&s", &(service.service_type));
241                 else if (!g_strcmp0(key, "service_info"))
242                         __g_variant_to_g_hash_table(var, service.service_info_map, false);
243                 else if (!g_strcmp0(key, "rsp_info"))
244                         g_variant_get(var, "&s", &(service.rsp_info));
245                 else
246                         ;/* Do Nothing */
247         }
248
249         result = asp_service_advertise(&service, 1);
250         g_hash_table_remove_all(service.service_info_map);
251         if (result < 0) {
252                 ASP_LOGE("Failed to change service status");
253                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
254                 goto out;
255         }
256
257         asp_service_complete_advertise_service(object, invocation, result);
258
259 out:
260         g_variant_iter_free(iter);
261         __ASP_LOG_FUNC_EXIT__;
262         return TRUE;
263 }
264
265 static gboolean __asp_manager_gdbus_cancel_advertise_service(AspService *object,
266                 GDBusMethodInvocation *invocation,
267                 const guint adv_id,
268                 const gint tech,
269                 const gboolean *user_data)
270 {
271         __ASP_LOG_FUNC_ENTER__;
272         asp_service_advertise_s service;
273         asp_s *asp = NULL;
274         gint32 result = 0;
275
276         asp = (asp_s *)user_data;
277         if (!asp) {
278                 ASP_LOGE("Failed to get memory for asp structure");
279                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
280                 goto out;
281         }
282
283         if (adv_id == 0) {
284                 ASP_LOGE("Invalid parameter");
285                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
286                 goto out;
287         }
288         ASP_LOGD("advertisement ID [%u]", adv_id);
289
290         memset(&service, 0x0, sizeof(asp_service_advertise_s));
291         service.adv_id = adv_id;
292         service.discovery_tech = tech;
293         result = asp_service_cancel_advertise(&service);
294         if (result < 0) {
295                 ASP_LOGE("Failed to cancel advertise service");
296                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
297                 goto out;
298         }
299
300         asp_service_complete_cancel_advertise_service(object, invocation, result);
301
302 out:
303         __ASP_LOG_FUNC_EXIT__;
304         return TRUE;
305 }
306
307 static gboolean __asp_manager_gdbus_seek_service(AspService *object,
308                 GDBusMethodInvocation *invocation,
309                 GVariant *parameters,
310                 const gboolean *user_data)
311 {
312         __ASP_LOG_FUNC_ENTER__;
313         GVariantIter *iter = NULL;
314         gchar *key = NULL;
315         GVariant *var = NULL;
316         asp_service_seek_s service;
317         asp_s *asp = NULL;
318         gint32 result = 0;
319         guint64 search_id = -1;
320
321         asp = (asp_s *)user_data;
322         if (!asp) {
323                 ASP_LOGE("Failed to get memory for asp structure");
324                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
325                 __ASP_LOG_FUNC_EXIT__;
326                 return TRUE;
327         }
328         DEBUG_PARAMS(parameters);
329
330         memset(&service, 0, sizeof(asp_service_seek_s));
331         service.service_info_map = NULL;
332
333         g_variant_get(parameters, "a{sv}", &iter);
334         if(!iter) {
335                 ASP_LOGE("Failed to get iter");
336                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
337                 __ASP_LOG_FUNC_EXIT__;
338                 return TRUE;
339         }
340
341         while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
342
343                 if (!g_strcmp0(key, "discovery_tech"))
344                         g_variant_get(var, "i", &(service.discovery_tech));
345                 else if (!g_strcmp0(key, "preferred_connection"))
346                         g_variant_get(var, "y", &(service.preferred_connection));
347                 else if (!g_strcmp0(key, "service_type"))
348                                 g_variant_get(var, "&s", &(service.service_type));
349                 else if (!g_strcmp0(key, "service_info")) {
350                         service.service_info_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
351                         __g_variant_to_g_hash_table(var, service.service_info_map, true);
352                 } else
353                         ;/* Do Nothing */
354         }
355
356         result = asp_service_seek(&service, &search_id);
357         g_hash_table_remove_all(service.service_info_map);
358         if (result < 0) {
359                 ASP_LOGE("Failed to seek service");
360                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
361                 goto out;
362         }
363
364         asp_service_complete_seek_service(object, invocation, result, search_id);
365
366 out:
367         g_variant_iter_free(iter);
368         __ASP_LOG_FUNC_EXIT__;
369         return TRUE;
370 }
371
372 static gboolean __asp_manager_gdbus_cancel_seek_service(AspService *object,
373                 GDBusMethodInvocation *invocation,
374                 const guint64 search_id,
375                 const gint32 tech,
376                 const gboolean *user_data)
377 {
378         __ASP_LOG_FUNC_ENTER__;
379         asp_service_seek_s service;
380         asp_s *asp = NULL;
381         gint32 result = 0;
382
383         asp = (asp_s *)user_data;
384         if (!asp) {
385                 ASP_LOGE("Failed to get memory for asp structure");
386                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
387                 goto out;
388         }
389
390         memset(&service, 0x0, sizeof(asp_service_seek_s));
391         service.search_id = search_id;
392         service.discovery_tech = tech;
393         result = asp_service_cancel_seek(&service);
394         if (result < 0) {
395                 ASP_LOGE("Failed to cancel seek service");
396                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
397                 goto out;
398         }
399
400         asp_service_complete_cancel_seek_service(object, invocation, result);
401
402 out:
403         __ASP_LOG_FUNC_EXIT__;
404         return TRUE;
405 }
406
407 static gboolean __asp_manager_gdbus_service_init(asp_s *asp)
408 {
409         __ASP_LOG_FUNC_ENTER__;
410         gboolean ret = TRUE;
411         gchar *s = NULL;
412
413         AspObjectSkeleton *object = NULL;
414         AspService *service = NULL;
415         s = g_strdup_printf(ASP_DBUS_SERVICE_ASP_SERVICE_PATH);
416
417         /* Add interface to default object path */
418         object = asp_object_skeleton_new(s);
419         g_free(s);
420
421         /* Make the newly created object export the interface
422          * net.asp.service (note
423          * that @object takes its own reference to @service).
424          */
425
426         service = asp_service_skeleton_new();
427         asp_object_skeleton_set_service(object, service);
428         g_object_unref(service);
429
430         /* Register for method callbacks as signal callbacks */
431
432         g_signal_connect(
433                         service,
434                         "handle-advertise-service",
435                         G_CALLBACK(__asp_manager_gdbus_advertise_service),
436                         asp);
437
438         g_signal_connect(
439                         service,
440                         "handle-service-change-status",
441                         G_CALLBACK(__asp_manager_gdbus_service_status_change),
442                         asp);
443
444         g_signal_connect(
445                         service,
446                         "handle-cancel-advertise-service",
447                         G_CALLBACK(__asp_manager_gdbus_cancel_advertise_service),
448                         asp);
449
450         g_signal_connect(
451                         service,
452                         "handle-seek-service",
453                         G_CALLBACK(__asp_manager_gdbus_seek_service),
454                         asp);
455
456         g_signal_connect(
457                         service,
458                         "handle-cancel-seek-service",
459                         G_CALLBACK(__asp_manager_gdbus_cancel_seek_service),
460                         asp);
461
462         /* Export the object (@manager takes its own reference to @object) */
463         g_dbus_object_manager_server_export(asp->obj_mgr, G_DBUS_OBJECT_SKELETON(object));
464         g_object_unref(object);
465
466         asp->service_obj = (gpointer)service;
467
468         __ASP_LOG_FUNC_EXIT__;
469         return ret;
470 }
471
472 static gboolean __asp_manager_gdbus_connect_session(AspSession *object,
473                 GDBusMethodInvocation *invocation,
474                 GVariant *parameters,
475                 const gboolean *user_data)
476 {
477         __ASP_LOG_FUNC_ENTER__;
478         GVariantIter *iter = NULL;
479         GVariant *var = NULL;
480         gchar *key = NULL;
481         gchar *str = NULL;
482         asp_s *asp = NULL;
483         guint8 service_mac[MAC_LEN] = {0,};
484         guint32 adv_id = 0;
485         guint8 * session_info = NULL;
486         size_t info_length = 0;
487         guint8 network_role = 0;
488         guint32 network_config = 0;
489         guint32 session_id = 0;
490         const gchar *service_mac_str = NULL;
491         gchar peer_ip_str[IPSTR_MAXLEN] = {0,};
492         gboolean res;
493
494         asp = (asp_s *)user_data;
495         if (!asp) {
496                 ASP_LOGE("Failed to get memory for asp structure");
497                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
498                 __ASP_LOG_FUNC_EXIT__;
499                 return TRUE;
500         }
501         DEBUG_PARAMS(parameters);
502
503         g_variant_get(parameters, "a{sv}", &iter);
504         if(!iter) {
505                 ASP_LOGE("Failed to get iter");
506                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
507                 __ASP_LOG_FUNC_EXIT__;
508                 return TRUE;
509         }
510
511         while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
512
513                 if (!g_strcmp0(key, "service_mac")) {
514                         g_variant_get(var, "&s", &service_mac_str);
515                 } else if (!g_strcmp0(key, "adv_id")) {
516                         g_variant_get(var, "u", &adv_id);
517                 } else if (!g_strcmp0(key, "session_id")) {
518                         g_variant_get(var, "i", &session_id);
519                 } else if (!g_strcmp0(key, "role")) {
520                         g_variant_get(var, "y", &network_role);
521                 } else if (!g_strcmp0(key, "config_method")) {
522                         g_variant_get(var, "u", &network_config);
523                 } else if (!g_strcmp0(key, "peer_id")) {
524                         g_variant_get(var, "&s", &str);
525                         g_strlcpy(peer_ip_str, str, IPSTR_MAXLEN);
526                 }  else if (!g_strcmp0(key, "session_info")) {
527                         str = NULL;
528                         g_variant_get(var, "&s", &str);
529                         if (!str)
530                                 continue;
531
532                         info_length = strlen(str);
533                         g_free(session_info);
534                         session_info = g_try_malloc0(info_length + 1);
535                         if (session_info == NULL) {
536                                 ASP_LOGE("Memory Failure");
537                                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_MEMORY);
538                                 goto out;
539                         }
540                         memcpy(session_info, str, info_length);
541                 } else {
542                         ;/* Do Nothing */
543                 }
544         }
545
546         if (service_mac_str == NULL) {
547                 ASP_LOGE("Invalid parameter");
548                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
549                 goto out;
550         }
551
552         if (strlen(service_mac_str) != 17) {
553                 ASP_LOGE("Invalid parameter");
554                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
555                 goto out;
556         }
557
558         /* TODO: need proper usage of CCEX
559          * If user wants to connect via infra structured,
560          */
561
562         /*
563         res = asp_session_connect_session_over_infa(peer_ip_str, adv_id,
564                         session_info, info_length, session_mac,  &session_id);
565         */
566
567         macaddr_atoe(service_mac_str, service_mac);
568         ASP_LOGD("service mac" MACSTR, MAC2STR(service_mac));
569         res = asp_session_connect_session_over_p2p(service_mac, adv_id,
570                         session_info, info_length, network_role, network_config,
571                         asp->p2p_local_address, &session_id);
572         if (!res) {
573                 ASP_LOGE("Operation Failed");
574                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
575                 goto out;
576         }
577
578         asp_session_complete_connect_session(object, invocation, ASP_ERROR_NONE,
579                         session_id, asp->p2p_local_address_str);
580
581 out:
582
583         g_variant_iter_free(iter);
584         g_free(session_info);
585         __ASP_LOG_FUNC_EXIT__;
586         return TRUE;
587 }
588
589 static gboolean __asp_manager_gdbus_confirm_session(AspSession *object,
590                 GDBusMethodInvocation *invocation,
591                 GVariant *parameters,
592                 const gboolean *user_data)
593 {
594         __ASP_LOG_FUNC_ENTER__;
595         GVariantIter *iter = NULL;
596         gchar *key = NULL;
597         GVariant *var = NULL;
598         asp_s *asp = NULL;
599
600         const gchar *session_mac = NULL;
601         gint32 confirmed = 0;
602         const gchar *pin_str = NULL;
603         guint32 session_id = 0;
604         guint32 pin = 0;
605         guint8 mac_addr[MAC_LEN] = {0,};
606         gboolean res;
607
608         asp = (asp_s *)user_data;
609         if (!asp) {
610                 ASP_LOGE("Failed to get memory for asp structure");
611                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
612                 __ASP_LOG_FUNC_EXIT__;
613                 return TRUE;
614         }
615         DEBUG_PARAMS(parameters);
616
617         g_variant_get(parameters, "a{sv}", &iter);
618         if(!iter) {
619                 ASP_LOGE("Failed to get iter");
620                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
621                 __ASP_LOG_FUNC_EXIT__;
622                 return TRUE;
623         }
624
625         while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
626                 if (!g_strcmp0(key, "session_mac"))
627                         g_variant_get(var, "&s", &session_mac);
628                 else if (!g_strcmp0(key, "session_id"))
629                         g_variant_get(var, "u", &session_id);
630                 else if (!g_strcmp0(key, "confirmed"))
631                         g_variant_get(var, "i", &confirmed);
632                 else if (!g_strcmp0(key, "pin"))
633                         g_variant_get(var, "&s", &pin_str);
634                 else
635                         ;/* Do Nothing */
636         }
637         if (session_mac == NULL) {
638                 ASP_LOGE("Invalid parameter");
639                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
640                 goto out;
641         }
642
643         if (strlen(session_mac) != 17) {
644                 ASP_LOGE("Invalid parameter");
645                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
646                 goto out;
647         }
648         ASP_LOGD("session ID [%u] session mac [%s]", session_id, session_mac);
649
650         macaddr_atoe(session_mac, mac_addr);
651         if (pin_str != NULL)
652                 pin = (guint32)atoi(pin_str);
653         res = asp_session_confirm_session(mac_addr, session_id, confirmed, pin);
654         if (!res) {
655                 ASP_LOGE("Operation Failed");
656                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
657                 goto out;
658         }
659
660         asp_session_complete_confirm_session(object, invocation, ASP_ERROR_NONE);
661
662 out:
663         g_variant_iter_free(iter);
664         __ASP_LOG_FUNC_EXIT__;
665         return TRUE;
666 }
667
668 static gboolean __asp_manager_gdbus_get_session(AspSession *object,
669                 GDBusMethodInvocation *invocation,
670                 const gchar *session_mac,
671                 const guint session_id,
672                 const gboolean *user_data)
673 {
674         __ASP_LOG_FUNC_ENTER__;
675         GVariantBuilder *builder = NULL;
676         GVariant *session = NULL;
677         asp_s *asp = NULL;
678         guint8 mac_addr[MAC_LEN] = {0,};
679         guint32 adv_id = 0;
680         gint32 result = 0;
681
682         asp = (asp_s *)user_data;
683         if (!asp) {
684                 ASP_LOGE("Failed to get memory for asp structure");
685                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
686                 goto out;
687         }
688
689         if (session_mac == NULL) {
690                 ASP_LOGE("Invalid parameter");
691                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
692                 goto out;
693         }
694
695         if (strlen(session_mac) != 17) {
696                 ASP_LOGE("Invalid parameter");
697                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
698                 goto out;
699         }
700         ASP_LOGD("session ID [%u] session mac [%s]", session_id, session_mac);
701
702         macaddr_atoe(session_mac, mac_addr);
703         if (!asp_session_get_advertisement_id(mac_addr, session_id, &adv_id)) {
704                 ASP_LOGE("Failed to get session");
705                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_SESSION_NOT_FOUND);
706                 goto out;
707         }
708
709         ASP_LOGD("adv id [%u]", adv_id);
710         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
711         g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", adv_id));
712
713         session = g_variant_new("a{sv}", builder);
714         g_variant_builder_unref(builder);
715
716         asp_session_complete_get_session(object, invocation, result, session);
717 out:
718         __ASP_LOG_FUNC_EXIT__;
719         return TRUE;
720 }
721
722 static gboolean __asp_manager_gdbus_set_session_ready(AspSession *object,
723                 GDBusMethodInvocation *invocation,
724                 const gchar *session_mac,
725                 const guint session_id,
726                 const gboolean *user_data)
727 {
728         __ASP_LOG_FUNC_ENTER__;
729         asp_s *asp = NULL;
730         guint8 mac_addr[MAC_LEN] = {0,};
731         gboolean res;
732
733         asp = (asp_s *)user_data;
734         if (!asp) {
735                 ASP_LOGE("Failed to get memory for asp structure");
736                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
737                 goto out;
738         }
739
740         if (session_mac == NULL) {
741                 ASP_LOGE("Invalid parameter");
742                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
743                 goto out;
744         }
745
746         if (strlen(session_mac) != 17) {
747                 ASP_LOGE("Invalid parameter");
748                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
749                 goto out;
750         }
751         ASP_LOGD("session ID [%u] session mac [%s]", session_id, session_mac);
752
753         macaddr_atoe(session_mac, mac_addr);
754         res = asp_session_set_session_ready(mac_addr, session_id);
755         if (!res) {
756                 ASP_LOGE("Operation Failed");
757                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
758                 goto out;
759         }
760
761         asp_session_complete_set_session_ready(object, invocation, ASP_ERROR_NONE);
762
763 out:
764         __ASP_LOG_FUNC_EXIT__;
765         return TRUE;
766 }
767
768 static gboolean __asp_manager_gdbus_close_session(AspSession *object,
769                 GDBusMethodInvocation *invocation,
770                 const gchar *session_mac,
771                 const guint session_id,
772                 const gboolean *user_data)
773 {
774         __ASP_LOG_FUNC_ENTER__;
775         asp_s *asp = NULL;
776         guint8 mac_addr[MAC_LEN] = {0,};
777         gboolean res;
778
779         asp = (asp_s *)user_data;
780         if (!asp) {
781                 ASP_LOGE("Failed to get memory for asp structure");
782                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
783                 goto out;
784         }
785
786         if (session_mac == NULL) {
787                 ASP_LOGE("Invalid parameter");
788                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
789                 goto out;
790         }
791
792         if (strlen(session_mac) != 17) {
793                 ASP_LOGE("Invalid parameter");
794                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
795                 goto out;
796         }
797         ASP_LOGD("session ID [%u] session mac [%s]", session_id, session_mac);
798
799         macaddr_atoe(session_mac, mac_addr);
800         res = asp_session_close_session(mac_addr, session_id, 0);
801         if (!res) {
802                 ASP_LOGE("Operation Failed");
803                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
804                 goto out;
805         }
806
807         asp_session_complete_close_session(object, invocation, ASP_ERROR_NONE);
808
809 out:
810         __ASP_LOG_FUNC_EXIT__;
811         return TRUE;
812 }
813
814 static gboolean __asp_manager_gdbus_bound_port(AspSession *object,
815                 GDBusMethodInvocation *invocation,
816                 GVariant *parameters,
817                 const gboolean *user_data)
818 {
819         __ASP_LOG_FUNC_ENTER__;
820         GVariantIter *iter = NULL;
821         gchar *key = NULL;
822         GVariant *var = NULL;
823         asp_s *asp = NULL;
824
825         const gchar *session_mac = NULL;
826         guint32 session_id = 0;
827         const gchar *ip_address = NULL;
828         gint32 port = 0;
829         gint32 proto = 0;
830         guint8 mac_addr[MAC_LEN] = {0,};
831         gboolean res;
832
833         asp = (asp_s *)user_data;
834         if (!asp) {
835                 ASP_LOGE("Failed to get memory for asp structure");
836                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
837                 __ASP_LOG_FUNC_EXIT__;
838                 return TRUE;
839         }
840         DEBUG_PARAMS(parameters);
841
842         g_variant_get(parameters, "a{sv}", &iter);
843         if(!iter) {
844                 ASP_LOGE("Failed to get iter");
845                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
846                 __ASP_LOG_FUNC_EXIT__;
847                 return TRUE;
848         }
849
850         while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
851                 if (!g_strcmp0(key, "session_mac"))
852                         g_variant_get(var, "&s", &session_mac);
853                 else if (!g_strcmp0(key, "session_id"))
854                         g_variant_get(var, "u", &session_id);
855                 else if (!g_strcmp0(key, "ip_address"))
856                         g_variant_get(var, "&s", &ip_address);
857                 else if (!g_strcmp0(key, "port"))
858                         g_variant_get(var, "i", &port);
859                 else if (!g_strcmp0(key, "proto"))
860                         g_variant_get(var, "i", &proto);
861                 else
862                         ;/* Do Nothing */
863         }
864
865         if (session_mac == NULL) {
866                 ASP_LOGE("Invalid parameter");
867                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
868                 goto out;
869         }
870
871         if (strlen(session_mac) != 17) {
872                 ASP_LOGE("Invalid parameter");
873                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
874                 goto out;
875         }
876         ASP_LOGD("session ID [%u] session mac [%s]", session_id, session_mac);
877
878         macaddr_atoe(session_mac, mac_addr);
879         res = asp_session_bound_port(mac_addr, session_id, ip_address,
880                         port, proto);
881         if (!res) {
882                 ASP_LOGE("Operation Failed");
883                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
884                 goto out;
885         }
886
887         asp_session_complete_bound_port(object, invocation, ASP_ERROR_NONE);
888
889 out:
890         g_variant_iter_free(iter);
891         __ASP_LOG_FUNC_EXIT__;
892         return TRUE;
893 }
894
895 static gboolean __asp_manager_gdbus_release_port(AspSession *object,
896                 GDBusMethodInvocation *invocation,
897                 GVariant *parameters,
898                 const gboolean *user_data)
899 {
900         __ASP_LOG_FUNC_ENTER__;
901         GVariantIter *iter = NULL;
902         gchar *key = NULL;
903         GVariant *var = NULL;
904         asp_s *asp = NULL;
905
906         const gchar *session_mac = NULL;
907         guint32 session_id = 0;
908         const gchar *ip_address = NULL;
909         gint32 port = 0;
910         gint32 proto = 0;
911         guint8 mac_addr[MAC_LEN] = {0,};
912         gboolean res = TRUE;
913
914         asp = (asp_s *)user_data;
915         if (!asp) {
916                 ASP_LOGE("Failed to get memory for asp structure");
917                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
918                 __ASP_LOG_FUNC_EXIT__;
919                 return TRUE;
920         }
921         DEBUG_PARAMS(parameters);
922
923         g_variant_get(parameters, "a{sv}", &iter);
924         if(!iter) {
925                 ASP_LOGE("Failed to get iter");
926                 ASP_RETURN_SERVICE_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
927                 __ASP_LOG_FUNC_EXIT__;
928                 return TRUE;
929         }
930
931         while (g_variant_iter_loop(iter, "{sv}", &key, &var)) {
932                 if (!g_strcmp0(key, "session_mac"))
933                         g_variant_get(var, "&s", &session_mac);
934                 else if (!g_strcmp0(key, "session_id"))
935                         g_variant_get(var, "u", &session_id);
936                 else if (!g_strcmp0(key, "ip_address"))
937                         g_variant_get(var, "&s", &ip_address);
938                 else if (!g_strcmp0(key, "port"))
939                         g_variant_get(var, "i", &port);
940                 else if (!g_strcmp0(key, "proto"))
941                         g_variant_get(var, "i", &proto);
942                 else
943                         ;/* Do Nothing */
944         }
945
946         if (session_mac == NULL) {
947                 ASP_LOGE("Invalid parameter");
948                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
949                 goto out;
950         }
951
952         if (strlen(session_mac) != 17) {
953                 ASP_LOGE("Invalid parameter");
954                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_INVALIED_PARAMS);
955                 goto out;
956         }
957         ASP_LOGD("session ID [%u] session mac [%s]", session_id, session_mac);
958
959         res = macaddr_atoe(session_mac, mac_addr);
960         if (!res) {
961                 ASP_LOGE("Operation Failed");
962                 ASP_RETURN_SESSION_ERR(invocation, -ASP_ERROR_OPERATION_FAILED);
963                 goto out;
964         }
965
966         asp_session_complete_release_port(object, invocation, ASP_ERROR_NONE);
967
968 out:
969         g_variant_iter_free(iter);
970         __ASP_LOG_FUNC_EXIT__;
971         return TRUE;
972 }
973
974 static gboolean __asp_manager_gdbus_session_init(asp_s *asp)
975 {
976         __ASP_LOG_FUNC_ENTER__;
977         gboolean ret = TRUE;
978         gchar *s = NULL;
979
980         AspObjectSkeleton *object = NULL;
981         AspSession *session = NULL;
982         s = g_strdup_printf(ASP_DBUS_SERVICE_ASP_SESSION_PATH);
983
984         /* Add interface to default object path */
985         object = asp_object_skeleton_new(s);
986         g_free(s);
987
988         /* Make the newly created object export the interface
989          * net.asp.session (note
990          * that @object takes its own reference to @session).
991          */
992
993         session = asp_session_skeleton_new();
994         asp_object_skeleton_set_session(object, session);
995         g_object_unref(session);
996
997         /* Register for method callbacks as signal callbacks */
998         g_signal_connect(
999                         session,
1000                         "handle-connect-session",
1001                         G_CALLBACK(__asp_manager_gdbus_connect_session),
1002                         asp);
1003
1004         g_signal_connect(
1005                         session,
1006                         "handle-confirm-session",
1007                         G_CALLBACK(__asp_manager_gdbus_confirm_session),
1008                         asp);
1009
1010         g_signal_connect(
1011                         session,
1012                         "handle-get-session",
1013                         G_CALLBACK(__asp_manager_gdbus_get_session),
1014                         asp);
1015
1016         g_signal_connect(
1017                         session,
1018                         "handle-set-session-ready",
1019                         G_CALLBACK(__asp_manager_gdbus_set_session_ready),
1020                         asp);
1021
1022         g_signal_connect(
1023                         session,
1024                         "handle-close-session",
1025                         G_CALLBACK(__asp_manager_gdbus_close_session),
1026                         asp);
1027
1028         g_signal_connect(
1029                         session,
1030                         "handle-bound-port",
1031                         G_CALLBACK(__asp_manager_gdbus_bound_port),
1032                         asp);
1033
1034         g_signal_connect(
1035                         session,
1036                         "handle-release-port",
1037                         G_CALLBACK(__asp_manager_gdbus_release_port),
1038                         asp);
1039
1040         /* Export the object (@manager takes its own reference to @object) */
1041         g_dbus_object_manager_server_export(asp->obj_mgr, G_DBUS_OBJECT_SKELETON(object));
1042         g_object_unref(object);
1043
1044         asp->session_obj = (gpointer)session;
1045
1046         __ASP_LOG_FUNC_EXIT__;
1047         return ret;
1048 }
1049
1050 static void __asp_manager_gdbus_on_bus_acquired(GDBusConnection *connection,
1051                 const gchar *name,
1052                 gpointer user_data)
1053 {
1054         __ASP_LOG_FUNC_ENTER__;
1055         asp_s* asp = (asp_s*)user_data;
1056
1057         asp->obj_mgr = g_dbus_object_manager_server_new("/net/asp");
1058
1059         ASP_LOGE("path : %s", name);
1060
1061         asp->connection = connection;
1062
1063         if (__asp_manager_gdbus_service_init(asp) == FALSE) {
1064                 ASP_LOGE("Can not signal connect to service");
1065                 /* Deinitialize and quit manager */
1066         }
1067         if (__asp_manager_gdbus_session_init(asp) == FALSE) {
1068                 ASP_LOGE("Can not signal connect to session");
1069                 /* Deinitialize and quit manager */
1070         }
1071
1072         g_dbus_object_manager_server_set_connection(asp->obj_mgr, asp->connection);
1073         __ASP_LOG_FUNC_EXIT__;
1074 }
1075
1076 static void __asp_manager_gdbus_on_name_acquired(GDBusConnection *connection,
1077                 const gchar *name,
1078                 gpointer user_data)
1079 {
1080         ASP_LOGE("name : %s", name);
1081 }
1082
1083 static void __asp_manager_gdbus_on_name_lost(GDBusConnection *connection,
1084                 const gchar *name,
1085                 gpointer user_data)
1086 {
1087         ASP_LOGE("name : %s", name);
1088 }
1089
1090 static GVariant *__g_hash_table_to_g_variant(GHashTable *hash)
1091 {
1092         __ASP_LOG_FUNC_ENTER__;
1093         GVariantBuilder builder;
1094
1095         g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
1096
1097         GHashTableIter iter;
1098         gpointer key, value;
1099
1100         g_hash_table_iter_init(&iter, hash);
1101         while (g_hash_table_iter_next(&iter, &key, &value))
1102                 g_variant_builder_add(&builder, "{sv}", key, g_variant_new_string(value));
1103
1104         __ASP_LOG_FUNC_EXIT__;
1105         return g_variant_builder_end(&builder);
1106 }
1107
1108 void asp_manager_gdbus_init(gpointer asp_manager)
1109 {
1110         __ASP_LOG_FUNC_ENTER__;
1111         asp_s *asp = (asp_s *)asp_manager;
1112         asp->gdbus_owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
1113                         ASP_DBUS_SERVICE,
1114                         G_BUS_NAME_OWNER_FLAGS_NONE,
1115                         __asp_manager_gdbus_on_bus_acquired,
1116                         __asp_manager_gdbus_on_name_acquired,
1117                         __asp_manager_gdbus_on_name_lost,
1118                         asp,
1119                         NULL);
1120         __ASP_LOG_FUNC_EXIT__;
1121 }
1122
1123 void asp_manager_gdbus_deinit(gpointer asp_manager)
1124 {
1125         __ASP_LOG_FUNC_ENTER__;
1126         asp_s *asp = (asp_s *)asp_manager;
1127         g_bus_unown_name(asp->gdbus_owner_id);
1128         asp->session_obj = NULL;
1129         asp->service_obj = NULL;
1130         __ASP_LOG_FUNC_EXIT__;
1131 }
1132
1133 void asp_manager_gdbus_notify_advertise_status(guint32 adv_id, guint8 status, gint32 reason)
1134 {
1135         __ASP_LOG_FUNC_ENTER__;
1136
1137         AspService *service = asp_get_manager()->service_obj;
1138         asp_service_emit_advertise_status_changed(service, adv_id, status, reason);
1139
1140         __ASP_LOG_FUNC_EXIT__;
1141 }
1142
1143 void asp_manager_gdbus_notify_search_result(guint32 search_id,
1144                                                                                 const gchar *service_mac,
1145                                                                                 const gchar *service_device_name,
1146                                                                                 guint32 adv_id,
1147                                                                                 const gchar *instance_name,
1148                                                                                 GHashTable *service_info_map,
1149                                                                                 guint8 service_status)
1150 {
1151         __ASP_LOG_FUNC_ENTER__;
1152
1153         AspService *service = asp_get_manager()->service_obj;
1154         GVariantBuilder *builder = NULL;
1155         GVariant *params = NULL;
1156
1157         ASP_LOGD("Search ID: %u", search_id);
1158         ASP_LOGD("Service MAC: %s", service_mac);
1159         ASP_LOGD("Service Dev Name: %s", service_device_name);
1160         ASP_LOGD("Advertisement ID: %u", adv_id);
1161         ASP_LOGD("Instance Name: %s", instance_name);
1162         ASP_LOGD("Service Status: %c", service_status);
1163         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1164         g_variant_builder_add(builder, "{sv}", "search_id", g_variant_new("u", search_id));
1165         g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", service_mac));
1166         if (service_device_name != NULL)
1167                 g_variant_builder_add(builder, "{sv}", "service_device_name", g_variant_new("s", service_device_name));
1168         g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", adv_id));
1169
1170         if (instance_name)
1171                 g_variant_builder_add(builder, "{sv}", "instance_name", g_variant_new("s", instance_name));
1172         if (service_info_map != NULL) {
1173                 g_variant_builder_add(builder, "{sv}", "service_info", __g_hash_table_to_g_variant(service_info_map));
1174                 g_hash_table_unref(service_info_map);
1175         }
1176         g_variant_builder_add(builder, "{sv}", "service_status", g_variant_new("y", service_status));
1177
1178         params = g_variant_new("a{sv}", builder);
1179         g_variant_builder_unref(builder);
1180
1181         ASP_LOGD("Created parameter for search result signal");
1182         asp_service_emit_search_result(service, params);
1183
1184         __ASP_LOG_FUNC_EXIT__;
1185 }
1186
1187 void asp_manager_gdbus_notify_session_request(gint32 error_code,
1188                 gchar * session_mac, guint32 session_id, guint32 adv_id,
1189                 gchar * device_name, gchar * session_info,
1190                 gboolean get_pin, gchar *pin)
1191 {
1192         __ASP_LOG_FUNC_ENTER__;
1193
1194         AspSession *session = asp_get_manager()->session_obj;
1195         GVariantBuilder *builder = NULL;
1196         GVariant *params = NULL;
1197
1198         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1199         g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", adv_id));
1200         g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", session_id));
1201         g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", session_mac));
1202         g_variant_builder_add(builder, "{sv}", "device_name", g_variant_new("s", device_name));
1203         g_variant_builder_add(builder, "{sv}", "session_info", g_variant_new("s", session_info));
1204         g_variant_builder_add(builder, "{sv}", "get_pin", g_variant_new("b", get_pin));
1205         if (pin[0] != 0)
1206                 g_variant_builder_add(builder, "{sv}", "pin", g_variant_new("s", pin));
1207
1208         params = g_variant_new("a{sv}", builder);
1209         g_variant_builder_unref(builder);
1210
1211         ASP_LOGD("Created parameter for session requested signal");
1212         asp_session_emit_session_request(session, params);
1213
1214         __ASP_LOG_FUNC_EXIT__;
1215 }
1216
1217 void asp_manager_gdbus_notify_session_config_request(gchar * session_mac,
1218                 guint32 sessoin_id, gboolean get_pin, gchar *pin)
1219 {
1220         __ASP_LOG_FUNC_ENTER__;
1221
1222         AspSession *session = asp_get_manager()->session_obj;
1223         GVariantBuilder *builder = NULL;
1224         GVariant *params = NULL;
1225
1226         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1227         g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", session_mac));
1228         g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", sessoin_id));
1229         g_variant_builder_add(builder, "{sv}", "get_pin", g_variant_new("b", get_pin));
1230         if (pin[0] != 0)
1231                 g_variant_builder_add(builder, "{sv}", "pin", g_variant_new("s", pin));
1232
1233         params = g_variant_new("a{sv}", builder);
1234         g_variant_builder_unref(builder);
1235
1236         ASP_LOGD("Created parameter for session config requested signal");
1237         asp_session_emit_session_config_request(session, params);
1238
1239         __ASP_LOG_FUNC_EXIT__;
1240 }
1241
1242 void asp_manager_gdbus_notify_connect_status(gchar *session_mac,
1243                 guint32 session_id, gint32 status, gchar *deferred)
1244 {
1245         __ASP_LOG_FUNC_ENTER__;
1246
1247         AspSession *session = asp_get_manager()->session_obj;
1248         GVariantBuilder *builder = NULL;
1249         GVariant *params = NULL;
1250
1251         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1252         g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", session_mac));
1253         g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", session_id));
1254         g_variant_builder_add(builder, "{sv}", "status", g_variant_new("i", status));
1255         g_variant_builder_add(builder, "{sv}", "deferred_resp", g_variant_new("s", deferred));
1256
1257         params = g_variant_new("a{sv}", builder);
1258         g_variant_builder_unref(builder);
1259
1260         ASP_LOGD("Created parameter for connect status signal");
1261         asp_session_emit_connect_status(session, params);
1262
1263         __ASP_LOG_FUNC_EXIT__;
1264 }
1265
1266 void asp_manager_gdbus_notify_session_status(gchar *session_mac,
1267                 guint32 session_id, gint32 state, gint32 status, const gchar *info)
1268 {
1269         __ASP_LOG_FUNC_ENTER__;
1270
1271         AspSession *session = asp_get_manager()->session_obj;
1272         GVariantBuilder *builder = NULL;
1273         GVariant *params = NULL;
1274
1275         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1276         g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", session_mac));
1277         g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", session_id));
1278         g_variant_builder_add(builder, "{sv}", "state", g_variant_new("i", state));
1279         g_variant_builder_add(builder, "{sv}", "status", g_variant_new("i", status));
1280         if (info)
1281                 g_variant_builder_add(builder, "{sv}", "requested_info", g_variant_new("s", info));
1282
1283         params = g_variant_new("a{sv}", builder);
1284         g_variant_builder_unref(builder);
1285
1286         ASP_LOGD("Created parameter for session status signal");
1287         asp_session_emit_session_status(session, params);
1288
1289         __ASP_LOG_FUNC_EXIT__;
1290 }
1291
1292 void asp_manager_gdbus_notify_port_status(gchar * session_mac,
1293                 guint32 session_id, const gchar *ip, gint32 port, gint32 protocol,
1294                 gint32 status)
1295 {
1296         __ASP_LOG_FUNC_ENTER__;
1297
1298         AspSession *session = asp_get_manager()->session_obj;
1299         GVariantBuilder *builder = NULL;
1300         GVariant *params = NULL;
1301
1302         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1303         g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", session_mac));
1304         g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", session_id));
1305         g_variant_builder_add(builder, "{sv}", "ip", g_variant_new("s", ip));
1306         g_variant_builder_add(builder, "{sv}", "port", g_variant_new("i", port));
1307         g_variant_builder_add(builder, "{sv}", "protocol", g_variant_new("i", protocol));
1308         g_variant_builder_add(builder, "{sv}", "status", g_variant_new("i", status));
1309
1310         params = g_variant_new("a{sv}", builder);
1311         g_variant_builder_unref(builder);
1312
1313         ASP_LOGD("Created parameter for port status signal");
1314         asp_session_emit_port_status(session, params);
1315
1316         __ASP_LOG_FUNC_EXIT__;
1317 }
1318