Skip to content

Commit ce4c8e5

Browse files
authored
Set StreamedResponse.reasonPhrase and StreamedResponse.request (#784)
1 parent 1656202 commit ce4c8e5

File tree

11 files changed

+138
-1
lines changed

11 files changed

+138
-1
lines changed

pkgs/cronet_http/.gitattributes

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
# pigeon generated code
22
lib/src/messages.dart linguist-generated
3-
android/src/main/java/io/flutter/plugins/cronet_http/Messages.java
3+
android/src/main/java/io/flutter/plugins/cronet_http/Messages.java linguist-generated
4+

pkgs/cronet_http/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.0.2
2+
3+
* Set `StreamedResponse.reasonPhrase` and `StreamedResponse.request`.
4+
15
## 0.0.1
26

37
* Initial development release.

pkgs/cronet_http/android/src/main/java/io/flutter/plugins/cronet_http/Messages.java

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkgs/cronet_http/android/src/main/kotlin/io/flutter/plugins/cronet_http/CronetHttpPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ class CronetHttpPlugin : FlutterPlugin, Messages.HttpApi {
115115
.setResponseStarted(
116116
Messages.ResponseStarted.Builder()
117117
.setStatusCode(info.getHttpStatusCode().toLong())
118+
.setStatusText(info.getHttpStatusText())
118119
.setHeaders(info.getAllHeaders())
119120
.setIsRedirect(true)
120121
.build()
@@ -148,6 +149,7 @@ class CronetHttpPlugin : FlutterPlugin, Messages.HttpApi {
148149
.setResponseStarted(
149150
Messages.ResponseStarted.Builder()
150151
.setStatusCode(info.getHttpStatusCode().toLong())
152+
.setStatusText(info.getHttpStatusText())
151153
.setHeaders(info.getAllHeaders())
152154
.setIsRedirect(false)
153155
.build()

pkgs/cronet_http/lib/cronet_client.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ class CronetClient extends BaseClient {
208208

209209
return StreamedResponse(responseDataController.stream, result.statusCode,
210210
contentLength: responseHeaders['content-lenght'] as int?,
211+
reasonPhrase: result.statusText,
212+
request: request,
211213
isRedirect: result.isRedirect,
212214
headers: responseHeaders);
213215
}

pkgs/cronet_http/lib/src/messages.dart

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkgs/cronet_http/pigeons/messages.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ enum CacheMode {
2424
class ResponseStarted {
2525
Map<String?, List<String?>?> headers;
2626
int statusCode;
27+
String statusText;
2728
bool isRedirect;
2829
}
2930

pkgs/cupertino_http/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
* Add the ability to set network service type.
44
* Add the ability to control multipath TCP connections.
5+
* Set `StreamedResponse.reasonPhrase` and `StreamedResponse.request`.
6+
Fixes
7+
[cupertino_http: BaseResponse.request is null](https://github.com/dart-lang/http/issues/782).
58

69
## 0.0.4
710

pkgs/cupertino_http/lib/cupertino_client.dart

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
/// [Foundation URL Loading System](https://developer.apple.com/documentation/foundation/url_loading_system).
77
88
import 'dart:async';
9+
import 'dart:io';
910
import 'dart:typed_data';
1011

1112
import 'package:http/http.dart';
@@ -55,6 +56,93 @@ class CupertinoClient extends BaseClient {
5556

5657
CupertinoClient._(this._urlSession);
5758

59+
String? _findReasonPhrase(int statusCode) {
60+
switch (statusCode) {
61+
case HttpStatus.continue_:
62+
return 'Continue';
63+
case HttpStatus.switchingProtocols:
64+
return 'Switching Protocols';
65+
case HttpStatus.ok:
66+
return 'OK';
67+
case HttpStatus.created:
68+
return 'Created';
69+
case HttpStatus.accepted:
70+
return 'Accepted';
71+
case HttpStatus.nonAuthoritativeInformation:
72+
return 'Non-Authoritative Information';
73+
case HttpStatus.noContent:
74+
return 'No Content';
75+
case HttpStatus.resetContent:
76+
return 'Reset Content';
77+
case HttpStatus.partialContent:
78+
return 'Partial Content';
79+
case HttpStatus.multipleChoices:
80+
return 'Multiple Choices';
81+
case HttpStatus.movedPermanently:
82+
return 'Moved Permanently';
83+
case HttpStatus.found:
84+
return 'Found';
85+
case HttpStatus.seeOther:
86+
return 'See Other';
87+
case HttpStatus.notModified:
88+
return 'Not Modified';
89+
case HttpStatus.useProxy:
90+
return 'Use Proxy';
91+
case HttpStatus.temporaryRedirect:
92+
return 'Temporary Redirect';
93+
case HttpStatus.badRequest:
94+
return 'Bad Request';
95+
case HttpStatus.unauthorized:
96+
return 'Unauthorized';
97+
case HttpStatus.paymentRequired:
98+
return 'Payment Required';
99+
case HttpStatus.forbidden:
100+
return 'Forbidden';
101+
case HttpStatus.notFound:
102+
return 'Not Found';
103+
case HttpStatus.methodNotAllowed:
104+
return 'Method Not Allowed';
105+
case HttpStatus.notAcceptable:
106+
return 'Not Acceptable';
107+
case HttpStatus.proxyAuthenticationRequired:
108+
return 'Proxy Authentication Required';
109+
case HttpStatus.requestTimeout:
110+
return 'Request Time-out';
111+
case HttpStatus.conflict:
112+
return 'Conflict';
113+
case HttpStatus.gone:
114+
return 'Gone';
115+
case HttpStatus.lengthRequired:
116+
return 'Length Required';
117+
case HttpStatus.preconditionFailed:
118+
return 'Precondition Failed';
119+
case HttpStatus.requestEntityTooLarge:
120+
return 'Request Entity Too Large';
121+
case HttpStatus.requestUriTooLong:
122+
return 'Request-URI Too Long';
123+
case HttpStatus.unsupportedMediaType:
124+
return 'Unsupported Media Type';
125+
case HttpStatus.requestedRangeNotSatisfiable:
126+
return 'Requested range not satisfiable';
127+
case HttpStatus.expectationFailed:
128+
return 'Expectation Failed';
129+
case HttpStatus.internalServerError:
130+
return 'Internal Server Error';
131+
case HttpStatus.notImplemented:
132+
return 'Not Implemented';
133+
case HttpStatus.badGateway:
134+
return 'Bad Gateway';
135+
case HttpStatus.serviceUnavailable:
136+
return 'Service Unavailable';
137+
case HttpStatus.gatewayTimeout:
138+
return 'Gateway Time-out';
139+
case HttpStatus.httpVersionNotSupported:
140+
return 'Http Version not supported';
141+
default:
142+
return null;
143+
}
144+
}
145+
58146
static _TaskTracker _tracker(URLSessionTask task) =>
59147
_tasks[task.taskIdentifier]!;
60148

@@ -164,6 +252,8 @@ class CupertinoClient extends BaseClient {
164252
contentLength: response.expectedContentLength == -1
165253
? null
166254
: response.expectedContentLength,
255+
reasonPhrase: _findReasonPhrase(response.statusCode),
256+
request: request,
167257
isRedirect: !request.followRedirects && taskTracker.numRedirects > 0,
168258
headers: response.allHeaderFields
169259
.map((key, value) => MapEntry(key.toLowerCase(), value)),

pkgs/http_client_conformance_tests/lib/src/response_body_streamed_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ void testResponseBodyStreamed(Client client,
5151
});
5252
expect(response.headers['content-type'], 'text/plain');
5353
expect(lastReceived, greaterThanOrEqualTo(1000));
54+
expect(response.isRedirect, isFalse);
55+
expect(response.reasonPhrase, 'OK');
56+
expect(response.request!.method, 'GET');
57+
expect(response.statusCode, 200);
5458
}, skip: canStreamResponseBody ? false : 'does not stream response bodies');
5559
});
5660
}

0 commit comments

Comments
 (0)