binder: Implement |OnStateChanged| callback

Add state change callbacks. This is used by clients to monitor wpa_supplicant's
connection status, etc.

BUG: 30093041
TEST: Ran a simple connect/disconnect integration test gtest.

Change-Id: I35238f0f95b0a0a4723cb315ddaba30dd19d7dab
Signed-off-by: Roshan Pius <rpius@google.com>
diff --git a/wpa_supplicant/binder/binder.cpp b/wpa_supplicant/binder/binder.cpp
index 704b1c3..d174f2b 100644
--- a/wpa_supplicant/binder/binder.cpp
+++ b/wpa_supplicant/binder/binder.cpp
@@ -85,7 +85,7 @@
 
 int wpas_binder_register_interface(struct wpa_supplicant *wpa_s)
 {
-	if (!wpa_s->global->binder || !wpa_s)
+	if (!wpa_s || !wpa_s->global->binder)
 		return 1;
 
 	wpa_printf(
@@ -102,7 +102,7 @@
 
 int wpas_binder_unregister_interface(struct wpa_supplicant *wpa_s)
 {
-	if (!wpa_s->global->binder || !wpa_s)
+	if (!wpa_s || !wpa_s->global->binder)
 		return 1;
 
 	wpa_printf(
@@ -120,7 +120,7 @@
 int wpas_binder_register_network(
     struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
 {
-	if (!wpa_s->global->binder || !wpa_s || !ssid)
+	if (!wpa_s || !wpa_s->global->binder || !ssid)
 		return 1;
 
 	wpa_printf(
@@ -137,7 +137,7 @@
 int wpas_binder_unregister_network(
     struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
 {
-	if (!wpa_s->global->binder || !wpa_s || !ssid)
+	if (!wpa_s || !wpa_s->global->binder || !ssid)
 		return 1;
 
 	wpa_printf(
@@ -151,3 +151,20 @@
 
 	return binder_manager->unregisterNetwork(wpa_s, ssid);
 }
+
+int wpas_binder_notify_state_changed(struct wpa_supplicant *wpa_s)
+{
+	if (!wpa_s || !wpa_s->global->binder || !ssid)
+		return 1;
+
+	wpa_printf(
+	    MSG_DEBUG, "Notifying state change event to binder control: %d",
+	    wpa_s->wpa_state);
+
+	wpa_supplicant_binder::BinderManager *binder_manager =
+	    wpa_supplicant_binder::BinderManager::getInstance();
+	if (!binder_manager)
+		return 1;
+
+	return binder_manager->notifyStateChange(wpa_s);
+}