123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /*
- * binder interface for wpa_supplicant daemon
- * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi>
- * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com>
- *
- * This software may be distributed under the terms of the BSD license.
- * See README for more details.
- */
- #include <binder/IServiceManager.h>
- #include "binder_constants.h"
- #include "binder_manager.h"
- extern "C" {
- #include "utils/common.h"
- #include "utils/includes.h"
- }
- namespace wpa_supplicant_binder {
- BinderManager *BinderManager::instance_ = NULL;
- BinderManager *BinderManager::getInstance()
- {
- if (!instance_)
- instance_ = new BinderManager();
- return instance_;
- }
- void BinderManager::destroyInstance()
- {
- if (instance_)
- delete instance_;
- instance_ = NULL;
- }
- int BinderManager::registerBinderService(struct wpa_global *global)
- {
- /* Create the main binder service object and register with
- * system service manager. */
- supplicant_object_ = new Supplicant(global);
- android::String16 service_name(binder_constants::kServiceName);
- android::defaultServiceManager()->addService(
- service_name, android::IInterface::asBinder(supplicant_object_));
- return 0;
- }
- int BinderManager::registerInterface(struct wpa_supplicant *wpa_s)
- {
- if (!wpa_s)
- return 1;
- /* Using the corresponding wpa_supplicant pointer as key to our
- * object map. */
- const void *iface_key = wpa_s;
- /* Return failure if we already have an object for that iface_key. */
- if (iface_object_map_.find(iface_key) != iface_object_map_.end())
- return 1;
- iface_object_map_[iface_key] = new Iface(wpa_s);
- if (!iface_object_map_[iface_key].get())
- return 1;
- wpa_s->binder_object_key = iface_key;
- return 0;
- }
- int BinderManager::unregisterInterface(struct wpa_supplicant *wpa_s)
- {
- if (!wpa_s || !wpa_s->binder_object_key)
- return 1;
- const void *iface_key = wpa_s;
- if (iface_object_map_.find(iface_key) == iface_object_map_.end())
- return 1;
- /* Delete the corresponding iface object from our map. */
- iface_object_map_.erase(iface_key);
- wpa_s->binder_object_key = NULL;
- return 0;
- }
- int BinderManager::getIfaceBinderObjectByKey(
- const void *iface_object_key,
- android::sp<fi::w1::wpa_supplicant::IIface> *iface_object)
- {
- if (!iface_object_key || !iface_object)
- return 1;
- if (iface_object_map_.find(iface_object_key) == iface_object_map_.end())
- return 1;
- *iface_object = iface_object_map_[iface_object_key];
- return 0;
- }
- } /* namespace wpa_supplicant_binder */
|