Changes from 12 commits
a021cb7
ee1d14c
a0fc978
724cab7
c163f1c
095259b
ff5e64c
7a283dd
f1f3ee5
e92f90c
5313582
1c9806e
6630c75
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -22,7 +22,6 @@ | ||
import android.content.ComponentName; | ||
import android.content.Context; | ||
import android.content.Intent; | ||
import io.grpc.ExperimentalApi; | ||
import java.net.SocketAddress; | ||
/** | ||
@@ -41,8 +40,7 @@ | ||
* fields, namely, an action of {@link ApiConstants#ACTION_BIND}, an empty category set and null | ||
* type and data URI. | ||
*/ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public class AndroidComponentAddress extends SocketAddress { // NOTE: Only temporarily non-final. | ||
public final class AndroidComponentAddress extends SocketAddress { | ||
private static final long serialVersionUID = 0L; | ||
private final Intent bindIntent; // An "explicit" Intent. In other words, getComponent() != null. | ||
@@ -103,6 +101,10 @@ public static AndroidComponentAddress forComponent(ComponentName component) { | ||
new Intent(ApiConstants.ACTION_BIND).setComponent(component)); | ||
} | ||
/** | ||
* Returns the Authority which is the package name of the target app. | ||
* See {@link android.content.ComponentName}. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. between paragraphs (https://google..io/styleguide/javaguide.html#s7.1.2-javadoc-paragraphs) | ||
*/ | ||
public String getAuthority() { | ||
return getComponent().getPackageName(); | ||
} | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package io.grpc.binder; | ||
ejona86 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page. | ||
import android.os.IBinder; | ||
/** | ||
* Helper class to expose IBinderReceiver methods for legacy internal builders. | ||
*/ | ||
public class BinderInternal { | ||
/** | ||
* Set the receiver's {@link IBinder} using {@link IBinderReceiver#set(IBinder)}. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. | ||
*/ | ||
static void setIBinder(IBinderReceiver receiver, IBinder binder) { | ||
receiver.set(binder); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -23,8 +23,6 @@ | ||
import android.os.IBinder; | ||
import com.google.common.base.Supplier; | ||
import com.google.errorprone.annotations.DoNotCall; | ||
import io.grpc.CompressorRegistry; | ||
import io.grpc.DecompressorRegistry; | ||
import io.grpc.ExperimentalApi; | ||
import io.grpc.Server; | ||
import io.grpc.ServerBuilder; | ||
@@ -48,7 +46,6 @@ | ||
/** | ||
* Builder for a server that services requests from an Android Service. | ||
*/ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public final class BinderServerBuilder | ||
cbianchi-7 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page.
cbianchi-7 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page. | ||
extends ForwardingServerBuilder<BinderServerBuilder> { | ||
cbianchi-7 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page.
cbianchi-7 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page. | ||
@@ -95,15 +92,10 @@ private BinderServerBuilder( | ||
streamTracerFactories, | ||
securityPolicy, | ||
inboundParcelablePolicy); | ||
binderReceiver.set(server.getHostBinder()); | ||
BinderInternal.setIBinder(binderReceiver, server.getHostBinder()); | ||
return server; | ||
}); | ||
// Disable compression by default, since there's little benefit when all communication is | ||
// on-device, and it means sending supported-encoding headers with every call. | ||
decompressorRegistry(DecompressorRegistry.emptyInstance()); | ||
compressorRegistry(CompressorRegistry.newEmptyInstance()); | ||
// Disable stats and tracing by default. | ||
serverImplBuilder.setStatsEnabled(false); | ||
cbianchi-7 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page. | ||
serverImplBuilder.setTracingEnabled(false); | ||
@@ -117,12 +109,14 @@ protected ServerBuilder<?> delegate() { | ||
} | ||
/** Enable stats collection using census. */ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public BinderServerBuilder enableStats() { | ||
serverImplBuilder.setStatsEnabled(true); | ||
return this; | ||
} | ||
/** Enable tracing using census. */ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public BinderServerBuilder enableTracing() { | ||
serverImplBuilder.setTracingEnabled(true); | ||
return this; | ||
@@ -157,12 +151,16 @@ public BinderServerBuilder securityPolicy(ServerSecurityPolicy securityPolicy) { | ||
} | ||
/** Sets the policy for inbound parcelable objects. */ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public BinderServerBuilder inboundParcelablePolicy( | ||
InboundParcelablePolicy inboundParcelablePolicy) { | ||
this.inboundParcelablePolicy = checkNotNull(inboundParcelablePolicy, "inboundParcelablePolicy"); | ||
return this; | ||
} | ||
/** | ||
* Always fails. TLS is not supported in BinderServer. | ||
*/ | ||
@Override | ||
public BinderServerBuilder useTransportSecurity(File certChain, File privateKey) { | ||
throw new UnsupportedOperationException("TLS not supported in BinderServer"); | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -17,24 +17,22 @@ | ||
package io.grpc.binder; | ||
import android.os.IBinder; | ||
import io.grpc.ExperimentalApi; | ||
import javax.annotation.Nullable; | ||
/** A container for at most one instance of {@link IBinder}, useful as an "out parameter". */ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public final class IBinderReceiver { | ||
cbianchi-7 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page.
cbianchi-7 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page. | ||
@Nullable private IBinder value; | ||
@Nullable private volatile IBinder value; | ||
/** Constructs a new, initially empty, container. */ | ||
public IBinderReceiver() {} | ||
/** Returns the contents of this container or null if it is empty. */ | ||
@Nullable | ||
public synchronized IBinder get() { | ||
public IBinder get() { | ||
return value; | ||
} | ||
public synchronized void set(IBinder value) { | ||
protected void set(IBinder value) { | ||
this.value = value; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -42,18 +42,21 @@ | ||
/** Static factory methods for creating standard security policies. */ | ||
@CheckReturnValue | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public final class SecurityPolicies { | ||
private static final int MY_UID = Process.myUid(); | ||
private static final int SHA_256_BYTES_LENGTH = 32; | ||
private SecurityPolicies() {} | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public static ServerSecurityPolicy serverInternalOnly() { | ||
return new ServerSecurityPolicy(); | ||
} | ||
cbianchi-7 marked this conversation as resolved. Show resolved Hide resolvedUh oh!There was an error while loading. Please reload this page. | ||
/** | ||
* Creates a default {@link SecurityPolicy} that checks authorization based on UID. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "... that allows access only to callers with the same UID as the current process." | ||
*/ | ||
public static SecurityPolicy internalOnly() { | ||
return new SecurityPolicy() { | ||
@Override | ||
@@ -66,6 +69,7 @@ public Status checkAuthorization(int uid) { | ||
}; | ||
} | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public static SecurityPolicy permissionDenied(String description) { | ||
Status denied = Status.PERMISSION_DENIED.withDescription(description); | ||
return new SecurityPolicy() { | ||
@@ -84,6 +88,7 @@ public Status checkAuthorization(int uid) { | ||
* @param requiredSignature the allowed signature of the allowed package. | ||
* @throws NullPointerException if any of the inputs are {@code null}. | ||
*/ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public static SecurityPolicy hasSignature( | ||
PackageManager packageManager, String packageName, Signature requiredSignature) { | ||
return oneOfSignatures( | ||
@@ -99,6 +104,7 @@ public static SecurityPolicy hasSignature( | ||
* @throws NullPointerException if any of the inputs are {@code null}. | ||
* @throws IllegalArgumentException if {@code requiredSignatureSha256Hash} is not of length 32. | ||
*/ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public static SecurityPolicy hasSignatureSha256Hash( | ||
PackageManager packageManager, String packageName, byte[] requiredSignatureSha256Hash) { | ||
return oneOfSignatureSha256Hash( | ||
@@ -114,6 +120,7 @@ public static SecurityPolicy hasSignatureSha256Hash( | ||
* @throws NullPointerException if any of the inputs are {@code null}. | ||
* @throws IllegalArgumentException if {@code requiredSignatures} is empty. | ||
*/ | ||
@ExperimentalApi("https://.com/grpc/grpc-java/issues/8022") | ||
public static SecurityPolicy oneOfSignatures( | ||
PackageManager packageManager, | ||
String packageName, | ||
Uh oh!
There was an error while loading. Please reload this page.