From c65afe9ec02d90e9334ae86c080f3546919e6bcd Mon Sep 17 00:00:00 2001 From: Ivan Date: Tue, 28 May 2019 13:31:35 +0300 Subject: [PATCH] Add userAgent for ChannelOptions (#155) Add userAgent for ChannelOptions --- CHANGELOG.md | 5 +++++ lib/src/client/connection.dart | 9 +++++---- lib/src/client/options.dart | 15 +++++++++------ pubspec.yaml | 2 +- test/src/client_utils.dart | 1 + test/src/server_utils.dart | 3 ++- 6 files changed, 23 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ee33e8..1552049 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.0.3 + +* Add `userAgent` argument for `ChannelOptions()` +* Add `userAgent` as an optional named argument for `clientConnection.createCallHeaders()` + ## 1.0.2 * Fix bug where the server would crash if the client would break the connection. diff --git a/lib/src/client/connection.dart b/lib/src/client/connection.dart index de002ac..371b3c0 100644 --- a/lib/src/client/connection.dart +++ b/lib/src/client/connection.dart @@ -54,7 +54,6 @@ class ClientConnection { static final _teTrailers = new Header.ascii('te', 'trailers'); static final _grpcAcceptEncoding = new Header.ascii('grpc-accept-encoding', 'identity'); - static final _userAgent = new Header.ascii('user-agent', 'dart-grpc/0.2.0'); final String host; final int port; @@ -75,7 +74,8 @@ class ClientConnection { ConnectionState get state => _state; static List
createCallHeaders(bool useTls, String authority, - String path, Duration timeout, Map metadata) { + String path, Duration timeout, Map metadata, + {String userAgent}) { final headers = [ _methodPost, useTls ? _schemeHttps : _schemeHttp, @@ -89,7 +89,7 @@ class ClientConnection { _contentTypeGrpc, _teTrailers, _grpcAcceptEncoding, - _userAgent, + new Header.ascii('user-agent', userAgent ?? defaultUserAgent), ]); metadata?.forEach((key, value) { headers.add(new Header(ascii.encode(key), utf8.encode(value))); @@ -163,7 +163,8 @@ class ClientConnection { ClientTransportStream makeRequest( String path, Duration timeout, Map metadata) { final headers = createCallHeaders( - options.credentials.isSecure, authority, path, timeout, metadata); + options.credentials.isSecure, authority, path, timeout, metadata, + userAgent: options.userAgent); return _transport.makeRequest(headers); } diff --git a/lib/src/client/options.dart b/lib/src/client/options.dart index a0d2c1e..90e1d94 100644 --- a/lib/src/client/options.dart +++ b/lib/src/client/options.dart @@ -21,6 +21,7 @@ import 'dart:math'; import '../shared/security.dart'; const defaultIdleTimeout = const Duration(minutes: 5); +const defaultUserAgent = 'dart-grpc/1.0.3'; typedef Duration BackoffStrategy(Duration lastBackoff); @@ -95,14 +96,16 @@ class ChannelOptions { final ChannelCredentials credentials; final Duration idleTimeout; final BackoffStrategy backoffStrategy; + final String userAgent; - const ChannelOptions( - {ChannelCredentials credentials, - Duration idleTimeout, - BackoffStrategy backoffStrategy = - defaultBackoffStrategy}) // Remove when dart-lang/sdk#31066 is fixed. - : this.credentials = credentials ?? const ChannelCredentials.secure(), + const ChannelOptions({ + ChannelCredentials credentials, + Duration idleTimeout, + String userAgent, + BackoffStrategy backoffStrategy, + }) : this.credentials = credentials ?? const ChannelCredentials.secure(), this.idleTimeout = idleTimeout ?? defaultIdleTimeout, + this.userAgent = userAgent ?? defaultUserAgent, this.backoffStrategy = backoffStrategy ?? defaultBackoffStrategy; } diff --git a/pubspec.yaml b/pubspec.yaml index 92e7bd3..341ab8f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: grpc description: Dart implementation of gRPC, a high performance, open-source universal RPC framework. -version: 1.0.2 +version: 1.0.3 author: Dart Team homepage: https://github.com/dart-lang/grpc-dart diff --git a/test/src/client_utils.dart b/test/src/client_utils.dart index d79234e..e97a107 100644 --- a/test/src/client_utils.dart +++ b/test/src/client_utils.dart @@ -48,6 +48,7 @@ Duration testBackoff(Duration lastBackoff) => const Duration(milliseconds: 1); class FakeChannelOptions implements ChannelOptions { ChannelCredentials credentials = const ChannelCredentials.secure(); Duration idleTimeout = const Duration(seconds: 1); + String userAgent = 'dart-grpc/1.0.0 test'; BackoffStrategy backoffStrategy = testBackoff; } diff --git a/test/src/server_utils.dart b/test/src/server_utils.dart index b8940f5..5a127bb 100644 --- a/test/src/server_utils.dart +++ b/test/src/server_utils.dart @@ -171,7 +171,8 @@ class ServerHarness { Map metadata, Duration timeout}) { final headers = ClientConnection.createCallHeaders( - true, authority, path, timeout, metadata); + true, authority, path, timeout, metadata, + userAgent: 'dart-grpc/1.0.0 test'); toServer.add(new HeadersStreamMessage(headers)); }