Fix C# TCT RemovePersistentGroup_CHECK_NO_EXCEPTION issue
[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 #include "wifi-direct-session.h"
41
42 #include "wifi-direct-asp.h"
43
44 bool wfd_asp_is_asp_session(wfd_session_s *session)
45 {
46         wfd_manager_s * manager = wfd_get_manager();
47         if (!manager || !session)
48                 return false;
49
50         return manager->is_asp_supported && !ISZEROMACADDR(session->session_mac);
51 }
52
53 void wfd_asp_session_request(wfd_oem_asp_prov_s *prov_param)
54 {
55         GVariantBuilder *builder = NULL;
56         GVariant *parameter = NULL;
57         GVariant *get_pin = NULL;
58
59         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
60         g_variant_builder_add(builder, "{sv}",
61                         "adv_id",
62                         g_variant_new_uint32(prov_param->adv_id));
63         g_variant_builder_add(builder, "{sv}",
64                         "session_mac",
65                         wfd_manager_dbus_pack_ay(prov_param->session_mac, MACADDR_LEN));
66         g_variant_builder_add(builder, "{sv}",
67                         "session_id",
68                         g_variant_new_uint32(prov_param->session_id));
69
70         if (prov_param->network_config == WFD_WPS_MODE_KEYPAD)
71                 get_pin = g_variant_new_boolean(TRUE);
72         else
73                 get_pin = g_variant_new_boolean(FALSE);
74         g_variant_builder_add(builder, "{sv}",
75                         "get_pin",
76                         get_pin);
77
78         if (prov_param->wps_pin[0])
79                 g_variant_builder_add(builder, "{sv}",
80                                 "pin",
81                                 g_variant_new_string(prov_param->wps_pin));
82         parameter = g_variant_new("(a{sv})", builder);
83         g_variant_builder_unref(builder);
84
85         wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "SessionRequest", parameter);
86         return;
87 }
88 //LCOV_EXCL_START
89 void wfd_asp_session_config_request(unsigned int session_id, int get_pin, char *pin)
90 {
91         GVariantBuilder *builder = NULL;
92         GVariant *parameter = NULL;
93
94         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
95         g_variant_builder_add(builder, "{sv}",
96                         "session_id",
97                         g_variant_new_uint32(session_id));
98         g_variant_builder_add(builder, "{sv}",
99                         "get_pin",
100                         g_variant_new_int32(get_pin));
101         if (pin)
102                 g_variant_builder_add(builder, "{sv}",
103                                 "pin",
104                                 g_variant_new_string(pin));
105         parameter = g_variant_new("(a{sv})", builder);
106         g_variant_builder_unref(builder);
107
108         wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "SessionConfigRequest", parameter);
109         return;
110 }
111 //LCOV_EXCL_STOP
112
113 void wfd_asp_connect_status(unsigned char *session_mac,
114                 unsigned int session_id, int status, char *deferred)
115 {
116         GVariantBuilder *builder = NULL;
117         GVariant *parameter = NULL;
118
119         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
120         g_variant_builder_add(builder, "{sv}",
121                         "session_mac",
122                         wfd_manager_dbus_pack_ay(session_mac, MACADDR_LEN));
123         g_variant_builder_add(builder, "{sv}",
124                         "session_id",
125                         g_variant_new_uint32(session_id));
126         g_variant_builder_add(builder, "{sv}",
127                         "status",
128                         g_variant_new_int32(status));
129         if (deferred)
130                 g_variant_builder_add(builder, "{sv}",
131                                 "deferred",
132                                 g_variant_new_string(deferred));
133         parameter = g_variant_new("(a{sv})", builder);
134         g_variant_builder_unref(builder);
135
136         wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "ConnectStatus", parameter);
137         return;
138 }
139
140 void wfd_asp_session_peer_ip(unsigned char *session_mac,
141                 unsigned int session_id, unsigned char *service_mac,
142                 unsigned char *session_ip)
143 {
144         GVariantBuilder *builder = NULL;
145         GVariant *parameter = NULL;
146         char assigned_ip_address[IPSTR_LEN+1] = {0,};
147         g_snprintf(assigned_ip_address, IPSTR_LEN, IPSTR, IP2STR(session_ip));
148
149         builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
150         g_variant_builder_add(builder, "{sv}",
151                         "session_mac",
152                         wfd_manager_dbus_pack_ay(session_mac, MACADDR_LEN));
153         g_variant_builder_add(builder, "{sv}",
154                         "session_id",
155                         g_variant_new_uint32(session_id));
156         g_variant_builder_add(builder, "{sv}",
157                         "service_mac",
158                         wfd_manager_dbus_pack_ay(service_mac, MACADDR_LEN));
159         g_variant_builder_add(builder, "{sv}",
160                         "assigned_ip_address",
161                         g_variant_new_string(assigned_ip_address));
162         parameter = g_variant_new("(a{sv})", builder);
163         g_variant_builder_unref(builder);
164
165         wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
166                         "SessionPeerIPAssigned", parameter);
167         return;
168 }