Merge "Refactor RFCOMM / BluetoothSocket usage of LocalSocket"

am: 649a89e524

Change-Id: Ib8dc0ec183b870931bf4befea5ff32532009fddd
This commit is contained in:
Neil Fuller
2017-01-11 13:37:37 +00:00
committed by android-build-merger
4 changed files with 27 additions and 21 deletions

View File

@@ -243,7 +243,7 @@ public final class BluetoothSocket implements Closeable {
} }
as.mPfd = new ParcelFileDescriptor(fds[0]); as.mPfd = new ParcelFileDescriptor(fds[0]);
as.mSocket = new LocalSocket(fds[0]); as.mSocket = LocalSocket.createConnectedLocalSocket(fds[0]);
as.mSocketIS = as.mSocket.getInputStream(); as.mSocketIS = as.mSocket.getInputStream();
as.mSocketOS = as.mSocket.getOutputStream(); as.mSocketOS = as.mSocket.getOutputStream();
as.mAddress = RemoteAddr; as.mAddress = RemoteAddr;
@@ -367,7 +367,7 @@ public final class BluetoothSocket implements Closeable {
if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed"); if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
if (mPfd == null) throw new IOException("bt socket connect failed"); if (mPfd == null) throw new IOException("bt socket connect failed");
FileDescriptor fd = mPfd.getFileDescriptor(); FileDescriptor fd = mPfd.getFileDescriptor();
mSocket = new LocalSocket(fd); mSocket = LocalSocket.createConnectedLocalSocket(fd);
mSocketIS = mSocket.getInputStream(); mSocketIS = mSocket.getInputStream();
mSocketOS = mSocket.getOutputStream(); mSocketOS = mSocket.getOutputStream();
} }
@@ -416,9 +416,9 @@ public final class BluetoothSocket implements Closeable {
if(mSocketState != SocketState.INIT) return EBADFD; if(mSocketState != SocketState.INIT) return EBADFD;
if(mPfd == null) return -1; if(mPfd == null) return -1;
FileDescriptor fd = mPfd.getFileDescriptor(); FileDescriptor fd = mPfd.getFileDescriptor();
if (DBG) Log.d(TAG, "bindListen(), new LocalSocket "); if (DBG) Log.d(TAG, "bindListen(), Create LocalSocket");
mSocket = new LocalSocket(fd); mSocket = LocalSocket.createConnectedLocalSocket(fd);
if (DBG) Log.d(TAG, "bindListen(), new LocalSocket.getInputStream() "); if (DBG) Log.d(TAG, "bindListen(), new LocalSocket.getInputStream()");
mSocketIS = mSocket.getInputStream(); mSocketIS = mSocket.getInputStream();
mSocketOS = mSocket.getOutputStream(); mSocketOS = mSocket.getOutputStream();
} }

View File

@@ -89,7 +89,7 @@ public class LocalServerSocket {
impl.accept(acceptedImpl); impl.accept(acceptedImpl);
return LocalSocket.createLocalSocketForAccept(acceptedImpl, LocalSocket.SOCKET_UNKNOWN); return LocalSocket.createLocalSocketForAccept(acceptedImpl);
} }
/** /**

View File

@@ -31,6 +31,7 @@ import java.net.SocketOptions;
public class LocalSocket implements Closeable { public class LocalSocket implements Closeable {
private final LocalSocketImpl impl; private final LocalSocketImpl impl;
/** false if impl.create() needs to be called */
private volatile boolean implCreated; private volatile boolean implCreated;
private LocalSocketAddress localAddress; private LocalSocketAddress localAddress;
private boolean isBound; private boolean isBound;
@@ -61,19 +62,6 @@ public class LocalSocket implements Closeable {
*/ */
public LocalSocket(int sockType) { public LocalSocket(int sockType) {
this(new LocalSocketImpl(), sockType); this(new LocalSocketImpl(), sockType);
isBound = false;
isConnected = false;
}
/**
* Creates a AF_LOCAL/UNIX domain stream socket with FileDescriptor.
* @hide
*/
public LocalSocket(FileDescriptor fd) throws IOException {
this(new LocalSocketImpl(fd), SOCKET_UNKNOWN);
isBound = true;
isConnected = true;
implCreated = true;
} }
private LocalSocket(LocalSocketImpl impl, int sockType) { private LocalSocket(LocalSocketImpl impl, int sockType) {
@@ -83,10 +71,28 @@ public class LocalSocket implements Closeable {
this.isBound = false; this.isBound = false;
} }
/**
* 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.
*
* @hide - used by BluetoothSocket.
*/
public static LocalSocket createConnectedLocalSocket(FileDescriptor fd) {
return createConnectedLocalSocket(new LocalSocketImpl(fd), SOCKET_UNKNOWN);
}
/** /**
* for use with LocalServerSocket.accept() * for use with LocalServerSocket.accept()
*/ */
static LocalSocket createLocalSocketForAccept(LocalSocketImpl impl, int sockType) { 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); LocalSocket socket = new LocalSocket(impl, sockType);
socket.isConnected = true; socket.isConnected = true;
socket.isBound = true; socket.isBound = true;

View File

@@ -218,7 +218,7 @@ class LocalSocketImpl
* *
* @param fd non-null; bound file descriptor * @param fd non-null; bound file descriptor
*/ */
/*package*/ LocalSocketImpl(FileDescriptor fd) throws IOException /*package*/ LocalSocketImpl(FileDescriptor fd)
{ {
this.fd = fd; this.fd = fd;
} }