2 * Network Configuration Module
4 * Copyright (c) 2012-2013 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.
28 #include "netsupplicant.h"
29 #include "network-state.h"
31 #include <vconf-keys.h>
32 #include <arpa/inet.h>
36 #include "wifi-tdls.h"
39 char *peer_mac = NULL;
42 void __netconfig_wifi_notify_tdls_event(const char *sig_name, const char *peer_mac)
44 GVariantBuilder *builder;
46 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
47 g_variant_builder_add(builder, "{sv}", "peermac", g_variant_new_string(peer_mac));
49 params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
50 g_variant_builder_unref(builder);
52 netconfig_dbus_emit_signal(NULL,
54 NETCONFIG_WIFI_INTERFACE,
58 INFO("Sent signal (%s) Peer Mac (%s)", sig_name, peer_mac);
61 static GVariant * __netconfig_wifi_tdls_send_dbus_str(const char* method, const char *str)
63 GVariant *message = NULL;
64 const char *if_path = NULL;
65 GVariant *params = NULL;
67 if_path = netconfig_wifi_get_supplicant_interface();
68 if (if_path == NULL) {
69 ERR("Fail to get wpa_supplicant DBus path");
73 params = g_variant_new("(s)", str);
74 INFO("[TizenMW-->WPAS] Sent Dbus Method :[%s],value[%s]", method, str);
75 message = netconfig_invoke_dbus_method(SUPPLICANT_SERVICE,
76 if_path, SUPPLICANT_INTERFACE ".Interface", method, params);
78 INFO("TDLS Returned from Blocking method for Send DBUS Command");
82 gboolean handle_tdls_disconnect(Wifi *wifi, GDBusMethodInvocation *context,
85 DBG("[TizenMW-->WPAS]: TDLS Teardown Request: [%s]", peer_mac_Addr);
88 ERR(" No active TDLS Connection !!!");
90 GVariant *message = NULL;
91 message = __netconfig_wifi_tdls_send_dbus_str("TDLSTeardown", (const char*)peer_mac_Addr);
92 DBG("[TizenMW<--WPAS] TDLS DBUS Command sent successfully");
93 g_variant_unref(message);
97 wifi_complete_tdls_disconnect(wifi, context, 1);
101 gboolean handle_tdls_connected_peer(Wifi *wifi, GDBusMethodInvocation *context)
103 DBG("[TizenMW-->WPAS]: TDLS Connected Peer Request: ");
105 GVariant *message = NULL;
106 const gchar* reply_str = NULL;
108 if (peer_mac == NULL) {
109 INFO("TDLS: No Active Connection");
110 wifi_complete_tdls_connected_peer(wifi, context, "00.00.00.00.00.00");
113 message = __netconfig_wifi_tdls_send_dbus_str("TDLSStatus", (const char*)peer_mac);
114 if (message == NULL) {
115 ERR(" TDLS : No active TDLS Link Setup !!!");
116 wifi_complete_tdls_connected_peer(wifi, context, "00.00.00.00.00.00");
120 g_variant_get(message, "(&s)", &reply_str);
121 INFO("TDLS reply: [%s]", reply_str);
122 INFO("TDLS :peer_mac [%s]", peer_mac);
124 if (g_strcmp0("connected", reply_str) != 0) {
125 ERR("[TizenMW<--WPAS] TDLS Connection not available");
126 wifi_complete_tdls_connected_peer(wifi, context, "00.00.00.00.00.00");
127 g_variant_unref(message);
131 INFO("[TizenMW<--WPAS] TDLS Connection available, Peer Mac address %s", peer_mac);
132 wifi_complete_tdls_connected_peer(wifi, context, peer_mac);
134 g_variant_unref(message);
138 void netconfig_wifi_tlds_connected_event(GVariant *message)
141 DBG("[TizenMW<--WPAS] WiFi TDLS Connected EVENT");
142 if (is_connected == 1) {
143 INFO("TDLS Peer already connected");
147 g_variant_get(message, "(s)", &peer_mac);
148 INFO("Peer Mac Address: [%s]", peer_mac);
151 __netconfig_wifi_notify_tdls_event("TDLSConnect", peer_mac);
154 void netconfig_wifi_tlds_disconnected_event(GVariant *message)
156 DBG("[TizenMW<--WPAS]: WiFi TDLS Disconnected EVENT");
157 const gchar *peer_mac_addr = NULL;
159 g_variant_get(message, "(&s)", &peer_mac_addr);
160 if (g_strcmp0(peer_mac, peer_mac_addr) == 0) {
161 INFO("TDLS Peer Disconnected Mac Address: [%s]", peer_mac);
163 __netconfig_wifi_notify_tdls_event("TDLSDisconnect", peer_mac);
165 INFO("TDLS Peer Disconnected peer_mac(%s) != peer_mac_address(%s)", peer_mac, peer_mac_addr);