+++ /dev/null
-/**
- @file dbus-helper.c
-
- Copyright (C) 2004 Nokia Corporation. All rights reserved.
-
- Copyright (C) 2009 Javier S. Pedro
-
- @author Janne Ylalehto <janne.ylalehto@nokia.com>
- @author Johan Hedberg <johan.hedberg@nokia.com>
-
- @author Javier S. Pedro <javispedro@javispedro.com>
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2 of the License, or (at your
- option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-#include <glib.h>
-
-#include <wlancond-dbus.h>
-
-#include "dbus-helper.h"
-#include "dbus-handler.h"
-#include "wlan.h"
-#include "supp.h"
-#include "log.h"
-
-static DBusHandlerResult wlancond_scan_results_handler(DBusMessage *message) {
- DBusMessageIter iter;
- gint32 number_of_results, i;
-
- if (!wlan_is_scanning()) {
- DLOG_DEBUG("Received scan results we didn't ask for");
- // TODO: Somehow use them
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- }
-
- dbus_message_iter_init(message, &iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32)
- goto param_err;
-
- dbus_message_iter_get_basic(&iter, &number_of_results);
-
- dbus_message_iter_next(&iter);
-
- for (i = 0; i < number_of_results; i++) {
- DBusMessageIter array_iter;
- gint32 ssid_len, bssid_len;
- gchar * ssid, * bssid;
- gint32 rssi;
- guint32 channel, cap_bits;
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
- dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_BYTE) {
-
- goto param_err;
- }
-
- dbus_message_iter_recurse(&iter, &array_iter);
- dbus_message_iter_get_fixed_array(&array_iter, &ssid, &ssid_len);
- dbus_message_iter_next(&iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
- dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_BYTE) {
-
- goto param_err;
- }
-
- dbus_message_iter_recurse(&iter, &array_iter);
- dbus_message_iter_get_fixed_array(&array_iter, &bssid, &bssid_len);
- dbus_message_iter_next(&iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32)
- goto param_err;
- dbus_message_iter_get_basic(&iter, &rssi);
- dbus_message_iter_next(&iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32)
- goto param_err;
- dbus_message_iter_get_basic(&iter, &channel);
- dbus_message_iter_next(&iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32)
- goto param_err;
- dbus_message_iter_get_basic(&iter, &cap_bits);
- dbus_message_iter_next(&iter);
-
- DLOG_INFO("Scan result with %s.", ssid);
- wlan_notify_ap(ssid, bssid,
- rssi, channel, cap_bits);
- }
-
- DLOG_DEBUG("Handled scan result, results=%ld.",
- (long) number_of_results);
-
- wlan_notify_end_of_search();
-
- return DBUS_HANDLER_RESULT_HANDLED;
-param_err:
- DLOG_WARN("Parameter error in scan request");
-
- wlan_notify_end_of_search();
-
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult supp_state_change_handler(DBusMessage *message) {
- gchar *old_state, *new_state;
-
- if (!dbus_message_get_args(
- message, NULL,
- DBUS_TYPE_STRING, &new_state,
- DBUS_TYPE_STRING, &old_state,
- DBUS_TYPE_INVALID))
- {
- DLOG_WARN("Supplicant StateChange signal format error");
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- supp_handle_signal(old_state, new_state);
-
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-static DBusHandlerResult wlancond_sig_handler(DBusConnection *connection,
- DBusMessage *message,
- void *user_data) {
- if (dbus_message_is_signal(message,
- WLANCOND_SIG_INTERFACE,
- WLANCOND_SCAN_RESULTS_SIG))
- return wlancond_scan_results_handler(message);
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-static DBusHandlerResult supp_sig_handler(DBusConnection *connection,
- DBusMessage *message,
- void *user_data) {
- if (dbus_message_is_signal(message,
- WPAS_DBUS_IFACE_INTERFACE,
- WPAS_STATE_CHANGE_SIG))
- return supp_state_change_handler(message);
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-/**
- Create bindings for D-BUS handlers.
- @param connection DBUS connection.
-*/
-void init_dbus_handlers(DBusConnection *connection) {
- gboolean ret;
- /*dbus_bool_t ret;
- ret = dbus_connection_register_object_path(connection,
- WLANCOND_REQ_PATH,
- &wlancond_req_vtable,
- NULL);
- if (ret == FALSE) {
- DLOG_ERR("dbus_connection_register_object_path failed");
- }*/
-
- dbus_bus_add_match(connection,
- "interface=" WLANCOND_SIG_INTERFACE
- ",member=" WLANCOND_SCAN_RESULTS_SIG, NULL);
-
- ret = dbus_connection_add_filter(connection,
- (DBusHandleMessageFunction)wlancond_sig_handler, NULL, NULL);
-
- if (!ret) {
- DLOG_ERR("dbus_connection_add_filter failed");
- }
-
- dbus_bus_add_match(connection,
- "interface=" WPAS_DBUS_IFACE_INTERFACE
- ",member=" WPAS_STATE_CHANGE_SIG, NULL);
-
- ret = dbus_connection_add_filter(connection,
- (DBusHandleMessageFunction)supp_sig_handler, NULL, NULL);
-
- if (!ret) {
- DLOG_ERR("dbus_connection_add_filter failed");
- }
-}
-
-/**
- Destroy D-BUS handlers.
- @param connection DBUS connection.
-*/
-void destroy_dbus_handlers(DBusConnection *connection) {
- //dbus_connection_unregister_object_path(connection, WLANCOND_REQ_PATH);
-}