From dbccfac26f4e5de134045e5528d3c4b628dea16d Mon Sep 17 00:00:00 2001 From: Daichi Hirono Date: Thu, 19 Nov 2015 16:58:57 +0900 Subject: [PATCH] Add capability to receive FD with NativeDaemonConnector. BUG=25755372 Change-Id: I2888219b77cf04f4bf749d5518ff62ba16258f2d --- .../com/android/server/NativeDaemonConnector.java | 6 ++++-- .../java/com/android/server/NativeDaemonEvent.java | 13 ++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/NativeDaemonConnector.java b/services/core/java/com/android/server/NativeDaemonConnector.java index e6b6074abf..d6dbad87b0 100644 --- a/services/core/java/com/android/server/NativeDaemonConnector.java +++ b/services/core/java/com/android/server/NativeDaemonConnector.java @@ -177,6 +177,7 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo mCallbacks.onDaemonConnected(); + FileDescriptor[] fdList = null; byte[] buffer = new byte[BUFFER_SIZE]; int start = 0; @@ -186,6 +187,7 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo loge("got " + count + " reading with start = " + start); break; } + fdList = socket.getAncillaryFileDescriptors(); // Add our starting point to the count and reset the start. count += start; @@ -200,8 +202,8 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo boolean releaseWl = false; try { - final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent( - rawEvent); + final NativeDaemonEvent event = + NativeDaemonEvent.parseRawEvent(rawEvent, fdList); log("RCV <- {" + event + "}"); diff --git a/services/core/java/com/android/server/NativeDaemonEvent.java b/services/core/java/com/android/server/NativeDaemonEvent.java index 4e61c0b09d..e6feda3dad 100644 --- a/services/core/java/com/android/server/NativeDaemonEvent.java +++ b/services/core/java/com/android/server/NativeDaemonEvent.java @@ -19,6 +19,7 @@ package com.android.server; import android.util.Slog; import com.google.android.collect.Lists; +import java.io.FileDescriptor; import java.util.ArrayList; /** @@ -35,15 +36,17 @@ public class NativeDaemonEvent { private final String mRawEvent; private final String mLogMessage; private String[] mParsed; + private FileDescriptor[] mFdList; private NativeDaemonEvent(int cmdNumber, int code, String message, - String rawEvent, String logMessage) { + String rawEvent, String logMessage, FileDescriptor[] fdList) { mCmdNumber = cmdNumber; mCode = code; mMessage = message; mRawEvent = rawEvent; mLogMessage = logMessage; mParsed = null; + mFdList = fdList; } static public final String SENSITIVE_MARKER = "{{sensitive}}"; @@ -60,6 +63,10 @@ public class NativeDaemonEvent { return mMessage; } + public FileDescriptor[] getFileDescriptors() { + return mFdList; + } + @Deprecated public String getRawEvent() { return mRawEvent; @@ -127,7 +134,7 @@ public class NativeDaemonEvent { * @throws IllegalArgumentException when line doesn't match format expected * from native side. */ - public static NativeDaemonEvent parseRawEvent(String rawEvent) { + public static NativeDaemonEvent parseRawEvent(String rawEvent, FileDescriptor[] fdList) { final String[] parsed = rawEvent.split(" "); if (parsed.length < 2) { throw new IllegalArgumentException("Insufficient arguments"); @@ -164,7 +171,7 @@ public class NativeDaemonEvent { final String message = rawEvent.substring(skiplength); - return new NativeDaemonEvent(cmdNumber, code, message, rawEvent, logMessage); + return new NativeDaemonEvent(cmdNumber, code, message, rawEvent, logMessage, fdList); } /**