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

Commit 63c3c1f3 authored by William Escande's avatar William Escande Committed by Gerrit Code Review
Browse files

Merge changes from topics "bluetooth-localsocket-from-filedescriptor",...

Merge changes from topics "bluetooth-localsocket-from-filedescriptor", "localsocket-from-filedescriptor"

* changes:
  Delete LocalSocket#createConnectedLocalSocket.
  Add a module-lib API for constructing a LocalSocket from an fd.
parents 318636c2 d1c55809
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -240,6 +240,10 @@ package android.net {
    method public int getResourceId();
  }

  public class LocalSocket implements java.io.Closeable {
    ctor public LocalSocket(@NonNull java.io.FileDescriptor);
  }

  public class NetworkIdentity {
    method public int getOemManaged();
    method public int getRatType();
+3 −1
Original line number Diff line number Diff line
@@ -55,7 +55,9 @@ public class LocalServerSocket implements Closeable {
     * Create a LocalServerSocket from a file descriptor that's already
     * been created and bound. listen() will be called immediately on it.
     * Used for cases where file descriptors are passed in via environment
     * variables
     * variables. The passed-in FileDescriptor is not managed by this class
     * and must be closed by the caller. Calling {@link #close()} on a socket
     * created by this method has no effect.
     *
     * @param fd bound file descriptor
     * @throws IOException
+31 −17
Original line number Diff line number Diff line
@@ -16,7 +16,14 @@

package android.net;

import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;

import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.system.ErrnoException;
import android.system.Os;

import java.io.Closeable;
import java.io.FileDescriptor;
@@ -74,32 +81,39 @@ public class LocalSocket implements Closeable {
        this.isBound = false;
    }

    private void checkConnected() {
        try {
            Os.getpeername(impl.getFileDescriptor());
        } catch (ErrnoException e) {
            throw new IllegalArgumentException("Not a connected socket", e);
        }
        isConnected = true;
        isBound = true;
        implCreated = true;
    }

    /**
     * Creates a LocalSocket instances using the FileDescriptor for an already-connected
     * AF_LOCAL/UNIX domain stream socket. Note: the FileDescriptor must be closed by the caller:
     * closing the LocalSocket will not close it.
     * Creates a LocalSocket instance using the {@link FileDescriptor} for an already-connected
     * AF_LOCAL/UNIX domain stream socket. The passed-in FileDescriptor is not managed by this class
     * and must be closed by the caller. Calling {@link #close()} on a socket created by this
     * method has no effect.
     *
     * @param fd the filedescriptor to adopt
     *
     * @hide - used by BluetoothSocket.
     * @hide
     */
    public static LocalSocket createConnectedLocalSocket(FileDescriptor fd) {
        return createConnectedLocalSocket(new LocalSocketImpl(fd), SOCKET_UNKNOWN);
    @SystemApi(client = MODULE_LIBRARIES)
    public LocalSocket(@NonNull @SuppressLint("UseParcelFileDescriptor") FileDescriptor fd) {
        this(new LocalSocketImpl(fd), SOCKET_UNKNOWN);
        checkConnected();
    }

    /**
     * for use with LocalServerSocket.accept()
     */
    static LocalSocket createLocalSocketForAccept(LocalSocketImpl impl) {
        return createConnectedLocalSocket(impl, SOCKET_UNKNOWN);
    }

    /**
     * Creates a LocalSocket from an existing LocalSocketImpl that is already connected.
     */
    private static LocalSocket createConnectedLocalSocket(LocalSocketImpl impl, int sockType) {
        LocalSocket socket = new LocalSocket(impl, sockType);
        socket.isConnected = true;
        socket.isBound = true;
        socket.implCreated = true;
        LocalSocket socket = new LocalSocket(impl, SOCKET_UNKNOWN);
        socket.checkConnected();
        return socket;
    }