Merge "Refactor RFCOMM / BluetoothSocket usage of LocalSocket" am: 649a89e524
am: f4e236c794
Change-Id: If23b5efe912c5b0a76487c46723288ff6a903a14
This commit is contained in:
@@ -243,7 +243,7 @@ public final class BluetoothSocket implements Closeable {
|
||||
}
|
||||
|
||||
as.mPfd = new ParcelFileDescriptor(fds[0]);
|
||||
as.mSocket = new LocalSocket(fds[0]);
|
||||
as.mSocket = LocalSocket.createConnectedLocalSocket(fds[0]);
|
||||
as.mSocketIS = as.mSocket.getInputStream();
|
||||
as.mSocketOS = as.mSocket.getOutputStream();
|
||||
as.mAddress = RemoteAddr;
|
||||
@@ -367,7 +367,7 @@ public final class BluetoothSocket implements Closeable {
|
||||
if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
|
||||
if (mPfd == null) throw new IOException("bt socket connect failed");
|
||||
FileDescriptor fd = mPfd.getFileDescriptor();
|
||||
mSocket = new LocalSocket(fd);
|
||||
mSocket = LocalSocket.createConnectedLocalSocket(fd);
|
||||
mSocketIS = mSocket.getInputStream();
|
||||
mSocketOS = mSocket.getOutputStream();
|
||||
}
|
||||
@@ -416,9 +416,9 @@ public final class BluetoothSocket implements Closeable {
|
||||
if(mSocketState != SocketState.INIT) return EBADFD;
|
||||
if(mPfd == null) return -1;
|
||||
FileDescriptor fd = mPfd.getFileDescriptor();
|
||||
if (DBG) Log.d(TAG, "bindListen(), new LocalSocket ");
|
||||
mSocket = new LocalSocket(fd);
|
||||
if (DBG) Log.d(TAG, "bindListen(), new LocalSocket.getInputStream() ");
|
||||
if (DBG) Log.d(TAG, "bindListen(), Create LocalSocket");
|
||||
mSocket = LocalSocket.createConnectedLocalSocket(fd);
|
||||
if (DBG) Log.d(TAG, "bindListen(), new LocalSocket.getInputStream()");
|
||||
mSocketIS = mSocket.getInputStream();
|
||||
mSocketOS = mSocket.getOutputStream();
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ public class LocalServerSocket {
|
||||
|
||||
impl.accept(acceptedImpl);
|
||||
|
||||
return LocalSocket.createLocalSocketForAccept(acceptedImpl, LocalSocket.SOCKET_UNKNOWN);
|
||||
return LocalSocket.createLocalSocketForAccept(acceptedImpl);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -31,6 +31,7 @@ import java.net.SocketOptions;
|
||||
public class LocalSocket implements Closeable {
|
||||
|
||||
private final LocalSocketImpl impl;
|
||||
/** false if impl.create() needs to be called */
|
||||
private volatile boolean implCreated;
|
||||
private LocalSocketAddress localAddress;
|
||||
private boolean isBound;
|
||||
@@ -61,19 +62,6 @@ public class LocalSocket implements Closeable {
|
||||
*/
|
||||
public LocalSocket(int 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) {
|
||||
@@ -83,10 +71,28 @@ public class LocalSocket implements Closeable {
|
||||
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()
|
||||
*/
|
||||
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);
|
||||
socket.isConnected = true;
|
||||
socket.isBound = true;
|
||||
|
||||
@@ -218,7 +218,7 @@ class LocalSocketImpl
|
||||
*
|
||||
* @param fd non-null; bound file descriptor
|
||||
*/
|
||||
/*package*/ LocalSocketImpl(FileDescriptor fd) throws IOException
|
||||
/*package*/ LocalSocketImpl(FileDescriptor fd)
|
||||
{
|
||||
this.fd = fd;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user