use of android.net.LocalSocketAddress in project android_frameworks_base by ParanoidAndroid.
the class LocalSocketTest method testBasic.
@SmallTest
public void testBasic() throws Exception {
LocalServerSocket ss;
LocalSocket ls;
LocalSocket ls1;
ss = new LocalServerSocket("android.net.LocalSocketTest");
ls = new LocalSocket();
ls.connect(new LocalSocketAddress("android.net.LocalSocketTest"));
ls1 = ss.accept();
// Test trivial read and write
ls.getOutputStream().write(42);
assertEquals(42, ls1.getInputStream().read());
// Test getting credentials
Credentials c = ls1.getPeerCredentials();
MoreAsserts.assertNotEqual(0, c.getPid());
// Test sending and receiving file descriptors
ls.setFileDescriptorsForSend(new FileDescriptor[] { FileDescriptor.in });
ls.getOutputStream().write(42);
assertEquals(42, ls1.getInputStream().read());
FileDescriptor[] out = ls1.getAncillaryFileDescriptors();
assertEquals(1, out.length);
// Test multible byte write and available()
ls1.getOutputStream().write(new byte[] { 0, 1, 2, 3, 4, 5 }, 1, 5);
assertEquals(1, ls.getInputStream().read());
assertEquals(4, ls.getInputStream().available());
byte[] buffer = new byte[16];
int countRead;
countRead = ls.getInputStream().read(buffer, 1, 15);
assertEquals(4, countRead);
assertEquals(2, buffer[1]);
assertEquals(3, buffer[2]);
assertEquals(4, buffer[3]);
assertEquals(5, buffer[4]);
// Try various array-out-of-bound cases
try {
ls.getInputStream().read(buffer, 1, 16);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getOutputStream().write(buffer, 1, 16);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getOutputStream().write(buffer, -1, 15);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getOutputStream().write(buffer, 0, -1);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getInputStream().read(buffer, -1, 15);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getInputStream().read(buffer, 0, -1);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
// Try read of length 0
ls.getOutputStream().write(42);
countRead = ls1.getInputStream().read(buffer, 0, 0);
assertEquals(0, countRead);
assertEquals(42, ls1.getInputStream().read());
ss.close();
ls.close();
try {
ls.getOutputStream().write(42);
fail("expected exception");
} catch (IOException ex) {
// Expected
}
try {
ls.getInputStream().read();
fail("expected exception");
} catch (IOException ex) {
// Expected
}
try {
ls1.getOutputStream().write(42);
fail("expected exception");
} catch (IOException ex) {
// Expected
}
// Try read on socket whose peer has closed
assertEquals(-1, ls1.getInputStream().read());
ls1.close();
}
use of android.net.LocalSocketAddress in project android_frameworks_base by ParanoidAndroid.
the class NativeDaemonConnector method listenToSocket.
private void listenToSocket() throws IOException {
LocalSocket socket = null;
try {
socket = new LocalSocket();
LocalSocketAddress address = new LocalSocketAddress(mSocket, LocalSocketAddress.Namespace.RESERVED);
socket.connect(address);
InputStream inputStream = socket.getInputStream();
synchronized (mDaemonLock) {
mOutputStream = socket.getOutputStream();
}
mCallbacks.onDaemonConnected();
byte[] buffer = new byte[BUFFER_SIZE];
int start = 0;
while (true) {
int count = inputStream.read(buffer, start, BUFFER_SIZE - start);
if (count < 0) {
loge("got " + count + " reading with start = " + start);
break;
}
// Add our starting point to the count and reset the start.
count += start;
start = 0;
for (int i = 0; i < count; i++) {
if (buffer[i] == 0) {
final String rawEvent = new String(buffer, start, i - start, Charsets.UTF_8);
log("RCV <- {" + rawEvent + "}");
try {
final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent(rawEvent);
if (event.isClassUnsolicited()) {
// TODO: migrate to sending NativeDaemonEvent instances
mCallbackHandler.sendMessage(mCallbackHandler.obtainMessage(event.getCode(), event.getRawEvent()));
} else {
mResponseQueue.add(event.getCmdNumber(), event);
}
} catch (IllegalArgumentException e) {
log("Problem parsing message: " + rawEvent + " - " + e);
}
start = i + 1;
}
}
if (start == 0) {
final String rawEvent = new String(buffer, start, count, Charsets.UTF_8);
log("RCV incomplete <- {" + rawEvent + "}");
}
// buffer and read again.
if (start != count) {
final int remaining = BUFFER_SIZE - start;
System.arraycopy(buffer, start, buffer, 0, remaining);
start = remaining;
} else {
start = 0;
}
}
} catch (IOException ex) {
loge("Communications error: " + ex);
throw ex;
} finally {
synchronized (mDaemonLock) {
if (mOutputStream != null) {
try {
loge("closing stream for " + mSocket);
mOutputStream.close();
} catch (IOException e) {
loge("Failed closing output stream: " + e);
}
mOutputStream = null;
}
}
try {
if (socket != null) {
socket.close();
}
} catch (IOException ex) {
loge("Failed closing socket: " + ex);
}
}
}
use of android.net.LocalSocketAddress in project android_frameworks_base by ParanoidAndroid.
the class Installer method connect.
private boolean connect() {
if (mSocket != null) {
return true;
}
Slog.i(TAG, "connecting...");
try {
mSocket = new LocalSocket();
LocalSocketAddress address = new LocalSocketAddress("installd", LocalSocketAddress.Namespace.RESERVED);
mSocket.connect(address);
mIn = mSocket.getInputStream();
mOut = mSocket.getOutputStream();
} catch (IOException ex) {
disconnect();
return false;
}
return true;
}
use of android.net.LocalSocketAddress in project platform_frameworks_base by android.
the class LocalSocketTest method testBasic.
@SmallTest
public void testBasic() throws Exception {
LocalServerSocket ss;
LocalSocket ls;
LocalSocket ls1;
ss = new LocalServerSocket("android.net.LocalSocketTest");
ls = new LocalSocket();
ls.connect(new LocalSocketAddress("android.net.LocalSocketTest"));
ls1 = ss.accept();
// Test trivial read and write
ls.getOutputStream().write(42);
assertEquals(42, ls1.getInputStream().read());
// Test getting credentials
Credentials c = ls1.getPeerCredentials();
MoreAsserts.assertNotEqual(0, c.getPid());
// Test sending and receiving file descriptors
ls.setFileDescriptorsForSend(new FileDescriptor[] { FileDescriptor.in });
ls.getOutputStream().write(42);
assertEquals(42, ls1.getInputStream().read());
FileDescriptor[] out = ls1.getAncillaryFileDescriptors();
assertEquals(1, out.length);
// Test multible byte write and available()
ls1.getOutputStream().write(new byte[] { 0, 1, 2, 3, 4, 5 }, 1, 5);
assertEquals(1, ls.getInputStream().read());
assertEquals(4, ls.getInputStream().available());
byte[] buffer = new byte[16];
int countRead;
countRead = ls.getInputStream().read(buffer, 1, 15);
assertEquals(4, countRead);
assertEquals(2, buffer[1]);
assertEquals(3, buffer[2]);
assertEquals(4, buffer[3]);
assertEquals(5, buffer[4]);
// Try various array-out-of-bound cases
try {
ls.getInputStream().read(buffer, 1, 16);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getOutputStream().write(buffer, 1, 16);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getOutputStream().write(buffer, -1, 15);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getOutputStream().write(buffer, 0, -1);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getInputStream().read(buffer, -1, 15);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
try {
ls.getInputStream().read(buffer, 0, -1);
fail("expected exception");
} catch (ArrayIndexOutOfBoundsException ex) {
// excpected
}
// Try read of length 0
ls.getOutputStream().write(42);
countRead = ls1.getInputStream().read(buffer, 0, 0);
assertEquals(0, countRead);
assertEquals(42, ls1.getInputStream().read());
ss.close();
ls.close();
try {
ls.getOutputStream().write(42);
fail("expected exception");
} catch (IOException ex) {
// Expected
}
try {
ls.getInputStream().read();
fail("expected exception");
} catch (IOException ex) {
// Expected
}
try {
ls1.getOutputStream().write(42);
fail("expected exception");
} catch (IOException ex) {
// Expected
}
// Try read on socket whose peer has closed
assertEquals(-1, ls1.getInputStream().read());
ls1.close();
}
use of android.net.LocalSocketAddress in project platform_frameworks_base by android.
the class NetworkTest method testBindSocketOfLocalSocketThrows.
@SmallTest
public void testBindSocketOfLocalSocketThrows() throws Exception {
final LocalSocket mLocalClient = new LocalSocket();
mLocalClient.bind(new LocalSocketAddress("testClient"));
assertTrue(mLocalClient.getFileDescriptor().valid());
try {
mNetwork.bindSocket(mLocalClient.getFileDescriptor());
fail("SocketException not thrown");
} catch (SocketException expected) {
}
final LocalServerSocket mLocalServer = new LocalServerSocket("testServer");
mLocalClient.connect(mLocalServer.getLocalSocketAddress());
assertTrue(mLocalClient.isConnected());
try {
mNetwork.bindSocket(mLocalClient.getFileDescriptor());
fail("SocketException not thrown");
} catch (SocketException expected) {
}
}
Aggregations