2 * Network Configuration Module
4 * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 * This file implements wifi direct manager Application Service Platform(ASP) functions.
23 * @file wifi-direct-asp.c
24 * @author Jiung Yu (jiung.yu@samsung.com)
32 #include <wifi-direct.h>
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"
42 #include "wifi-direct-asp.h"
44 bool wfd_asp_is_asp_session(wfd_session_s *session)
46 wfd_manager_s * manager = wfd_get_manager();
47 if (!manager || !session)
50 return manager->is_asp_supported && !ISZEROMACADDR(session->session_mac);
53 void wfd_asp_session_request(wfd_oem_asp_prov_s *prov_param)
55 GVariantBuilder *builder = NULL;
56 GVariant *parameter = NULL;
57 GVariant *get_pin = NULL;
59 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
60 g_variant_builder_add(builder, "{sv}",
62 g_variant_new_uint32(prov_param->adv_id));
63 g_variant_builder_add(builder, "{sv}",
65 wfd_manager_dbus_pack_ay(prov_param->session_mac, MACADDR_LEN));
66 g_variant_builder_add(builder, "{sv}",
68 g_variant_new_uint32(prov_param->session_id));
70 if (prov_param->network_config == WFD_WPS_MODE_KEYPAD)
71 get_pin = g_variant_new_boolean(TRUE);
73 get_pin = g_variant_new_boolean(FALSE);
74 g_variant_builder_add(builder, "{sv}",
78 if (prov_param->wps_pin[0])
79 g_variant_builder_add(builder, "{sv}",
81 g_variant_new_string(prov_param->wps_pin));
82 parameter = g_variant_new("(a{sv})", builder);
83 g_variant_builder_unref(builder);
85 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "SessionRequest", parameter);
89 void wfd_asp_session_config_request(unsigned int session_id, int get_pin, char *pin)
91 GVariantBuilder *builder = NULL;
92 GVariant *parameter = NULL;
94 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
95 g_variant_builder_add(builder, "{sv}",
97 g_variant_new_uint32(session_id));
98 g_variant_builder_add(builder, "{sv}",
100 g_variant_new_int32(get_pin));
102 g_variant_builder_add(builder, "{sv}",
104 g_variant_new_string(pin));
105 parameter = g_variant_new("(a{sv})", builder);
106 g_variant_builder_unref(builder);
108 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "SessionConfigRequest", parameter);
113 void wfd_asp_connect_status(unsigned char *session_mac,
114 unsigned int session_id, int status, char *deferred)
116 GVariantBuilder *builder = NULL;
117 GVariant *parameter = NULL;
119 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
120 g_variant_builder_add(builder, "{sv}",
122 wfd_manager_dbus_pack_ay(session_mac, MACADDR_LEN));
123 g_variant_builder_add(builder, "{sv}",
125 g_variant_new_uint32(session_id));
126 g_variant_builder_add(builder, "{sv}",
128 g_variant_new_int32(status));
130 g_variant_builder_add(builder, "{sv}",
132 g_variant_new_string(deferred));
133 parameter = g_variant_new("(a{sv})", builder);
134 g_variant_builder_unref(builder);
136 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE, "ConnectStatus", parameter);
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)
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));
149 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
150 g_variant_builder_add(builder, "{sv}",
152 wfd_manager_dbus_pack_ay(session_mac, MACADDR_LEN));
153 g_variant_builder_add(builder, "{sv}",
155 g_variant_new_uint32(session_id));
156 g_variant_builder_add(builder, "{sv}",
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);
165 wfd_manager_dbus_emit_signal(WFD_MANAGER_ASP_INTERFACE,
166 "SessionPeerIPAssigned", parameter);