Fixed: Coding rule issues.
[platform/core/connectivity/wifi-direct-manager.git] / src / wifi-direct-asp.c
1 /*
2  * Network Configuration Module
3  *
4  * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 /**
21  * This file implements wifi direct manager Application Service Platform(ASP) functions.
22  *
23  * @file        wifi-direct-asp.c
24  * @author      Jiung Yu (jiung.yu@samsung.com)
25  * @version     0.1
26  */
27
28 #include <stdlib.h>
29
30 #include <glib.h>
31
32 #include <wifi-direct.h>
33
34 #include "wifi-direct-ipc.h"
35 #include "wifi-direct-dbus.h"
36 #include "wifi-direct-log.h"
37 #include "wifi-direct-manager.h"
38 #include "wifi-direct-oem.h"
39 #include "wifi-direct-util.h"
40
41 #include "wifi-direct-asp.h"
42
43 void wfd_asp_session_request(wfd_oem_asp_prov_s *prov_param)
44 {
45         GVariantBuilder *builder = NULL;
46         GVariant *parameter = NULL;
47         GVariant *get_pin = NULL;
48
49         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
50         g_variant_builder_add(builder, "{sv}",
51                         "adv_id",
52                         g_variant_new_uint32(prov_param->adv_id));
53         g_variant_builder_add(builder, "{sv}",
54                         "session_mac",
55                         wfd_manager_dbus_pack_ay(prov_param->session_mac, MACADDR_LEN));
56         g_variant_builder_add(builder, "{sv}",
57                         "session_id",
58                         g_variant_new_uint32(prov_param->session_id));
59
60         if (prov_param->network_config == WFD_WPS_MODE_KEYPAD)
61                 get_pin = g_variant_new_boolean(TRUE);
62         else
63                 get_pin = g_variant_new_boolean(FALSE);
64         g_variant_builder_add(builder, "{sv}",
65                         "get_pin",
66                         get_pin);
67
68         if (prov_param->wps_pin[0])
69                 g_variant_builder_add(builder, "{sv}",
70                                 "pin",
71                                 g_variant_new_string(prov_param->wps_pin));
72         parameter = g_variant_new("(a{sv})", builder);
73         g_variant_builder_unref(builder);
74
75         wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "SessionRequest", parameter);
76         return;
77 }
78
79 void wfd_asp_session_config_request(unsigned int session_id, int get_pin, char *pin)
80 {
81         GVariantBuilder *builder = NULL;
82         GVariant *parameter = NULL;
83
84         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
85         g_variant_builder_add(builder, "{sv}",
86                         "session_id",
87                         g_variant_new_uint32(session_id));
88         g_variant_builder_add(builder, "{sv}",
89                         "get_pin",
90                         g_variant_new_int32(get_pin));
91         if (pin)
92                 g_variant_builder_add(builder, "{sv}",
93                                 "pin",
94                                 g_variant_new_string(pin));
95         parameter = g_variant_new("(a{sv})", builder);
96         g_variant_builder_unref(builder);
97
98         wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "SessionConfigRequest", parameter);
99         return;
100 }
101
102 void wfd_asp_connect_status(unsigned char *session_mac,
103                 unsigned int session_id, int status, char *deferred)
104 {
105         GVariantBuilder *builder = NULL;
106         GVariant *parameter = NULL;
107
108         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
109         g_variant_builder_add(builder, "{sv}",
110                         "session_mac",
111                         wfd_manager_dbus_pack_ay(session_mac, MACADDR_LEN));
112         g_variant_builder_add(builder, "{sv}",
113                         "session_id",
114                         g_variant_new_uint32(session_id));
115         g_variant_builder_add(builder, "{sv}",
116                         "status",
117                         g_variant_new_int32(status));
118         if (deferred)
119                 g_variant_builder_add(builder, "{sv}",
120                                 "deferred",
121                                 g_variant_new_string(deferred));
122         parameter = g_variant_new("(a{sv})", builder);
123         g_variant_builder_unref(builder);
124
125         wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "ConnectStatus", parameter);
126         return;
127 }
128
129 void wfd_asp_session_peer_ip(unsigned char *session_mac,
130                 unsigned int session_id, unsigned char *service_mac,
131                 unsigned char *session_ip)
132 {
133         GVariantBuilder *builder = NULL;
134         GVariant *parameter = NULL;
135         char assigned_ip_address[IPSTR_LEN+1] = {0,};
136         g_snprintf(assigned_ip_address, IPSTR_LEN, IPSTR, IP2STR(session_ip));
137
138         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
139         g_variant_builder_add(builder, "{sv}",
140                         "session_mac",
141                         wfd_manager_dbus_pack_ay(session_mac, MACADDR_LEN));
142         g_variant_builder_add(builder, "{sv}",
143                         "session_id",
144                         g_variant_new_uint32(session_id));
145         g_variant_builder_add(builder, "{sv}",
146                         "service_mac",
147                         wfd_manager_dbus_pack_ay(service_mac, MACADDR_LEN));
148         g_variant_builder_add(builder, "{sv}",
149                         "assigned_ip_address",
150                         g_variant_new_string(assigned_ip_address));
151         parameter = g_variant_new("(a{sv})", builder);
152         g_variant_builder_unref(builder);
153
154         wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
155                         "SessionPeerIPAssigned", parameter);
156         return;
157 }