From 20b79e702db4cb811c67a1d9d199c0a462927fc5 Mon Sep 17 00:00:00 2001
From: Kristopher Wuollett <klw@google.com>
Date: Wed, 3 Feb 2016 21:38:44 -0500
Subject: [PATCH] Updated user agent to be a host-level setting

---
 examples/objective-c/helloworld/main.m           |  2 +-
 src/objective-c/GRPCClient/GRPCCall+ChannelArg.h |  7 +++----
 src/objective-c/GRPCClient/GRPCCall+ChannelArg.m | 15 ++++++---------
 src/objective-c/GRPCClient/private/GRPCHost.h    |  1 +
 src/objective-c/GRPCClient/private/GRPCHost.m    |  5 ++---
 5 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/examples/objective-c/helloworld/main.m b/examples/objective-c/helloworld/main.m
index b67380812b..755dce33df 100644
--- a/examples/objective-c/helloworld/main.m
+++ b/examples/objective-c/helloworld/main.m
@@ -43,7 +43,7 @@ static NSString * const kHostAddress = @"localhost:50051";
 int main(int argc, char * argv[]) {
   @autoreleasepool {
     [GRPCCall useInsecureConnectionsForHost:kHostAddress];
-    [GRPCCall setUserAgentPrefix:@"HelloWorld/1.0"];
+    [GRPCCall setUserAgentPrefix:@"HelloWorld/1.0" forHost:kHostAddress];
 
     HLWGreeter *client = [[HLWGreeter alloc] initWithHost:kHostAddress];
 
diff --git a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h
index ec1557df7f..bd6b064f16 100644
--- a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h
+++ b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h
@@ -38,10 +38,9 @@
 @interface GRPCCall (ChannelArg)
 
 /**
- * Use the provided @c userAgentPrefix at the beginning of the HTTP User Agent string for all calls.
+ * Use the provided @c userAgentPrefix at the beginning of the HTTP User Agent string for all calls
+ * to the specified @c host.
  */
-+ (void)setUserAgentPrefix:(NSString *)userAgentPrefix;
-
-+ (NSString *)userAgentPrefix;
++ (void)setUserAgentPrefix:(NSString *)userAgentPrefix forHost:(NSString *)host;
 
 @end
diff --git a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.m b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.m
index 32244c3d31..f2821f6abc 100644
--- a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.m
+++ b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.m
@@ -39,16 +39,13 @@
 
 static NSString *_userAgentPrefix;
 
-+ (void)setUserAgentPrefix:(NSString *)userAgentPrefix {
-  @synchronized(self) {
-    _userAgentPrefix = userAgentPrefix;
-  }
-}
-
-+ (NSString *)userAgentPrefix {
-  @synchronized(self) {
-    return _userAgentPrefix;
++ (void)setUserAgentPrefix:(NSString *)userAgentPrefix forHost:(NSString *)host {
+  if (!host) {
+    [NSException raise:NSInvalidArgumentException
+                format:@"host and userAgentPrefix must be provided."];
   }
+  GRPCHost *hostConfig = [GRPCHost hostWithAddress:host];
+  hostConfig.userAgentPrefix = userAgentPrefix;
 }
 
 @end
diff --git a/src/objective-c/GRPCClient/private/GRPCHost.h b/src/objective-c/GRPCClient/private/GRPCHost.h
index 6b4f98746d..69a115e88c 100644
--- a/src/objective-c/GRPCClient/private/GRPCHost.h
+++ b/src/objective-c/GRPCClient/private/GRPCHost.h
@@ -39,6 +39,7 @@ struct grpc_call;
 @interface GRPCHost : NSObject
 
 @property(nonatomic, readonly) NSString *address;
+@property(nonatomic, copy) NSString *userAgentPrefix;
 
 /** The following properties should only be modified for testing: */
 
diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m
index 8fb9d91722..5b1ca16e12 100644
--- a/src/objective-c/GRPCClient/private/GRPCHost.m
+++ b/src/objective-c/GRPCClient/private/GRPCHost.m
@@ -109,9 +109,8 @@
 
   if (!_channel) {
     NSMutableDictionary *args = [NSMutableDictionary dictionary];
-    NSString *userAgentPrefix = [[GRPCCall userAgentPrefix] copy];
-    if (userAgentPrefix) {
-      args[@GRPC_ARG_PRIMARY_USER_AGENT_STRING] = userAgentPrefix;
+    if (_userAgentPrefix) {
+      args[@GRPC_ARG_PRIMARY_USER_AGENT_STRING] = _userAgentPrefix;
     }
 
     if (_secure) {
-- 
GitLab