Merge "Rename IDhcpLeaseCallbacks to IDhcpEventCallbacks for more generic." am: ee5606d490 am: 1b3260c1e4

Change-Id: I607629e6a6fa1cfa011bc0b7926381d35f765766
diff --git a/common/networkstackclient/Android.bp b/common/networkstackclient/Android.bp
index 9081af4..49e9688 100644
--- a/common/networkstackclient/Android.bp
+++ b/common/networkstackclient/Android.bp
@@ -71,7 +71,7 @@
         "src/android/net/TcpKeepalivePacketDataParcelable.aidl",
         "src/android/net/dhcp/DhcpLeaseParcelable.aidl",
         "src/android/net/dhcp/DhcpServingParamsParcel.aidl",
-        "src/android/net/dhcp/IDhcpLeaseCallbacks.aidl",
+        "src/android/net/dhcp/IDhcpEventCallbacks.aidl",
         "src/android/net/dhcp/IDhcpServer.aidl",
         "src/android/net/dhcp/IDhcpServerCallbacks.aidl",
         "src/android/net/ip/IIpClient.aidl",
diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpLeaseCallbacks.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpEventCallbacks.aidl
similarity index 91%
rename from common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpLeaseCallbacks.aidl
rename to common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpEventCallbacks.aidl
index 673afe4..dfcaf98 100644
--- a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpLeaseCallbacks.aidl
+++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpEventCallbacks.aidl
@@ -16,6 +16,7 @@
 // later when a module using the interface is updated, e.g., Mainline modules.
 
 package android.net.dhcp;
-interface IDhcpLeaseCallbacks {
+interface IDhcpEventCallbacks {
   oneway void onLeasesChanged(in List<android.net.dhcp.DhcpLeaseParcelable> newLeases);
+  oneway void onNewPrefixRequest(in android.net.IpPrefix currentPrefix);
 }
diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpServer.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpServer.aidl
index 3372062..ef936cc 100644
--- a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpServer.aidl
+++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpServer.aidl
@@ -19,7 +19,7 @@
 /* @hide */
 interface IDhcpServer {
   oneway void start(in android.net.INetworkStackStatusCallback cb) = 0;
-  oneway void startWithCallbacks(in android.net.INetworkStackStatusCallback statusCb, in android.net.dhcp.IDhcpLeaseCallbacks leaseCb) = 3;
+  oneway void startWithCallbacks(in android.net.INetworkStackStatusCallback statusCb, in android.net.dhcp.IDhcpEventCallbacks eventCb) = 3;
   oneway void updateParams(in android.net.dhcp.DhcpServingParamsParcel params, in android.net.INetworkStackStatusCallback cb) = 1;
   oneway void stop(in android.net.INetworkStackStatusCallback cb) = 2;
   const int STATUS_UNKNOWN = 0;
diff --git a/common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl b/common/networkstackclient/src/android/net/dhcp/IDhcpEventCallbacks.aidl
similarity index 64%
rename from common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl
rename to common/networkstackclient/src/android/net/dhcp/IDhcpEventCallbacks.aidl
index cf2dfa8..155c528 100644
--- a/common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl
+++ b/common/networkstackclient/src/android/net/dhcp/IDhcpEventCallbacks.aidl
@@ -16,9 +16,10 @@
 
 package android.net.dhcp;
 
+import android.net.IpPrefix;
 import android.net.dhcp.DhcpLeaseParcelable;
 
-oneway interface IDhcpLeaseCallbacks {
+oneway interface IDhcpEventCallbacks {
     /**
      * Called when a lease is committed or released on the DHCP server.
      *
@@ -27,4 +28,15 @@
      * @param newLeases The new list of leases tracked by the server.
      */
     void onLeasesChanged(in List<DhcpLeaseParcelable> newLeases);
-}
\ No newline at end of file
+
+    /**
+     * Called when DHCP server receives DHCPDECLINE message and only if a new IPv4 address prefix
+     * (e.g. a different subnet prefix) is requested.
+     *
+     * <p>When this callback is called, IpServer must call IDhcpServer#updateParams with a new
+     * prefix, as processing of DHCP packets should be paused until the new prefix and route
+     * configuration on IpServer is completed.
+     * @param currentPrefix The current prefix parameter serving on DHCP server.
+     */
+    void onNewPrefixRequest(in IpPrefix currentPrefix);
+}
diff --git a/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl b/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
index dd93174..973ffb0 100644
--- a/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
+++ b/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
@@ -18,7 +18,7 @@
 
 import android.net.INetworkStackStatusCallback;
 import android.net.dhcp.DhcpServingParamsParcel;
-import android.net.dhcp.IDhcpLeaseCallbacks;
+import android.net.dhcp.IDhcpEventCallbacks;
 
 /** @hide */
 oneway interface IDhcpServer {
@@ -29,7 +29,7 @@
 
     void start(in INetworkStackStatusCallback cb) = 0;
     void startWithCallbacks(in INetworkStackStatusCallback statusCb,
-        in IDhcpLeaseCallbacks leaseCb) = 3;
+        in IDhcpEventCallbacks eventCb) = 3;
     void updateParams(in DhcpServingParamsParcel params, in INetworkStackStatusCallback cb) = 1;
     void stop(in INetworkStackStatusCallback cb) = 2;
 
diff --git a/src/android/net/dhcp/DhcpLeaseRepository.java b/src/android/net/dhcp/DhcpLeaseRepository.java
index a1f6612..3639a2d 100644
--- a/src/android/net/dhcp/DhcpLeaseRepository.java
+++ b/src/android/net/dhcp/DhcpLeaseRepository.java
@@ -91,7 +91,7 @@
     private long mNextExpirationCheck = EXPIRATION_NEVER;
 
     @NonNull
-    private RemoteCallbackList<IDhcpLeaseCallbacks> mLeaseCallbacks = new RemoteCallbackList<>();
+    private RemoteCallbackList<IDhcpEventCallbacks> mEventCallbacks = new RemoteCallbackList<>();
 
     static class DhcpLeaseException extends Exception {
         DhcpLeaseException(String message) {
@@ -386,15 +386,15 @@
             leaseParcelables.add(committedLease.toParcelable());
         }
 
-        final int cbCount = mLeaseCallbacks.beginBroadcast();
+        final int cbCount = mEventCallbacks.beginBroadcast();
         for (int i = 0; i < cbCount; i++) {
             try {
-                mLeaseCallbacks.getBroadcastItem(i).onLeasesChanged(leaseParcelables);
+                mEventCallbacks.getBroadcastItem(i).onLeasesChanged(leaseParcelables);
             } catch (RemoteException e) {
                 mLog.e("Could not send lease callback", e);
             }
         }
-        mLeaseCallbacks.finishBroadcast();
+        mEventCallbacks.finishBroadcast();
     }
 
     public void markLeaseDeclined(@NonNull Inet4Address addr) {
@@ -430,9 +430,9 @@
     /**
      * Add callbacks that will be called on leases update.
      */
-    public void addLeaseCallbacks(@NonNull IDhcpLeaseCallbacks cb) {
+    public void addLeaseCallbacks(@NonNull IDhcpEventCallbacks cb) {
         Objects.requireNonNull(cb, "Callbacks must be non-null");
-        mLeaseCallbacks.register(cb);
+        mEventCallbacks.register(cb);
     }
 
     /**
diff --git a/src/android/net/dhcp/DhcpServer.java b/src/android/net/dhcp/DhcpServer.java
index bf22fcb..429b10c 100644
--- a/src/android/net/dhcp/DhcpServer.java
+++ b/src/android/net/dhcp/DhcpServer.java
@@ -285,11 +285,11 @@
      */
     @Override
     public void startWithCallbacks(@Nullable INetworkStackStatusCallback statusCb,
-            @Nullable IDhcpLeaseCallbacks leaseCb) {
+            @Nullable IDhcpEventCallbacks eventCb) {
         mDeps.checkCaller();
         mHandlerThread.start();
         mHandler = new ServerHandler(mHandlerThread.getLooper());
-        sendMessage(CMD_START_DHCP_SERVER, new Pair<>(statusCb, leaseCb));
+        sendMessage(CMD_START_DHCP_SERVER, new Pair<>(statusCb, eventCb));
     }
 
     /**
@@ -357,8 +357,8 @@
                     cb = pair.second;
                     break;
                 case CMD_START_DHCP_SERVER:
-                    final Pair<INetworkStackStatusCallback, IDhcpLeaseCallbacks> obj =
-                            (Pair<INetworkStackStatusCallback, IDhcpLeaseCallbacks>) msg.obj;
+                    final Pair<INetworkStackStatusCallback, IDhcpEventCallbacks> obj =
+                            (Pair<INetworkStackStatusCallback, IDhcpEventCallbacks>) msg.obj;
                     cb = obj.first;
                     if (obj.second != null) {
                         mLeaseRepo.addLeaseCallbacks(obj.second);
diff --git a/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java b/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
index 818a48a..3a6a890 100644
--- a/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
+++ b/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
@@ -100,7 +100,7 @@
     private DhcpLeaseRepository mRepo;
     @NonNull
     @Mock
-    private IDhcpLeaseCallbacks mCallbacks;
+    private IDhcpEventCallbacks mCallbacks;
     private final Binder mCallbacksBinder = new Binder();
 
     private static Inet4Address parseAddr4(String inet4Addr) {
diff --git a/tests/unit/src/android/net/dhcp/DhcpServerTest.java b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
index a278a88..86f8a25 100644
--- a/tests/unit/src/android/net/dhcp/DhcpServerTest.java
+++ b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
@@ -119,7 +119,7 @@
     @NonNull @Mock
     private DhcpPacketListener mPacketListener;
     @NonNull @Mock
-    private IDhcpLeaseCallbacks mLeaseCallbacks;
+    private IDhcpEventCallbacks mEventCallbacks;
 
     @NonNull @Captor
     private ArgumentCaptor<ByteBuffer> mSentPacketCaptor;
@@ -207,9 +207,9 @@
 
     @Test
     public void testStartWithCallbacks() throws Exception {
-        mServer.startWithCallbacks(mAssertSuccessCallback, mLeaseCallbacks);
+        mServer.startWithCallbacks(mAssertSuccessCallback, mEventCallbacks);
         mLooper.processAllMessages();
-        verify(mRepository).addLeaseCallbacks(eq(mLeaseCallbacks));
+        verify(mRepository).addLeaseCallbacks(eq(mEventCallbacks));
     }
 
     @Test