binder: Callback registration for interfaces

Add callback registration for each binder interface type:
ISupplicant, IIface, INetwork.

BUG: 30093041
Change-Id: I9043d9a033bcfbee5a80f61cf58e564249edf3a7
diff --git a/wpa_supplicant/binder/iface.cpp b/wpa_supplicant/binder/iface.cpp
index 267b90b..5b5a68e 100644
--- a/wpa_supplicant/binder/iface.cpp
+++ b/wpa_supplicant/binder/iface.cpp
@@ -120,6 +120,25 @@
 	return android::binder::Status::ok();
 }
 
+android::binder::Status Iface::RegisterCallback(
+    const android::sp<fi::w1::wpa_supplicant::IIfaceCallback> &callback)
+{
+	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
+	if (!wpa_s) {
+		return android::binder::Status::fromServiceSpecificError(
+		    ERROR_IFACE_INVALID,
+		    "wpa_supplicant does not control this interface.");
+	}
+	BinderManager *binder_manager = BinderManager::getInstance();
+	if (!binder_manager ||
+	    binder_manager->addIfaceCallbackBinderObject(ifname_, callback)) {
+		return android::binder::Status::fromServiceSpecificError(
+		    ERROR_GENERIC,
+		    "wpa_supplicant encountered a binder error.");
+	}
+	return android::binder::Status::ok();
+}
+
 /**
  * Retrieve the underlying |wpa_supplicant| struct pointer for
  * this iface.