Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8636d9f5 authored by Chiachang Wang's avatar Chiachang Wang
Browse files

Replace hidden ParcelFileDescriptor constructor usage

If IOException happens while trying to start keepalives sockets,
an invalid fd will be constructed. It will fail with
ERROR_INVALID_SOCKET if the user later calls start(). Current
design to construct the invalid fd use the hidden
ParcelFileDescriptor constructor which will not work for the
incoming ConnectivityService mainline. Thus, replace it with
the other formal API.

Bug: 170598012
Test: atest FrameworksNetTests
Change-Id: I57fd7ec2281c5e8c75481200bbde723ecf96982a
parent f0341dc3
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -69,7 +69,6 @@ import com.android.internal.util.Protocol;

import libcore.net.event.NetworkEventDispatcher;

import java.io.FileDescriptor;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.lang.annotation.Retention;
@@ -1955,6 +1954,12 @@ public class ConnectivityManager {
        return k;
    }

    // Construct an invalid fd.
    private ParcelFileDescriptor createInvalidFd() {
        final int invalidFd = -1;
        return ParcelFileDescriptor.adoptFd(invalidFd);
    }

    /**
     * Request that keepalives be started on a IPsec NAT-T socket.
     *
@@ -1985,7 +1990,7 @@ public class ConnectivityManager {
        } catch (IOException ignored) {
            // Construct an invalid fd, so that if the user later calls start(), it will fail with
            // ERROR_INVALID_SOCKET.
            dup = new ParcelFileDescriptor(new FileDescriptor());
            dup = createInvalidFd();
        }
        return new NattSocketKeepalive(mService, network, dup, socket.getResourceId(), source,
                destination, executor, callback);
@@ -2027,7 +2032,7 @@ public class ConnectivityManager {
        } catch (IOException ignored) {
            // Construct an invalid fd, so that if the user later calls start(), it will fail with
            // ERROR_INVALID_SOCKET.
            dup = new ParcelFileDescriptor(new FileDescriptor());
            dup = createInvalidFd();
        }
        return new NattSocketKeepalive(mService, network, dup,
                INVALID_RESOURCE_ID /* Unused */, source, destination, executor, callback);
@@ -2064,7 +2069,7 @@ public class ConnectivityManager {
        } catch (UncheckedIOException ignored) {
            // Construct an invalid fd, so that if the user later calls start(), it will fail with
            // ERROR_INVALID_SOCKET.
            dup = new ParcelFileDescriptor(new FileDescriptor());
            dup = createInvalidFd();
        }
        return new TcpSocketKeepalive(mService, network, dup, executor, callback);
    }