Enable and fix lints (#79)
* enable and fix pedantic lints
* run analysis on travis
diff --git a/.travis.yml b/.travis.yml
index 6cb5dca..6db1706 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,6 +14,7 @@
dart_task:
- test
+ - dartanalyzer: --fatal-infos --fatal-warnings .
matrix:
include:
diff --git a/analysis_options.yaml b/analysis_options.yaml
index a705446..e968be9 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,3 +1,4 @@
+include: package:pedantic/analysis_options.yaml
analyzer:
errors:
unused_import: error
diff --git a/lib/http_io.dart b/lib/http_io.dart
index 5b96f19..96ec7f1 100644
--- a/lib/http_io.dart
+++ b/lib/http_io.dart
@@ -49,353 +49,315 @@
part 'src/http_impl.dart';
part 'src/http_overrides.dart';
-/**
- * A server that delivers content, such as web pages, using the HTTP protocol.
- *
- * The HttpServer is a [Stream] that provides [HttpRequest] objects. Each
- * HttpRequest has an associated [HttpResponse] object.
- * The server responds to a request by writing to that HttpResponse object.
- * The following example shows how to bind an HttpServer to an IPv6
- * [InternetAddress] on port 80 (the standard port for HTTP servers)
- * and how to listen for requests.
- * Port 80 is the default HTTP port. However, on most systems accessing
- * this requires super-user privileges. For local testing consider
- * using a non-reserved port (1024 and above).
- *
- * import 'dart:io';
- *
- * main() {
- * HttpServer
- * .bind(InternetAddress.anyIPv6, 80)
- * .then((server) {
- * server.listen((HttpRequest request) {
- * request.response.write('Hello, world!');
- * request.response.close();
- * });
- * });
- * }
- *
- * Incomplete requests, in which all or part of the header is missing, are
- * ignored, and no exceptions or HttpRequest objects are generated for them.
- * Likewise, when writing to an HttpResponse, any [Socket] exceptions are
- * ignored and any future writes are ignored.
- *
- * The HttpRequest exposes the request headers and provides the request body,
- * if it exists, as a Stream of data. If the body is unread, it is drained
- * when the server writes to the HttpResponse or closes it.
- *
- * ## Bind with a secure HTTPS connection
- *
- * Use [bindSecure] to create an HTTPS server.
- *
- * The server presents a certificate to the client. The certificate
- * chain and the private key are set in the [SecurityContext]
- * object that is passed to [bindSecure].
- *
- * import 'dart:io';
- * import "dart:isolate";
- *
- * main() {
- * SecurityContext context = new SecurityContext();
- * var chain =
- * Platform.script.resolve('certificates/server_chain.pem')
- * .toFilePath();
- * var key =
- * Platform.script.resolve('certificates/server_key.pem')
- * .toFilePath();
- * context.useCertificateChain(chain);
- * context.usePrivateKey(key, password: 'dartdart');
- *
- * HttpServer
- * .bindSecure(InternetAddress.anyIPv6,
- * 443,
- * context)
- * .then((server) {
- * server.listen((HttpRequest request) {
- * request.response.write('Hello, world!');
- * request.response.close();
- * });
- * });
- * }
- *
- * The certificates and keys are PEM files, which can be created and
- * managed with the tools in OpenSSL.
- *
- * ## Connect to a server socket
- *
- * You can use the [HttpServer.listenOn] constructor to attach an HTTP server to
- * a [ServerSocket].
- *
- * import 'dart:io';
- *
- * main() {
- * ServerSocket.bind(InternetAddress.anyIPv6, 80)
- * .then((serverSocket) {
- * HttpServer httpserver = new HttpServer.listenOn(serverSocket);
- * serverSocket.listen((Socket socket) {
- * socket.write('Hello, client.');
- * });
- * });
- * }
- *
- * ## Other resources
- *
- * * HttpServer is a Stream. Refer to the [Stream] class for information
- * about the streaming qualities of an HttpServer.
- * Pausing the subscription of the stream, pauses at the OS level.
- *
- * * The [shelf](https://pub.dartlang.org/packages/shelf)
- * package on pub.dartlang.org contains a set of high-level classes that,
- * together with this class, makes it easy to provide content through HTTP
- * servers.
- */
+/// A server that delivers content, such as web pages, using the HTTP protocol.
+///
+/// The HttpServer is a [Stream] that provides [HttpRequest] objects. Each
+/// HttpRequest has an associated [HttpResponse] object.
+/// The server responds to a request by writing to that HttpResponse object.
+/// The following example shows how to bind an HttpServer to an IPv6
+/// [InternetAddress] on port 80 (the standard port for HTTP servers)
+/// and how to listen for requests.
+/// Port 80 is the default HTTP port. However, on most systems accessing
+/// this requires super-user privileges. For local testing consider
+/// using a non-reserved port (1024 and above).
+///
+/// import 'dart:io';
+///
+/// main() {
+/// HttpServer
+/// .bind(InternetAddress.anyIPv6, 80)
+/// .then((server) {
+/// server.listen((HttpRequest request) {
+/// request.response.write('Hello, world!');
+/// request.response.close();
+/// });
+/// });
+/// }
+///
+/// Incomplete requests, in which all or part of the header is missing, are
+/// ignored, and no exceptions or HttpRequest objects are generated for them.
+/// Likewise, when writing to an HttpResponse, any [Socket] exceptions are
+/// ignored and any future writes are ignored.
+///
+/// The HttpRequest exposes the request headers and provides the request body,
+/// if it exists, as a Stream of data. If the body is unread, it is drained
+/// when the server writes to the HttpResponse or closes it.
+///
+/// ## Bind with a secure HTTPS connection
+///
+/// Use [bindSecure] to create an HTTPS server.
+///
+/// The server presents a certificate to the client. The certificate
+/// chain and the private key are set in the [SecurityContext]
+/// object that is passed to [bindSecure].
+///
+/// import 'dart:io';
+/// import "dart:isolate";
+///
+/// main() {
+/// SecurityContext context = new SecurityContext();
+/// var chain =
+/// Platform.script.resolve('certificates/server_chain.pem')
+/// .toFilePath();
+/// var key =
+/// Platform.script.resolve('certificates/server_key.pem')
+/// .toFilePath();
+/// context.useCertificateChain(chain);
+/// context.usePrivateKey(key, password: 'dartdart');
+///
+/// HttpServer
+/// .bindSecure(InternetAddress.anyIPv6,
+/// 443,
+/// context)
+/// .then((server) {
+/// server.listen((HttpRequest request) {
+/// request.response.write('Hello, world!');
+/// request.response.close();
+/// });
+/// });
+/// }
+///
+/// The certificates and keys are PEM files, which can be created and
+/// managed with the tools in OpenSSL.
+///
+/// ## Connect to a server socket
+///
+/// You can use the [HttpServer.listenOn] constructor to attach an HTTP server to
+/// a [ServerSocket].
+///
+/// import 'dart:io';
+///
+/// main() {
+/// ServerSocket.bind(InternetAddress.anyIPv6, 80)
+/// .then((serverSocket) {
+/// HttpServer httpserver = new HttpServer.listenOn(serverSocket);
+/// serverSocket.listen((Socket socket) {
+/// socket.write('Hello, client.');
+/// });
+/// });
+/// }
+///
+/// ## Other resources
+///
+/// * HttpServer is a Stream. Refer to the [Stream] class for information
+/// about the streaming qualities of an HttpServer.
+/// Pausing the subscription of the stream, pauses at the OS level.
+///
+/// * The [shelf](https://pub.dartlang.org/packages/shelf)
+/// package on pub.dartlang.org contains a set of high-level classes that,
+/// together with this class, makes it easy to provide content through HTTP
+/// servers.
abstract class HttpServer implements Stream<HttpRequest> {
- /**
- * Gets and sets the default value of the `Server` header for all responses
- * generated by this [HttpServer].
- *
- * If [serverHeader] is `null`, no `Server` header will be added to each
- * response.
- *
- * The default value is `null`.
- */
+ /// Gets and sets the default value of the `Server` header for all responses
+ /// generated by this [HttpServer].
+ ///
+ /// If [serverHeader] is `null`, no `Server` header will be added to each
+ /// response.
+ ///
+ /// The default value is `null`.
String serverHeader;
- /**
- * Default set of headers added to all response objects.
- *
- * By default the following headers are in this set:
- *
- * Content-Type: text/plain; charset=utf-8
- * X-Frame-Options: SAMEORIGIN
- * X-Content-Type-Options: nosniff
- * X-XSS-Protection: 1; mode=block
- *
- * If the `Server` header is added here and the `serverHeader` is set as
- * well then the value of `serverHeader` takes precedence.
- */
+ /// Default set of headers added to all response objects.
+ ///
+ /// By default the following headers are in this set:
+ ///
+ /// Content-Type: text/plain; charset=utf-8
+ /// X-Frame-Options: SAMEORIGIN
+ /// X-Content-Type-Options: nosniff
+ /// X-XSS-Protection: 1; mode=block
+ ///
+ /// If the `Server` header is added here and the `serverHeader` is set as
+ /// well then the value of `serverHeader` takes precedence.
HttpHeaders get defaultResponseHeaders;
- /**
- * Whether the [HttpServer] should compress the content, if possible.
- *
- * The content can only be compressed when the response is using
- * chunked Transfer-Encoding and the incoming request has `gzip`
- * as an accepted encoding in the Accept-Encoding header.
- *
- * The default value is `false` (compression disabled).
- * To enable, set `autoCompress` to `true`.
- */
+ /// Whether the [HttpServer] should compress the content, if possible.
+ ///
+ /// The content can only be compressed when the response is using
+ /// chunked Transfer-Encoding and the incoming request has `gzip`
+ /// as an accepted encoding in the Accept-Encoding header.
+ ///
+ /// The default value is `false` (compression disabled).
+ /// To enable, set `autoCompress` to `true`.
bool autoCompress;
- /**
- * Gets or sets the timeout used for idle keep-alive connections. If no
- * further request is seen within [idleTimeout] after the previous request was
- * completed, the connection is dropped.
- *
- * Default is 120 seconds.
- *
- * Note that it may take up to `2 * idleTimeout` before a idle connection is
- * aborted.
- *
- * To disable, set [idleTimeout] to `null`.
- */
+ /// Gets or sets the timeout used for idle keep-alive connections. If no
+ /// further request is seen within [idleTimeout] after the previous request was
+ /// completed, the connection is dropped.
+ ///
+ /// Default is 120 seconds.
+ ///
+ /// Note that it may take up to `2 * idleTimeout` before a idle connection is
+ /// aborted.
+ ///
+ /// To disable, set [idleTimeout] to `null`.
Duration idleTimeout;
- /**
- * Starts listening for HTTP requests on the specified [address] and
- * [port].
- *
- * The [address] can either be a [String] or an
- * [InternetAddress]. If [address] is a [String], [bind] will
- * perform a [InternetAddress.lookup] and use the first value in the
- * list. To listen on the loopback adapter, which will allow only
- * incoming connections from the local host, use the value
- * [InternetAddress.loopbackIPv4] or
- * [InternetAddress.loopbackIPv6]. To allow for incoming
- * connection from the network use either one of the values
- * [InternetAddress.anyIPv4] or [InternetAddress.anyIPv6] to
- * bind to all interfaces or the IP address of a specific interface.
- *
- * If an IP version 6 (IPv6) address is used, both IP version 6
- * (IPv6) and version 4 (IPv4) connections will be accepted. To
- * restrict this to version 6 (IPv6) only, use [v6Only] to set
- * version 6 only. However, if the address is
- * [InternetAddress.loopbackIPv6], only IP version 6 (IPv6) connections
- * will be accepted.
- *
- * If [port] has the value [:0:] an ephemeral port will be chosen by
- * the system. The actual port used can be retrieved using the
- * [port] getter.
- *
- * The optional argument [backlog] can be used to specify the listen
- * backlog for the underlying OS listen setup. If [backlog] has the
- * value of [:0:] (the default) a reasonable value will be chosen by
- * the system.
- *
- * The optional argument [shared] specifies whether additional HttpServer
- * objects can bind to the same combination of `address`, `port` and `v6Only`.
- * If `shared` is `true` and more `HttpServer`s from this isolate or other
- * isolates are bound to the port, then the incoming connections will be
- * distributed among all the bound `HttpServer`s. Connections can be
- * distributed over multiple isolates this way.
- */
+ /// Starts listening for HTTP requests on the specified [address] and
+ /// [port].
+ ///
+ /// The [address] can either be a [String] or an
+ /// [InternetAddress]. If [address] is a [String], [bind] will
+ /// perform a [InternetAddress.lookup] and use the first value in the
+ /// list. To listen on the loopback adapter, which will allow only
+ /// incoming connections from the local host, use the value
+ /// [InternetAddress.loopbackIPv4] or
+ /// [InternetAddress.loopbackIPv6]. To allow for incoming
+ /// connection from the network use either one of the values
+ /// [InternetAddress.anyIPv4] or [InternetAddress.anyIPv6] to
+ /// bind to all interfaces or the IP address of a specific interface.
+ ///
+ /// If an IP version 6 (IPv6) address is used, both IP version 6
+ /// (IPv6) and version 4 (IPv4) connections will be accepted. To
+ /// restrict this to version 6 (IPv6) only, use [v6Only] to set
+ /// version 6 only. However, if the address is
+ /// [InternetAddress.loopbackIPv6], only IP version 6 (IPv6) connections
+ /// will be accepted.
+ ///
+ /// If [port] has the value [:0:] an ephemeral port will be chosen by
+ /// the system. The actual port used can be retrieved using the
+ /// [port] getter.
+ ///
+ /// The optional argument [backlog] can be used to specify the listen
+ /// backlog for the underlying OS listen setup. If [backlog] has the
+ /// value of [:0:] (the default) a reasonable value will be chosen by
+ /// the system.
+ ///
+ /// The optional argument [shared] specifies whether additional HttpServer
+ /// objects can bind to the same combination of `address`, `port` and `v6Only`.
+ /// If `shared` is `true` and more `HttpServer`s from this isolate or other
+ /// isolates are bound to the port, then the incoming connections will be
+ /// distributed among all the bound `HttpServer`s. Connections can be
+ /// distributed over multiple isolates this way.
static Future<HttpServer> bind(address, int port,
- {int backlog: 0, bool v6Only: false, bool shared: false}) =>
+ {int backlog = 0, bool v6Only = false, bool shared = false}) =>
_HttpServer.bind(address, port, backlog, v6Only, shared);
- /**
- * The [address] can either be a [String] or an
- * [InternetAddress]. If [address] is a [String], [bind] will
- * perform a [InternetAddress.lookup] and use the first value in the
- * list. To listen on the loopback adapter, which will allow only
- * incoming connections from the local host, use the value
- * [InternetAddress.loopbackIPv4] or
- * [InternetAddress.loopbackIPv6]. To allow for incoming
- * connection from the network use either one of the values
- * [InternetAddress.anyIPv4] or [InternetAddress.anyIPv6] to
- * bind to all interfaces or the IP address of a specific interface.
- *
- * If an IP version 6 (IPv6) address is used, both IP version 6
- * (IPv6) and version 4 (IPv4) connections will be accepted. To
- * restrict this to version 6 (IPv6) only, use [v6Only] to set
- * version 6 only.
- *
- * If [port] has the value [:0:] an ephemeral port will be chosen by
- * the system. The actual port used can be retrieved using the
- * [port] getter.
- *
- * The optional argument [backlog] can be used to specify the listen
- * backlog for the underlying OS listen setup. If [backlog] has the
- * value of [:0:] (the default) a reasonable value will be chosen by
- * the system.
- *
- * If [requestClientCertificate] is true, the server will
- * request clients to authenticate with a client certificate.
- * The server will advertise the names of trusted issuers of client
- * certificates, getting them from a [SecurityContext], where they have been
- * set using [SecurityContext.setClientAuthorities].
- *
- * The optional argument [shared] specifies whether additional HttpServer
- * objects can bind to the same combination of `address`, `port` and `v6Only`.
- * If `shared` is `true` and more `HttpServer`s from this isolate or other
- * isolates are bound to the port, then the incoming connections will be
- * distributed among all the bound `HttpServer`s. Connections can be
- * distributed over multiple isolates this way.
- */
+ /// The [address] can either be a [String] or an
+ /// [InternetAddress]. If [address] is a [String], [bind] will
+ /// perform a [InternetAddress.lookup] and use the first value in the
+ /// list. To listen on the loopback adapter, which will allow only
+ /// incoming connections from the local host, use the value
+ /// [InternetAddress.loopbackIPv4] or
+ /// [InternetAddress.loopbackIPv6]. To allow for incoming
+ /// connection from the network use either one of the values
+ /// [InternetAddress.anyIPv4] or [InternetAddress.anyIPv6] to
+ /// bind to all interfaces or the IP address of a specific interface.
+ ///
+ /// If an IP version 6 (IPv6) address is used, both IP version 6
+ /// (IPv6) and version 4 (IPv4) connections will be accepted. To
+ /// restrict this to version 6 (IPv6) only, use [v6Only] to set
+ /// version 6 only.
+ ///
+ /// If [port] has the value [:0:] an ephemeral port will be chosen by
+ /// the system. The actual port used can be retrieved using the
+ /// [port] getter.
+ ///
+ /// The optional argument [backlog] can be used to specify the listen
+ /// backlog for the underlying OS listen setup. If [backlog] has the
+ /// value of [:0:] (the default) a reasonable value will be chosen by
+ /// the system.
+ ///
+ /// If [requestClientCertificate] is true, the server will
+ /// request clients to authenticate with a client certificate.
+ /// The server will advertise the names of trusted issuers of client
+ /// certificates, getting them from a [SecurityContext], where they have been
+ /// set using [SecurityContext.setClientAuthorities].
+ ///
+ /// The optional argument [shared] specifies whether additional HttpServer
+ /// objects can bind to the same combination of `address`, `port` and `v6Only`.
+ /// If `shared` is `true` and more `HttpServer`s from this isolate or other
+ /// isolates are bound to the port, then the incoming connections will be
+ /// distributed among all the bound `HttpServer`s. Connections can be
+ /// distributed over multiple isolates this way.
static Future<HttpServer> bindSecure(
address, int port, SecurityContext context,
- {int backlog: 0,
- bool v6Only: false,
- bool requestClientCertificate: false,
- bool shared: false}) =>
+ {int backlog = 0,
+ bool v6Only = false,
+ bool requestClientCertificate = false,
+ bool shared = false}) =>
_HttpServer.bindSecure(address, port, context, backlog, v6Only,
requestClientCertificate, shared);
- /**
- * Attaches the HTTP server to an existing [ServerSocket]. When the
- * [HttpServer] is closed, the [HttpServer] will just detach itself,
- * closing current connections but not closing [serverSocket].
- */
+ /// Attaches the HTTP server to an existing [ServerSocket]. When the
+ /// [HttpServer] is closed, the [HttpServer] will just detach itself,
+ /// closing current connections but not closing [serverSocket].
factory HttpServer.listenOn(ServerSocket serverSocket) =>
- new _HttpServer.listenOn(serverSocket);
+ _HttpServer.listenOn(serverSocket);
- /**
- * Permanently stops this [HttpServer] from listening for new
- * connections. This closes the [Stream] of [HttpRequest]s with a
- * done event. The returned future completes when the server is
- * stopped. For a server started using [bind] or [bindSecure] this
- * means that the port listened on no longer in use.
- *
- * If [force] is `true`, active connections will be closed immediately.
- */
- Future close({bool force: false});
+ /// Permanently stops this [HttpServer] from listening for new
+ /// connections. This closes the [Stream] of [HttpRequest]s with a
+ /// done event. The returned future completes when the server is
+ /// stopped. For a server started using [bind] or [bindSecure] this
+ /// means that the port listened on no longer in use.
+ ///
+ /// If [force] is `true`, active connections will be closed immediately.
+ Future close({bool force = false});
- /**
- * Returns the port that the server is listening on. This can be
- * used to get the actual port used when a value of 0 for [:port:] is
- * specified in the [bind] or [bindSecure] call.
- */
+ /// Returns the port that the server is listening on. This can be
+ /// used to get the actual port used when a value of 0 for [:port:] is
+ /// specified in the [bind] or [bindSecure] call.
int get port;
- /**
- * Returns the address that the server is listening on. This can be
- * used to get the actual address used, when the address is fetched by
- * a lookup from a hostname.
- */
+ /// Returns the address that the server is listening on. This can be
+ /// used to get the actual address used, when the address is fetched by
+ /// a lookup from a hostname.
InternetAddress get address;
- /**
- * Sets the timeout, in seconds, for sessions of this [HttpServer].
- * The default timeout is 20 minutes.
- */
+ /// Sets the timeout, in seconds, for sessions of this [HttpServer].
+ /// The default timeout is 20 minutes.
set sessionTimeout(int timeout);
- /**
- * Returns an [HttpConnectionsInfo] object summarizing the number of
- * current connections handled by the server.
- */
+ /// Returns an [HttpConnectionsInfo] object summarizing the number of
+ /// current connections handled by the server.
HttpConnectionsInfo connectionsInfo();
}
-/**
- * Summary statistics about an [HttpServer]s current socket connections.
- */
+/// Summary statistics about an [HttpServer]s current socket connections.
class HttpConnectionsInfo {
- /**
- * Total number of socket connections.
- */
+ /// Total number of socket connections.
int total = 0;
- /**
- * Number of active connections where actual request/response
- * processing is active.
- */
+ /// Number of active connections where actual request/response
+ /// processing is active.
int active = 0;
- /**
- * Number of idle connections held by clients as persistent connections.
- */
+ /// Number of idle connections held by clients as persistent connections.
int idle = 0;
- /**
- * Number of connections which are preparing to close. Note: These
- * connections are also part of the [:active:] count as they might
- * still be sending data to the client before finally closing.
- */
+ /// Number of connections which are preparing to close. Note: These
+ /// connections are also part of the [:active:] count as they might
+ /// still be sending data to the client before finally closing.
int closing = 0;
}
-/**
- * Headers for HTTP requests and responses.
- *
- * In some situations, headers are immutable:
- *
- * * HttpRequest and HttpClientResponse always have immutable headers.
- *
- * * HttpResponse and HttpClientRequest have immutable headers
- * from the moment the body is written to.
- *
- * In these situations, the mutating methods throw exceptions.
- *
- * For all operations on HTTP headers the header name is
- * case-insensitive.
- *
- * To set the value of a header use the `set()` method:
- *
- * request.headers.set(HttpHeaders.CACHE_CONTROL,
- * 'max-age=3600, must-revalidate');
- *
- * To retrieve the value of a header use the `value()` method:
- *
- * print(request.headers.value(HttpHeaders.USER_AGENT));
- *
- * An HttpHeaders object holds a list of values for each name
- * as the standard allows. In most cases a name holds only a single value,
- * The most common mode of operation is to use `set()` for setting a value,
- * and `value()` for retrieving a value.
- */
+/// Headers for HTTP requests and responses.
+///
+/// In some situations, headers are immutable:
+///
+/// * HttpRequest and HttpClientResponse always have immutable headers.
+///
+/// * HttpResponse and HttpClientRequest have immutable headers
+/// from the moment the body is written to.
+///
+/// In these situations, the mutating methods throw exceptions.
+///
+/// For all operations on HTTP headers the header name is
+/// case-insensitive.
+///
+/// To set the value of a header use the `set()` method:
+///
+/// request.headers.set(HttpHeaders.CACHE_CONTROL,
+/// 'max-age=3600, must-revalidate');
+///
+/// To retrieve the value of a header use the `value()` method:
+///
+/// print(request.headers.value(HttpHeaders.USER_AGENT));
+///
+/// An HttpHeaders object holds a list of values for each name
+/// as the standard allows. In most cases a name holds only a single value,
+/// The most common mode of operation is to use `set()` for setting a value,
+/// and `value()` for retrieving a value.
abstract class HttpHeaders {
static const ACCEPT = "accept";
static const ACCEPT_CHARSET = "accept-charset";
@@ -449,7 +411,7 @@
static const COOKIE = "cookie";
static const SET_COOKIE = "set-cookie";
- static const GENERAL_HEADERS = const [
+ static const GENERAL_HEADERS = [
CACHE_CONTROL,
CONNECTION,
DATE,
@@ -461,7 +423,7 @@
WARNING
];
- static const ENTITY_HEADERS = const [
+ static const ENTITY_HEADERS = [
ALLOW,
CONTENT_ENCODING,
CONTENT_LANGUAGE,
@@ -474,7 +436,7 @@
LAST_MODIFIED
];
- static const RESPONSE_HEADERS = const [
+ static const RESPONSE_HEADERS = [
ACCEPT_RANGES,
AGE,
ETAG,
@@ -486,7 +448,7 @@
WWW_AUTHENTICATE
];
- static const REQUEST_HEADERS = const [
+ static const REQUEST_HEADERS = [
ACCEPT,
ACCEPT_CHARSET,
ACCEPT_ENCODING,
@@ -508,753 +470,605 @@
USER_AGENT
];
- /**
- * Gets and sets the date. The value of this property will
- * reflect the 'date' header.
- */
+ /// Gets and sets the date. The value of this property will
+ /// reflect the 'date' header.
DateTime date;
- /**
- * Gets and sets the expiry date. The value of this property will
- * reflect the 'expires' header.
- */
+ /// Gets and sets the expiry date. The value of this property will
+ /// reflect the 'expires' header.
DateTime expires;
- /**
- * Gets and sets the "if-modified-since" date. The value of this property will
- * reflect the "if-modified-since" header.
- */
+ /// Gets and sets the "if-modified-since" date. The value of this property will
+ /// reflect the "if-modified-since" header.
DateTime ifModifiedSince;
- /**
- * Gets and sets the host part of the 'host' header for the
- * connection.
- */
+ /// Gets and sets the host part of the 'host' header for the
+ /// connection.
String host;
- /**
- * Gets and sets the port part of the 'host' header for the
- * connection.
- */
+ /// Gets and sets the port part of the 'host' header for the
+ /// connection.
int port;
- /**
- * Gets the protocol version for the connection.
- */
+ /// Gets the protocol version for the connection.
String get protocolVersion;
- /**
- * Gets and sets the content type. Note that the content type in the
- * header will only be updated if this field is set
- * directly. Mutating the returned current value will have no
- * effect.
- */
+ /// Gets and sets the content type. Note that the content type in the
+ /// header will only be updated if this field is set
+ /// directly. Mutating the returned current value will have no
+ /// effect.
ContentType contentType;
- /**
- * Gets and sets the content length header value.
- */
+ /// Gets and sets the content length header value.
int contentLength;
- /**
- * Gets and sets the persistent connection header value.
- */
+ /// Gets and sets the persistent connection header value.
bool persistentConnection;
- /**
- * Gets and sets the chunked transfer encoding header value.
- */
+ /// Gets and sets the chunked transfer encoding header value.
bool chunkedTransferEncoding;
- /**
- * Returns the list of values for the header named [name]. If there
- * is no header with the provided name, [:null:] will be returned.
- */
+ /// Returns the list of values for the header named [name]. If there
+ /// is no header with the provided name, [:null:] will be returned.
List<String> operator [](String name);
- /**
- * Convenience method for the value for a single valued header. If
- * there is no header with the provided name, [:null:] will be
- * returned. If the header has more than one value an exception is
- * thrown.
- */
+ /// Convenience method for the value for a single valued header. If
+ /// there is no header with the provided name, [:null:] will be
+ /// returned. If the header has more than one value an exception is
+ /// thrown.
String value(String name);
- /**
- * Adds a header value. The header named [name] will have the value
- * [value] added to its list of values. Some headers are single
- * valued, and for these adding a value will replace the previous
- * value. If the value is of type DateTime a HTTP date format will be
- * applied. If the value is a [:List:] each element of the list will
- * be added separately. For all other types the default [:toString:]
- * method will be used.
- */
+ /// Adds a header value. The header named [name] will have the value
+ /// [value] added to its list of values. Some headers are single
+ /// valued, and for these adding a value will replace the previous
+ /// value. If the value is of type DateTime a HTTP date format will be
+ /// applied. If the value is a [:List:] each element of the list will
+ /// be added separately. For all other types the default [:toString:]
+ /// method will be used.
void add(String name, Object value);
- /**
- * Sets a header. The header named [name] will have all its values
- * cleared before the value [value] is added as its value.
- */
+ /// Sets a header. The header named [name] will have all its values
+ /// cleared before the value [value] is added as its value.
void set(String name, Object value);
- /**
- * Removes a specific value for a header name. Some headers have
- * system supplied values and for these the system supplied values
- * will still be added to the collection of values for the header.
- */
+ /// Removes a specific value for a header name. Some headers have
+ /// system supplied values and for these the system supplied values
+ /// will still be added to the collection of values for the header.
void remove(String name, Object value);
- /**
- * Removes all values for the specified header name. Some headers
- * have system supplied values and for these the system supplied
- * values will still be added to the collection of values for the
- * header.
- */
+ /// Removes all values for the specified header name. Some headers
+ /// have system supplied values and for these the system supplied
+ /// values will still be added to the collection of values for the
+ /// header.
void removeAll(String name);
- /**
- * Enumerates the headers, applying the function [f] to each
- * header. The header name passed in [:name:] will be all lower
- * case.
- */
+ /// Enumerates the headers, applying the function [f] to each
+ /// header. The header name passed in [:name:] will be all lower
+ /// case.
void forEach(void f(String name, List<String> values));
- /**
- * Disables folding for the header named [name] when sending the HTTP
- * header. By default, multiple header values are folded into a
- * single header line by separating the values with commas. The
- * 'set-cookie' header has folding disabled by default.
- */
+ /// Disables folding for the header named [name] when sending the HTTP
+ /// header. By default, multiple header values are folded into a
+ /// single header line by separating the values with commas. The
+ /// 'set-cookie' header has folding disabled by default.
void noFolding(String name);
- /**
- * Remove all headers. Some headers have system supplied values and
- * for these the system supplied values will still be added to the
- * collection of values for the header.
- */
+ /// Remove all headers. Some headers have system supplied values and
+ /// for these the system supplied values will still be added to the
+ /// collection of values for the header.
void clear();
}
-/**
- * Representation of a header value in the form:
- *
- * [:value; parameter1=value1; parameter2=value2:]
- *
- * [HeaderValue] can be used to conveniently build and parse header
- * values on this form.
- *
- * To build an [:accepts:] header with the value
- *
- * text/plain; q=0.3, text/html
- *
- * use code like this:
- *
- * HttpClientRequest request = ...;
- * var v = new HeaderValue("text/plain", {"q": "0.3"});
- * request.headers.add(HttpHeaders.ACCEPT, v);
- * request.headers.add(HttpHeaders.ACCEPT, "text/html");
- *
- * To parse the header values use the [:parse:] static method.
- *
- * HttpRequest request = ...;
- * List<String> values = request.headers[HttpHeaders.ACCEPT];
- * values.forEach((value) {
- * HeaderValue v = HeaderValue.parse(value);
- * // Use v.value and v.parameters
- * });
- *
- * An instance of [HeaderValue] is immutable.
- */
+/// Representation of a header value in the form:
+///
+/// [:value; parameter1=value1; parameter2=value2:]
+///
+/// [HeaderValue] can be used to conveniently build and parse header
+/// values on this form.
+///
+/// To build an [:accepts:] header with the value
+///
+/// text/plain; q=0.3, text/html
+///
+/// use code like this:
+///
+/// HttpClientRequest request = ...;
+/// var v = new HeaderValue("text/plain", {"q": "0.3"});
+/// request.headers.add(HttpHeaders.ACCEPT, v);
+/// request.headers.add(HttpHeaders.ACCEPT, "text/html");
+///
+/// To parse the header values use the [:parse:] static method.
+///
+/// HttpRequest request = ...;
+/// List<String> values = request.headers[HttpHeaders.ACCEPT];
+/// values.forEach((value) {
+/// HeaderValue v = HeaderValue.parse(value);
+/// // Use v.value and v.parameters
+/// });
+///
+/// An instance of [HeaderValue] is immutable.
abstract class HeaderValue {
- /**
- * Creates a new header value object setting the value and parameters.
- */
+ /// Creates a new header value object setting the value and parameters.
factory HeaderValue([String value = "", Map<String, String> parameters]) {
- return new HeaderValueImpl(value, parameters);
+ return HeaderValueImpl(value, parameters);
}
- /**
- * Creates a new header value object from parsing a header value
- * string with both value and optional parameters.
- */
+ /// Creates a new header value object from parsing a header value
+ /// string with both value and optional parameters.
static HeaderValue parse(String value,
- {String parameterSeparator: ";",
+ {String parameterSeparator = ";",
String valueSeparator,
- bool preserveBackslash: false}) {
+ bool preserveBackslash = false}) {
return HeaderValueImpl.parse(value,
parameterSeparator: parameterSeparator,
valueSeparator: valueSeparator,
preserveBackslash: preserveBackslash);
}
- /**
- * Gets the header value.
- */
+ /// Gets the header value.
String get value;
- /**
- * Gets the map of parameters.
- *
- * This map cannot be modified. Invoking any operation which would
- * modify the map will throw [UnsupportedError].
- */
+ /// Gets the map of parameters.
+ ///
+ /// This map cannot be modified. Invoking any operation which would
+ /// modify the map will throw [UnsupportedError].
Map<String, String> get parameters;
- /**
- * Returns the formatted string representation in the form:
- *
- * value; parameter1=value1; parameter2=value2
- */
+ /// Returns the formatted string representation in the form:
+ ///
+ /// value; parameter1=value1; parameter2=value2
String toString();
}
-/**
- * Representation of a content type. An instance of [ContentType] is
- * immutable.
- */
+/// Representation of a content type. An instance of [ContentType] is
+/// immutable.
abstract class ContentType implements HeaderValue {
- /**
- * Content type for plain text using UTF-8 encoding.
- *
- * text/plain; charset=utf-8
- */
- static final TEXT = new ContentType("text", "plain", charset: "utf-8");
+ /// Content type for plain text using UTF-8 encoding.
+ ///
+ /// text/plain; charset=utf-8
+ static final TEXT = ContentType("text", "plain", charset: "utf-8");
- /**
- * Content type for HTML using UTF-8 encoding.
- *
- * text/html; charset=utf-8
- */
- static final HTML = new ContentType("text", "html", charset: "utf-8");
+ /// Content type for HTML using UTF-8 encoding.
+ ///
+ /// text/html; charset=utf-8
+ static final HTML = ContentType("text", "html", charset: "utf-8");
- /**
- * Content type for JSON using UTF-8 encoding.
- *
- * application/json; charset=utf-8
- */
- static final JSON = new ContentType("application", "json", charset: "utf-8");
+ /// Content type for JSON using UTF-8 encoding.
+ ///
+ /// application/json; charset=utf-8
+ static final JSON = ContentType("application", "json", charset: "utf-8");
- /**
- * Content type for binary data.
- *
- * application/octet-stream
- */
- static final BINARY = new ContentType("application", "octet-stream");
+ /// Content type for binary data.
+ ///
+ /// application/octet-stream
+ static final BINARY = ContentType("application", "octet-stream");
- /**
- * Creates a new content type object setting the primary type and
- * sub type. The charset and additional parameters can also be set
- * using [charset] and [parameters]. If charset is passed and
- * [parameters] contains charset as well the passed [charset] will
- * override the value in parameters. Keys passed in parameters will be
- * converted to lower case. The `charset` entry, whether passed as `charset`
- * or in `parameters`, will have its value converted to lower-case.
- */
+ /// Creates a new content type object setting the primary type and
+ /// sub type. The charset and additional parameters can also be set
+ /// using [charset] and [parameters]. If charset is passed and
+ /// [parameters] contains charset as well the passed [charset] will
+ /// override the value in parameters. Keys passed in parameters will be
+ /// converted to lower case. The `charset` entry, whether passed as `charset`
+ /// or in `parameters`, will have its value converted to lower-case.
factory ContentType(String primaryType, String subType,
{String charset, Map<String, String> parameters}) {
- return new ContentTypeImpl(primaryType, subType, charset, parameters);
+ return ContentTypeImpl(primaryType, subType, charset, parameters);
}
- /**
- * Creates a new content type object from parsing a Content-Type
- * header value. As primary type, sub type and parameter names and
- * values are not case sensitive all these values will be converted
- * to lower case. Parsing this string
- *
- * text/html; charset=utf-8
- *
- * will create a content type object with primary type [:text:], sub
- * type [:html:] and parameter [:charset:] with value [:utf-8:].
- */
+ /// Creates a new content type object from parsing a Content-Type
+ /// header value. As primary type, sub type and parameter names and
+ /// values are not case sensitive all these values will be converted
+ /// to lower case. Parsing this string
+ ///
+ /// text/html; charset=utf-8
+ ///
+ /// will create a content type object with primary type [:text:], sub
+ /// type [:html:] and parameter [:charset:] with value [:utf-8:].
static ContentType parse(String value) {
return ContentTypeImpl.parse(value);
}
- /**
- * Gets the mime-type, without any parameters.
- */
+ /// Gets the mime-type, without any parameters.
String get mimeType;
- /**
- * Gets the primary type.
- */
+ /// Gets the primary type.
String get primaryType;
- /**
- * Gets the sub type.
- */
+ /// Gets the sub type.
String get subType;
- /**
- * Gets the character set.
- */
+ /// Gets the character set.
String get charset;
}
-/**
- * Representation of a cookie. For cookies received by the server as
- * Cookie header values only [:name:] and [:value:] fields will be
- * set. When building a cookie for the 'set-cookie' header in the server
- * and when receiving cookies in the client as 'set-cookie' headers all
- * fields can be used.
- */
+/// Representation of a cookie. For cookies received by the server as
+/// Cookie header values only [:name:] and [:value:] fields will be
+/// set. When building a cookie for the 'set-cookie' header in the server
+/// and when receiving cookies in the client as 'set-cookie' headers all
+/// fields can be used.
abstract class Cookie {
- /**
- * Gets and sets the name.
- */
+ /// Gets and sets the name.
String name;
- /**
- * Gets and sets the value.
- */
+ /// Gets and sets the value.
String value;
- /**
- * Gets and sets the expiry date.
- */
+ /// Gets and sets the expiry date.
DateTime expires;
- /**
- * Gets and sets the max age. A value of [:0:] means delete cookie
- * now.
- */
+ /// Gets and sets the max age. A value of [:0:] means delete cookie
+ /// now.
int maxAge;
- /**
- * Gets and sets the domain.
- */
+ /// Gets and sets the domain.
String domain;
- /**
- * Gets and sets the path.
- */
+ /// Gets and sets the path.
String path;
- /**
- * Gets and sets whether this cookie is secure.
- */
+ /// Gets and sets whether this cookie is secure.
bool secure;
- /**
- * Gets and sets whether this cookie is HTTP only.
- */
+ /// Gets and sets whether this cookie is HTTP only.
bool httpOnly;
- /**
- * Creates a new cookie optionally setting the name and value.
- *
- * By default the value of `httpOnly` will be set to `true`.
- */
- factory Cookie([String name, String value]) => new CookieImpl(name, value);
+ /// Creates a new cookie optionally setting the name and value.
+ ///
+ /// By default the value of `httpOnly` will be set to `true`.
+ factory Cookie([String name, String value]) => CookieImpl(name, value);
- /**
- * Creates a new cookie by parsing a header value from a 'set-cookie'
- * header.
- */
+ /// Creates a new cookie by parsing a header value from a 'set-cookie'
+ /// header.
factory Cookie.fromSetCookieValue(String value) {
- return new CookieImpl.fromSetCookieValue(value);
+ return CookieImpl.fromSetCookieValue(value);
}
- /**
- * Returns the formatted string representation of the cookie. The
- * string representation can be used for for setting the Cookie or
- * 'set-cookie' headers
- */
+ /// Returns the formatted string representation of the cookie. The
+ /// string representation can be used for for setting the Cookie or
+ /// 'set-cookie' headers
String toString();
}
-/**
- * A server-side object
- * that contains the content of and information about an HTTP request.
- *
- * __Note__: Check out the
- * [http_server](http://pub.dartlang.org/packages/http_server)
- * package, which makes working with the low-level
- * dart:io HTTP server subsystem easier.
- *
- * `HttpRequest` objects are generated by an [HttpServer],
- * which listens for HTTP requests on a specific host and port.
- * For each request received, the HttpServer, which is a [Stream],
- * generates an `HttpRequest` object and adds it to the stream.
- *
- * An `HttpRequest` object delivers the body content of the request
- * as a stream of byte lists.
- * The object also contains information about the request,
- * such as the method, URI, and headers.
- *
- * In the following code, an HttpServer listens
- * for HTTP requests. When the server receives a request,
- * it uses the HttpRequest object's `method` property to dispatch requests.
- *
- * final HOST = InternetAddress.loopbackIPv4;
- * final PORT = 80;
- *
- * HttpServer.bind(HOST, PORT).then((_server) {
- * _server.listen((HttpRequest request) {
- * switch (request.method) {
- * case 'GET':
- * handleGetRequest(request);
- * break;
- * case 'POST':
- * ...
- * }
- * },
- * onError: handleError); // listen() failed.
- * }).catchError(handleError);
- *
- * An HttpRequest object provides access to the associated [HttpResponse]
- * object through the response property.
- * The server writes its response to the body of the HttpResponse object.
- * For example, here's a function that responds to a request:
- *
- * void handleGetRequest(HttpRequest req) {
- * HttpResponse res = req.response;
- * res.write('Received request ${req.method}: ${req.uri.path}');
- * res.close();
- * }
- */
+/// A server-side object
+/// that contains the content of and information about an HTTP request.
+///
+/// __Note__: Check out the
+/// [http_server](http://pub.dartlang.org/packages/http_server)
+/// package, which makes working with the low-level
+/// dart:io HTTP server subsystem easier.
+///
+/// `HttpRequest` objects are generated by an [HttpServer],
+/// which listens for HTTP requests on a specific host and port.
+/// For each request received, the HttpServer, which is a [Stream],
+/// generates an `HttpRequest` object and adds it to the stream.
+///
+/// An `HttpRequest` object delivers the body content of the request
+/// as a stream of byte lists.
+/// The object also contains information about the request,
+/// such as the method, URI, and headers.
+///
+/// In the following code, an HttpServer listens
+/// for HTTP requests. When the server receives a request,
+/// it uses the HttpRequest object's `method` property to dispatch requests.
+///
+/// final HOST = InternetAddress.loopbackIPv4;
+/// final PORT = 80;
+///
+/// HttpServer.bind(HOST, PORT).then((_server) {
+/// _server.listen((HttpRequest request) {
+/// switch (request.method) {
+/// case 'GET':
+/// handleGetRequest(request);
+/// break;
+/// case 'POST':
+/// ...
+/// }
+/// },
+/// onError: handleError); // listen() failed.
+/// }).catchError(handleError);
+///
+/// An HttpRequest object provides access to the associated [HttpResponse]
+/// object through the response property.
+/// The server writes its response to the body of the HttpResponse object.
+/// For example, here's a function that responds to a request:
+///
+/// void handleGetRequest(HttpRequest req) {
+/// HttpResponse res = req.response;
+/// res.write('Received request ${req.method}: ${req.uri.path}');
+/// res.close();
+/// }
abstract class HttpRequest implements Stream<List<int>> {
- /**
- * The content length of the request body.
- *
- * If the size of the request body is not known in advance,
- * this value is -1.
- */
+ /// The content length of the request body.
+ ///
+ /// If the size of the request body is not known in advance,
+ /// this value is -1.
int get contentLength;
- /**
- * The method, such as 'GET' or 'POST', for the request.
- */
+ /// The method, such as 'GET' or 'POST', for the request.
String get method;
- /**
- * The URI for the request.
- *
- * This provides access to the
- * path and query string for the request.
- */
+ /// The URI for the request.
+ ///
+ /// This provides access to the
+ /// path and query string for the request.
Uri get uri;
- /**
- * The requested URI for the request.
- *
- * The returned URI is reconstructed by using http-header fields, to access
- * otherwise lost information, e.g. host and scheme.
- *
- * To reconstruct the scheme, first 'X-Forwarded-Proto' is checked, and then
- * falling back to server type.
- *
- * To reconstruct the host, first 'X-Forwarded-Host' is checked, then 'Host'
- * and finally calling back to server.
- */
+ /// The requested URI for the request.
+ ///
+ /// The returned URI is reconstructed by using http-header fields, to access
+ /// otherwise lost information, e.g. host and scheme.
+ ///
+ /// To reconstruct the scheme, first 'X-Forwarded-Proto' is checked, and then
+ /// falling back to server type.
+ ///
+ /// To reconstruct the host, first 'X-Forwarded-Host' is checked, then 'Host'
+ /// and finally calling back to server.
Uri get requestedUri;
- /**
- * The request headers.
- *
- * The returned [HttpHeaders] are immutable.
- */
+ /// The request headers.
+ ///
+ /// The returned [HttpHeaders] are immutable.
HttpHeaders get headers;
- /**
- * The cookies in the request, from the Cookie headers.
- */
+ /// The cookies in the request, from the Cookie headers.
List<Cookie> get cookies;
- /**
- * The persistent connection state signaled by the client.
- */
+ /// The persistent connection state signaled by the client.
bool get persistentConnection;
- /**
- * The client certificate of the client making the request.
- *
- * This value is null if the connection is not a secure TLS or SSL connection,
- * or if the server does not request a client certificate, or if the client
- * does not provide one.
- */
+ /// The client certificate of the client making the request.
+ ///
+ /// This value is null if the connection is not a secure TLS or SSL connection,
+ /// or if the server does not request a client certificate, or if the client
+ /// does not provide one.
X509Certificate get certificate;
- /**
- * The session for the given request.
- *
- * If the session is
- * being initialized by this call, [:isNew:] is true for the returned
- * session.
- * See [HttpServer.sessionTimeout] on how to change default timeout.
- */
+ /// The session for the given request.
+ ///
+ /// If the session is
+ /// being initialized by this call, [:isNew:] is true for the returned
+ /// session.
+ /// See [HttpServer.sessionTimeout] on how to change default timeout.
HttpSession get session;
- /**
- * The HTTP protocol version used in the request,
- * either "1.0" or "1.1".
- */
+ /// The HTTP protocol version used in the request,
+ /// either "1.0" or "1.1".
String get protocolVersion;
- /**
- * Information about the client connection.
- *
- * Returns [:null:] if the socket is not available.
- */
+ /// Information about the client connection.
+ ///
+ /// Returns [:null:] if the socket is not available.
HttpConnectionInfo get connectionInfo;
- /**
- * The [HttpResponse] object, used for sending back the response to the
- * client.
- *
- * If the [contentLength] of the body isn't 0, and the body isn't being read,
- * any write calls on the [HttpResponse] automatically drain the request
- * body.
- */
+ /// The [HttpResponse] object, used for sending back the response to the
+ /// client.
+ ///
+ /// If the [contentLength] of the body isn't 0, and the body isn't being read,
+ /// any write calls on the [HttpResponse] automatically drain the request
+ /// body.
HttpResponse get response;
}
-/**
- * An HTTP response, which returns the headers and data
- * from the server to the client in response to an HTTP request.
- *
- * Every HttpRequest object provides access to the associated [HttpResponse]
- * object through the `response` property.
- * The server sends its response to the client by writing to the
- * HttpResponse object.
- *
- * ## Writing the response
- *
- * This class implements [IOSink].
- * After the header has been set up, the methods
- * from IOSink, such as `writeln()`, can be used to write
- * the body of the HTTP response.
- * Use the `close()` method to close the response and send it to the client.
- *
- * server.listen((HttpRequest request) {
- * request.response.write('Hello, world!');
- * request.response.close();
- * });
- *
- * When one of the IOSink methods is used for the
- * first time, the request header is sent. Calling any methods that
- * change the header after it is sent throws an exception.
- *
- * ## Setting the headers
- *
- * The HttpResponse object has a number of properties for setting up
- * the HTTP headers of the response.
- * When writing string data through the IOSink, the encoding used
- * is determined from the "charset" parameter of the
- * "Content-Type" header.
- *
- * HttpResponse response = ...
- * response.headers.contentType
- * = new ContentType("application", "json", charset: "utf-8");
- * response.write(...); // Strings written will be UTF-8 encoded.
- *
- * If no charset is provided the default of ISO-8859-1 (Latin 1) will
- * be used.
- *
- * HttpResponse response = ...
- * response.headers.add(HttpHeaders.CONTENT_TYPE, "text/plain");
- * response.write(...); // Strings written will be ISO-8859-1 encoded.
- *
- * An exception is thrown if you use the `write()` method
- * while an unsupported content-type is set.
- */
+/// An HTTP response, which returns the headers and data
+/// from the server to the client in response to an HTTP request.
+///
+/// Every HttpRequest object provides access to the associated [HttpResponse]
+/// object through the `response` property.
+/// The server sends its response to the client by writing to the
+/// HttpResponse object.
+///
+/// ## Writing the response
+///
+/// This class implements [IOSink].
+/// After the header has been set up, the methods
+/// from IOSink, such as `writeln()`, can be used to write
+/// the body of the HTTP response.
+/// Use the `close()` method to close the response and send it to the client.
+///
+/// server.listen((HttpRequest request) {
+/// request.response.write('Hello, world!');
+/// request.response.close();
+/// });
+///
+/// When one of the IOSink methods is used for the
+/// first time, the request header is sent. Calling any methods that
+/// change the header after it is sent throws an exception.
+///
+/// ## Setting the headers
+///
+/// The HttpResponse object has a number of properties for setting up
+/// the HTTP headers of the response.
+/// When writing string data through the IOSink, the encoding used
+/// is determined from the "charset" parameter of the
+/// "Content-Type" header.
+///
+/// HttpResponse response = ...
+/// response.headers.contentType
+/// = new ContentType("application", "json", charset: "utf-8");
+/// response.write(...); // Strings written will be UTF-8 encoded.
+///
+/// If no charset is provided the default of ISO-8859-1 (Latin 1) will
+/// be used.
+///
+/// HttpResponse response = ...
+/// response.headers.add(HttpHeaders.CONTENT_TYPE, "text/plain");
+/// response.write(...); // Strings written will be ISO-8859-1 encoded.
+///
+/// An exception is thrown if you use the `write()` method
+/// while an unsupported content-type is set.
abstract class HttpResponse implements IOSink {
// TODO(ajohnsen): Add documentation of how to pipe a file to the response.
- /**
- * Gets and sets the content length of the response. If the size of
- * the response is not known in advance set the content length to
- * -1 - which is also the default if not set.
- */
+ /// Gets and sets the content length of the response. If the size of
+ /// the response is not known in advance set the content length to
+ /// -1 - which is also the default if not set.
int contentLength;
- /**
- * Gets and sets the status code. Any integer value is accepted. For
- * the official HTTP status codes use the fields from
- * [HttpStatus]. If no status code is explicitly set the default
- * value [HttpStatus.OK] is used.
- *
- * The status code must be set before the body is written
- * to. Setting the status code after writing to the response body or
- * closing the response will throw a `StateError`.
- */
+ /// Gets and sets the status code. Any integer value is accepted. For
+ /// the official HTTP status codes use the fields from
+ /// [HttpStatus]. If no status code is explicitly set the default
+ /// value [HttpStatus.OK] is used.
+ ///
+ /// The status code must be set before the body is written
+ /// to. Setting the status code after writing to the response body or
+ /// closing the response will throw a `StateError`.
int statusCode;
- /**
- * Gets and sets the reason phrase. If no reason phrase is explicitly
- * set a default reason phrase is provided.
- *
- * The reason phrase must be set before the body is written
- * to. Setting the reason phrase after writing to the response body
- * or closing the response will throw a `StateError`.
- */
+ /// Gets and sets the reason phrase. If no reason phrase is explicitly
+ /// set a default reason phrase is provided.
+ ///
+ /// The reason phrase must be set before the body is written
+ /// to. Setting the reason phrase after writing to the response body
+ /// or closing the response will throw a `StateError`.
String reasonPhrase;
- /**
- * Gets and sets the persistent connection state. The initial value
- * of this property is the persistent connection state from the
- * request.
- */
+ /// Gets and sets the persistent connection state. The initial value
+ /// of this property is the persistent connection state from the
+ /// request.
bool persistentConnection;
- /**
- * Set and get the [deadline] for the response. The deadline is timed from the
- * time it's set. Setting a new deadline will override any previous deadline.
- * When a deadline is exceeded, the response will be closed and any further
- * data ignored.
- *
- * To disable a deadline, set the [deadline] to `null`.
- *
- * The [deadline] is `null` by default.
- */
+ /// Set and get the [deadline] for the response. The deadline is timed from the
+ /// time it's set. Setting a new deadline will override any previous deadline.
+ /// When a deadline is exceeded, the response will be closed and any further
+ /// data ignored.
+ ///
+ /// To disable a deadline, set the [deadline] to `null`.
+ ///
+ /// The [deadline] is `null` by default.
Duration deadline;
- /**
- * Gets or sets if the [HttpResponse] should buffer output.
- *
- * Default value is `true`.
- *
- * __Note__: Disabling buffering of the output can result in very poor
- * performance, when writing many small chunks.
- */
+ /// Gets or sets if the [HttpResponse] should buffer output.
+ ///
+ /// Default value is `true`.
+ ///
+ /// __Note__: Disabling buffering of the output can result in very poor
+ /// performance, when writing many small chunks.
bool bufferOutput;
- /**
- * Returns the response headers.
- *
- * The response headers can be modified until the response body is
- * written to or closed. After that they become immutable.
- */
+ /// Returns the response headers.
+ ///
+ /// The response headers can be modified until the response body is
+ /// written to or closed. After that they become immutable.
HttpHeaders get headers;
- /**
- * Cookies to set in the client (in the 'set-cookie' header).
- */
+ /// Cookies to set in the client (in the 'set-cookie' header).
List<Cookie> get cookies;
- /**
- * Respond with a redirect to [location].
- *
- * The URI in [location] should be absolute, but there are no checks
- * to enforce that.
- *
- * By default the HTTP status code `HttpStatus.MOVED_TEMPORARILY`
- * (`302`) is used for the redirect, but an alternative one can be
- * specified using the [status] argument.
- *
- * This method will also call `close`, and the returned future is
- * the future returned by `close`.
- */
- Future redirect(Uri location, {int status: HttpStatus.MOVED_TEMPORARILY});
+ /// Respond with a redirect to [location].
+ ///
+ /// The URI in [location] should be absolute, but there are no checks
+ /// to enforce that.
+ ///
+ /// By default the HTTP status code `HttpStatus.MOVED_TEMPORARILY`
+ /// (`302`) is used for the redirect, but an alternative one can be
+ /// specified using the [status] argument.
+ ///
+ /// This method will also call `close`, and the returned future is
+ /// the future returned by `close`.
+ Future redirect(Uri location, {int status = HttpStatus.MOVED_TEMPORARILY});
- /**
- * Detaches the underlying socket from the HTTP server. When the
- * socket is detached the HTTP server will no longer perform any
- * operations on it.
- *
- * This is normally used when a HTTP upgrade request is received
- * and the communication should continue with a different protocol.
- *
- * If [writeHeaders] is `true`, the status line and [headers] will be written
- * to the socket before it's detached. If `false`, the socket is detached
- * immediately, without any data written to the socket. Default is `true`.
- */
- Future<Socket> detachSocket({bool writeHeaders: true});
+ /// Detaches the underlying socket from the HTTP server. When the
+ /// socket is detached the HTTP server will no longer perform any
+ /// operations on it.
+ ///
+ /// This is normally used when a HTTP upgrade request is received
+ /// and the communication should continue with a different protocol.
+ ///
+ /// If [writeHeaders] is `true`, the status line and [headers] will be written
+ /// to the socket before it's detached. If `false`, the socket is detached
+ /// immediately, without any data written to the socket. Default is `true`.
+ Future<Socket> detachSocket({bool writeHeaders = true});
- /**
- * Gets information about the client connection. Returns [:null:] if the
- * socket is not available.
- */
+ /// Gets information about the client connection. Returns [:null:] if the
+ /// socket is not available.
HttpConnectionInfo get connectionInfo;
}
-/**
- * A client that receives content, such as web pages, from
- * a server using the HTTP protocol.
- *
- * HttpClient contains a number of methods to send an [HttpClientRequest]
- * to an Http server and receive an [HttpClientResponse] back.
- * For example, you can use the [get], [getUrl], [post], and [postUrl] methods
- * for GET and POST requests, respectively.
- *
- * ## Making a simple GET request: an example
- *
- * A `getUrl` request is a two-step process, triggered by two [Future]s.
- * When the first future completes with a [HttpClientRequest], the underlying
- * network connection has been established, but no data has been sent.
- * In the callback function for the first future, the HTTP headers and body
- * can be set on the request. Either the first write to the request object
- * or a call to [close] sends the request to the server.
- *
- * When the HTTP response is received from the server,
- * the second future, which is returned by close,
- * completes with an [HttpClientResponse] object.
- * This object provides access to the headers and body of the response.
- * The body is available as a stream implemented by HttpClientResponse.
- * If a body is present, it must be read. Otherwise, it leads to resource
- * leaks. Consider using [HttpClientResponse.drain] if the body is unused.
- *
- * HttpClient client = new HttpClient();
- * client.getUrl(Uri.parse("http://www.example.com/"))
- * .then((HttpClientRequest request) {
- * // Optionally set up headers...
- * // Optionally write to the request object...
- * // Then call close.
- * ...
- * return request.close();
- * })
- * .then((HttpClientResponse response) {
- * // Process the response.
- * ...
- * });
- *
- * The future for [HttpClientRequest] is created by methods such as
- * [getUrl] and [open].
- *
- * ## HTTPS connections
- *
- * An HttpClient can make HTTPS requests, connecting to a server using
- * the TLS (SSL) secure networking protocol. Calling [getUrl] with an
- * https: scheme will work automatically, if the server's certificate is
- * signed by a root CA (certificate authority) on the default list of
- * well-known trusted CAs, compiled by Mozilla.
- *
- * To add a custom trusted certificate authority, or to send a client
- * certificate to servers that request one, pass a [SecurityContext] object
- * as the optional `context` argument to the `HttpClient` constructor.
- * The desired security options can be set on the [SecurityContext] object.
- *
- * ## Headers
- *
- * All HttpClient requests set the following header by default:
- *
- * Accept-Encoding: gzip
- *
- * This allows the HTTP server to use gzip compression for the body if
- * possible. If this behavior is not desired set the
- * `Accept-Encoding` header to something else.
- * To turn off gzip compression of the response, clear this header:
- *
- * request.headers.removeAll(HttpHeaders.ACCEPT_ENCODING)
- *
- * ## Closing the HttpClient
- *
- * The HttpClient supports persistent connections and caches network
- * connections to reuse them for multiple requests whenever
- * possible. This means that network connections can be kept open for
- * some time after a request has completed. Use HttpClient.close
- * to force the HttpClient object to shut down and to close the idle
- * network connections.
- *
- * ## Turning proxies on and off
- *
- * By default the HttpClient uses the proxy configuration available
- * from the environment, see [findProxyFromEnvironment]. To turn off
- * the use of proxies set the [findProxy] property to
- * [:null:].
- *
- * HttpClient client = new HttpClient();
- * client.findProxy = null;
- */
+/// A client that receives content, such as web pages, from
+/// a server using the HTTP protocol.
+///
+/// HttpClient contains a number of methods to send an [HttpClientRequest]
+/// to an Http server and receive an [HttpClientResponse] back.
+/// For example, you can use the [get], [getUrl], [post], and [postUrl] methods
+/// for GET and POST requests, respectively.
+///
+/// ## Making a simple GET request: an example
+///
+/// A `getUrl` request is a two-step process, triggered by two [Future]s.
+/// When the first future completes with a [HttpClientRequest], the underlying
+/// network connection has been established, but no data has been sent.
+/// In the callback function for the first future, the HTTP headers and body
+/// can be set on the request. Either the first write to the request object
+/// or a call to [close] sends the request to the server.
+///
+/// When the HTTP response is received from the server,
+/// the second future, which is returned by close,
+/// completes with an [HttpClientResponse] object.
+/// This object provides access to the headers and body of the response.
+/// The body is available as a stream implemented by HttpClientResponse.
+/// If a body is present, it must be read. Otherwise, it leads to resource
+/// leaks. Consider using [HttpClientResponse.drain] if the body is unused.
+///
+/// HttpClient client = new HttpClient();
+/// client.getUrl(Uri.parse("http://www.example.com/"))
+/// .then((HttpClientRequest request) {
+/// // Optionally set up headers...
+/// // Optionally write to the request object...
+/// // Then call close.
+/// ...
+/// return request.close();
+/// })
+/// .then((HttpClientResponse response) {
+/// // Process the response.
+/// ...
+/// });
+///
+/// The future for [HttpClientRequest] is created by methods such as
+/// [getUrl] and [open].
+///
+/// ## HTTPS connections
+///
+/// An HttpClient can make HTTPS requests, connecting to a server using
+/// the TLS (SSL) secure networking protocol. Calling [getUrl] with an
+/// https: scheme will work automatically, if the server's certificate is
+/// signed by a root CA (certificate authority) on the default list of
+/// well-known trusted CAs, compiled by Mozilla.
+///
+/// To add a custom trusted certificate authority, or to send a client
+/// certificate to servers that request one, pass a [SecurityContext] object
+/// as the optional `context` argument to the `HttpClient` constructor.
+/// The desired security options can be set on the [SecurityContext] object.
+///
+/// ## Headers
+///
+/// All HttpClient requests set the following header by default:
+///
+/// Accept-Encoding: gzip
+///
+/// This allows the HTTP server to use gzip compression for the body if
+/// possible. If this behavior is not desired set the
+/// `Accept-Encoding` header to something else.
+/// To turn off gzip compression of the response, clear this header:
+///
+/// request.headers.removeAll(HttpHeaders.ACCEPT_ENCODING)
+///
+/// ## Closing the HttpClient
+///
+/// The HttpClient supports persistent connections and caches network
+/// connections to reuse them for multiple requests whenever
+/// possible. This means that network connections can be kept open for
+/// some time after a request has completed. Use HttpClient.close
+/// to force the HttpClient object to shut down and to close the idle
+/// network connections.
+///
+/// ## Turning proxies on and off
+///
+/// By default the HttpClient uses the proxy configuration available
+/// from the environment, see [findProxyFromEnvironment]. To turn off
+/// the use of proxies set the [findProxy] property to
+/// [:null:].
+///
+/// HttpClient client = new HttpClient();
+/// client.findProxy = null;
abstract class HttpClient {
static const int DEFAULT_HTTP_PORT = 80;
static const int DEFAULT_HTTPS_PORT = 443;
@@ -1275,44 +1089,40 @@
/// `null`.
Duration connectionTimeout;
- /**
- * Gets and sets the maximum number of live connections, to a single host.
- *
- * Increasing this number may lower performance and take up unwanted
- * system resources.
- *
- * To disable, set to `null`.
- *
- * Default is `null`.
- */
+ /// Gets and sets the maximum number of live connections, to a single host.
+ ///
+ /// Increasing this number may lower performance and take up unwanted
+ /// system resources.
+ ///
+ /// To disable, set to `null`.
+ ///
+ /// Default is `null`.
int maxConnectionsPerHost;
- /**
- * Gets and sets whether the body of a response will be automatically
- * uncompressed.
- *
- * The body of an HTTP response can be compressed. In most
- * situations providing the un-compressed body is most
- * convenient. Therefore the default behavior is to un-compress the
- * body. However in some situations (e.g. implementing a transparent
- * proxy) keeping the uncompressed stream is required.
- *
- * NOTE: Headers in the response are never modified. This means
- * that when automatic un-compression is turned on the value of the
- * header `Content-Length` will reflect the length of the original
- * compressed body. Likewise the header `Content-Encoding` will also
- * have the original value indicating compression.
- *
- * NOTE: Automatic un-compression is only performed if the
- * `Content-Encoding` header value is `gzip`.
- *
- * This value affects all responses produced by this client after the
- * value is changed.
- *
- * To disable, set to `false`.
- *
- * Default is `true`.
- */
+ /// Gets and sets whether the body of a response will be automatically
+ /// uncompressed.
+ ///
+ /// The body of an HTTP response can be compressed. In most
+ /// situations providing the un-compressed body is most
+ /// convenient. Therefore the default behavior is to un-compress the
+ /// body. However in some situations (e.g. implementing a transparent
+ /// proxy) keeping the uncompressed stream is required.
+ ///
+ /// NOTE: Headers in the response are never modified. This means
+ /// that when automatic un-compression is turned on the value of the
+ /// header `Content-Length` will reflect the length of the original
+ /// compressed body. Likewise the header `Content-Encoding` will also
+ /// have the original value indicating compression.
+ ///
+ /// NOTE: Automatic un-compression is only performed if the
+ /// `Content-Encoding` header value is `gzip`.
+ ///
+ /// This value affects all responses produced by this client after the
+ /// value is changed.
+ ///
+ /// To disable, set to `false`.
+ ///
+ /// Default is `true`.
bool autoUncompress;
/// Gets and sets the default value of the `User-Agent` header for all requests
@@ -1327,267 +1137,231 @@
factory HttpClient({SecurityContext context}) {
HttpOverrides overrides = HttpOverrides.current;
if (overrides == null) {
- return new _HttpClient(context);
+ return _HttpClient(context);
}
return overrides.createHttpClient(context);
}
- /**
- * Opens a HTTP connection.
- *
- * The HTTP method to use is specified in [method], the server is
- * specified using [host] and [port], and the path (including
- * a possible query) is specified using [path].
- * The path may also contain a URI fragment, which will be ignored.
- *
- * The `Host` header for the request will be set to the value
- * [host]:[port]. This can be overridden through the
- * [HttpClientRequest] interface before the request is sent. NOTE
- * if [host] is an IP address this will still be set in the `Host`
- * header.
- *
- * For additional information on the sequence of events during an
- * HTTP transaction, and the objects returned by the futures, see
- * the overall documentation for the class [HttpClient].
- */
+ /// Opens a HTTP connection.
+ ///
+ /// The HTTP method to use is specified in [method], the server is
+ /// specified using [host] and [port], and the path (including
+ /// a possible query) is specified using [path].
+ /// The path may also contain a URI fragment, which will be ignored.
+ ///
+ /// The `Host` header for the request will be set to the value
+ /// [host]:[port]. This can be overridden through the
+ /// [HttpClientRequest] interface before the request is sent. NOTE
+ /// if [host] is an IP address this will still be set in the `Host`
+ /// header.
+ ///
+ /// For additional information on the sequence of events during an
+ /// HTTP transaction, and the objects returned by the futures, see
+ /// the overall documentation for the class [HttpClient].
Future<HttpClientRequest> open(
String method, String host, int port, String path);
- /**
- * Opens a HTTP connection.
- *
- * The HTTP method is specified in [method] and the URL to use in
- * [url].
- *
- * The `Host` header for the request will be set to the value
- * [Uri.host]:[Uri.port] from [url]. This can be overridden through the
- * [HttpClientRequest] interface before the request is sent. NOTE
- * if [Uri.host] is an IP address this will still be set in the `Host`
- * header.
- *
- * For additional information on the sequence of events during an
- * HTTP transaction, and the objects returned by the futures, see
- * the overall documentation for the class [HttpClient].
- */
+ /// Opens a HTTP connection.
+ ///
+ /// The HTTP method is specified in [method] and the URL to use in
+ /// [url].
+ ///
+ /// The `Host` header for the request will be set to the value
+ /// [Uri.host]:[Uri.port] from [url]. This can be overridden through the
+ /// [HttpClientRequest] interface before the request is sent. NOTE
+ /// if [Uri.host] is an IP address this will still be set in the `Host`
+ /// header.
+ ///
+ /// For additional information on the sequence of events during an
+ /// HTTP transaction, and the objects returned by the futures, see
+ /// the overall documentation for the class [HttpClient].
Future<HttpClientRequest> openUrl(String method, Uri url);
- /**
- * Opens a HTTP connection using the GET method.
- *
- * The server is specified using [host] and [port], and the path
- * (including a possible query) is specified using
- * [path].
- *
- * See [open] for details.
- */
+ /// Opens a HTTP connection using the GET method.
+ ///
+ /// The server is specified using [host] and [port], and the path
+ /// (including a possible query) is specified using
+ /// [path].
+ ///
+ /// See [open] for details.
Future<HttpClientRequest> get(String host, int port, String path);
- /**
- * Opens a HTTP connection using the GET method.
- *
- * The URL to use is specified in [url].
- *
- * See [openUrl] for details.
- */
+ /// Opens a HTTP connection using the GET method.
+ ///
+ /// The URL to use is specified in [url].
+ ///
+ /// See [openUrl] for details.
Future<HttpClientRequest> getUrl(Uri url);
- /**
- * Opens a HTTP connection using the POST method.
- *
- * The server is specified using [host] and [port], and the path
- * (including a possible query) is specified using
- * [path].
- *
- * See [open] for details.
- */
+ /// Opens a HTTP connection using the POST method.
+ ///
+ /// The server is specified using [host] and [port], and the path
+ /// (including a possible query) is specified using
+ /// [path].
+ ///
+ /// See [open] for details.
Future<HttpClientRequest> post(String host, int port, String path);
- /**
- * Opens a HTTP connection using the POST method.
- *
- * The URL to use is specified in [url].
- *
- * See [openUrl] for details.
- */
+ /// Opens a HTTP connection using the POST method.
+ ///
+ /// The URL to use is specified in [url].
+ ///
+ /// See [openUrl] for details.
Future<HttpClientRequest> postUrl(Uri url);
- /**
- * Opens a HTTP connection using the PUT method.
- *
- * The server is specified using [host] and [port], and the path
- * (including a possible query) is specified using [path].
- *
- * See [open] for details.
- */
+ /// Opens a HTTP connection using the PUT method.
+ ///
+ /// The server is specified using [host] and [port], and the path
+ /// (including a possible query) is specified using [path].
+ ///
+ /// See [open] for details.
Future<HttpClientRequest> put(String host, int port, String path);
- /**
- * Opens a HTTP connection using the PUT method.
- *
- * The URL to use is specified in [url].
- *
- * See [openUrl] for details.
- */
+ /// Opens a HTTP connection using the PUT method.
+ ///
+ /// The URL to use is specified in [url].
+ ///
+ /// See [openUrl] for details.
Future<HttpClientRequest> putUrl(Uri url);
- /**
- * Opens a HTTP connection using the DELETE method.
- *
- * The server is specified using [host] and [port], and the path
- * (including a possible query) is specified using [path].
- *
- * See [open] for details.
- */
+ /// Opens a HTTP connection using the DELETE method.
+ ///
+ /// The server is specified using [host] and [port], and the path
+ /// (including a possible query) is specified using [path].
+ ///
+ /// See [open] for details.
Future<HttpClientRequest> delete(String host, int port, String path);
- /**
- * Opens a HTTP connection using the DELETE method.
- *
- * The URL to use is specified in [url].
- *
- * See [openUrl] for details.
- */
+ /// Opens a HTTP connection using the DELETE method.
+ ///
+ /// The URL to use is specified in [url].
+ ///
+ /// See [openUrl] for details.
Future<HttpClientRequest> deleteUrl(Uri url);
- /**
- * Opens a HTTP connection using the PATCH method.
- *
- * The server is specified using [host] and [port], and the path
- * (including a possible query) is specified using [path].
- *
- * See [open] for details.
- */
+ /// Opens a HTTP connection using the PATCH method.
+ ///
+ /// The server is specified using [host] and [port], and the path
+ /// (including a possible query) is specified using [path].
+ ///
+ /// See [open] for details.
Future<HttpClientRequest> patch(String host, int port, String path);
- /**
- * Opens a HTTP connection using the PATCH method.
- *
- * The URL to use is specified in [url].
- *
- * See [openUrl] for details.
- */
+ /// Opens a HTTP connection using the PATCH method.
+ ///
+ /// The URL to use is specified in [url].
+ ///
+ /// See [openUrl] for details.
Future<HttpClientRequest> patchUrl(Uri url);
- /**
- * Opens a HTTP connection using the HEAD method.
- *
- * The server is specified using [host] and [port], and the path
- * (including a possible query) is specified using [path].
- *
- * See [open] for details.
- */
+ /// Opens a HTTP connection using the HEAD method.
+ ///
+ /// The server is specified using [host] and [port], and the path
+ /// (including a possible query) is specified using [path].
+ ///
+ /// See [open] for details.
Future<HttpClientRequest> head(String host, int port, String path);
- /**
- * Opens a HTTP connection using the HEAD method.
- *
- * The URL to use is specified in [url].
- *
- * See [openUrl] for details.
- */
+ /// Opens a HTTP connection using the HEAD method.
+ ///
+ /// The URL to use is specified in [url].
+ ///
+ /// See [openUrl] for details.
Future<HttpClientRequest> headUrl(Uri url);
- /**
- * Sets the function to be called when a site is requesting
- * authentication. The URL requested and the security realm from the
- * server are passed in the arguments `url` and `realm`.
- *
- * The function returns a [Future] which should complete when the
- * authentication has been resolved. If credentials cannot be
- * provided the [Future] should complete with [:false:]. If
- * credentials are available the function should add these using
- * [addCredentials] before completing the [Future] with the value
- * [:true:].
- *
- * If the [Future] completes with true the request will be retried
- * using the updated credentials. Otherwise response processing will
- * continue normally.
- */
+ /// Sets the function to be called when a site is requesting
+ /// authentication. The URL requested and the security realm from the
+ /// server are passed in the arguments `url` and `realm`.
+ ///
+ /// The function returns a [Future] which should complete when the
+ /// authentication has been resolved. If credentials cannot be
+ /// provided the [Future] should complete with [:false:]. If
+ /// credentials are available the function should add these using
+ /// [addCredentials] before completing the [Future] with the value
+ /// [:true:].
+ ///
+ /// If the [Future] completes with true the request will be retried
+ /// using the updated credentials. Otherwise response processing will
+ /// continue normally.
set authenticate(Future<bool> f(Uri url, String scheme, String realm));
- /**
- * Add credentials to be used for authorizing HTTP requests.
- */
+ /// Add credentials to be used for authorizing HTTP requests.
void addCredentials(Uri url, String realm, HttpClientCredentials credentials);
- /**
- * Sets the function used to resolve the proxy server to be used for
- * opening a HTTP connection to the specified `url`. If this
- * function is not set, direct connections will always be used.
- *
- * The string returned by [f] must be in the format used by browser
- * PAC (proxy auto-config) scripts. That is either
- *
- * "DIRECT"
- *
- * for using a direct connection or
- *
- * "PROXY host:port"
- *
- * for using the proxy server [:host:] on port [:port:].
- *
- * A configuration can contain several configuration elements
- * separated by semicolons, e.g.
- *
- * "PROXY host:port; PROXY host2:port2; DIRECT"
- *
- * The static function [findProxyFromEnvironment] on this class can
- * be used to implement proxy server resolving based on environment
- * variables.
- */
+ /// Sets the function used to resolve the proxy server to be used for
+ /// opening a HTTP connection to the specified `url`. If this
+ /// function is not set, direct connections will always be used.
+ ///
+ /// The string returned by [f] must be in the format used by browser
+ /// PAC (proxy auto-config) scripts. That is either
+ ///
+ /// "DIRECT"
+ ///
+ /// for using a direct connection or
+ ///
+ /// "PROXY host:port"
+ ///
+ /// for using the proxy server [:host:] on port [:port:].
+ ///
+ /// A configuration can contain several configuration elements
+ /// separated by semicolons, e.g.
+ ///
+ /// "PROXY host:port; PROXY host2:port2; DIRECT"
+ ///
+ /// The static function [findProxyFromEnvironment] on this class can
+ /// be used to implement proxy server resolving based on environment
+ /// variables.
set findProxy(String f(Uri url));
- /**
- * Function for resolving the proxy server to be used for a HTTP
- * connection from the proxy configuration specified through
- * environment variables.
- *
- * The following environment variables are taken into account:
- *
- * http_proxy
- * https_proxy
- * no_proxy
- * HTTP_PROXY
- * HTTPS_PROXY
- * NO_PROXY
- *
- * [:http_proxy:] and [:HTTP_PROXY:] specify the proxy server to use for
- * http:// urls. Use the format [:hostname:port:]. If no port is used a
- * default of 1080 will be used. If both are set the lower case one takes
- * precedence.
- *
- * [:https_proxy:] and [:HTTPS_PROXY:] specify the proxy server to use for
- * https:// urls. Use the format [:hostname:port:]. If no port is used a
- * default of 1080 will be used. If both are set the lower case one takes
- * precedence.
- *
- * [:no_proxy:] and [:NO_PROXY:] specify a comma separated list of
- * postfixes of hostnames for which not to use the proxy
- * server. E.g. the value "localhost,127.0.0.1" will make requests
- * to both "localhost" and "127.0.0.1" not use a proxy. If both are set
- * the lower case one takes precedence.
- *
- * To activate this way of resolving proxies assign this function to
- * the [findProxy] property on the [HttpClient].
- *
- * HttpClient client = new HttpClient();
- * client.findProxy = HttpClient.findProxyFromEnvironment;
- *
- * If you don't want to use the system environment you can use a
- * different one by wrapping the function.
- *
- * HttpClient client = new HttpClient();
- * client.findProxy = (url) {
- * return HttpClient.findProxyFromEnvironment(
- * url, environment: {"http_proxy": ..., "no_proxy": ...});
- * }
- *
- * If a proxy requires authentication it is possible to configure
- * the username and password as well. Use the format
- * [:username:password@hostname:port:] to include the username and
- * password. Alternatively the API [addProxyCredentials] can be used
- * to set credentials for proxies which require authentication.
- */
+ /// Function for resolving the proxy server to be used for a HTTP
+ /// connection from the proxy configuration specified through
+ /// environment variables.
+ ///
+ /// The following environment variables are taken into account:
+ ///
+ /// http_proxy
+ /// https_proxy
+ /// no_proxy
+ /// HTTP_PROXY
+ /// HTTPS_PROXY
+ /// NO_PROXY
+ ///
+ /// [:http_proxy:] and [:HTTP_PROXY:] specify the proxy server to use for
+ /// http:// urls. Use the format [:hostname:port:]. If no port is used a
+ /// default of 1080 will be used. If both are set the lower case one takes
+ /// precedence.
+ ///
+ /// [:https_proxy:] and [:HTTPS_PROXY:] specify the proxy server to use for
+ /// https:// urls. Use the format [:hostname:port:]. If no port is used a
+ /// default of 1080 will be used. If both are set the lower case one takes
+ /// precedence.
+ ///
+ /// [:no_proxy:] and [:NO_PROXY:] specify a comma separated list of
+ /// postfixes of hostnames for which not to use the proxy
+ /// server. E.g. the value "localhost,127.0.0.1" will make requests
+ /// to both "localhost" and "127.0.0.1" not use a proxy. If both are set
+ /// the lower case one takes precedence.
+ ///
+ /// To activate this way of resolving proxies assign this function to
+ /// the [findProxy] property on the [HttpClient].
+ ///
+ /// HttpClient client = new HttpClient();
+ /// client.findProxy = HttpClient.findProxyFromEnvironment;
+ ///
+ /// If you don't want to use the system environment you can use a
+ /// different one by wrapping the function.
+ ///
+ /// HttpClient client = new HttpClient();
+ /// client.findProxy = (url) {
+ /// return HttpClient.findProxyFromEnvironment(
+ /// url, environment: {"http_proxy": ..., "no_proxy": ...});
+ /// }
+ ///
+ /// If a proxy requires authentication it is possible to configure
+ /// the username and password as well. Use the format
+ /// [:username:password@hostname:port:] to include the username and
+ /// password. Alternatively the API [addProxyCredentials] can be used
+ /// to set credentials for proxies which require authentication.
static String findProxyFromEnvironment(Uri url,
{Map<String, String> environment}) {
HttpOverrides overrides = HttpOverrides.current;
@@ -1597,54 +1371,48 @@
return overrides.findProxyFromEnvironment(url, environment);
}
- /**
- * Sets the function to be called when a proxy is requesting
- * authentication. Information on the proxy in use and the security
- * realm for the authentication are passed in the arguments `host`,
- * `port` and `realm`.
- *
- * The function returns a [Future] which should complete when the
- * authentication has been resolved. If credentials cannot be
- * provided the [Future] should complete with [:false:]. If
- * credentials are available the function should add these using
- * [addProxyCredentials] before completing the [Future] with the value
- * [:true:].
- *
- * If the [Future] completes with [:true:] the request will be retried
- * using the updated credentials. Otherwise response processing will
- * continue normally.
- */
+ /// Sets the function to be called when a proxy is requesting
+ /// authentication. Information on the proxy in use and the security
+ /// realm for the authentication are passed in the arguments `host`,
+ /// `port` and `realm`.
+ ///
+ /// The function returns a [Future] which should complete when the
+ /// authentication has been resolved. If credentials cannot be
+ /// provided the [Future] should complete with [:false:]. If
+ /// credentials are available the function should add these using
+ /// [addProxyCredentials] before completing the [Future] with the value
+ /// [:true:].
+ ///
+ /// If the [Future] completes with [:true:] the request will be retried
+ /// using the updated credentials. Otherwise response processing will
+ /// continue normally.
set authenticateProxy(
Future<bool> f(String host, int port, String scheme, String realm));
- /**
- * Add credentials to be used for authorizing HTTP proxies.
- */
+ /// Add credentials to be used for authorizing HTTP proxies.
void addProxyCredentials(
String host, int port, String realm, HttpClientCredentials credentials);
- /**
- * Sets a callback that will decide whether to accept a secure connection
- * with a server certificate that cannot be authenticated by any of our
- * trusted root certificates.
- *
- * When an secure HTTP request if made, using this HttpClient, and the
- * server returns a server certificate that cannot be authenticated, the
- * callback is called asynchronously with the [X509Certificate] object and
- * the server's hostname and port. If the value of [badCertificateCallback]
- * is [:null:], the bad certificate is rejected, as if the callback
- * returned [:false:]
- *
- * If the callback returns true, the secure connection is accepted and the
- * [:Future<HttpClientRequest>:] that was returned from the call making the
- * request completes with a valid HttpRequest object. If the callback returns
- * false, the [:Future<HttpClientRequest>:] completes with an exception.
- *
- * If a bad certificate is received on a connection attempt, the library calls
- * the function that was the value of badCertificateCallback at the time
- * the request is made, even if the value of badCertificateCallback
- * has changed since then.
- */
+ /// Sets a callback that will decide whether to accept a secure connection
+ /// with a server certificate that cannot be authenticated by any of our
+ /// trusted root certificates.
+ ///
+ /// When an secure HTTP request if made, using this HttpClient, and the
+ /// server returns a server certificate that cannot be authenticated, the
+ /// callback is called asynchronously with the [X509Certificate] object and
+ /// the server's hostname and port. If the value of [badCertificateCallback]
+ /// is [:null:], the bad certificate is rejected, as if the callback
+ /// returned [:false:]
+ ///
+ /// If the callback returns true, the secure connection is accepted and the
+ /// [:Future<HttpClientRequest>:] that was returned from the call making the
+ /// request completes with a valid HttpRequest object. If the callback returns
+ /// false, the [:Future<HttpClientRequest>:] completes with an exception.
+ ///
+ /// If a bad certificate is received on a connection attempt, the library calls
+ /// the function that was the value of badCertificateCallback at the time
+ /// the request is made, even if the value of badCertificateCallback
+ /// has changed since then.
set badCertificateCallback(
bool callback(X509Certificate cert, String host, int port));
@@ -1656,84 +1424,72 @@
/// closed connections will receive an error event to indicate that the client
/// was shut down. In both cases trying to establish a new connection after
/// calling [close] will throw an exception.
- void close({bool force: false});
+ void close({bool force = false});
}
-/**
- * HTTP request for a client connection.
- *
- * To set up a request, set the headers using the headers property
- * provided in this class and write the data to the body of the request.
- * HttpClientRequest is an [IOSink]. Use the methods from IOSink,
- * such as writeCharCode(), to write the body of the HTTP
- * request. When one of the IOSink methods is used for the first
- * time, the request header is sent. Calling any methods that
- * change the header after it is sent throws an exception.
- *
- * When writing string data through the [IOSink] the
- * encoding used is determined from the "charset" parameter of
- * the "Content-Type" header.
- *
- * HttpClientRequest request = ...
- * request.headers.contentType
- * = new ContentType("application", "json", charset: "utf-8");
- * request.write(...); // Strings written will be UTF-8 encoded.
- *
- * If no charset is provided the default of ISO-8859-1 (Latin 1) is
- * be used.
- *
- * HttpClientRequest request = ...
- * request.headers.add(HttpHeaders.CONTENT_TYPE, "text/plain");
- * request.write(...); // Strings written will be ISO-8859-1 encoded.
- *
- * An exception is thrown if you use an unsupported encoding and the
- * `write()` method being used takes a string parameter.
- */
+/// HTTP request for a client connection.
+///
+/// To set up a request, set the headers using the headers property
+/// provided in this class and write the data to the body of the request.
+/// HttpClientRequest is an [IOSink]. Use the methods from IOSink,
+/// such as writeCharCode(), to write the body of the HTTP
+/// request. When one of the IOSink methods is used for the first
+/// time, the request header is sent. Calling any methods that
+/// change the header after it is sent throws an exception.
+///
+/// When writing string data through the [IOSink] the
+/// encoding used is determined from the "charset" parameter of
+/// the "Content-Type" header.
+///
+/// HttpClientRequest request = ...
+/// request.headers.contentType
+/// = new ContentType("application", "json", charset: "utf-8");
+/// request.write(...); // Strings written will be UTF-8 encoded.
+///
+/// If no charset is provided the default of ISO-8859-1 (Latin 1) is
+/// be used.
+///
+/// HttpClientRequest request = ...
+/// request.headers.add(HttpHeaders.CONTENT_TYPE, "text/plain");
+/// request.write(...); // Strings written will be ISO-8859-1 encoded.
+///
+/// An exception is thrown if you use an unsupported encoding and the
+/// `write()` method being used takes a string parameter.
abstract class HttpClientRequest implements IOSink {
- /**
- * Gets and sets the requested persistent connection state.
- *
- * The default value is [:true:].
- */
+ /// Gets and sets the requested persistent connection state.
+ ///
+ /// The default value is [:true:].
bool persistentConnection;
- /**
- * Set this property to [:true:] if this request should
- * automatically follow redirects. The default is [:true:].
- *
- * Automatic redirect will only happen for "GET" and "HEAD" requests
- * and only for the status codes [:HttpStatus.MOVED_PERMANENTLY:]
- * (301), [:HttpStatus.FOUND:] (302),
- * [:HttpStatus.MOVED_TEMPORARILY:] (302, alias for
- * [:HttpStatus.FOUND:]), [:HttpStatus.SEE_OTHER:] (303) and
- * [:HttpStatus.TEMPORARY_REDIRECT:] (307). For
- * [:HttpStatus.SEE_OTHER:] (303) automatic redirect will also happen
- * for "POST" requests with the method changed to "GET" when
- * following the redirect.
- *
- * All headers added to the request will be added to the redirection
- * request(s). However, any body send with the request will not be
- * part of the redirection request(s).
- */
+ /// Set this property to [:true:] if this request should
+ /// automatically follow redirects. The default is [:true:].
+ ///
+ /// Automatic redirect will only happen for "GET" and "HEAD" requests
+ /// and only for the status codes [:HttpStatus.MOVED_PERMANENTLY:]
+ /// (301), [:HttpStatus.FOUND:] (302),
+ /// [:HttpStatus.MOVED_TEMPORARILY:] (302, alias for
+ /// [:HttpStatus.FOUND:]), [:HttpStatus.SEE_OTHER:] (303) and
+ /// [:HttpStatus.TEMPORARY_REDIRECT:] (307). For
+ /// [:HttpStatus.SEE_OTHER:] (303) automatic redirect will also happen
+ /// for "POST" requests with the method changed to "GET" when
+ /// following the redirect.
+ ///
+ /// All headers added to the request will be added to the redirection
+ /// request(s). However, any body send with the request will not be
+ /// part of the redirection request(s).
bool followRedirects;
- /**
- * Set this property to the maximum number of redirects to follow
- * when [followRedirects] is `true`. If this number is exceeded
- * an error event will be added with a [RedirectException].
- *
- * The default value is 5.
- */
+ /// Set this property to the maximum number of redirects to follow
+ /// when [followRedirects] is `true`. If this number is exceeded
+ /// an error event will be added with a [RedirectException].
+ ///
+ /// The default value is 5.
int maxRedirects;
- /**
- * The method of the request.
- */
+ /// The method of the request.
String get method;
- /**
- * The uri of the request.
- */
+ /// The uri of the request.
Uri get uri;
/// Gets and sets the content length of the request.
@@ -1742,28 +1498,22 @@
/// -1, which is also the default.
int contentLength;
- /**
- * Gets or sets if the [HttpClientRequest] should buffer output.
- *
- * Default value is `true`.
- *
- * __Note__: Disabling buffering of the output can result in very poor
- * performance, when writing many small chunks.
- */
+ /// Gets or sets if the [HttpClientRequest] should buffer output.
+ ///
+ /// Default value is `true`.
+ ///
+ /// __Note__: Disabling buffering of the output can result in very poor
+ /// performance, when writing many small chunks.
bool bufferOutput;
- /**
- * Returns the client request headers.
- *
- * The client request headers can be modified until the client
- * request body is written to or closed. After that they become
- * immutable.
- */
+ /// Returns the client request headers.
+ ///
+ /// The client request headers can be modified until the client
+ /// request body is written to or closed. After that they become
+ /// immutable.
HttpHeaders get headers;
- /**
- * Cookies to present to the server (in the 'cookie' header).
- */
+ /// Cookies to present to the server (in the 'cookie' header).
List<Cookie> get cookies;
/// A [HttpClientResponse] future that will complete once the response is
@@ -1773,9 +1523,7 @@
/// complete with an error.
Future<HttpClientResponse> get done;
- /**
- * Close the request for input. Returns the value of [done].
- */
+ /// Close the request for input. Returns the value of [done].
Future<HttpClientResponse> close();
/// Gets information about the client connection.
@@ -1784,187 +1532,145 @@
HttpConnectionInfo get connectionInfo;
}
-/**
- * HTTP response for a client connection.
- *
- * The body of a [HttpClientResponse] object is a
- * [Stream] of data from the server. Listen to the body to handle
- * the data and be notified when the entire body is received.
- *
- * new HttpClient().get('localhost', 80, '/file.txt')
- * .then((HttpClientRequest request) => request.close())
- * .then((HttpClientResponse response) {
- * response.transform(utf8.decoder).listen((contents) {
- * // handle data
- * });
- * });
- */
+/// HTTP response for a client connection.
+///
+/// The body of a [HttpClientResponse] object is a
+/// [Stream] of data from the server. Listen to the body to handle
+/// the data and be notified when the entire body is received.
+///
+/// new HttpClient().get('localhost', 80, '/file.txt')
+/// .then((HttpClientRequest request) => request.close())
+/// .then((HttpClientResponse response) {
+/// response.transform(utf8.decoder).listen((contents) {
+/// // handle data
+/// });
+/// });
abstract class HttpClientResponse implements Stream<List<int>> {
- /**
- * Returns the status code.
- *
- * The status code must be set before the body is written
- * to. Setting the status code after writing to the body will throw
- * a `StateError`.
- */
+ /// Returns the status code.
+ ///
+ /// The status code must be set before the body is written
+ /// to. Setting the status code after writing to the body will throw
+ /// a `StateError`.
int get statusCode;
- /**
- * Returns the reason phrase associated with the status code.
- *
- * The reason phrase must be set before the body is written
- * to. Setting the reason phrase after writing to the body will throw
- * a `StateError`.
- */
+ /// Returns the reason phrase associated with the status code.
+ ///
+ /// The reason phrase must be set before the body is written
+ /// to. Setting the reason phrase after writing to the body will throw
+ /// a `StateError`.
String get reasonPhrase;
- /**
- * Returns the content length of the response body. Returns -1 if the size of
- * the response body is not known in advance.
- *
- * If the content length needs to be set, it must be set before the
- * body is written to. Setting the reason phrase after writing to
- * the body will throw a `StateError`.
- */
+ /// Returns the content length of the response body. Returns -1 if the size of
+ /// the response body is not known in advance.
+ ///
+ /// If the content length needs to be set, it must be set before the
+ /// body is written to. Setting the reason phrase after writing to
+ /// the body will throw a `StateError`.
int get contentLength;
- /**
- * Gets the persistent connection state returned by the server.
- *
- * if the persistent connection state needs to be set, it must be
- * set before the body is written to. Setting the reason phrase
- * after writing to the body will throw a `StateError`.
- */
+ /// Gets the persistent connection state returned by the server.
+ ///
+ /// if the persistent connection state needs to be set, it must be
+ /// set before the body is written to. Setting the reason phrase
+ /// after writing to the body will throw a `StateError`.
bool get persistentConnection;
- /**
- * Returns whether the status code is one of the normal redirect
- * codes [HttpStatus.MOVED_PERMANENTLY], [HttpStatus.FOUND],
- * [HttpStatus.MOVED_TEMPORARILY], [HttpStatus.SEE_OTHER] and
- * [HttpStatus.TEMPORARY_REDIRECT].
- */
+ /// Returns whether the status code is one of the normal redirect
+ /// codes [HttpStatus.MOVED_PERMANENTLY], [HttpStatus.FOUND],
+ /// [HttpStatus.MOVED_TEMPORARILY], [HttpStatus.SEE_OTHER] and
+ /// [HttpStatus.TEMPORARY_REDIRECT].
bool get isRedirect;
- /**
- * Returns the series of redirects this connection has been through. The
- * list will be empty if no redirects were followed. [redirects] will be
- * updated both in the case of an automatic and a manual redirect.
- */
+ /// Returns the series of redirects this connection has been through. The
+ /// list will be empty if no redirects were followed. [redirects] will be
+ /// updated both in the case of an automatic and a manual redirect.
List<RedirectInfo> get redirects;
- /**
- * Redirects this connection to a new URL. The default value for
- * [method] is the method for the current request. The default value
- * for [url] is the value of the [HttpHeaders.LOCATION] header of
- * the current response. All body data must have been read from the
- * current response before calling [redirect].
- *
- * All headers added to the request will be added to the redirection
- * request. However, any body sent with the request will not be
- * part of the redirection request.
- *
- * If [followLoops] is set to [:true:], redirect will follow the redirect,
- * even if the URL was already visited. The default value is [:false:].
- *
- * The method will ignore [HttpClientRequest.maxRedirects]
- * and will always perform the redirect.
- */
+ /// Redirects this connection to a new URL. The default value for
+ /// [method] is the method for the current request. The default value
+ /// for [url] is the value of the [HttpHeaders.LOCATION] header of
+ /// the current response. All body data must have been read from the
+ /// current response before calling [redirect].
+ ///
+ /// All headers added to the request will be added to the redirection
+ /// request. However, any body sent with the request will not be
+ /// part of the redirection request.
+ ///
+ /// If [followLoops] is set to [:true:], redirect will follow the redirect,
+ /// even if the URL was already visited. The default value is [:false:].
+ ///
+ /// The method will ignore [HttpClientRequest.maxRedirects]
+ /// and will always perform the redirect.
Future<HttpClientResponse> redirect(
[String method, Uri url, bool followLoops]);
- /**
- * Returns the client response headers.
- *
- * The client response headers are immutable.
- */
+ /// Returns the client response headers.
+ ///
+ /// The client response headers are immutable.
HttpHeaders get headers;
- /**
- * Detach the underlying socket from the HTTP client. When the
- * socket is detached the HTTP client will no longer perform any
- * operations on it.
- *
- * This is normally used when a HTTP upgrade is negotiated and the
- * communication should continue with a different protocol.
- */
+ /// Detach the underlying socket from the HTTP client. When the
+ /// socket is detached the HTTP client will no longer perform any
+ /// operations on it.
+ ///
+ /// This is normally used when a HTTP upgrade is negotiated and the
+ /// communication should continue with a different protocol.
Future<Socket> detachSocket();
- /**
- * Cookies set by the server (from the 'set-cookie' header).
- */
+ /// Cookies set by the server (from the 'set-cookie' header).
List<Cookie> get cookies;
- /**
- * Returns the certificate of the HTTPS server providing the response.
- * Returns null if the connection is not a secure TLS or SSL connection.
- */
+ /// Returns the certificate of the HTTPS server providing the response.
+ /// Returns null if the connection is not a secure TLS or SSL connection.
X509Certificate get certificate;
- /**
- * Gets information about the client connection. Returns [:null:] if the socket
- * is not available.
- */
+ /// Gets information about the client connection. Returns [:null:] if the socket
+ /// is not available.
HttpConnectionInfo get connectionInfo;
}
abstract class HttpClientCredentials {}
-/**
- * Represents credentials for basic authentication.
- */
+/// Represents credentials for basic authentication.
abstract class HttpClientBasicCredentials extends HttpClientCredentials {
factory HttpClientBasicCredentials(String username, String password) =>
- new _HttpClientBasicCredentials(username, password);
+ _HttpClientBasicCredentials(username, password);
}
-/**
- * Represents credentials for digest authentication. Digest
- * authentication is only supported for servers using the MD5
- * algorithm and quality of protection (qop) of either "none" or
- * "auth".
- */
+/// Represents credentials for digest authentication. Digest
+/// authentication is only supported for servers using the MD5
+/// algorithm and quality of protection (qop) of either "none" or
+/// "auth".
abstract class HttpClientDigestCredentials extends HttpClientCredentials {
factory HttpClientDigestCredentials(String username, String password) =>
- new _HttpClientDigestCredentials(username, password);
+ _HttpClientDigestCredentials(username, password);
}
-/**
- * Information about an [HttpRequest], [HttpResponse], [HttpClientRequest], or
- * [HttpClientResponse] connection.
- */
+/// Information about an [HttpRequest], [HttpResponse], [HttpClientRequest], or
+/// [HttpClientResponse] connection.
abstract class HttpConnectionInfo {
InternetAddress get remoteAddress;
int get remotePort;
int get localPort;
}
-/**
- * Redirect information.
- */
+/// Redirect information.
abstract class RedirectInfo {
- /**
- * Returns the status code used for the redirect.
- */
+ /// Returns the status code used for the redirect.
int get statusCode;
- /**
- * Returns the method used for the redirect.
- */
+ /// Returns the method used for the redirect.
String get method;
- /**
- * Returns the location for the redirect.
- */
+ /// Returns the location for the redirect.
Uri get location;
}
-/**
- * When detaching a socket from either the [:HttpServer:] or the
- * [:HttpClient:] due to a HTTP connection upgrade there might be
- * unparsed data already read from the socket. This unparsed data
- * together with the detached socket is returned in an instance of
- * this class.
- */
+/// When detaching a socket from either the [:HttpServer:] or the
+/// [:HttpClient:] due to a HTTP connection upgrade there might be
+/// unparsed data already read from the socket. This unparsed data
+/// together with the detached socket is returned in an instance of
+/// this class.
abstract class DetachedSocket {
Socket get socket;
List<int> get unparsedData;
diff --git a/lib/src/char_code.dart b/lib/src/char_code.dart
index b219ae6..75c8800 100644
--- a/lib/src/char_code.dart
+++ b/lib/src/char_code.dart
@@ -5,18 +5,18 @@
// Global constants.
class Const {
// Bytes for "HTTP".
- static const HTTP = const [72, 84, 84, 80];
+ static const HTTP = [72, 84, 84, 80];
// Bytes for "HTTP/1.".
- static const HTTP1DOT = const [72, 84, 84, 80, 47, 49, 46];
+ static const HTTP1DOT = [72, 84, 84, 80, 47, 49, 46];
// Bytes for "HTTP/1.0".
- static const HTTP10 = const [72, 84, 84, 80, 47, 49, 46, 48];
+ static const HTTP10 = [72, 84, 84, 80, 47, 49, 46, 48];
// Bytes for "HTTP/1.1".
- static const HTTP11 = const [72, 84, 84, 80, 47, 49, 46, 49];
+ static const HTTP11 = [72, 84, 84, 80, 47, 49, 46, 49];
static const bool T = true;
static const bool F = false;
// Lookup-map for the following characters: '()<>@,;:\\"/[]?={} \t'.
- static const SEPARATOR_MAP = const [
+ static const SEPARATOR_MAP = [
F, F, F, F, F, F, F, F, F, T, F, F, F, F, F, F, F, F, F, F, F, F, F, F, //
F, F, F, F, F, F, F, F, T, F, T, F, F, F, F, F, T, T, F, F, T, F, F, T, //
F, F, F, F, F, F, F, F, F, F, T, T, T, T, T, T, T, F, F, F, F, F, F, F, //
diff --git a/lib/src/crypto.dart b/lib/src/crypto.dart
index 5b2eab9..2b73395 100644
--- a/lib/src/crypto.dart
+++ b/lib/src/crypto.dart
@@ -22,7 +22,7 @@
// -1 : '\r' or '\n'
// 0 : = (Padding character).
// >0 : Base 64 alphabet index of given byte.
- static const List<int> _decodeTable = const [
+ static const List<int> _decodeTable = [
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -2, -2, -1, -2, -2, //
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, //
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 62, -2, 62, -2, 63, //
@@ -41,10 +41,10 @@
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2
];
- static final Random _rng = new Random.secure();
+ static final Random _rng = Random.secure();
static Uint8List getRandomBytes(int count) {
- final Uint8List result = new Uint8List(count);
+ final Uint8List result = Uint8List(count);
for (int i = 0; i < count; i++) {
result[i] = _rng.nextInt(0xff);
}
@@ -52,7 +52,7 @@
}
static String bytesToHex(List<int> bytes) {
- var result = new StringBuffer();
+ var result = StringBuffer();
for (var part in bytes) {
result.write('${part < 16 ? '0' : ''}${part.toRadixString(16)}');
}
@@ -75,7 +75,7 @@
if (addLineSeparator) {
outputLen += ((outputLen - 1) ~/ LINE_LENGTH) << 1;
}
- List<int> out = new List<int>(outputLen);
+ List<int> out = List<int>(outputLen);
// Encode 24 bit chunks.
int j = 0, i = 0, c = 0;
@@ -112,14 +112,14 @@
out[j++] = PAD;
}
- return new String.fromCharCodes(out);
+ return String.fromCharCodes(out);
}
static List<int> base64StringToBytes(String input,
[bool ignoreInvalidCharacters = true]) {
int len = input.length;
if (len == 0) {
- return new List<int>(0);
+ return List<int>(0);
}
// Count '\r', '\n' and illegal characters, For illegal characters,
@@ -130,13 +130,13 @@
if (c < 0) {
extrasLen++;
if (c == -2 && !ignoreInvalidCharacters) {
- throw new FormatException('Invalid character: ${input[i]}');
+ throw FormatException('Invalid character: ${input[i]}');
}
}
}
if ((len - extrasLen) % 4 != 0) {
- throw new FormatException('''Size of Base 64 characters in Input
+ throw FormatException('''Size of Base 64 characters in Input
must be a multiple of 4. Input: $input''');
}
@@ -148,7 +148,7 @@
if (currentCodeUnit == PAD) padLength++;
}
int outputLen = (((len - extrasLen) * 6) >> 3) - padLength;
- List<int> out = new List<int>(outputLen);
+ List<int> out = List<int>(outputLen);
for (int i = 0, o = 0; o < outputLen;) {
// Accumulate 4 valid 6 bit Base 64 characters into an int.
@@ -192,15 +192,14 @@
HashBase(
this._chunkSizeInWords, this._digestSizeInWords, this._bigEndianWords)
: _pendingData = [] {
- _currentChunk = new List(_chunkSizeInWords);
- _h = new List(_digestSizeInWords);
+ _currentChunk = List(_chunkSizeInWords);
+ _h = List(_digestSizeInWords);
}
// Update the hasher with more data.
add(List<int> data) {
if (_digestCalled) {
- throw new StateError(
- 'Hash update method called after digest was retrieved');
+ throw StateError('Hash update method called after digest was retrieved');
}
_lengthInBytes += data.length;
_pendingData.addAll(data);
@@ -270,7 +269,7 @@
// Convert a 32-bit word to four bytes.
List<int> _wordToBytes(int word) {
- List<int> bytes = new List(_BYTES_PER_WORD);
+ List<int> bytes = List(_BYTES_PER_WORD);
bytes[0] = (word >> (_bigEndianWords ? 24 : 0)) & _MASK_8;
bytes[1] = (word >> (_bigEndianWords ? 16 : 8)) & _MASK_8;
bytes[2] = (word >> (_bigEndianWords ? 8 : 16)) & _MASK_8;
@@ -327,10 +326,10 @@
// Returns a new instance of this Hash.
MD5 newInstance() {
- return new MD5();
+ return MD5();
}
- static const _k = const [
+ static const _k = [
0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, //
0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, //
0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340, //
@@ -344,7 +343,7 @@
0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
];
- static const _r = const [
+ static const _r = [
7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, //
20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, //
16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, //
diff --git a/lib/src/http_date.dart b/lib/src/http_date.dart
index 93c4def..e84216c 100644
--- a/lib/src/http_date.dart
+++ b/lib/src/http_date.dart
@@ -4,10 +4,8 @@
import 'http_exception.dart';
-/**
- * Utility functions for working with dates with HTTP specific date
- * formats.
- */
+/// Utility functions for working with dates with HTTP specific date
+/// formats.
class HttpDate {
// From RFC-2616 section "3.3.1 Full Date",
// http://tools.ietf.org/html/rfc2616#section-3.3.1
@@ -32,14 +30,12 @@
// | "May" | "Jun" | "Jul" | "Aug"
// | "Sep" | "Oct" | "Nov" | "Dec"
- /**
- * Format a date according to
- * [RFC-1123](http://tools.ietf.org/html/rfc1123 "RFC-1123"),
- * e.g. `Thu, 1 Jan 1970 00:00:00 GMT`.
- */
+ /// Format a date according to
+ /// [RFC-1123](http://tools.ietf.org/html/rfc1123 "RFC-1123"),
+ /// e.g. `Thu, 1 Jan 1970 00:00:00 GMT`.
static String format(DateTime date) {
- const List wkday = const ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
- const List month = const [
+ const List wkday = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
+ const List month = [
"Jan",
"Feb",
"Mar",
@@ -55,7 +51,7 @@
];
DateTime d = date.toUtc();
- StringBuffer sb = new StringBuffer()
+ StringBuffer sb = StringBuffer()
..write(wkday[d.weekday - 1])
..write(", ")
..write(d.day <= 9 ? "0" : "")
@@ -74,24 +70,21 @@
return sb.toString();
}
- /**
- * Parse a date string in either of the formats
- * [RFC-1123](http://tools.ietf.org/html/rfc1123 "RFC-1123"),
- * [RFC-850](http://tools.ietf.org/html/rfc850 "RFC-850") or
- * ANSI C's asctime() format. These formats are listed here.
- *
- * Thu, 1 Jan 1970 00:00:00 GMT
- * Thursday, 1-Jan-1970 00:00:00 GMT
- * Thu Jan 1 00:00:00 1970
- *
- * For more information see [RFC-2616 section
- * 3.1.1](http://tools.ietf.org/html/rfc2616#section-3.3.1
- * "RFC-2616 section 3.1.1").
- */
+ /// Parse a date string in either of the formats
+ /// [RFC-1123](http://tools.ietf.org/html/rfc1123 "RFC-1123"),
+ /// [RFC-850](http://tools.ietf.org/html/rfc850 "RFC-850") or
+ /// ANSI C's asctime() format. These formats are listed here.
+ ///
+ /// Thu, 1 Jan 1970 00:00:00 GMT
+ /// Thursday, 1-Jan-1970 00:00:00 GMT
+ /// Thu Jan 1 00:00:00 1970
+ ///
+ /// For more information see
+ /// [RFC-2616 section 3.1.1](https://tools.ietf.org/html/rfc2616#section-3.3.1).
static DateTime parse(String date) {
final int SP = 32;
- const List wkdays = const ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
- const List weekdays = const [
+ const List wkdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
+ const List weekdays = [
"Monday",
"Tuesday",
"Wednesday",
@@ -100,7 +93,7 @@
"Saturday",
"Sunday"
];
- const List months = const [
+ const List months = [
"Jan",
"Feb",
"Mar",
@@ -125,11 +118,11 @@
void expect(String s) {
if (date.length - index < s.length) {
- throw new HttpException("Invalid HTTP date $date");
+ throw HttpException("Invalid HTTP date $date");
}
String tmp = date.substring(index, index + s.length);
if (tmp != s) {
- throw new HttpException("Invalid HTTP date $date");
+ throw HttpException("Invalid HTTP date $date");
}
index += s.length;
}
@@ -140,7 +133,7 @@
int pos = date.indexOf(",", index);
if (pos == -1) {
int pos = date.indexOf(" ", index);
- if (pos == -1) throw new HttpException("Invalid HTTP date $date");
+ if (pos == -1) throw HttpException("Invalid HTTP date $date");
tmp = date.substring(index, pos);
index = pos + 1;
weekday = wkdays.indexOf(tmp);
@@ -162,17 +155,17 @@
return weekday;
}
}
- throw new HttpException("Invalid HTTP date $date");
+ throw HttpException("Invalid HTTP date $date");
}
int expectMonth(String separator) {
int pos = date.indexOf(separator, index);
- if (pos - index != 3) throw new HttpException("Invalid HTTP date $date");
+ if (pos - index != 3) throw HttpException("Invalid HTTP date $date");
tmp = date.substring(index, pos);
index = pos + 1;
int month = months.indexOf(tmp);
if (month != -1) return month;
- throw new HttpException("Invalid HTTP date $date");
+ throw HttpException("Invalid HTTP date $date");
}
int expectNum(String separator) {
@@ -188,13 +181,13 @@
int value = int.parse(tmp);
return value;
} on FormatException {
- throw new HttpException("Invalid HTTP date $date");
+ throw HttpException("Invalid HTTP date $date");
}
}
void expectEnd() {
if (index != date.length) {
- throw new HttpException("Invalid HTTP date $date");
+ throw HttpException("Invalid HTTP date $date");
}
}
@@ -224,6 +217,6 @@
expect("GMT");
}
expectEnd();
- return new DateTime.utc(year, month + 1, day, hours, minutes, seconds, 0);
+ return DateTime.utc(year, month + 1, day, hours, minutes, seconds, 0);
}
}
diff --git a/lib/src/http_exception.dart b/lib/src/http_exception.dart
index 49bd25d..4330afa 100644
--- a/lib/src/http_exception.dart
+++ b/lib/src/http_exception.dart
@@ -11,7 +11,7 @@
const HttpException(this.message, {this.uri});
String toString() {
- var b = new StringBuffer()..write('HttpException: ')..write(message);
+ var b = StringBuffer()..write('HttpException: ')..write(message);
if (uri != null) {
b.write(', uri = $uri');
}
diff --git a/lib/src/http_headers_impl.dart b/lib/src/http_headers_impl.dart
index 5dcffce..71891a8 100644
--- a/lib/src/http_headers_impl.dart
+++ b/lib/src/http_headers_impl.dart
@@ -28,9 +28,9 @@
final int _defaultPortForScheme;
HttpHeadersImpl(this.protocolVersion,
- {int defaultPortForScheme: HttpClient.DEFAULT_HTTP_PORT,
+ {int defaultPortForScheme = HttpClient.DEFAULT_HTTP_PORT,
HttpHeadersImpl initialHeaders})
- : headers = new HashMap<String, List<String>>(),
+ : headers = HashMap<String, List<String>>(),
_defaultPortForScheme = defaultPortForScheme {
if (initialHeaders != null) {
initialHeaders.headers.forEach((name, value) => headers[name] = value);
@@ -53,7 +53,7 @@
List<String> values = headers[name];
if (values == null) return null;
if (values.length > 1) {
- throw new HttpException("More than one value for header $name");
+ throw HttpException("More than one value for header $name");
}
return values[0];
}
@@ -112,13 +112,13 @@
}
void noFolding(String name) {
- _noFoldingHeaders ??= new List<String>();
+ _noFoldingHeaders ??= List<String>();
_noFoldingHeaders.add(name);
}
bool get persistentConnection => _persistentConnection;
- void set persistentConnection(bool persistentConnection) {
+ set persistentConnection(bool persistentConnection) {
_checkMutable();
if (persistentConnection == _persistentConnection) return;
if (persistentConnection) {
@@ -126,7 +126,7 @@
remove(HttpHeaders.CONNECTION, "close");
} else {
if (_contentLength == -1) {
- throw new HttpException(
+ throw HttpException(
"Trying to set 'Connection: Keep-Alive' on HTTP 1.0 headers with "
"no ContentLength");
}
@@ -144,12 +144,12 @@
int get contentLength => _contentLength;
- void set contentLength(int contentLength) {
+ set contentLength(int contentLength) {
_checkMutable();
if (protocolVersion == "1.0" &&
persistentConnection &&
contentLength == -1) {
- throw new HttpException(
+ throw HttpException(
"Trying to clear ContentLength on HTTP 1.0 headers with "
"'Connection: Keep-Alive' set");
}
@@ -168,10 +168,10 @@
bool get chunkedTransferEncoding => _chunkedTransferEncoding;
- void set chunkedTransferEncoding(bool chunkedTransferEncoding) {
+ set chunkedTransferEncoding(bool chunkedTransferEncoding) {
_checkMutable();
if (chunkedTransferEncoding && protocolVersion == "1.0") {
- throw new HttpException(
+ throw HttpException(
"Trying to set 'Transfer-Encoding: Chunked' on HTTP 1.0 headers");
}
if (chunkedTransferEncoding == _chunkedTransferEncoding) return;
@@ -191,7 +191,7 @@
String get host => _host;
- void set host(String host) {
+ set host(String host) {
_checkMutable();
_host = host;
_updateHostHeader();
@@ -199,7 +199,7 @@
int get port => _port;
- void set port(int port) {
+ set port(int port) {
_checkMutable();
_port = port;
_updateHostHeader();
@@ -217,7 +217,7 @@
return null;
}
- void set ifModifiedSince(DateTime ifModifiedSince) {
+ set ifModifiedSince(DateTime ifModifiedSince) {
_checkMutable();
// Format "ifModifiedSince" header with date in Greenwich Mean Time (GMT).
String formatted = HttpDate.format(ifModifiedSince.toUtc());
@@ -236,7 +236,7 @@
return null;
}
- void set date(DateTime date) {
+ set date(DateTime date) {
_checkMutable();
// Format "DateTime" header with date in Greenwich Mean Time (GMT).
String formatted = HttpDate.format(date.toUtc());
@@ -255,7 +255,7 @@
return null;
}
- void set expires(DateTime expires) {
+ set expires(DateTime expires) {
_checkMutable();
// Format "Expires" header with date in Greenwich Mean Time (GMT).
String formatted = HttpDate.format(expires.toUtc());
@@ -271,7 +271,7 @@
}
}
- void set contentType(ContentType contentType) {
+ set contentType(ContentType contentType) {
_checkMutable();
_set(HttpHeaders.CONTENT_TYPE, contentType.toString());
}
@@ -345,7 +345,7 @@
} else if (value is String) {
contentLength = int.parse(value);
} else {
- throw new HttpException("Unexpected type for header named $name");
+ throw HttpException("Unexpected type for header named $name");
}
}
@@ -363,7 +363,7 @@
} else if (value is String) {
_set(HttpHeaders.DATE, value);
} else {
- throw new HttpException("Unexpected type for header named $name");
+ throw HttpException("Unexpected type for header named $name");
}
}
@@ -373,7 +373,7 @@
} else if (value is String) {
_set(HttpHeaders.EXPIRES, value);
} else {
- throw new HttpException("Unexpected type for header named $name");
+ throw HttpException("Unexpected type for header named $name");
}
}
@@ -383,7 +383,7 @@
} else if (value is String) {
_set(HttpHeaders.IF_MODIFIED_SINCE, value);
} else {
- throw new HttpException("Unexpected type for header named $name");
+ throw HttpException("Unexpected type for header named $name");
}
}
@@ -411,7 +411,7 @@
}
_set(HttpHeaders.HOST, value);
} else {
- throw new HttpException("Unexpected type for header named $name");
+ throw HttpException("Unexpected type for header named $name");
}
}
@@ -432,7 +432,7 @@
void _addValue(String name, Object value) {
List<String> values = headers[name];
if (values == null) {
- values = new List<String>();
+ values = List<String>();
headers[name] = values;
}
if (value is DateTime) {
@@ -446,13 +446,13 @@
void _set(String name, String value) {
assert(name == _validateField(name));
- List<String> values = new List<String>();
+ List<String> values = List<String>();
headers[name] = values;
values.add(value);
}
_checkMutable() {
- if (!mutable) throw new HttpException("HTTP headers are not mutable");
+ if (!mutable) throw HttpException("HTTP headers are not mutable");
}
_updateHostHeader() {
@@ -462,7 +462,7 @@
_foldHeader(String name) {
if (name == HttpHeaders.SET_COOKIE ||
- (_noFoldingHeaders != null && _noFoldingHeaders.indexOf(name) != -1)) {
+ (_noFoldingHeaders != null && _noFoldingHeaders.contains(name))) {
return false;
}
return true;
@@ -501,7 +501,7 @@
}
String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuffer sb = StringBuffer();
headers.forEach((String name, List<String> values) {
sb..write(name)..write(": ");
bool fold = _foldHeader(name);
@@ -522,7 +522,7 @@
List<Cookie> parseCookies() {
// Parse a Cookie header value according to the rules in RFC 6265.
- var cookies = new List<Cookie>();
+ var cookies = List<Cookie>();
void parseCookieString(String s) {
int index = 0;
@@ -572,7 +572,7 @@
skipWS();
String value = parseValue();
try {
- cookies.add(new CookieImpl(name, value));
+ cookies.add(CookieImpl(name, value));
} catch (_) {
// Skip it, invalid cookie data.
}
@@ -595,7 +595,7 @@
static String _validateField(String field) {
for (var i = 0; i < field.length; i++) {
if (!CharCode.isTokenChar(field.codeUnitAt(i))) {
- throw new FormatException(
+ throw FormatException(
"Invalid HTTP header field name: ${jsonEncode(field)}");
}
}
@@ -606,7 +606,7 @@
if (value is String) {
for (var i = 0; i < value.length; i++) {
if (!CharCode.isValueChar(value.codeUnitAt(i))) {
- throw new FormatException(
+ throw FormatException(
"Invalid HTTP header field value: ${jsonEncode(value)}");
}
}
@@ -622,16 +622,16 @@
HeaderValueImpl([this._value = "", Map<String, String> parameters]) {
if (parameters != null) {
- _parameters = new HashMap<String, String>.from(parameters);
+ _parameters = HashMap<String, String>.from(parameters);
}
}
static HeaderValueImpl parse(String value,
- {String parameterSeparator: ";",
+ {String parameterSeparator = ";",
String valueSeparator,
- bool preserveBackslash: false}) {
+ bool preserveBackslash = false}) {
// Parse the string.
- var result = new HeaderValueImpl();
+ var result = HeaderValueImpl();
result._parse(value, parameterSeparator, valueSeparator, preserveBackslash);
return result;
}
@@ -639,18 +639,18 @@
String get value => _value;
void _ensureParameters() {
- _parameters ??= new HashMap<String, String>();
+ _parameters ??= HashMap<String, String>();
}
Map<String, String> get parameters {
_ensureParameters();
- _unmodifiableParameters ??= new UnmodifiableMapView(_parameters);
+ _unmodifiableParameters ??= UnmodifiableMapView(_parameters);
return _unmodifiableParameters;
}
String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuffer sb = StringBuffer();
sb.write(_value);
if (parameters != null && parameters.isNotEmpty) {
_parameters.forEach((String name, String value) {
@@ -687,7 +687,7 @@
void expect(String expected) {
if (done() || s[index] != expected) {
- throw new HttpException("Failed to parse header value");
+ throw HttpException("Failed to parse header value");
}
index++;
}
@@ -697,8 +697,8 @@
}
void parseParameters() {
- var parameters = new HashMap<String, String>();
- _parameters = new UnmodifiableMapView(parameters);
+ var parameters = HashMap<String, String>();
+ _parameters = UnmodifiableMapView(parameters);
String parseParameterName() {
int start = index;
@@ -716,12 +716,12 @@
String parseParameterValue() {
if (!done() && s[index] == "\"") {
// Parse quoted value.
- StringBuffer sb = new StringBuffer();
+ StringBuffer sb = StringBuffer();
index++;
while (!done()) {
if (s[index] == "\\") {
if (index + 1 == s.length) {
- throw new HttpException("Failed to parse header value");
+ throw HttpException("Failed to parse header value");
}
if (preserveBackslash && s[index + 1] != "\"") {
sb.write(s[index]);
@@ -811,7 +811,7 @@
ContentTypeImpl._();
static ContentTypeImpl parse(String value) {
- var result = new ContentTypeImpl._();
+ var result = ContentTypeImpl._();
result._parse(value, ";", null, false);
int index = result._value.indexOf("/");
if (index == -1 || index == (result._value.length - 1)) {
@@ -924,7 +924,7 @@
name = parseName();
if (done() || name.isEmpty) {
- throw new HttpException("Failed to parse header value [$s]");
+ throw HttpException("Failed to parse header value [$s]");
}
index++; // Skip the = character.
value = parseValue();
@@ -935,7 +935,7 @@
}
String toString() {
- StringBuffer sb = new StringBuffer();
+ StringBuffer sb = StringBuffer();
sb..write(name)..write("=")..write(value);
if (expires != null) {
sb..write("; Expires=")..write(HttpDate.format(expires));
@@ -955,7 +955,7 @@
}
void _validate() {
- const SEPERATORS = const [
+ const SEPERATORS = [
"(",
")",
"<",
@@ -976,10 +976,8 @@
];
for (int i = 0; i < name.length; i++) {
int codeUnit = name.codeUnits[i];
- if (codeUnit <= 32 ||
- codeUnit >= 127 ||
- SEPERATORS.indexOf(name[i]) >= 0) {
- throw new FormatException(
+ if (codeUnit <= 32 || codeUnit >= 127 || SEPERATORS.contains(name[i])) {
+ throw FormatException(
"Invalid character in cookie name, code unit: '$codeUnit'");
}
}
@@ -990,7 +988,7 @@
(codeUnit >= 0x2D && codeUnit <= 0x3A) ||
(codeUnit >= 0x3C && codeUnit <= 0x5B) ||
(codeUnit >= 0x5D && codeUnit <= 0x7E))) {
- throw new FormatException(
+ throw FormatException(
"Invalid character in cookie value, code unit: '$codeUnit'");
}
}
@@ -999,7 +997,7 @@
// Parse a cookie date string.
DateTime parseCookieDate(String date) {
- const List monthsLowerCase = const [
+ const List monthsLowerCase = [
"jan",
"feb",
"mar",
@@ -1017,7 +1015,7 @@
int position = 0;
void error() {
- throw new HttpException("Invalid cookie date $date");
+ throw HttpException("Invalid cookie date $date");
}
bool isEnd() => position == date.length;
@@ -1057,18 +1055,23 @@
int toInt(String s) {
int index = 0;
-// ignore: empty_statements
- for (; index < s.length && isDigit(s[index]); index++);
+ for (; index < s.length && isDigit(s[index]); index++) {}
return int.parse(s.substring(0, index));
}
var tokens = <String>[];
while (!isEnd()) {
- while (!isEnd() && isDelimiter(date[position])) position++;
+ while (!isEnd() && isDelimiter(date[position])) {
+ position++;
+ }
int start = position;
- while (!isEnd() && isNonDelimiter(date[position])) position++;
+ while (!isEnd() && isNonDelimiter(date[position])) {
+ position++;
+ }
tokens.add(date.substring(start, position).toLowerCase());
- while (!isEnd() && isDelimiter(date[position])) position++;
+ while (!isEnd() && isDelimiter(date[position])) {
+ position++;
+ }
}
String timeStr;
@@ -1103,9 +1106,9 @@
}
int year = toInt(yearStr);
- if (year >= 70 && year <= 99)
+ if (year >= 70 && year <= 99) {
year += 1900;
- else if (year >= 0 && year <= 69) year += 2000;
+ } else if (year >= 0 && year <= 69) year += 2000;
if (year < 1601) error();
int dayOfMonth = toInt(dayOfMonthStr);
@@ -1122,5 +1125,5 @@
if (minute > 59) error();
if (second > 59) error();
- return new DateTime.utc(year, month, dayOfMonth, hour, minute, second, 0);
+ return DateTime.utc(year, month, dayOfMonth, hour, minute, second, 0);
}
diff --git a/lib/src/http_impl.dart b/lib/src/http_impl.dart
index e533e3e..51cb0b1 100644
--- a/lib/src/http_impl.dart
+++ b/lib/src/http_impl.dart
@@ -8,7 +8,7 @@
// Start with 1024 bytes.
static const int _INIT_SIZE = 1024;
- static final _emptyList = new Uint8List(0);
+ static final _emptyList = Uint8List(0);
int _length = 0;
Uint8List _buffer;
@@ -16,7 +16,7 @@
_CopyingBytesBuilder([int initialCapacity = 0])
: _buffer = (initialCapacity <= 0)
? _emptyList
- : new Uint8List(_pow2roundup(initialCapacity));
+ : Uint8List(_pow2roundup(initialCapacity));
void add(List<int> bytes) {
int bytesLength = bytes.length;
@@ -56,22 +56,21 @@
} else {
newSize = _pow2roundup(newSize);
}
- var newBuffer = new Uint8List(newSize);
+ var newBuffer = Uint8List(newSize);
newBuffer.setRange(0, _buffer.length, _buffer);
_buffer = newBuffer;
}
Uint8List takeBytes() {
if (_length == 0) return _emptyList;
- var buffer = new Uint8List.view(_buffer.buffer, 0, _length);
+ var buffer = Uint8List.view(_buffer.buffer, 0, _length);
clear();
return buffer;
}
Uint8List toBytes() {
if (_length == 0) return _emptyList;
- return new Uint8List.fromList(
- new Uint8List.view(_buffer.buffer, 0, _length));
+ return Uint8List.fromList(Uint8List.view(_buffer.buffer, 0, _length));
}
int get length => _length;
@@ -99,7 +98,7 @@
const int _OUTGOING_BUFFER_SIZE = 8 * 1024;
-typedef void _BytesConsumer(List<int> bytes);
+typedef _BytesConsumer = void Function(List<int> bytes);
abstract class _HttpInboundMessage extends Stream<List<int>> {
final HttpIncoming _incoming;
@@ -234,16 +233,16 @@
X509Certificate get certificate {
var socket = _httpRequest._httpClientConnection._socket;
if (socket is SecureSocket) return socket.peerCertificate;
- throw new UnsupportedError("Socket is not a SecureSocket");
+ throw UnsupportedError("Socket is not a SecureSocket");
}
List<Cookie> get cookies {
if (_cookies != null) return _cookies;
- _cookies = new List<Cookie>();
+ _cookies = List<Cookie>();
List<String> values = headers[HttpHeaders.SET_COOKIE];
if (values != null) {
values.forEach((value) {
- _cookies.add(new Cookie.fromSetCookieValue(value));
+ _cookies.add(Cookie.fromSetCookieValue(value));
});
}
return _cookies;
@@ -274,15 +273,15 @@
if (url == null) {
String location = headers.value(HttpHeaders.LOCATION);
if (location == null) {
- throw new StateError("Response has no Location header for redirect");
+ throw StateError("Response has no Location header for redirect");
}
url = Uri.parse(location);
}
if (followLoops != true) {
for (var redirect in redirects) {
if (redirect.location == url) {
- return new Future.error(
- new RedirectException("Redirect loop detected", redirects));
+ return Future.error(
+ RedirectException("Redirect loop detected", redirects));
}
}
}
@@ -291,7 +290,7 @@
.then((request) {
request._responseRedirects
..addAll(this.redirects)
- ..add(new _RedirectInfo(statusCode, method, url));
+ ..add(_RedirectInfo(statusCode, method, url));
return request.close();
});
}
@@ -303,7 +302,7 @@
// Since listening to upgraded data is 'bogus', simply close and
// return empty stream subscription.
_httpRequest._httpClientConnection.destroy();
- return new Stream<List<int>>.empty().listen(null, onDone: onDone);
+ return Stream<List<int>>.empty().listen(null, onDone: onDone);
}
Stream<List<int>> stream = _incoming;
if (_httpClient.autoUncompress &&
@@ -372,14 +371,14 @@
_AuthenticationScheme scheme, String realm) {
if (proxyAuth) {
if (_httpClient._authenticateProxy == null) {
- return new Future.value(false);
+ return Future.value(false);
}
var proxy = _httpRequest._proxy;
return _httpClient._authenticateProxy(
proxy.host, proxy.port, scheme.toString(), realm);
} else {
if (_httpClient._authenticate == null) {
- return new Future.value(false);
+ return Future.value(false);
}
return _httpClient._authenticate(
_httpRequest.uri, scheme.toString(), realm);
@@ -391,7 +390,7 @@
HeaderValueImpl header =
HeaderValueImpl.parse(challenge[0], parameterSeparator: ",");
_AuthenticationScheme scheme =
- new _AuthenticationScheme.fromString(header.value);
+ _AuthenticationScheme.fromString(header.value);
String realm = header.parameters["realm"];
// See if any matching credentials are available.
@@ -452,7 +451,7 @@
class _StreamSinkImpl<T> implements StreamSink<T> {
final StreamConsumer<T> _target;
- final Completer _doneCompleter = new Completer();
+ final Completer _doneCompleter = Completer();
StreamController<T> _controllerInstance;
Completer _controllerCompleter;
bool _isClosed = false;
@@ -485,7 +484,7 @@
Future addStream(Stream<T> stream) {
if (_isBound) {
- throw new StateError("StreamSink is already bound to a stream");
+ throw StateError("StreamSink is already bound to a stream");
}
_isBound = true;
if (_hasError) return done;
@@ -504,9 +503,9 @@
Future flush() {
if (_isBound) {
- throw new StateError("StreamSink is bound to a stream");
+ throw StateError("StreamSink is bound to a stream");
}
- if (_controllerInstance == null) return new Future.value(this);
+ if (_controllerInstance == null) return Future.value(this);
// Adding an empty stream-controller will return a future that will complete
// when all data is done.
_isBound = true;
@@ -519,7 +518,7 @@
Future close() {
if (_isBound) {
- throw new StateError("StreamSink is bound to a stream");
+ throw StateError("StreamSink is bound to a stream");
}
if (!_isClosed) {
_isClosed = true;
@@ -553,14 +552,14 @@
StreamController<T> get _controller {
if (_isBound) {
- throw new StateError("StreamSink is bound to a stream");
+ throw StateError("StreamSink is bound to a stream");
}
if (_isClosed) {
- throw new StateError("StreamSink is closed");
+ throw StateError("StreamSink is closed");
}
if (_controllerInstance == null) {
- _controllerInstance = new StreamController<T>(sync: true);
- _controllerCompleter = new Completer();
+ _controllerInstance = StreamController<T>(sync: true);
+ _controllerCompleter = Completer();
_target.addStream(_controller.stream).then((_) {
if (_isBound) {
// A new stream takes over - forward values to that stream.
@@ -596,9 +595,9 @@
Encoding get encoding => _encoding;
- void set encoding(Encoding value) {
+ set encoding(Encoding value) {
if (!_encodingMutable) {
- throw new StateError("IOSink encoding is not mutable");
+ throw StateError("IOSink encoding is not mutable");
}
_encoding = value;
}
@@ -631,7 +630,7 @@
}
void writeCharCode(int charCode) {
- write(new String.fromCharCode(charCode));
+ write(String.fromCharCode(charCode));
}
}
@@ -650,7 +649,7 @@
_HttpOutboundMessage(Uri uri, String protocolVersion, _HttpOutgoing outgoing,
{HttpHeadersImpl initialHeaders})
: _uri = uri,
- headers = new HttpHeadersImpl(protocolVersion,
+ headers = HttpHeadersImpl(protocolVersion,
defaultPortForScheme: uri.scheme == 'https'
? HttpClient.DEFAULT_HTTPS_PORT
: HttpClient.DEFAULT_HTTP_PORT,
@@ -662,18 +661,18 @@
}
int get contentLength => headers.contentLength;
- void set contentLength(int contentLength) {
+ set contentLength(int contentLength) {
headers.contentLength = contentLength;
}
bool get persistentConnection => headers.persistentConnection;
- void set persistentConnection(bool p) {
+ set persistentConnection(bool p) {
headers.persistentConnection = p;
}
bool get bufferOutput => _bufferOutput;
- void set bufferOutput(bool bufferOutput) {
- if (_outgoing.headersWritten) throw new StateError("Header already sent");
+ set bufferOutput(bool bufferOutput) {
+ if (_outgoing.headersWritten) throw StateError("Header already sent");
_bufferOutput = bufferOutput;
}
@@ -726,31 +725,31 @@
bool get _isConnectionClosed => _httpRequest._httpConnection._isClosing;
List<Cookie> get cookies {
- _cookies ??= new List<Cookie>();
+ _cookies ??= List<Cookie>();
return _cookies;
}
int get statusCode => _statusCode;
- void set statusCode(int statusCode) {
- if (_outgoing.headersWritten) throw new StateError("Header already sent");
+ set statusCode(int statusCode) {
+ if (_outgoing.headersWritten) throw StateError("Header already sent");
_statusCode = statusCode;
}
String get reasonPhrase => _findReasonPhrase(statusCode);
- void set reasonPhrase(String reasonPhrase) {
- if (_outgoing.headersWritten) throw new StateError("Header already sent");
+ set reasonPhrase(String reasonPhrase) {
+ if (_outgoing.headersWritten) throw StateError("Header already sent");
_reasonPhrase = reasonPhrase;
}
- Future redirect(Uri location, {int status: HttpStatus.MOVED_TEMPORARILY}) {
- if (_outgoing.headersWritten) throw new StateError("Header already sent");
+ Future redirect(Uri location, {int status = HttpStatus.MOVED_TEMPORARILY}) {
+ if (_outgoing.headersWritten) throw StateError("Header already sent");
statusCode = status;
headers.set("location", location.toString());
return close();
}
- Future<Socket> detachSocket({bool writeHeaders: true}) {
- if (_outgoing.headersWritten) throw new StateError("Headers already sent");
+ Future<Socket> detachSocket({bool writeHeaders = true}) {
+ if (_outgoing.headersWritten) throw StateError("Headers already sent");
deadline = null; // Be sure to stop any deadline.
var future = _httpRequest._httpConnection.detachSocket();
if (writeHeaders) {
@@ -774,18 +773,18 @@
Duration get deadline => _deadline;
- void set deadline(Duration d) {
+ set deadline(Duration d) {
if (_deadlineTimer != null) _deadlineTimer.cancel();
_deadline = d;
if (_deadline == null) return;
- _deadlineTimer = new Timer(_deadline, () {
+ _deadlineTimer = Timer(_deadline, () {
_httpRequest._httpConnection.destroy();
});
}
void _writeHeader() {
- BytesBuilder buffer = new _CopyingBytesBuilder(_OUTGOING_BUFFER_SIZE);
+ BytesBuilder buffer = _CopyingBytesBuilder(_OUTGOING_BUFFER_SIZE);
// Write status line.
if (headers.protocolVersion == "1.1") {
@@ -816,7 +815,7 @@
}
}
if (!found) {
- var cookie = new Cookie(DART_SESSION_ID, session.id);
+ var cookie = Cookie(DART_SESSION_ID, session.id);
cookies.add(cookie
..httpOnly = true
..path = "/");
@@ -935,14 +934,14 @@
implements HttpClientRequest {
final String method;
final Uri uri;
- final List<Cookie> cookies = new List<Cookie>();
+ final List<Cookie> cookies = List<Cookie>();
// The HttpClient this request belongs to.
final _HttpClient _httpClient;
final _HttpClientConnection _httpClientConnection;
final Completer<HttpClientResponse> _responseCompleter =
- new Completer<HttpClientResponse>();
+ Completer<HttpClientResponse>();
final _Proxy _proxy;
@@ -980,21 +979,21 @@
}
int get maxRedirects => _maxRedirects;
- void set maxRedirects(int maxRedirects) {
- if (_outgoing.headersWritten) throw new StateError("Request already sent");
+ set maxRedirects(int maxRedirects) {
+ if (_outgoing.headersWritten) throw StateError("Request already sent");
_maxRedirects = maxRedirects;
}
bool get followRedirects => _followRedirects;
- void set followRedirects(bool followRedirects) {
- if (_outgoing.headersWritten) throw new StateError("Request already sent");
+ set followRedirects(bool followRedirects) {
+ if (_outgoing.headersWritten) throw StateError("Request already sent");
_followRedirects = followRedirects;
}
HttpConnectionInfo get connectionInfo => _httpClientConnection.connectionInfo;
void _onIncoming(HttpIncoming incoming) {
- var response = new _HttpClientResponse(incoming, this, _httpClient);
+ var response = _HttpClientResponse(incoming, this, _httpClient);
Future<HttpClientResponse> future;
if (followRedirects && response.isRedirect) {
if (response.redirects.length < maxRedirects) {
@@ -1005,8 +1004,8 @@
} else {
// End with exception, too many redirects.
future = response.drain().then<HttpClientResponse>((_) {
- return new Future<HttpClientResponse>.error(new RedirectException(
- "Redirect limit exceeded", response.redirects));
+ return Future<HttpClientResponse>.error(
+ RedirectException("Redirect limit exceeded", response.redirects));
});
}
} else if (response._shouldAuthenticateProxy) {
@@ -1014,7 +1013,7 @@
} else if (response._shouldAuthenticate) {
future = response._authenticate(false);
} else {
- future = new Future<HttpClientResponse>.value(response);
+ future = Future<HttpClientResponse>.value(response);
}
future.then((v) => _responseCompleter.complete(v),
onError: _responseCompleter.completeError);
@@ -1055,7 +1054,7 @@
}
void _writeHeader() {
- BytesBuilder buffer = new _CopyingBytesBuilder(_OUTGOING_BUFFER_SIZE);
+ BytesBuilder buffer = _CopyingBytesBuilder(_OUTGOING_BUFFER_SIZE);
// Write the request method.
buffer.add(method.codeUnits);
@@ -1070,7 +1069,7 @@
// Add the cookies to the headers.
if (cookies.isNotEmpty) {
- StringBuffer sb = new StringBuffer();
+ StringBuffer sb = StringBuffer();
for (int i = 0; i < cookies.length; i++) {
if (i > 0) sb.write("; ");
sb..write(cookies[i].name)..write("=")..write(cookies[i].value);
@@ -1101,7 +1100,7 @@
void addSlice(List<int> chunk, int start, int end, bool isLast) {
if (chunk is Uint8List) {
- _consume(new Uint8List.view(chunk.buffer, start, end - start));
+ _consume(Uint8List.view(chunk.buffer, start, end - start));
} else {
_consume(chunk.sublist(start, end - start));
}
@@ -1119,7 +1118,7 @@
// Most notable is the GZip compression, that uses a double-buffering system,
// one before gzip (_gzipBuffer) and one after (_buffer).
class _HttpOutgoing implements StreamConsumer<List<int>> {
- static const List<int> _footerAndChunk0Length = const [
+ static const List<int> _footerAndChunk0Length = [
CharCode.CR,
CharCode.LF,
0x30,
@@ -1129,7 +1128,7 @@
CharCode.LF
];
- static const List<int> _chunk0Length = const [
+ static const List<int> _chunk0Length = [
0x30,
CharCode.CR,
CharCode.LF,
@@ -1137,7 +1136,7 @@
CharCode.LF
];
- final Completer<Socket> _doneCompleter = new Completer<Socket>();
+ final Completer<Socket> _doneCompleter = Completer<Socket>();
final Socket socket;
bool ignoreBody = false;
@@ -1170,7 +1169,7 @@
// Returns either a future or 'null', if it was able to write headers
// immediately.
- Future writeHeaders({bool drainRequest: true, bool setOutgoing: true}) {
+ Future writeHeaders({bool drainRequest = true, bool setOutgoing = true}) {
if (headersWritten) return null;
headersWritten = true;
Future drainFuture;
@@ -1220,7 +1219,7 @@
Future addStream(Stream<List<int>> stream) {
if (_socketError) {
stream.listen(null).cancel();
- return new Future.value(outbound);
+ return Future.value(outbound);
}
if (ignoreBody) {
stream.drain().catchError((_) {});
@@ -1234,7 +1233,7 @@
// Use new stream so we are able to pause (see below listen). The
// alternative is to use stream.extand, but that won't give us a way of
// pausing.
- var controller = new StreamController<List<int>>(
+ var controller = StreamController<List<int>>(
onPause: () => sub.pause(), onResume: () => sub.resume(), sync: true);
void onData(List<int> data) {
@@ -1253,11 +1252,11 @@
if (contentLength != null) {
_bytesWritten += data.length;
if (_bytesWritten > contentLength) {
- controller.addError(new HttpException(
- "Content size exceeds specified contentLength. "
- "$_bytesWritten bytes written while expected "
- "$contentLength. "
- "[${new String.fromCharCodes(data)}]"));
+ controller.addError(
+ HttpException("Content size exceeds specified contentLength. "
+ "$_bytesWritten bytes written while expected "
+ "$contentLength. "
+ "[${String.fromCharCodes(data)}]"));
return;
}
}
@@ -1298,8 +1297,8 @@
if (_closeFuture != null) return _closeFuture;
// If we earlier saw an error, return immediate. The notification to
// _Http*Connection is already done.
- if (_socketError) return new Future.value(outbound);
- if (outbound._isConnectionClosed) return new Future.value(outbound);
+ if (_socketError) return Future.value(outbound);
+ if (outbound._isConnectionClosed) return Future.value(outbound);
if (!headersWritten && !ignoreBody) {
if (outbound.headers.contentLength == -1) {
// If no body was written, ignoreBody is false (it's not a HEAD
@@ -1308,24 +1307,24 @@
outbound.headers.chunkedTransferEncoding = false;
outbound.headers.contentLength = 0;
} else if (outbound.headers.contentLength > 0) {
- var error = new HttpException(
+ var error = HttpException(
"No content even though contentLength was specified to be "
"greater than 0: ${outbound.headers.contentLength}.",
uri: outbound._uri);
_doneCompleter.completeError(error);
- return _closeFuture = new Future.error(error);
+ return _closeFuture = Future.error(error);
}
}
// If contentLength was specified, validate it.
if (contentLength != null) {
if (_bytesWritten < contentLength) {
- var error = new HttpException(
+ var error = HttpException(
"Content size below specified contentLength. "
" $_bytesWritten bytes written but expected "
"$contentLength.",
uri: outbound._uri);
_doneCompleter.completeError(error);
- return _closeFuture = new Future.error(error);
+ return _closeFuture = Future.error(error);
}
}
@@ -1336,8 +1335,8 @@
if (_gzip) {
_gzipAdd = socket.add;
if (_gzipBufferLength > 0) {
- _gzipSink.add(
- new Uint8List.view(_gzipBuffer.buffer, 0, _gzipBufferLength));
+ _gzipSink
+ .add(Uint8List.view(_gzipBuffer.buffer, 0, _gzipBufferLength));
}
_gzipBuffer = null;
_gzipSink.close();
@@ -1347,7 +1346,7 @@
}
// Add any remaining data in the buffer.
if (_length > 0) {
- socket.add(new Uint8List.view(_buffer.buffer, 0, _length));
+ socket.add(Uint8List.view(_buffer.buffer, 0, _length));
}
// Clear references, for better GC.
_buffer = null;
@@ -1382,13 +1381,13 @@
_length = length;
}
- void set gzip(bool value) {
+ set gzip(bool value) {
_gzip = value;
if (_gzip) {
- _gzipBuffer = new Uint8List(_OUTGOING_BUFFER_SIZE);
+ _gzipBuffer = Uint8List(_OUTGOING_BUFFER_SIZE);
assert(_gzipSink == null);
- _gzipSink = new ZLibEncoder(gzip: true)
- .startChunkedConversion(new _HttpGZipSink((data) {
+ _gzipSink =
+ ZLibEncoder(gzip: true).startChunkedConversion(_HttpGZipSink((data) {
// We are closing down prematurely, due to an error. Discard.
if (_gzipAdd == null) return;
_addChunk(_chunkHeader(data.length), _gzipAdd);
@@ -1408,8 +1407,8 @@
return;
}
if (chunk.length > _gzipBuffer.length - _gzipBufferLength) {
- add(new Uint8List.view(_gzipBuffer.buffer, 0, _gzipBufferLength));
- _gzipBuffer = new Uint8List(_OUTGOING_BUFFER_SIZE);
+ add(Uint8List.view(_gzipBuffer.buffer, 0, _gzipBufferLength));
+ _gzipBuffer = Uint8List(_OUTGOING_BUFFER_SIZE);
_gzipBufferLength = 0;
}
if (chunk.length > _OUTGOING_BUFFER_SIZE) {
@@ -1426,7 +1425,7 @@
if (_buffer != null) {
// If _buffer is not null, we have not written the header yet. Write
// it now.
- add(new Uint8List.view(_buffer.buffer, 0, _length));
+ add(Uint8List.view(_buffer.buffer, 0, _length));
_buffer = null;
_length = 0;
}
@@ -1434,8 +1433,8 @@
return;
}
if (chunk.length > _buffer.length - _length) {
- add(new Uint8List.view(_buffer.buffer, 0, _length));
- _buffer = new Uint8List(_OUTGOING_BUFFER_SIZE);
+ add(Uint8List.view(_buffer.buffer, 0, _length));
+ _buffer = Uint8List(_OUTGOING_BUFFER_SIZE);
_length = 0;
}
if (chunk.length > _OUTGOING_BUFFER_SIZE) {
@@ -1447,7 +1446,7 @@
}
List<int> _chunkHeader(int length) {
- const hexDigits = const [
+ const hexDigits = [
0x30,
0x31,
0x32,
@@ -1476,7 +1475,7 @@
size++;
len >>= 4;
}
- var footerAndHeader = new Uint8List(size + 2);
+ var footerAndHeader = Uint8List(size + 2);
if (_pendingChunkedFooter == 2) {
footerAndHeader[0] = CharCode.CR;
footerAndHeader[1] = CharCode.LF;
@@ -1510,7 +1509,7 @@
_HttpClientConnection(this.key, this._socket, this._httpClient,
[this._proxyTunnel = false, this._context])
- : _httpParser = new HttpParser.responseParser() {
+ : _httpParser = HttpParser.responseParser() {
_httpParser.listenToStream(_socket);
// Set up handlers on the parser here, so we are sure to get 'onDone' from
@@ -1521,7 +1520,7 @@
_subscription.pause();
// We assume the response is not here, until we have send the request.
if (_nextResponseCompleter == null) {
- throw new HttpException(
+ throw HttpException(
"Unexpected response (unsolicited response without request).",
uri: _currentUri);
}
@@ -1535,7 +1534,7 @@
_subscription.resume();
}).catchError((error, [StackTrace stackTrace]) {
_nextResponseCompleter.completeError(
- new HttpException(error.message, uri: _currentUri), stackTrace);
+ HttpException(error.message, uri: _currentUri), stackTrace);
_nextResponseCompleter = null;
});
} else {
@@ -1545,12 +1544,12 @@
}, onError: (error, [StackTrace stackTrace]) {
if (_nextResponseCompleter != null) {
_nextResponseCompleter.completeError(
- new HttpException(error.message, uri: _currentUri), stackTrace);
+ HttpException(error.message, uri: _currentUri), stackTrace);
_nextResponseCompleter = null;
}
}, onDone: () {
if (_nextResponseCompleter != null) {
- _nextResponseCompleter.completeError(new HttpException(
+ _nextResponseCompleter.completeError(HttpException(
"Connection closed before response was received",
uri: _currentUri));
_nextResponseCompleter = null;
@@ -1561,18 +1560,17 @@
_HttpClientRequest send(Uri uri, int port, String method, _Proxy proxy) {
if (closed) {
- throw new HttpException("Socket closed before request was sent",
- uri: uri);
+ throw HttpException("Socket closed before request was sent", uri: uri);
}
_currentUri = uri;
// Start with pausing the parser.
_subscription.pause();
_ProxyCredentials proxyCreds; // Credentials used to authorize proxy.
_SiteCredentials creds; // Credentials used to authorize this request.
- var outgoing = new _HttpOutgoing(_socket);
+ var outgoing = _HttpOutgoing(_socket);
// Create new request object, wrapping the outgoing connection.
var request =
- new _HttpClientRequest(outgoing, uri, method, proxy, _httpClient, this);
+ _HttpClientRequest(outgoing, uri, method, proxy, _httpClient, this);
// For the Host header an IPv6 address must be enclosed in []'s.
var host = uri.host;
if (host.contains(':')) host = "[$host]";
@@ -1612,7 +1610,7 @@
_httpParser.isHead = method == "HEAD";
_streamFuture = outgoing.done.then<Socket>((Socket s) {
// Request sent, set up response completer.
- _nextResponseCompleter = new Completer<HttpIncoming>();
+ _nextResponseCompleter = Completer<HttpIncoming>();
// Listen for response.
_nextResponseCompleter.future.then((incoming) {
@@ -1664,7 +1662,7 @@
// If we see a state error, we failed to get the 'first'
// element.
.catchError((error) {
- throw new HttpException("Connection closed before data was received",
+ throw HttpException("Connection closed before data was received",
uri: uri);
}, test: (error) => error is StateError).catchError(
(error, StackTrace stackTrace) {
@@ -1683,8 +1681,8 @@
}
Future<Socket> detachSocket() {
- return _streamFuture.then(
- (_) => new _DetachedSocket(_socket, _httpParser.detachIncoming()));
+ return _streamFuture
+ .then((_) => _DetachedSocket(_socket, _httpParser.detachIncoming()));
}
void destroy() {
@@ -1704,7 +1702,7 @@
Future<_HttpClientConnection> createProxyTunnel(String host, int port,
_Proxy proxy, bool callback(X509Certificate certificate)) {
_HttpClientRequest request =
- send(new Uri(host: host, port: port), port, "CONNECT", proxy);
+ send(Uri(host: host, port: port), port, "CONNECT", proxy);
if (proxy.isAuthenticated) {
// If the proxy configuration contains user information use that
// for proxy basic authorization.
@@ -1725,7 +1723,7 @@
host: host, context: _context, onBadCertificate: callback);
}).then((secureSocket) {
String key = _HttpClientConnection.makeKey(true, host, port);
- return new _HttpClientConnection(
+ return _HttpClientConnection(
key, secureSocket, request._httpClient, true);
});
}
@@ -1745,7 +1743,7 @@
void startTimer() {
assert(_idleTimer == null);
- _idleTimer = new Timer(_httpClient.idleTimeout, () {
+ _idleTimer = Timer(_httpClient.idleTimeout, () {
_idleTimer = null;
close();
});
@@ -1766,10 +1764,10 @@
final int port;
final bool isSecure;
final SecurityContext context;
- final Set<_HttpClientConnection> _idle = new HashSet();
- final Set<_HttpClientConnection> _active = new HashSet();
- final Set<ConnectionTask> _socketTasks = new HashSet();
- final Queue _pending = new ListQueue();
+ final Set<_HttpClientConnection> _idle = HashSet();
+ final Set<_HttpClientConnection> _active = HashSet();
+ final Set<ConnectionTask> _socketTasks = HashSet();
+ final Queue _pending = ListQueue();
int _connecting = 0;
_ConnectionTarget(
@@ -1843,11 +1841,11 @@
if (hasIdle) {
var connection = takeIdle();
client._connectionsChanged();
- return new Future.value(new _ConnectionInfo(connection, proxy));
+ return Future.value(_ConnectionInfo(connection, proxy));
}
if (client.maxConnectionsPerHost != null &&
_active.length + _connecting >= client.maxConnectionsPerHost) {
- var completer = new Completer<_ConnectionInfo>();
+ var completer = Completer<_ConnectionInfo>();
_pending.add(() {
completer.complete(connect(uriHost, uriPort, proxy, client));
});
@@ -1879,7 +1877,7 @@
_connecting--;
socket.setOption(SocketOption.tcpNoDelay, true);
var connection =
- new _HttpClientConnection(key, socket, client, false, context);
+ _HttpClientConnection(key, socket, client, false, context);
if (isSecure && !proxy.isDirect) {
connection._dispose = true;
return connection
@@ -1889,12 +1887,12 @@
._getConnectionTarget(uriHost, uriPort, true)
.addNewActive(tunnel);
_socketTasks.remove(task);
- return new _ConnectionInfo(tunnel, proxy);
+ return _ConnectionInfo(tunnel, proxy);
});
} else {
addNewActive(connection);
_socketTasks.remove(task);
- return new _ConnectionInfo(connection, proxy);
+ return _ConnectionInfo(connection, proxy);
}
}, onError: (error) {
_connecting--;
@@ -1906,13 +1904,14 @@
}
}
-typedef bool BadCertificateCallback(X509Certificate cr, String host, int port);
+typedef BadCertificateCallback = bool Function(
+ X509Certificate cr, String host, int port);
class _HttpClient implements HttpClient {
bool _closing = false;
bool _closingForcefully = false;
final Map<String, _ConnectionTarget> _connectionTargets =
- new HashMap<String, _ConnectionTarget>();
+ HashMap<String, _ConnectionTarget>();
final List<_Credentials> _credentials = [];
final List<_ProxyCredentials> _proxyCredentials = [];
final SecurityContext _context;
@@ -1934,7 +1933,7 @@
_HttpClient(this._context);
- void set idleTimeout(Duration timeout) {
+ set idleTimeout(Duration timeout) {
_idleTimeout = timeout;
for (var c in _connectionTargets.values) {
for (var idle in c._idle) {
@@ -1970,8 +1969,8 @@
query = path.substring(queryStart + 1, fragmentStart);
path = path.substring(0, queryStart);
}
- Uri uri = new Uri(
- scheme: "http", host: host, port: port, path: path, query: query);
+ Uri uri =
+ Uri(scheme: "http", host: host, port: port, path: path, query: query);
return _openUrl(method, uri);
}
@@ -2008,7 +2007,7 @@
Future<HttpClientRequest> patchUrl(Uri url) => _openUrl("patch", url);
- void close({bool force: false}) {
+ void close({bool force = false}) {
_closing = true;
_closingForcefully = force;
_closeConnections(_closingForcefully);
@@ -2022,7 +2021,7 @@
}
void addCredentials(Uri url, String realm, HttpClientCredentials cr) {
- _credentials.add(new _SiteCredentials(url, realm, cr));
+ _credentials.add(_SiteCredentials(url, realm, cr));
}
set authenticateProxy(
@@ -2032,7 +2031,7 @@
void addProxyCredentials(
String host, int port, String realm, HttpClientCredentials cr) {
- _proxyCredentials.add(new _ProxyCredentials(host, port, realm, cr));
+ _proxyCredentials.add(_ProxyCredentials(host, port, realm, cr));
}
set findProxy(String f(Uri uri)) => _findProxy = f;
@@ -2042,14 +2041,13 @@
uri = uri.removeFragment();
if (method == null) {
- throw new ArgumentError(method);
+ throw ArgumentError(method);
}
if (method != "CONNECT") {
if (uri.host.isEmpty) {
- throw new ArgumentError("No host specified in URI $uri");
+ throw ArgumentError("No host specified in URI $uri");
} else if (uri.scheme != "http" && uri.scheme != "https") {
- throw new ArgumentError(
- "Unsupported scheme '${uri.scheme}' in URI $uri");
+ throw ArgumentError("Unsupported scheme '${uri.scheme}' in URI $uri");
}
}
@@ -2066,9 +2064,9 @@
// TODO(sgjesse): Keep a map of these as normally only a few
// configuration strings will be used.
try {
- proxyConf = new _ProxyConfiguration(_findProxy(uri));
+ proxyConf = _ProxyConfiguration(_findProxy(uri));
} catch (error, stackTrace) {
- return new Future.error(error, stackTrace);
+ return Future.error(error, stackTrace);
}
}
return _getConnection(uri.host, port, proxyConf, isSecure)
@@ -2144,7 +2142,7 @@
_ConnectionTarget _getConnectionTarget(String host, int port, bool isSecure) {
String key = _HttpClientConnection.makeKey(isSecure, host, port);
return _connectionTargets.putIfAbsent(key, () {
- return new _ConnectionTarget(key, host, port, isSecure, _context);
+ return _ConnectionTarget(key, host, port, isSecure, _context);
});
}
@@ -2154,7 +2152,7 @@
Iterator<_Proxy> proxies = proxyConf.proxies.iterator;
Future<_ConnectionInfo> connect(error) {
- if (!proxies.moveNext()) return new Future.error(error);
+ if (!proxies.moveNext()) return Future.error(error);
_Proxy proxy = proxies.current;
String host = proxy.isDirect ? uriHost : proxy.host;
int port = proxy.isDirect ? uriPort : proxy.port;
@@ -2168,8 +2166,8 @@
// connection from the pool. For long-running synchronous code the
// server might have closed the connection, so this lowers the
// probability of getting a connection that was already closed.
- return new Future<_ConnectionInfo>(
- () => connect(new HttpException("No proxies given")));
+ return Future<_ConnectionInfo>(
+ () => connect(HttpException("No proxies given")));
}
_SiteCredentials _findCredentials(Uri url, [_AuthenticationScheme scheme]) {
@@ -2249,7 +2247,7 @@
var pos = option.lastIndexOf(":");
if (option.indexOf("]") > pos) option = "$option:1080";
} else {
- if (option.indexOf(":") == -1) option = "$option:1080";
+ if (!option.contains(":")) option = "$option:1080";
}
return "PROXY $option";
}
@@ -2300,7 +2298,7 @@
Future _streamFuture;
_HttpConnection(this._socket, this._httpServer)
- : _httpParser = new HttpParser.requestParser() {
+ : _httpParser = HttpParser.requestParser() {
_httpParser.listenToStream(_socket);
_subscription = _httpParser.listen((incoming) {
_httpServer._markActive(this);
@@ -2312,14 +2310,14 @@
// stream paused until the request has been send.
_subscription.pause();
_state = _ACTIVE;
- var outgoing = new _HttpOutgoing(_socket);
- var response = new _HttpResponse(
+ var outgoing = _HttpOutgoing(_socket);
+ var response = _HttpResponse(
incoming.uri,
incoming.headers.protocolVersion,
outgoing,
_httpServer.defaultResponseHeaders,
_httpServer.serverHeader);
- var request = new _HttpRequest(response, incoming, _httpServer, this);
+ var request = _HttpRequest(response, incoming, _httpServer, this);
_streamFuture = outgoing.done.then((_) {
response.deadline = null;
if (_state == _DETACHED) return;
@@ -2374,7 +2372,7 @@
HttpDetachedIncoming detachedIncoming = _httpParser.detachIncoming();
return _streamFuture.then((_) {
- return new _DetachedSocket(_socket, detachedIncoming);
+ return _DetachedSocket(_socket, detachedIncoming);
});
}
@@ -2401,7 +2399,7 @@
return ServerSocket.bind(address, port,
backlog: backlog, v6Only: v6Only, shared: shared)
.then<HttpServer>((socket) {
- return new _HttpServer._(socket, true);
+ return _HttpServer._(socket, true);
});
}
@@ -2419,24 +2417,22 @@
requestClientCertificate: requestClientCertificate,
shared: shared)
.then<HttpServer>((socket) {
- return new _HttpServer._(socket, true);
+ return _HttpServer._(socket, true);
});
}
_HttpServer._(this._serverSocket, this._closeServer) {
- _controller =
- new StreamController<HttpRequest>(sync: true, onCancel: close);
+ _controller = StreamController<HttpRequest>(sync: true, onCancel: close);
idleTimeout = const Duration(seconds: 120);
}
_HttpServer.listenOn(this._serverSocket) : _closeServer = false {
- _controller =
- new StreamController<HttpRequest>(sync: true, onCancel: close);
+ _controller = StreamController<HttpRequest>(sync: true, onCancel: close);
idleTimeout = const Duration(seconds: 120);
}
static HttpHeaders _initDefaultResponseHeaders() {
- var defaultResponseHeaders = new HttpHeadersImpl('1.1');
+ var defaultResponseHeaders = HttpHeadersImpl('1.1');
defaultResponseHeaders.contentType = ContentType.TEXT;
defaultResponseHeaders.set('X-Frame-Options', 'SAMEORIGIN');
defaultResponseHeaders.set('X-Content-Type-Options', 'nosniff');
@@ -2446,14 +2442,14 @@
Duration get idleTimeout => _idleTimeout;
- void set idleTimeout(Duration duration) {
+ set idleTimeout(Duration duration) {
if (_idleTimer != null) {
_idleTimer.cancel();
_idleTimer = null;
}
_idleTimeout = duration;
if (_idleTimeout != null) {
- _idleTimer = new Timer.periodic(_idleTimeout, (_) {
+ _idleTimer = Timer.periodic(_idleTimeout, (_) {
for (var idle in _idleConnections.toList()) {
if (idle.isMarkedIdle) {
idle.destroy();
@@ -2470,7 +2466,7 @@
_serverSocket.listen((Socket socket) {
socket.setOption(SocketOption.tcpNoDelay, true);
// Accept the client connection.
- _HttpConnection connection = new _HttpConnection(socket, this);
+ _HttpConnection connection = _HttpConnection(socket, this);
_idleConnections.add(connection);
}, onError: (error, StackTrace stackTrace) {
// Ignore HandshakeExceptions as they are bound to a single request,
@@ -2483,13 +2479,13 @@
onError: onError, onDone: onDone, cancelOnError: cancelOnError);
}
- Future close({bool force: false}) {
+ Future close({bool force = false}) {
closed = true;
Future result;
if (_serverSocket != null && _closeServer) {
result = _serverSocket.close();
} else {
- result = new Future.value();
+ result = Future.value();
}
idleTimeout = null;
if (force) {
@@ -2516,12 +2512,12 @@
}
int get port {
- if (closed) throw new HttpException("HttpServer is not bound to a socket");
+ if (closed) throw HttpException("HttpServer is not bound to a socket");
return _serverSocket.port;
}
InternetAddress get address {
- if (closed) throw new HttpException("HttpServer is not bound to a socket");
+ if (closed) throw HttpException("HttpServer is not bound to a socket");
return _serverSocket.address;
}
@@ -2555,12 +2551,12 @@
HttpSessionManager get _sessionManager {
// Lazy init.
- _sessionManagerInstance ??= new HttpSessionManager();
+ _sessionManagerInstance ??= HttpSessionManager();
return _sessionManagerInstance;
}
HttpConnectionsInfo connectionsInfo() {
- HttpConnectionsInfo result = new HttpConnectionsInfo();
+ HttpConnectionsInfo result = HttpConnectionsInfo();
result.total = _activeConnections.length + _idleConnections.length;
_activeConnections.forEach((_HttpConnection conn) {
if (conn._isActive) {
@@ -2589,9 +2585,9 @@
// Set of currently connected clients.
final LinkedList<_HttpConnection> _activeConnections =
- new LinkedList<_HttpConnection>();
+ LinkedList<_HttpConnection>();
final LinkedList<_HttpConnection> _idleConnections =
- new LinkedList<_HttpConnection>();
+ LinkedList<_HttpConnection>();
StreamController<HttpRequest> _controller;
}
@@ -2599,9 +2595,9 @@
static const String PROXY_PREFIX = "PROXY ";
static const String DIRECT_PREFIX = "DIRECT";
- _ProxyConfiguration(String configuration) : proxies = new List<_Proxy>() {
+ _ProxyConfiguration(String configuration) : proxies = List<_Proxy>() {
if (configuration == null) {
- throw new HttpException("Invalid proxy configuration $configuration");
+ throw HttpException("Invalid proxy configuration $configuration");
}
List<String> list = configuration.split(";");
list.forEach((String proxy) {
@@ -2619,8 +2615,7 @@
proxy = proxy.substring(at + 1).trim();
int colon = userinfo.indexOf(":");
if (colon == -1 || colon == 0 || colon == proxy.length - 1) {
- throw new HttpException(
- "Invalid proxy configuration $configuration");
+ throw HttpException("Invalid proxy configuration $configuration");
}
username = userinfo.substring(0, colon).trim();
password = userinfo.substring(colon + 1).trim();
@@ -2628,8 +2623,7 @@
// Look for proxy host and port.
int colon = proxy.lastIndexOf(":");
if (colon == -1 || colon == 0 || colon == proxy.length - 1) {
- throw new HttpException(
- "Invalid proxy configuration $configuration");
+ throw HttpException("Invalid proxy configuration $configuration");
}
String host = proxy.substring(0, colon).trim();
if (host.startsWith("[") && host.endsWith("]")) {
@@ -2640,21 +2634,20 @@
try {
port = int.parse(portString);
} on FormatException {
- throw new HttpException(
- "Invalid proxy configuration $configuration, "
+ throw HttpException("Invalid proxy configuration $configuration, "
"invalid port '$portString'");
}
- proxies.add(new _Proxy(host, port, username, password));
+ proxies.add(_Proxy(host, port, username, password));
} else if (proxy.trim() == DIRECT_PREFIX) {
- proxies.add(new _Proxy.direct());
+ proxies.add(_Proxy.direct());
} else {
- throw new HttpException("Invalid proxy configuration $configuration");
+ throw HttpException("Invalid proxy configuration $configuration");
}
}
});
}
- const _ProxyConfiguration.direct() : proxies = const [const _Proxy.direct()];
+ const _ProxyConfiguration.direct() : proxies = const [_Proxy.direct()];
final List<_Proxy> proxies;
}
@@ -2686,12 +2679,13 @@
static _HttpConnectionInfo create(Socket socket) {
if (socket == null) return null;
try {
- _HttpConnectionInfo info = new _HttpConnectionInfo();
- return info
+ return _HttpConnectionInfo()
..remoteAddress = socket.remoteAddress
..remotePort = socket.remotePort
..localPort = socket.port;
- } catch (e) {}
+ } catch (e) {
+ // return null on failure
+ }
return null;
}
}
@@ -2710,7 +2704,7 @@
Encoding get encoding => _socket.encoding;
- void set encoding(Encoding value) {
+ set encoding(Encoding value) {
_socket.encoding = value;
}
@@ -2779,9 +2773,9 @@
class _AuthenticationScheme {
final int _scheme;
- static const UNKNOWN = const _AuthenticationScheme(-1);
- static const BASIC = const _AuthenticationScheme(0);
- static const DIGEST = const _AuthenticationScheme(1);
+ static const UNKNOWN = _AuthenticationScheme(-1);
+ static const BASIC = _AuthenticationScheme(0);
+ static const DIGEST = _AuthenticationScheme(1);
const _AuthenticationScheme(this._scheme);
@@ -2819,7 +2813,7 @@
// http://tools.ietf.org/html/draft-reschke-basicauth-enc-06. For
// now always use UTF-8 encoding.
_HttpClientDigestCredentials creds = credentials;
- var hasher = new MD5()
+ var hasher = MD5()
..add(utf8.encode(creds.username))
..add([CharCode.COLON])
..add(realm.codeUnits)
@@ -2930,7 +2924,7 @@
String authorization(_Credentials credentials, _HttpClientRequest request) {
String requestUri = request._requestUri();
- var hasher = new MD5()
+ var hasher = MD5()
..add(request.method.codeUnits)
..add([CharCode.COLON])
..add(requestUri.codeUnits);
@@ -2939,7 +2933,7 @@
String qop;
String cnonce;
String nc;
- hasher = new MD5()..add(credentials.ha1.codeUnits)..add([CharCode.COLON]);
+ hasher = MD5()..add(credentials.ha1.codeUnits)..add([CharCode.COLON]);
if (credentials.qop == "auth") {
qop = credentials.qop;
cnonce = CryptoUtils.bytesToHex(CryptoUtils.getRandomBytes(4));
@@ -2964,7 +2958,7 @@
}
var response = CryptoUtils.bytesToHex(hasher.close());
- StringBuffer buffer = new StringBuffer()
+ StringBuffer buffer = StringBuffer()
..write('Digest ')
..write('username="$username"')
..write(', realm="${credentials.realm}"')
diff --git a/lib/src/http_incoming.dart b/lib/src/http_incoming.dart
index 7bc45df..ab0dde0 100644
--- a/lib/src/http_incoming.dart
+++ b/lib/src/http_incoming.dart
@@ -9,8 +9,8 @@
class HttpIncoming extends Stream<List<int>> {
final int _transferLength;
- final _dataCompleter = new Completer<bool>();
- Stream<List<int>> _stream;
+ final _dataCompleter = Completer<bool>();
+ final Stream<List<int>> _stream;
bool fullBodyRead = false;
@@ -40,7 +40,7 @@
{Function onError, void onDone(), bool cancelOnError}) {
hasSubscriber = true;
return _stream.handleError((error) {
- throw new HttpException(error.message, uri: uri);
+ throw HttpException(error.message, uri: uri);
}).listen(onData,
onError: onError, onDone: onDone, cancelOnError: cancelOnError);
}
diff --git a/lib/src/http_overrides.dart b/lib/src/http_overrides.dart
index 5456bb2..bae284a 100644
--- a/lib/src/http_overrides.dart
+++ b/lib/src/http_overrides.dart
@@ -4,7 +4,7 @@
part of http_io;
-final _httpOverridesToken = new Object();
+final _httpOverridesToken = Object();
const _asyncRunZoned = runZoned;
@@ -53,7 +53,7 @@
ZoneSpecification zoneSpecification,
Function onError}) {
HttpOverrides overrides =
- new _HttpOverridesScope(createHttpClient, findProxyFromEnvironment);
+ _HttpOverridesScope(createHttpClient, findProxyFromEnvironment);
return _asyncRunZoned<R>(body,
zoneValues: {_httpOverridesToken: overrides},
zoneSpecification: zoneSpecification,
@@ -77,7 +77,7 @@
/// When this override is installed, this function overrides the behavior of
/// `new HttpClient`.
HttpClient createHttpClient(SecurityContext context) {
- return new _HttpClient(context);
+ return _HttpClient(context);
}
/// Resolves the proxy server to be used for HTTP connections.
diff --git a/lib/src/http_parser.dart b/lib/src/http_parser.dart
index a16ca47..2b5914e 100644
--- a/lib/src/http_parser.dart
+++ b/lib/src/http_parser.dart
@@ -60,17 +60,15 @@
static const int RESPONSE = 0;
}
-/**
- * The _HttpDetachedStreamSubscription takes a subscription and some extra data,
- * and makes it possible to "inject" the data in from of other data events
- * from the subscription.
- *
- * It does so by overriding pause/resume, so that once the
- * _HttpDetachedStreamSubscription is resumed, it'll deliver the data before
- * resuming the underlaying subscription.
- */
+/// The _HttpDetachedStreamSubscription takes a subscription and some extra data,
+/// and makes it possible to "inject" the data in from of other data events
+/// from the subscription.
+///
+/// It does so by overriding pause/resume, so that once the
+/// _HttpDetachedStreamSubscription is resumed, it'll deliver the data before
+/// resuming the underlaying subscription.
class _HttpDetachedStreamSubscription implements StreamSubscription<Uint8List> {
- StreamSubscription<Uint8List> _subscription;
+ final StreamSubscription<Uint8List> _subscription;
Uint8List _injectData;
bool _isCanceled = false;
int _pauseCount = 1;
@@ -159,37 +157,34 @@
if (bufferedData == null) {
return subscription..resume();
}
- return new _HttpDetachedStreamSubscription(
- subscription, bufferedData, onData)
+ return _HttpDetachedStreamSubscription(subscription, bufferedData, onData)
..resume();
} else {
// TODO(26379): add test for this branch.
- return new Stream<Uint8List>.fromIterable([bufferedData]).listen(onData,
+ return Stream<Uint8List>.fromIterable([bufferedData]).listen(onData,
onError: onError, onDone: onDone, cancelOnError: cancelOnError);
}
}
}
-/**
- * HTTP parser which parses the data stream given to consume.
- *
- * If an HTTP parser error occurs, the parser will signal an error to either
- * the current _HttpIncoming or the _parser itself.
- *
- * The connection upgrades (e.g. switching from HTTP/1.1 to the
- * WebSocket protocol) is handled in a special way. If connection
- * upgrade is specified in the headers, then on the callback to
- * [:responseStart:] the [:upgrade:] property on the [:HttpParser:]
- * object will be [:true:] indicating that from now on the protocol is
- * not HTTP anymore and no more callbacks will happen, that is
- * [:dataReceived:] and [:dataEnd:] are not called in this case as
- * there is no more HTTP data. After the upgrade the method
- * [:readUnparsedData:] can be used to read any remaining bytes in the
- * HTTP parser which are part of the protocol the connection is
- * upgrading to. These bytes cannot be processed by the HTTP parser
- * and should be handled according to whatever protocol is being
- * upgraded to.
- */
+/// HTTP parser which parses the data stream given to consume.
+///
+/// If an HTTP parser error occurs, the parser will signal an error to either
+/// the current _HttpIncoming or the _parser itself.
+///
+/// The connection upgrades (e.g. switching from HTTP/1.1 to the
+/// WebSocket protocol) is handled in a special way. If connection
+/// upgrade is specified in the headers, then on the callback to
+/// [:responseStart:] the [:upgrade:] property on the [:HttpParser:]
+/// object will be [:true:] indicating that from now on the protocol is
+/// not HTTP anymore and no more callbacks will happen, that is
+/// [:dataReceived:] and [:dataEnd:] are not called in this case as
+/// there is no more HTTP data. After the upgrade the method
+/// [:readUnparsedData:] can be used to read any remaining bytes in the
+/// HTTP parser which are part of the protocol the connection is
+/// upgrading to. These bytes cannot be processed by the HTTP parser
+/// and should be handled according to whatever protocol is being
+/// upgraded to.
class HttpParser extends Stream<HttpIncoming> {
// State.
bool _parserCalled = false;
@@ -229,15 +224,15 @@
StreamController<Uint8List> _bodyController;
factory HttpParser.requestParser() {
- return new HttpParser._(true);
+ return HttpParser._(true);
}
factory HttpParser.responseParser() {
- return new HttpParser._(false);
+ return HttpParser._(false);
}
HttpParser._(this._requestParser) {
- _controller = new StreamController<HttpIncoming>(
+ _controller = StreamController<HttpIncoming>(
sync: true,
onListen: () {
_paused = false;
@@ -308,12 +303,11 @@
}
_createIncoming(_transferLength);
if (_requestParser) {
- _incoming.method = new String.fromCharCodes(_method);
- _incoming.uri =
- Uri.parse(new String.fromCharCodes(_uri_or_reason_phrase));
+ _incoming.method = String.fromCharCodes(_method);
+ _incoming.uri = Uri.parse(String.fromCharCodes(_uri_or_reason_phrase));
} else {
_incoming.statusCode = _statusCode;
- _incoming.reasonPhrase = new String.fromCharCodes(_uri_or_reason_phrase);
+ _incoming.reasonPhrase = String.fromCharCodes(_uri_or_reason_phrase);
}
_method.clear();
_uri_or_reason_phrase.clear();
@@ -361,10 +355,10 @@
assert(!_parserCalled);
_parserCalled = true;
if (_state == _State.CLOSED) {
- throw new HttpException("Data on closed connection");
+ throw HttpException("Data on closed connection");
}
if (_state == _State.FAILURE) {
- throw new HttpException("Data on failed connection");
+ throw HttpException("Data on failed connection");
}
while (_buffer != null &&
_index < _buffer.length &&
@@ -386,11 +380,11 @@
} else {
// Start parsing method.
if (!CharCode.isTokenChar(byte)) {
- throw new HttpException("Invalid request method");
+ throw HttpException("Invalid request method");
}
_method.add(byte);
if (!_requestParser) {
- throw new HttpException("Invalid response line");
+ throw HttpException("Invalid response line");
}
_state = _State.REQUEST_LINE_METHOD;
}
@@ -407,7 +401,7 @@
// method anymore.
_httpVersionIndex++;
if (_requestParser) {
- throw new HttpException("Invalid request line");
+ throw HttpException("Invalid request line");
}
_state = _State.RESPONSE_HTTP_VERSION;
} else {
@@ -421,7 +415,7 @@
_method.add(byte);
_httpVersion = _HttpVersion.UNDETERMINED;
if (!_requestParser) {
- throw new HttpException("Invalid response line");
+ throw HttpException("Invalid response line");
}
_state = _State.REQUEST_LINE_METHOD;
}
@@ -450,7 +444,7 @@
// HTTP version parsed.
_state = _State.RESPONSE_LINE_STATUS_CODE;
} else {
- throw new HttpException("Invalid response line");
+ throw HttpException("Invalid response line");
}
break;
@@ -461,7 +455,7 @@
if (Const.SEPARATOR_MAP[byte] ||
byte == CharCode.CR ||
byte == CharCode.LF) {
- throw new HttpException("Invalid request method");
+ throw HttpException("Invalid request method");
}
_method.add(byte);
}
@@ -470,13 +464,13 @@
case _State.REQUEST_LINE_URI:
if (byte == CharCode.SP) {
if (_uri_or_reason_phrase.isEmpty) {
- throw new HttpException("Invalid request URI");
+ throw HttpException("Invalid request URI");
}
_state = _State.REQUEST_LINE_HTTP_VERSION;
_httpVersionIndex = 0;
} else {
if (byte == CharCode.CR || byte == CharCode.LF) {
- throw new HttpException("Invalid request URI");
+ throw HttpException("Invalid request URI");
}
_uri_or_reason_phrase.add(byte);
}
@@ -498,7 +492,7 @@
_persistentConnection = false;
_httpVersionIndex++;
} else {
- throw new HttpException("Invalid response line");
+ throw HttpException("Invalid response line");
}
} else {
if (byte == CharCode.CR) {
@@ -527,7 +521,7 @@
} else {
_statusCodeLength++;
if ((byte < 0x30 && 0x39 < byte) || _statusCodeLength > 3) {
- throw new HttpException("Invalid response status code");
+ throw HttpException("Invalid response status code");
} else {
_statusCode = _statusCode * 10 + byte - 0x30;
}
@@ -539,7 +533,7 @@
_state = _State.RESPONSE_LINE_ENDING;
} else {
if (byte == CharCode.CR || byte == CharCode.LF) {
- throw new HttpException("Invalid response reason phrase");
+ throw HttpException("Invalid response reason phrase");
}
_uri_or_reason_phrase.add(byte);
}
@@ -551,7 +545,7 @@
// ignore: unnecessary_statements
_messageType == _MessageType.RESPONSE;
if (_statusCode < 100 || _statusCode > 599) {
- throw new HttpException("Invalid response status code");
+ throw HttpException("Invalid response status code");
} else {
// Check whether this response will never have a body.
if (_statusCode <= 199 ||
@@ -564,7 +558,7 @@
break;
case _State.HEADER_START:
- _headers = new HttpHeadersImpl(version);
+ _headers = HttpHeadersImpl(version);
if (byte == CharCode.CR) {
_state = _State.HEADER_ENDING;
} else if (byte == CharCode.LF) {
@@ -582,7 +576,7 @@
_state = _State.HEADER_VALUE_START;
} else {
if (!CharCode.isTokenChar(byte)) {
- throw new HttpException("Invalid header field name");
+ throw HttpException("Invalid header field name");
}
_headerField.add(_toLowerCaseByte(byte));
}
@@ -619,8 +613,8 @@
if (byte == CharCode.SP || byte == CharCode.HT) {
_state = _State.HEADER_VALUE_START;
} else {
- String headerField = new String.fromCharCodes(_headerField);
- String headerValue = new String.fromCharCodes(_headerValue);
+ String headerField = String.fromCharCodes(_headerField);
+ String headerValue = String.fromCharCodes(_headerValue);
if (headerField == "transfer-encoding" &&
_caseInsensitiveCompare("chunked".codeUnits, _headerValue)) {
_chunked = true;
@@ -725,7 +719,7 @@
// Always present the data as a view. This way we can handle all
// cases like this, and the user will not experience different data
// typed (which could lead to polymorphic user code).
- Uint8List data = new Uint8List.view(
+ Uint8List data = Uint8List.view(
_buffer.buffer, _buffer.offsetInBytes + _index, dataAvailable);
_bodyController.add(data);
if (_remainingContent != -1) {
@@ -782,8 +776,8 @@
if (_state != _State.UPGRADED &&
!(_state == _State.START && !_requestParser) &&
!(_state == _State.BODY && !_chunked && _transferLength == -1)) {
- _bodyController.addError(
- new HttpException("Connection closed while receiving data"));
+ _bodyController
+ .addError(HttpException("Connection closed while receiving data"));
}
_closeIncoming(true);
_controller.close();
@@ -792,8 +786,8 @@
// If the connection is idle the HTTP stream is closed.
if (_state == _State.START) {
if (!_requestParser) {
- _reportError(new HttpException(
- "Connection closed before full header was received"));
+ _reportError(
+ HttpException("Connection closed before full header was received"));
}
_controller.close();
return;
@@ -808,8 +802,8 @@
_state = _State.FAILURE;
// Report the error through the error callback if any. Otherwise
// throw the error.
- _reportError(new HttpException(
- "Connection closed before full header was received"));
+ _reportError(
+ HttpException("Connection closed before full header was received"));
_controller.close();
return;
}
@@ -821,7 +815,7 @@
// Report the error through the error callback if any. Otherwise
// throw the error.
_reportError(
- new HttpException("Connection closed before full body was received"));
+ HttpException("Connection closed before full body was received"));
}
_controller.close();
}
@@ -841,14 +835,14 @@
bool get upgrade => _connectionUpgrade && _state == _State.UPGRADED;
bool get persistentConnection => _persistentConnection;
- void set isHead(bool value) {
+ set isHead(bool value) {
if (value) _noMessageBody = true;
}
HttpDetachedIncoming detachIncoming() {
// Simulate detached by marking as upgraded.
_state = _State.UPGRADED;
- return new HttpDetachedIncoming(_socketSubscription, readUnparsedData());
+ return HttpDetachedIncoming(_socketSubscription, readUnparsedData());
}
Uint8List readUnparsedData() {
@@ -889,7 +883,7 @@
}
static List<String> _tokenizeFieldValue(String headerValue) {
- List<String> tokens = new List<String>();
+ List<String> tokens = List<String>();
int start = 0;
int index = 0;
while (index < headerValue.length) {
@@ -925,7 +919,7 @@
void _expect(int val1, int val2) {
if (val1 != val2) {
- throw new HttpException("Failed to parse HTTP");
+ throw HttpException("Failed to parse HTTP");
}
}
@@ -937,7 +931,7 @@
} else if (0x61 <= byte && byte <= 0x66) {
return byte - 0x61 + 10; // a - f
} else {
- throw new HttpException("Failed to parse HTTP");
+ throw HttpException("Failed to parse HTTP");
}
}
@@ -946,7 +940,7 @@
assert(_bodyController == null);
assert(!_bodyPaused);
HttpIncoming incoming;
- _bodyController = new StreamController<Uint8List>(
+ _bodyController = StreamController<Uint8List>(
sync: true,
onListen: () {
if (incoming != _incoming) return;
@@ -975,7 +969,7 @@
_controller.close();
});
incoming = _incoming =
- new HttpIncoming(_headers, transferLength, _bodyController.stream);
+ HttpIncoming(_headers, transferLength, _bodyController.stream);
_bodyPaused = true;
_pauseStateChanged();
}
diff --git a/lib/src/http_session.dart b/lib/src/http_session.dart
index c5b6336..f0a89f8 100644
--- a/lib/src/http_session.dart
+++ b/lib/src/http_session.dart
@@ -3,24 +3,16 @@
// BSD-style license that can be found in the LICENSE file.
abstract class HttpSession implements Map {
- /**
- * Gets the id for the current session.
- */
+ /// Gets the id for the current session.
String get id;
- /**
- * Destroys the session. This will terminate the session and any further
- * connections with this id will be given a new id and session.
- */
+ /// Destroys the session. This will terminate the session and any further
+ /// connections with this id will be given a new id and session.
void destroy();
- /**
- * Sets a callback that will be called when the session is timed out.
- */
- void set onTimeout(void callback());
+ /// Sets a callback that will be called when the session is timed out.
+ set onTimeout(void callback());
- /**
- * Is true if the session has not been sent to the client yet.
- */
+ /// Is true if the session has not been sent to the client yet.
bool get isNew;
}
diff --git a/lib/src/http_session_impl.dart b/lib/src/http_session_impl.dart
index a89ff0f..8d3f572 100644
--- a/lib/src/http_session_impl.dart
+++ b/lib/src/http_session_impl.dart
@@ -19,16 +19,15 @@
bool _isNew = true;
DateTime _lastSeen;
Function _timeoutCallback;
- HttpSessionManager _sessionManager;
+ final HttpSessionManager _sessionManager;
// Pointers in timeout queue.
HttpSessionImpl _prev;
HttpSessionImpl _next;
final String id;
- final Map _data = new HashMap();
+ final Map _data = HashMap();
- HttpSessionImpl(this._sessionManager, this.id)
- : _lastSeen = new DateTime.now();
+ HttpSessionImpl(this._sessionManager, this.id) : _lastSeen = DateTime.now();
void destroy() {
destroyed = true;
@@ -39,7 +38,7 @@
// Mark the session as seen. This will reset the timeout and move the node to
// the end of the timeout queue.
void markSeen() {
- _lastSeen = new DateTime.now();
+ _lastSeen = DateTime.now();
_sessionManager._bumpToEnd(this);
}
@@ -51,7 +50,7 @@
_isNew = false;
}
- void set onTimeout(void callback()) {
+ set onTimeout(void callback()) {
_timeoutCallback = callback;
}
@@ -110,7 +109,7 @@
// * In a map, mapping from ID to HttpSession.
// * In a linked list, used as a timeout queue.
class HttpSessionManager {
- Map<String, HttpSessionImpl> _sessions;
+ final Map<String, HttpSessionImpl> _sessions;
int _sessionTimeout = 20 * 60; // 20 mins.
HttpSessionImpl _head;
HttpSessionImpl _tail;
@@ -133,12 +132,12 @@
while (_sessions.containsKey(id)) {
id = createSessionId();
}
- var session = _sessions[id] = new HttpSessionImpl(this, id);
+ var session = _sessions[id] = HttpSessionImpl(this, id);
_addToTimeoutQueue(session);
return session;
}
- void set sessionTimeout(int timeout) {
+ set sessionTimeout(int timeout) {
_sessionTimeout = timeout;
_stopTimer();
_startTimer();
@@ -200,9 +199,9 @@
void _startTimer() {
assert(_timer == null);
if (_head != null) {
- int seconds = new DateTime.now().difference(_head.lastSeen).inSeconds;
- _timer = new Timer(
- new Duration(seconds: _sessionTimeout - seconds), _timerTimeout);
+ int seconds = DateTime.now().difference(_head.lastSeen).inSeconds;
+ _timer =
+ Timer(Duration(seconds: _sessionTimeout - seconds), _timerTimeout);
}
}
diff --git a/lib/src/http_status.dart b/lib/src/http_status.dart
index 9546a64..4b8e446 100644
--- a/lib/src/http_status.dart
+++ b/lib/src/http_status.dart
@@ -2,9 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/**
- * HTTP status codes.
- */
+/// HTTP status codes.
abstract class HttpStatus {
static const int CONTINUE = 100;
static const int SWITCHING_PROTOCOLS = 101;
diff --git a/pubspec.yaml b/pubspec.yaml
index fa1693c..4a94206 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -9,4 +9,5 @@
dev_dependencies:
convert: ^2.0.1
crypto: ^2.0.2+1
+ pedantic: ^1.0.0
test: ^1.0.0
diff --git a/test/http_100_continue_test.dart b/test/http_100_continue_test.dart
index 2a953e5..6c1ab14 100644
--- a/test/http_100_continue_test.dart
+++ b/test/http_100_continue_test.dart
@@ -33,7 +33,7 @@
var server = await ServerSocket.bind('127.0.0.1', 0);
server.listen(handleSocket);
- var client = new HttpClient();
+ var client = HttpClient();
var request =
await client.getUrl(Uri.parse('http://127.0.0.1:${server.port}/'));
var response = await request.close();
diff --git a/test/http_10_test.dart b/test/http_10_test.dart
index c2a19ba..677109d 100644
--- a/test/http_10_test.dart
+++ b/test/http_10_test.dart
@@ -12,7 +12,7 @@
// server sets a content length but still needs to close the
// connection as there is no keep alive.
Future<Null> testHttp10NoKeepAlive() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
expect(request.headers.value('content-length'), isNull);
@@ -41,7 +41,7 @@
socket.listen(response.addAll, onDone: () {
count++;
socket.destroy();
- String s = new String.fromCharCodes(response).toLowerCase();
+ String s = String.fromCharCodes(response).toLowerCase();
expect(-1, equals(s.indexOf("keep-alive")));
if (count < 10) {
makeRequest();
@@ -62,7 +62,7 @@
// content length so it has to close the connection to mark the end of
// the response.
Future<Null> testHttp10ServerClose() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
expect(request.headers.value('content-length'), isNull);
@@ -90,7 +90,7 @@
onDone: () {
socket.destroy();
count++;
- String s = new String.fromCharCodes(response).toLowerCase();
+ String s = String.fromCharCodes(response).toLowerCase();
expect("z", equals(s[s.length - 1]));
expect(-1, equals(s.indexOf("content-length:")));
expect(-1, equals(s.indexOf("keep-alive")));
@@ -114,7 +114,7 @@
// server sets a content length so the persistent connection can be
// used.
Future<Null> testHttp10KeepAlive() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
expect(request.headers.value('content-length'), isNull);
@@ -142,7 +142,7 @@
socket.listen((d) {
response.addAll(d);
if (response[response.length - 1] == "Z".codeUnitAt(0)) {
- String s = new String.fromCharCodes(response).toLowerCase();
+ String s = String.fromCharCodes(response).toLowerCase();
expect(s.indexOf("\r\nconnection: keep-alive\r\n") > 0, isTrue);
expect(s.indexOf("\r\ncontent-length: 1\r\n") > 0, isTrue);
count++;
@@ -168,7 +168,7 @@
// server does not set a content length so it cannot honor connection
// keep alive.
Future<Null> testHttp10KeepAliveServerCloses() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
expect(request.headers.value('content-length'), isNull);
@@ -193,7 +193,7 @@
socket.listen(response.addAll, onDone: () {
socket.destroy();
count++;
- String s = new String.fromCharCodes(response).toLowerCase();
+ String s = String.fromCharCodes(response).toLowerCase();
expect("z", equals(s[s.length - 1]));
expect(-1, equals(s.indexOf("content-length")));
expect(-1, equals(s.indexOf("connection")));
diff --git a/test/http_auth_digest_test.dart b/test/http_auth_digest_test.dart
index d2d3bd5..a6152d4 100644
--- a/test/http_auth_digest_test.dart
+++ b/test/http_auth_digest_test.dart
@@ -17,13 +17,13 @@
String ha1;
static Future<Server> start(String algorithm, String qop,
- {int nonceStaleAfter, bool useNextNonce: false}) {
- return new Server()._start(algorithm, qop, nonceStaleAfter, useNextNonce);
+ {int nonceStaleAfter, bool useNextNonce = false}) {
+ return Server()._start(algorithm, qop, nonceStaleAfter, useNextNonce);
}
Future<Server> _start(String serverAlgorithm, String serverQop,
int nonceStaleAfter, bool useNextNonce) {
- Set ncs = new Set();
+ Set ncs = Set();
// Calculate ha1.
String realm = "test";
String username = "dart";
@@ -33,13 +33,13 @@
var nonce = "12345678"; // No need for random nonce in test.
- var completer = new Completer<Server>();
+ var completer = Completer<Server>();
HttpServer.bind("127.0.0.1", 0).then((s) {
server = s;
server.listen((HttpRequest request) {
- sendUnauthorizedResponse(HttpResponse response, {stale: false}) {
+ sendUnauthorizedResponse(HttpResponse response, {stale = false}) {
response.statusCode = HttpStatus.UNAUTHORIZED;
- StringBuffer authHeader = new StringBuffer();
+ StringBuffer authHeader = StringBuffer();
authHeader.write('Digest');
authHeader.write(', realm="$realm"');
authHeader.write(', nonce="$nonce"');
@@ -135,17 +135,17 @@
}
Future<Null> testNoCredentials(String algorithm, String qop) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
Server.start(algorithm, qop).then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
// Add digest credentials which does not match the path requested.
client.addCredentials(Uri.parse("http://127.0.0.1:${server.port}/xxx"),
- "test", new HttpClientDigestCredentials("dart", "password"));
+ "test", HttpClientDigestCredentials("dart", "password"));
// Add basic credentials for the path requested.
client.addCredentials(Uri.parse("http://127.0.0.1:${server.port}/digest"),
- "test", new HttpClientBasicCredentials("dart", "password"));
+ "test", HttpClientBasicCredentials("dart", "password"));
Future makeRequest(Uri url) {
return client
@@ -172,9 +172,9 @@
}
Future<Null> testCredentials(String algorithm, String qop) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
Server.start(algorithm, qop).then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
Future makeRequest(Uri url) {
return client
@@ -188,7 +188,7 @@
}
client.addCredentials(Uri.parse("http://127.0.0.1:${server.port}/digest"),
- "test", new HttpClientDigestCredentials("dart", "password"));
+ "test", HttpClientDigestCredentials("dart", "password"));
var futures = <Future>[];
for (int i = 0; i < 2; i++) {
@@ -207,19 +207,19 @@
}
Future<Null> testAuthenticateCallback(String algorithm, String qop) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
Server.start(algorithm, qop).then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client.authenticate = (Uri url, String scheme, String realm) {
expect("Digest", equals(scheme));
expect("test", equals(realm));
- Completer<bool> completer = new Completer<bool>();
- new Timer(const Duration(milliseconds: 10), () {
+ Completer<bool> completer = Completer<bool>();
+ Timer(const Duration(milliseconds: 10), () {
client.addCredentials(
Uri.parse("http://127.0.0.1:${server.port}/digest"),
"test",
- new HttpClientDigestCredentials("dart", "password"));
+ HttpClientDigestCredentials("dart", "password"));
completer.complete(true);
});
return completer.future;
@@ -251,9 +251,9 @@
}
Future<Null> testStaleNonce() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
Server.start("MD5", "auth", nonceStaleAfter: 2).then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
Future makeRequest(Uri url) {
return client
@@ -267,7 +267,7 @@
}
Uri uri = Uri.parse("http://127.0.0.1:${server.port}/digest");
- var credentials = new HttpClientDigestCredentials("dart", "password");
+ var credentials = HttpClientDigestCredentials("dart", "password");
client.addCredentials(uri, "test", credentials);
makeRequest(uri)
@@ -286,10 +286,10 @@
}
Future<Null> testNextNonce() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
Server.start("MD5", "auth", nonceStaleAfter: 2, useNextNonce: true)
.then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
Future makeRequest(Uri url) {
return client
@@ -303,7 +303,7 @@
}
Uri uri = Uri.parse("http://127.0.0.1:${server.port}/digest");
- var credentials = new HttpClientDigestCredentials("dart", "password");
+ var credentials = HttpClientDigestCredentials("dart", "password");
client.addCredentials(uri, "test", credentials);
makeRequest(uri)
diff --git a/test/http_auth_test.dart b/test/http_auth_test.dart
index 995ce87..3bcd5a0 100644
--- a/test/http_auth_test.dart
+++ b/test/http_auth_test.dart
@@ -13,7 +13,7 @@
bool passwordChanged = false;
Future<Server> start() {
- var completer = new Completer<Server>();
+ var completer = Completer<Server>();
HttpServer.bind("127.0.0.1", 0).then((s) {
server = s;
server.listen((HttpRequest request) {
@@ -67,13 +67,13 @@
}
Future<Server> setupServer() {
- return new Server().start();
+ return Server().start();
}
Future<Null> testUrlUserInfo() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.getUrl(Uri.parse("http://username:password@127.0.0.1:${server.port}/"))
@@ -90,9 +90,9 @@
}
Future<Null> testBasicNoCredentials() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
Future makeRequest(Uri url) {
return client
@@ -121,9 +121,9 @@
}
Future<Null> testBasicCredentials() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
Future makeRequest(Uri url) {
return client
@@ -137,7 +137,7 @@
for (int i = 0; i < 5; i++) {
client.addCredentials(Uri.parse("http://127.0.0.1:${server.port}/test$i"),
- "realm", new HttpClientBasicCredentials("test$i", "test$i"));
+ "realm", HttpClientBasicCredentials("test$i", "test$i"));
}
var futures = <Future>[];
@@ -157,9 +157,9 @@
}
Future<Null> testBasicAuthenticateCallback() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
bool passwordChanged = false;
client.authenticate = (Uri url, String scheme, String realm) {
@@ -168,10 +168,10 @@
String username = url.path.substring(1, 6);
String password = url.path.substring(1, 6);
if (passwordChanged) password = "${password}1";
- Completer<bool> completer = new Completer<bool>();
- new Timer(const Duration(milliseconds: 10), () {
+ Completer<bool> completer = Completer<bool>();
+ Timer(const Duration(milliseconds: 10), () {
client.addCredentials(
- url, realm, new HttpClientBasicCredentials(username, password));
+ url, realm, HttpClientBasicCredentials(username, password));
completer.complete(true);
});
return completer.future;
diff --git a/test/http_bind_test.dart b/test/http_bind_test.dart
index ce4c773..79a4267 100644
--- a/test/http_bind_test.dart
+++ b/test/http_bind_test.dart
@@ -12,7 +12,7 @@
// Sent a single request using a new HttpClient to ensure a new TCP
// connection is used.
Future singleRequest(host, port, statusCode) async {
- var client = new HttpClient();
+ var client = HttpClient();
var request = await client.open('GET', host, port, '/');
var response = await request.close();
await response.drain();
@@ -20,8 +20,8 @@
client.close(force: true);
}
- Completer server1Request = new Completer();
- Completer server2Request = new Completer();
+ Completer server1Request = Completer();
+ Completer server2Request = Completer();
var server1 = await HttpServer.bind(host, 0, v6Only: v6Only, shared: true);
var port = server1.port;
diff --git a/test/http_client_connect_test.dart b/test/http_client_connect_test.dart
index cdb481c..ad14857 100644
--- a/test/http_client_connect_test.dart
+++ b/test/http_client_connect_test.dart
@@ -9,13 +9,13 @@
import "package:test/test.dart";
Future<Null> testGetEmptyRequest() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
request.pipe(request.response);
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -30,7 +30,7 @@
}
Future<Null> testGetDataRequest() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
var data = "lalala".codeUnits;
server.listen((request) {
@@ -38,7 +38,7 @@
request.pipe(request.response);
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -55,8 +55,8 @@
}
Future<Null> testGetInvalidHost() {
- Completer<Null> completer = new Completer();
- var client = new HttpClient();
+ Completer<Null> completer = Completer();
+ var client = HttpClient();
client.get("__SOMETHING_INVALID__", 8888, "/").catchError((error) {
client.close();
completer.complete(null);
@@ -65,16 +65,16 @@
}
Future<Null> testGetServerClose() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
server.close();
- new Timer(const Duration(milliseconds: 100), () {
+ Timer(const Duration(milliseconds: 100), () {
request.response.close();
});
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -85,8 +85,8 @@
}
Future<Null> testGetServerCloseNoKeepAlive() {
- Completer<Null> completer = new Completer();
- var client = new HttpClient();
+ Completer<Null> completer = Completer();
+ var client = HttpClient();
HttpServer.bind("127.0.0.1", 0).then((server) {
int port = server.port;
server.first.then((request) => request.response.close());
@@ -104,13 +104,13 @@
}
Future<Null> testGetServerForceClose() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
server.close(force: true);
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -123,8 +123,8 @@
}
Future<Null> testGetDataServerForceClose() {
- Completer<Null> testCompleter = new Completer();
- var completer = new Completer();
+ Completer<Null> testCompleter = Completer();
+ var completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
request.response.bufferOutput = false;
@@ -134,7 +134,7 @@
completer.future.then((_) => server.close(force: true));
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -154,9 +154,10 @@
return testCompleter.future;
}
-typedef Future<HttpClientRequest> Callback1(String a1, int a2, String a3);
+typedef Callback1 = Future<HttpClientRequest> Function(
+ String a1, int a2, String a3);
Future<Null> testOpenEmptyRequest() async {
- var client = new HttpClient();
+ var client = HttpClient();
var methods = [
[client.get, 'GET'],
[client.post, 'POST'],
@@ -167,7 +168,7 @@
];
for (var method in methods) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
await HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
expect(method[1], equals(request.method));
@@ -188,9 +189,9 @@
}
}
-typedef Future<HttpClientRequest> Callback2(Uri a1);
+typedef Callback2 = Future<HttpClientRequest> Function(Uri a1);
Future<Null> testOpenUrlEmptyRequest() async {
- var client = new HttpClient();
+ var client = HttpClient();
var methods = [
[client.getUrl, 'GET'],
[client.postUrl, 'POST'],
@@ -201,7 +202,7 @@
];
for (var method in methods) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
await HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
expect(method[1], equals(request.method));
@@ -223,7 +224,7 @@
}
Future<Null> testNoBuffer() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
HttpResponse response;
server.listen((request) {
@@ -232,13 +233,13 @@
response.writeln('init');
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
.then((clientResponse) {
- var iterator = new StreamIterator(
- clientResponse.transform(utf8.decoder).transform(new LineSplitter()));
+ var iterator = StreamIterator(
+ clientResponse.transform(utf8.decoder).transform(LineSplitter()));
iterator.moveNext().then((hasValue) {
expect(hasValue, isTrue);
expect('init', equals(iterator.current));
@@ -270,7 +271,7 @@
}
Future<Null> testMaxConnectionsPerHost(int connectionCap, int connections) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
int handled = 0;
server.listen((request) {
@@ -283,7 +284,7 @@
}
});
- var client = new HttpClient();
+ var client = HttpClient();
client.maxConnectionsPerHost = connectionCap;
for (int i = 0; i < connections; i++) {
client
diff --git a/test/http_client_exception_test.dart b/test/http_client_exception_test.dart
index aa0b488..5aab7c0 100644
--- a/test/http_client_exception_test.dart
+++ b/test/http_client_exception_test.dart
@@ -11,7 +11,7 @@
}
void testInvalidUrl() {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
List<List<String>> tests = <List<String>>[
<String>["ftp://www.google.com", "Unsupported scheme"],
<String>["httpx://www.google.com", "Unsupported scheme"],
@@ -30,7 +30,7 @@
}
void testBadHostName() {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
expect(() => client.get("some.bad.host.name.7654321", 0, "/"),
throwsA(predicate((e) => e.toString().contains("Failed host lookup"))));
}
diff --git a/test/http_client_request_test.dart b/test/http_client_request_test.dart
index 5ce5fa4..c67634e 100644
--- a/test/http_client_request_test.dart
+++ b/test/http_client_request_test.dart
@@ -9,13 +9,13 @@
import "package:test/test.dart";
Future<Null> testClientRequest(Future handler(request)) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
request.drain().then((_) => request.response.close()).catchError((_) {});
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) {
@@ -45,7 +45,7 @@
Future<Null> testBadResponseAdd() async {
await testClientRequest((request) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
request.contentLength = 0;
request.add([0]);
request.close();
@@ -56,7 +56,7 @@
});
await testClientRequest((request) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
request.contentLength = 5;
request.add([0, 0, 0]);
request.add([0, 0, 0]);
@@ -68,11 +68,11 @@
});
await testClientRequest((request) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
request.contentLength = 0;
- request.add(new Uint8List(64 * 1024));
- request.add(new Uint8List(64 * 1024));
- request.add(new Uint8List(64 * 1024));
+ request.add(Uint8List(64 * 1024));
+ request.add(Uint8List(64 * 1024));
+ request.add(Uint8List(64 * 1024));
request.close();
request.done.catchError((error) {
completer.complete(null);
@@ -83,7 +83,7 @@
Future<Null> testBadResponseClose() async {
await testClientRequest((request) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
request.contentLength = 5;
request.close();
request.done.catchError((error) {
@@ -93,7 +93,7 @@
});
await testClientRequest((request) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
request.contentLength = 5;
request.add([0]);
request.close();
diff --git a/test/http_client_stays_alive_test.dart b/test/http_client_stays_alive_test.dart
index 3e208af..5944f94 100644
--- a/test/http_client_stays_alive_test.dart
+++ b/test/http_client_stays_alive_test.dart
@@ -30,7 +30,7 @@
}
Future<Null> runServerProcess() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind('127.0.0.1', 0).then((server) {
var url = 'http://127.0.0.1:${server.port}/';
@@ -42,10 +42,10 @@
..close();
});
- var sw = new Stopwatch()..start();
+ var sw = Stopwatch()..start();
var script =
"${Directory.current.path}/test/http_client_stays_alive_test.dart";
- if (!(new File(script)).existsSync()) {
+ if (!(File(script)).existsSync()) {
// If we can't find the file relative to the cwd, then look relative to
// Platform.script.
script = Platform.script
@@ -81,7 +81,7 @@
// NOTE: We make an HTTP client request and then *forget to close* the HTTP
// client instance. The idle timer should fire after SECONDS.
- var client = new HttpClient();
+ var client = HttpClient();
client.idleTimeout = const Duration(seconds: SECONDS);
client
diff --git a/test/http_close_test.dart b/test/http_close_test.dart
index 62213be..5caa65d 100644
--- a/test/http_close_test.dart
+++ b/test/http_close_test.dart
@@ -10,7 +10,7 @@
import "package:test/test.dart";
Future<Null> testClientAndServerCloseNoListen(int connections) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
int closed = 0;
server.listen((request) {
@@ -26,7 +26,7 @@
}
});
});
- var client = new HttpClient();
+ var client = HttpClient();
for (int i = 0; i < connections; i++) {
client
.get("127.0.0.1", server.port, "/")
@@ -38,7 +38,7 @@
}
Future<Null> testClientCloseServerListen(int connections) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
int closed = 0;
void check() {
@@ -58,7 +58,7 @@
request.response.done.then((_) => check());
});
});
- var client = new HttpClient();
+ var client = HttpClient();
for (int i = 0; i < connections; i++) {
client
.get("127.0.0.1", server.port, "/")
@@ -70,9 +70,9 @@
}
Future<Null> testClientCloseSendingResponse(int connections) {
- Completer<Null> completer = new Completer();
- var buffer = new Uint8List(64 * 1024);
- var rand = new Random();
+ Completer<Null> completer = Completer();
+ var buffer = Uint8List(64 * 1024);
+ var rand = Random();
for (int i = 0; i < buffer.length; i++) {
buffer[i] = rand.nextInt(256);
}
@@ -91,7 +91,7 @@
}
server.listen((request) {
- var timer = new Timer.periodic(const Duration(milliseconds: 50), (_) {
+ var timer = Timer.periodic(const Duration(milliseconds: 50), (_) {
request.response.add(buffer);
});
request.response.done.catchError((_) {}).whenComplete(() {
@@ -99,7 +99,7 @@
timer.cancel();
});
});
- var client = new HttpClient();
+ var client = HttpClient();
for (int i = 0; i < connections; i++) {
client
.get("127.0.0.1", server.port, "/")
@@ -108,7 +108,7 @@
// Ensure we don't accept the response until we have send the entire
// request.
var subscription = response.listen((_) {});
- new Timer(const Duration(milliseconds: 20), () {
+ Timer(const Duration(milliseconds: 20), () {
subscription.cancel();
check();
});
@@ -119,7 +119,7 @@
}
Future<Null> testClientCloseWhileSendingRequest(int connections) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) async {
server.listen((request) {
request.listen((_) {}, onError: (e) {
@@ -128,7 +128,7 @@
expect(e is HttpException, isTrue);
});
});
- var client = new HttpClient();
+ var client = HttpClient();
int closed = 0;
for (int i = 0; i < connections; i++) {
await client.post("127.0.0.1", server.port, "/").then((request) {
diff --git a/test/http_compression_test.dart b/test/http_compression_test.dart
index 90114ac..0a3025b 100644
--- a/test/http_compression_test.dart
+++ b/test/http_compression_test.dart
@@ -9,15 +9,15 @@
import "package:http_io/http_io.dart";
import "package:test/test.dart";
-Future<Null> testWithData(List<int> data, {bool clientAutoUncompress: true}) {
- Completer<Null> completer = new Completer();
+Future<Null> testWithData(List<int> data, {bool clientAutoUncompress = true}) {
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.autoCompress = true;
server.listen((request) {
request.response.add(data);
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
client.autoUncompress = clientAutoUncompress;
client.get("127.0.0.1", server.port, "/").then((request) {
request.headers.set(HttpHeaders.ACCEPT_ENCODING, "gzip,deflate");
@@ -43,13 +43,13 @@
return completer.future;
}
-Future<Null> testRawServerCompressData({bool clientAutoUncompress: true}) {
+Future<Null> testRawServerCompressData({bool clientAutoUncompress = true}) {
return testWithData("My raw server provided data".codeUnits,
clientAutoUncompress: clientAutoUncompress);
}
-Future<Null> testServerCompressLong({bool clientAutoUncompress: true}) {
- var longBuffer = new Uint8List(1024 * 1024);
+Future<Null> testServerCompressLong({bool clientAutoUncompress = true}) {
+ var longBuffer = Uint8List(1024 * 1024);
for (int i = 0; i < longBuffer.length; i++) {
longBuffer[i] = i & 0xFF;
}
@@ -68,14 +68,14 @@
}
Future<Null> acceptEncodingHeaderHelper(String encoding, bool valid) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.autoCompress = true;
server.listen((request) {
request.response.write("data");
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
client.get("127.0.0.1", server.port, "/").then((request) {
request.headers.set(HttpHeaders.ACCEPT_ENCODING, encoding);
return request.close();
@@ -122,7 +122,7 @@
}
Future<Null> testDisableCompressTest() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
expect(false, equals(server.autoCompress));
server.listen((request) {
@@ -131,7 +131,7 @@
request.response.write("data");
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
diff --git a/test/http_connection_close_test.dart b/test/http_connection_close_test.dart
index 876566a..be9526f 100644
--- a/test/http_connection_close_test.dart
+++ b/test/http_connection_close_test.dart
@@ -9,7 +9,7 @@
import "package:test/test.dart";
Future<Null> testHttp10Close(bool closeRequest) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
request.response.close();
@@ -29,7 +29,7 @@
}
Future<Null> testHttp11Close(bool closeRequest) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
request.response.close();
@@ -49,19 +49,19 @@
}
Future<Null> testStreamResponse() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
- var timer = new Timer.periodic(const Duration(milliseconds: 0), (_) {
+ var timer = Timer.periodic(const Duration(milliseconds: 0), (_) {
request.response
- .write('data:${new DateTime.now().millisecondsSinceEpoch}\n\n');
+ .write('data:${DateTime.now().millisecondsSinceEpoch}\n\n');
});
request.response.done.whenComplete(() {
timer.cancel();
}).catchError((_) {});
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.getUrl(Uri.parse("http://127.0.0.1:${server.port}"))
.then((request) => request.close())
diff --git a/test/http_connection_header_test.dart b/test/http_connection_header_test.dart
index 49e48f2..aebe3cd 100644
--- a/test/http_connection_header_test.dart
+++ b/test/http_connection_header_test.dart
@@ -44,7 +44,7 @@
}
Future<Null> headerTest(int totalConnections, bool clientPersistentConnection) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
// Check expected request.
@@ -64,7 +64,7 @@
});
int count = 0;
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < totalConnections; i++) {
client
.get("127.0.0.1", server.port, "/")
diff --git a/test/http_connection_info_test.dart b/test/http_connection_info_test.dart
index 3ce625d..8389edd 100644
--- a/test/http_connection_info_test.dart
+++ b/test/http_connection_info_test.dart
@@ -8,7 +8,7 @@
import "package:test/test.dart";
Future<Null> testHttpConnectionInfo() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("0.0.0.0", 0).then((server) {
int clientPort;
@@ -26,7 +26,7 @@
});
});
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client.get("127.0.0.1", server.port, "/").then((request) {
expect(request.connectionInfo.remoteAddress is InternetAddress, isTrue);
expect(request.connectionInfo.remotePort, equals(server.port));
diff --git a/test/http_content_length_test.dart b/test/http_content_length_test.dart
index 80d81f7..01fe62d 100644
--- a/test/http_content_length_test.dart
+++ b/test/http_content_length_test.dart
@@ -8,7 +8,7 @@
import "package:test/test.dart";
Future<Null> testNoBody(int totalConnections, bool explicitContentLength) {
- var completer = new Completer<Null>();
+ var completer = Completer<Null>();
int count = 0;
HttpServer.bind("127.0.0.1", 0, backlog: totalConnections).then((server) {
server.listen((HttpRequest request) {
@@ -41,7 +41,7 @@
fail(msg);
});
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < totalConnections; i++) {
client.get("127.0.0.1", server.port, "/").then((request) {
if (explicitContentLength) {
@@ -61,7 +61,7 @@
}
Future<Null> testBody(int totalConnections, bool useHeader) {
- var completer = new Completer<Null>();
+ var completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0, backlog: totalConnections).then((server) {
int serverCount = 0;
server.listen((HttpRequest request) {
@@ -102,7 +102,7 @@
});
int clientCount = 0;
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < totalConnections; i++) {
client.get("127.0.0.1", server.port, "/").then((request) {
if (useHeader) {
@@ -139,7 +139,7 @@
}
Future<Null> testBodyChunked(int totalConnections, bool useHeader) {
- var completer = new Completer<Null>();
+ var completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0, backlog: totalConnections).then((server) {
server.listen((HttpRequest request) {
expect(request.headers.value('content-length'), isNull);
@@ -172,7 +172,7 @@
});
int count = 0;
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < totalConnections; i++) {
client.get("127.0.0.1", server.port, "/").then((request) {
if (useHeader) {
@@ -213,7 +213,7 @@
}
Future<Null> testSetContentLength() {
- var completer = new Completer<Null>();
+ var completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
var response = request.response;
@@ -226,7 +226,7 @@
response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
diff --git a/test/http_cookie_date_test.dart b/test/http_cookie_date_test.dart
index 0d4b0cc..a46c4b2 100644
--- a/test/http_cookie_date_test.dart
+++ b/test/http_cookie_date_test.dart
@@ -9,12 +9,11 @@
import 'package:test/test.dart';
void testParseHttpCookieDate() {
- expect(() => parseCookieDate(""), throwsA(new TypeMatcher<HttpException>()));
+ expect(() => parseCookieDate(""), throwsA(TypeMatcher<HttpException>()));
test(int year, int month, int day, int hours, int minutes, int seconds,
String formatted) {
- DateTime date =
- new DateTime.utc(year, month, day, hours, minutes, seconds, 0);
+ DateTime date = DateTime.utc(year, month, day, hours, minutes, seconds, 0);
expect(date, parseCookieDate(formatted));
}
diff --git a/test/http_cookie_test.dart b/test/http_cookie_test.dart
index 62db043..b4b3d9c 100644
--- a/test/http_cookie_test.dart
+++ b/test/http_cookie_test.dart
@@ -8,7 +8,7 @@
import 'package:test/test.dart';
Future<Null> testCookies() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
var cookies = [
{'abc': 'def'},
{'ABC': 'DEF'},
@@ -25,18 +25,18 @@
expect(cookies[index], cookiesMap);
// Return the same cookies to the client.
cookiesMap.forEach((k, v) {
- request.response.cookies.add(new Cookie(k, v));
+ request.response.cookies.add(Cookie(k, v));
});
request.response.close();
});
int count = 0;
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < cookies.length; i++) {
client.get("127.0.0.1", server.port, "/$i").then((request) {
// Send the cookies to the server.
cookies[i].forEach((k, v) {
- request.cookies.add(new Cookie(k, v));
+ request.cookies.add(Cookie(k, v));
});
return request.close();
}).then((response) {
diff --git a/test/http_cross_process_test.dart b/test/http_cross_process_test.dart
index 334ddd7..8e3717a 100644
--- a/test/http_cross_process_test.dart
+++ b/test/http_cross_process_test.dart
@@ -42,7 +42,7 @@
Future<void> runClientProcess(int port) {
var script =
"${Directory.current.path}/test/http_client_stays_alive_test.dart";
- if (!(new File(script)).existsSync()) {
+ if (!(File(script)).existsSync()) {
// If we can't find the file relative to the cwd, then look relative to
// Platform.script.
script = Platform.script
@@ -70,7 +70,7 @@
}
void runClient(int port) {
- var client = new HttpClient();
+ var client = HttpClient();
client
.get('127.0.0.1', port, "/")
.then((request) => request.close())
diff --git a/test/http_date_test.dart b/test/http_date_test.dart
index 38a848b..c70b3b7 100644
--- a/test/http_date_test.dart
+++ b/test/http_date_test.dart
@@ -7,17 +7,17 @@
void testParseHttpDate() {
DateTime date;
- date = new DateTime.utc(1999, DateTime.june, 11, 18, 46, 53, 0);
+ date = DateTime.utc(1999, DateTime.june, 11, 18, 46, 53, 0);
expect(date, HttpDate.parse("Fri, 11 Jun 1999 18:46:53 GMT"));
expect(date, HttpDate.parse("Friday, 11-Jun-1999 18:46:53 GMT"));
expect(date, HttpDate.parse("Fri Jun 11 18:46:53 1999"));
- date = new DateTime.utc(1970, DateTime.january, 1, 0, 0, 0, 0);
+ date = DateTime.utc(1970, DateTime.january, 1, 0, 0, 0, 0);
expect(date, HttpDate.parse("Thu, 1 Jan 1970 00:00:00 GMT"));
expect(date, HttpDate.parse("Thursday, 1-Jan-1970 00:00:00 GMT"));
expect(date, HttpDate.parse("Thu Jan 1 00:00:00 1970"));
- date = new DateTime.utc(2012, DateTime.march, 5, 23, 59, 59, 0);
+ date = DateTime.utc(2012, DateTime.march, 5, 23, 59, 59, 0);
expect(date, HttpDate.parse("Mon, 5 Mar 2012 23:59:59 GMT"));
expect(date, HttpDate.parse("Monday, 5-Mar-2012 23:59:59 GMT"));
expect(date, HttpDate.parse("Mon Mar 5 23:59:59 2012"));
@@ -28,7 +28,7 @@
String expectedFormatted) {
DateTime date;
String formatted;
- date = new DateTime.utc(year, month, day, hours, minutes, seconds, 0);
+ date = DateTime.utc(year, month, day, hours, minutes, seconds, 0);
formatted = HttpDate.format(date);
expect(expectedFormatted, formatted);
expect(date, HttpDate.parse(formatted));
@@ -43,7 +43,7 @@
void testParseHttpDateFailures() {
// The calls below can throw different exceptions based on the iteration of
// the loop. This matcher catches all exceptions.
- final throws = throwsA(new TypeMatcher<Object>());
+ final throws = throwsA(TypeMatcher<Object>());
expect(() {
HttpDate.parse("");
}, throws);
diff --git a/test/http_detach_socket_test.dart b/test/http_detach_socket_test.dart
index 4c924d2..369e822 100644
--- a/test/http_detach_socket_test.dart
+++ b/test/http_detach_socket_test.dart
@@ -9,7 +9,7 @@
import 'package:test/test.dart';
Future<Null> testServerDetachSocket() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.defaultResponseHeaders.clear();
server.serverHeader = null;
@@ -18,8 +18,8 @@
response.contentLength = 0;
response.detachSocket().then((socket) {
expect(socket, isNotNull);
- var body = new StringBuffer();
- socket.listen((data) => body.write(new String.fromCharCodes(data)),
+ var body = StringBuffer();
+ socket.listen((data) => body.write(String.fromCharCodes(data)),
onDone: () => expect("Some data", body.toString()));
socket.write("Test!");
socket.close();
@@ -32,8 +32,8 @@
socket.write("GET / HTTP/1.1\r\n"
"content-length: 0\r\n\r\n"
"Some data");
- var body = new StringBuffer();
- socket.listen((data) => body.write(new String.fromCharCodes(data)),
+ var body = StringBuffer();
+ socket.listen((data) => body.write(String.fromCharCodes(data)),
onDone: () {
expect(
"HTTP/1.1 200 OK\r\n"
@@ -49,15 +49,15 @@
}
Future<Null> testServerDetachSocketNoWriteHeaders() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
var response = request.response;
response.contentLength = 0;
response.detachSocket(writeHeaders: false).then((socket) {
expect(socket, isNotNull);
- var body = new StringBuffer();
- socket.listen((data) => body.write(new String.fromCharCodes(data)),
+ var body = StringBuffer();
+ socket.listen((data) => body.write(String.fromCharCodes(data)),
onDone: () => expect("Some data", body.toString()));
socket.write("Test!");
socket.close();
@@ -70,8 +70,8 @@
socket.write("GET / HTTP/1.1\r\n"
"content-length: 0\r\n\r\n"
"Some data");
- var body = new StringBuffer();
- socket.listen((data) => body.write(new String.fromCharCodes(data)),
+ var body = StringBuffer();
+ socket.listen((data) => body.write(String.fromCharCodes(data)),
onDone: () {
expect("Test!", body.toString());
socket.close();
@@ -82,13 +82,13 @@
}
Future<Null> testBadServerDetachSocket() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
var response = request.response;
response.contentLength = 0;
response.close();
- expect(response.detachSocket, throwsA(new TypeMatcher<StateError>()));
+ expect(response.detachSocket, throwsA(TypeMatcher<StateError>()));
server.close();
completer.complete();
});
@@ -105,15 +105,15 @@
}
Future<Null> testClientDetachSocket() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
ServerSocket.bind("127.0.0.1", 0).then((server) {
server.listen((socket) {
int port = server.port;
socket.write("HTTP/1.1 200 OK\r\n"
"\r\n"
"Test!");
- var body = new StringBuffer();
- socket.listen((data) => body.write(new String.fromCharCodes(data)),
+ var body = StringBuffer();
+ socket.listen((data) => body.write(String.fromCharCodes(data)),
onDone: () {
List<String> lines = body.toString().split("\r\n");
expect(6, lines.length);
@@ -130,15 +130,15 @@
completer.complete();
});
- var client = new HttpClient();
+ var client = HttpClient();
client.userAgent = null;
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
.then((response) {
response.detachSocket().then((socket) {
- var body = new StringBuffer();
- socket.listen((data) => body.write(new String.fromCharCodes(data)),
+ var body = StringBuffer();
+ socket.listen((data) => body.write(String.fromCharCodes(data)),
onDone: () {
expect("Test!", body.toString());
client.close();
@@ -152,7 +152,7 @@
}
Future<Null> testUpgradedConnection() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
request.response.headers.set('connection', 'upgrade');
@@ -165,7 +165,7 @@
}
});
- var client = new HttpClient();
+ var client = HttpClient();
client.userAgent = null;
client.get("127.0.0.1", server.port, "/").then((request) {
request.headers.set('upgrade', 'mine');
diff --git a/test/http_head_test.dart b/test/http_head_test.dart
index a38ad7c..c74d2e8 100644
--- a/test/http_head_test.dart
+++ b/test/http_head_test.dart
@@ -8,7 +8,7 @@
import 'package:test/test.dart';
Future<Null> testHEAD(int totalConnections) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) async {
server.listen((request) {
var response = request.response;
@@ -17,15 +17,15 @@
response.close();
} else if (request.uri.path == "/test200") {
response.contentLength = 200;
- List<int> data = new List<int>.filled(200, 0);
+ List<int> data = List<int>.filled(200, 0);
response.add(data);
response.close();
} else if (request.uri.path == "/testChunked100") {
- List<int> data = new List<int>.filled(100, 0);
+ List<int> data = List<int>.filled(100, 0);
response.add(data);
response.close();
} else if (request.uri.path == "/testChunked200") {
- List<int> data = new List<int>.filled(200, 0);
+ List<int> data = List<int>.filled(200, 0);
response.add(data);
response.close();
} else {
@@ -33,7 +33,7 @@
}
});
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
int count = 0;
diff --git a/test/http_headers_state_test.dart b/test/http_headers_state_test.dart
index dd5f0fb..516620a 100644
--- a/test/http_headers_state_test.dart
+++ b/test/http_headers_state_test.dart
@@ -8,13 +8,13 @@
import 'package:test/test.dart';
Future<Null> runTest(int totalConnections, [String body]) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) async {
server.listen((HttpRequest request) {
HttpResponse response = request.response;
// Cannot mutate request headers.
expect(() => request.headers.add("X-Request-Header", "value"),
- throwsA(new TypeMatcher<HttpException>()));
+ throwsA(TypeMatcher<HttpException>()));
expect("value", request.headers.value("X-Request-Header"));
request.listen((_) {}, onDone: () {
// Can still mutate response headers as long as no data has been sent.
@@ -26,7 +26,7 @@
expect(() => response.reasonPhrase = "OK", throwsStateError);
// Cannot mutate response headers when data has been sent.
expect(() => response.headers.add("X-Request-Header", "value2"),
- throwsA(new TypeMatcher<HttpException>()));
+ throwsA(TypeMatcher<HttpException>()));
}
response..close();
// Cannot change state or reason after connection is closed.
@@ -34,12 +34,12 @@
expect(() => response.reasonPhrase = "OK", throwsStateError);
// Cannot mutate response headers after connection is closed.
expect(() => response.headers.add("X-Request-Header", "value3"),
- throwsA(new TypeMatcher<HttpException>()));
+ throwsA(TypeMatcher<HttpException>()));
});
});
int count = 0;
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < totalConnections; i++) {
await client
.get("127.0.0.1", server.port, "/")
@@ -53,17 +53,17 @@
request.write(body);
// Cannot mutate request headers when data has been sent.
expect(() => request.headers.add("X-Request-Header", "value2"),
- throwsA(new TypeMatcher<HttpException>()));
+ throwsA(TypeMatcher<HttpException>()));
}
request.close();
// Cannot mutate request headers when data has been sent.
expect(() => request.headers.add("X-Request-Header", "value3"),
- throwsA(new TypeMatcher<HttpException>()));
+ throwsA(TypeMatcher<HttpException>()));
return request.done;
}).then((HttpClientResponse response) {
// Cannot mutate response headers.
expect(() => response.headers.add("X-Response-Header", "value"),
- throwsA(new TypeMatcher<HttpException>()));
+ throwsA(TypeMatcher<HttpException>()));
expect("value", response.headers.value("X-Response-Header"));
response.listen((_) {}, onDone: () {
// Do not close the connections before we have read the
diff --git a/test/http_headers_test.dart b/test/http_headers_test.dart
index 08ac899..dd86cf0 100644
--- a/test/http_headers_test.dart
+++ b/test/http_headers_test.dart
@@ -7,7 +7,7 @@
import 'package:test/test.dart';
void testMultiValue() {
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
expect(headers[HttpHeaders.PRAGMA], isNull);
headers.add(HttpHeaders.PRAGMA, "pragma1");
expect(1, equals(headers[HttpHeaders.PRAGMA].length));
@@ -43,12 +43,12 @@
}
void testDate() {
- DateTime date1 = new DateTime.utc(1999, DateTime.june, 11, 18, 46, 53, 0);
+ DateTime date1 = DateTime.utc(1999, DateTime.june, 11, 18, 46, 53, 0);
String httpDate1 = "Fri, 11 Jun 1999 18:46:53 GMT";
- DateTime date2 = new DateTime.utc(2000, DateTime.august, 16, 12, 34, 56, 0);
+ DateTime date2 = DateTime.utc(2000, DateTime.august, 16, 12, 34, 56, 0);
String httpDate2 = "Wed, 16 Aug 2000 12:34:56 GMT";
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
expect(headers.date, isNull);
headers.date = date1;
expect(date1, headers.date);
@@ -69,12 +69,12 @@
}
void testExpires() {
- DateTime date1 = new DateTime.utc(1999, DateTime.june, 11, 18, 46, 53, 0);
+ DateTime date1 = DateTime.utc(1999, DateTime.june, 11, 18, 46, 53, 0);
String httpDate1 = "Fri, 11 Jun 1999 18:46:53 GMT";
- DateTime date2 = new DateTime.utc(2000, DateTime.august, 16, 12, 34, 56, 0);
+ DateTime date2 = DateTime.utc(2000, DateTime.august, 16, 12, 34, 56, 0);
String httpDate2 = "Wed, 16 Aug 2000 12:34:56 GMT";
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
expect(headers.expires, isNull);
headers.expires = date1;
expect(date1, headers.expires);
@@ -95,12 +95,12 @@
}
void testIfModifiedSince() {
- DateTime date1 = new DateTime.utc(1999, DateTime.june, 11, 18, 46, 53, 0);
+ DateTime date1 = DateTime.utc(1999, DateTime.june, 11, 18, 46, 53, 0);
String httpDate1 = "Fri, 11 Jun 1999 18:46:53 GMT";
- DateTime date2 = new DateTime.utc(2000, DateTime.august, 16, 12, 34, 56, 0);
+ DateTime date2 = DateTime.utc(2000, DateTime.august, 16, 12, 34, 56, 0);
String httpDate2 = "Wed, 16 Aug 2000 12:34:56 GMT";
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
expect(headers.ifModifiedSince, isNull);
headers.ifModifiedSince = date1;
expect(date1, headers.ifModifiedSince);
@@ -122,7 +122,7 @@
void testHost() {
String host = "www.google.com";
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
expect(headers.host, isNull);
expect(headers.port, isNull);
headers.host = host;
@@ -132,7 +132,7 @@
headers.port = HttpClient.DEFAULT_HTTP_PORT;
expect(host, headers.value(HttpHeaders.HOST));
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.add(HttpHeaders.HOST, host);
expect(host, headers.host);
expect(HttpClient.DEFAULT_HTTP_PORT, headers.port);
@@ -141,13 +141,13 @@
expect(host, headers.host);
expect(4567, headers.port);
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.add(HttpHeaders.HOST, "$host:xxx");
expect("$host:xxx", headers.value(HttpHeaders.HOST));
expect(host, headers.host);
expect(headers.port, isNull);
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.add(HttpHeaders.HOST, ":1234");
expect(":1234", headers.value(HttpHeaders.HOST));
expect(headers.host, isNull);
@@ -167,41 +167,41 @@
HttpHeadersImpl headers;
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.chunkedTransferEncoding = true;
expectChunked(headers);
headers.set('transfer-encoding', ['chunked']);
expectChunked(headers);
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.set('transfer-encoding', ['chunked']);
expectChunked(headers);
headers.chunkedTransferEncoding = true;
expectChunked(headers);
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.chunkedTransferEncoding = true;
headers.chunkedTransferEncoding = false;
expectNonChunked(headers);
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.chunkedTransferEncoding = true;
headers.remove('transfer-encoding', 'chunked');
expectNonChunked(headers);
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.set('transfer-encoding', ['chunked']);
headers.chunkedTransferEncoding = false;
expectNonChunked(headers);
- headers = new HttpHeadersImpl("1.1");
+ headers = HttpHeadersImpl("1.1");
headers.set('transfer-encoding', ['chunked']);
headers.remove('transfer-encoding', 'chunked');
expectNonChunked(headers);
}
void testEnumeration() {
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
expect(headers[HttpHeaders.PRAGMA], isNull);
headers.add("My-Header-1", "value 1");
headers.add("My-Header-2", "value 2");
@@ -213,12 +213,12 @@
totalValues += values.length;
if (name == "my-header-1") {
myHeader1 = true;
- expect(values.indexOf("value 1") != -1, isTrue);
- expect(values.indexOf("value 3") != -1, isTrue);
+ expect(values, contains("value 1"));
+ expect(values, contains("value 3"));
}
if (name == "my-header-2") {
myHeader2 = true;
- expect(values.indexOf("value 2") != -1, isTrue);
+ expect(values, contains("value 2"));
}
});
expect(myHeader1, isTrue);
@@ -245,7 +245,7 @@
HeaderValue.parse("xxx; aaa=bbb; ccc=\"\\\";\\a\"; ddd=\" \"");
check(headerValue, "xxx", {"aaa": "bbb", "ccc": '\";a', "ddd": " "});
headerValue =
- new HeaderValue("xxx", {"aaa": "bbb", "ccc": '\";a', "ddd": " "});
+ HeaderValue("xxx", {"aaa": "bbb", "ccc": '\";a', "ddd": " "});
check(headerValue, "xxx", {"aaa": "bbb", "ccc": '\";a', "ddd": " "});
headerValue = HeaderValue.parse("attachment; filename=genome.jpeg;"
@@ -255,7 +255,7 @@
"modification-date": "Wed, 12 February 1997 16:29:51 -0500"
};
check(headerValue, "attachment", parameters);
- headerValue = new HeaderValue("attachment", parameters);
+ headerValue = HeaderValue("attachment", parameters);
check(headerValue, "attachment", parameters);
headerValue = HeaderValue.parse(" attachment ;filename=genome.jpeg ;"
"modification-date = \"Wed, 12 February 1997 16:29:51 -0500\"");
@@ -281,7 +281,7 @@
}
ContentType contentType;
- contentType = new ContentType("", "");
+ contentType = ContentType("", "");
expect("", contentType.primaryType);
expect("", contentType.subType);
expect("/", contentType.value);
@@ -291,13 +291,13 @@
contentType = ContentType.parse("text/html");
check(contentType, "text", "html");
expect("text/html", contentType.toString());
- contentType = new ContentType("text", "html", charset: "utf-8");
+ contentType = ContentType("text", "html", charset: "utf-8");
check(contentType, "text", "html", {"charset": "utf-8"});
expect("text/html; charset=utf-8", contentType.toString());
expect(
() => contentType.parameters["xxx"] = "yyy", throwsA(isUnsupportedError));
- contentType = new ContentType("text", "html",
+ contentType = ContentType("text", "html",
parameters: {"CHARSET": "UTF-8", "xxx": "YYY"});
check(contentType, "text", "html", {"charset": "utf-8", "xxx": "YYY"});
String s = contentType.toString();
@@ -309,7 +309,7 @@
expect(
() => contentType.parameters["xxx"] = "yyy", throwsA(isUnsupportedError));
- contentType = new ContentType("text", "html",
+ contentType = ContentType("text", "html",
charset: "ISO-8859-1", parameters: {"CHARSET": "UTF-8", "xxx": "yyy"});
check(contentType, "text", "html", {"charset": "iso-8859-1", "xxx": "yyy"});
s = contentType.toString();
@@ -363,7 +363,7 @@
}
void testContentTypeCache() {
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
headers.set(HttpHeaders.CONTENT_TYPE, "text/html");
expect("text", headers.contentType.primaryType);
expect("html", headers.contentType.subType);
@@ -387,14 +387,14 @@
void checkCookie(cookie, s) {
expect(s, cookie.toString());
- var c = new Cookie.fromSetCookieValue(s);
+ var c = Cookie.fromSetCookieValue(s);
checkCookiesEquals(cookie, c);
}
Cookie cookie;
- cookie = new Cookie(name, value);
+ cookie = Cookie(name, value);
expect("$name=$value; HttpOnly", cookie.toString());
- DateTime date = new DateTime.utc(2014, DateTime.january, 5, 23, 59, 59, 0);
+ DateTime date = DateTime.utc(2014, DateTime.january, 5, 23, 59, 59, 0);
cookie.expires = date;
checkCookie(
cookie,
@@ -482,18 +482,17 @@
}
void testInvalidCookie() {
- expect(() => new Cookie.fromSetCookieValue(""), throwsA(isException));
- expect(() => new Cookie.fromSetCookieValue("="), throwsA(isException));
- expect(() => new Cookie.fromSetCookieValue("=xxx"), throwsA(isException));
- expect(() => new Cookie.fromSetCookieValue("xxx"), throwsA(isException));
- expect(() => new Cookie.fromSetCookieValue("xxx=yyy; expires=12 jan 2013"),
+ expect(() => Cookie.fromSetCookieValue(""), throwsA(isException));
+ expect(() => Cookie.fromSetCookieValue("="), throwsA(isException));
+ expect(() => Cookie.fromSetCookieValue("=xxx"), throwsA(isException));
+ expect(() => Cookie.fromSetCookieValue("xxx"), throwsA(isException));
+ expect(() => Cookie.fromSetCookieValue("xxx=yyy; expires=12 jan 2013"),
throwsA(isException));
- expect(
- () => new Cookie.fromSetCookieValue("x x = y y"), throwsA(isException));
- expect(() => new Cookie("[4", "y"), throwsA(isException));
- expect(() => new Cookie("4", "y\""), throwsA(isException));
+ expect(() => Cookie.fromSetCookieValue("x x = y y"), throwsA(isException));
+ expect(() => Cookie("[4", "y"), throwsA(isException));
+ expect(() => Cookie("4", "y\""), throwsA(isException));
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
headers.set(
'Cookie', 'DARTSESSID=d3d6fdd78d51aaaf2924c32e991f4349; undefined');
expect('DARTSESSID', headers.parseCookies().single.name);
@@ -510,7 +509,7 @@
void testInvalidFieldName() {
void test(String field) {
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
expect(() => headers.add(field, "value"), throwsA(isFormatException));
expect(() => headers.set(field, "value"), throwsA(isFormatException));
expect(() => headers.remove(field, "value"), throwsA(isFormatException));
@@ -524,8 +523,8 @@
}
void testInvalidFieldValue() {
- void test(value, {bool remove: true}) {
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ void test(value, {bool remove = true}) {
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
expect(() => headers.add("field", value), throwsA(isFormatException));
expect(() => headers.set("field", value), throwsA(isFormatException));
if (remove) {
@@ -537,11 +536,11 @@
test('\n');
test('test\x00');
// Test we handle other types correctly.
- test(new StringBuffer('\x00'), remove: false);
+ test(StringBuffer('\x00'), remove: false);
}
void testClear() {
- HttpHeadersImpl headers = new HttpHeadersImpl("1.1");
+ HttpHeadersImpl headers = HttpHeadersImpl("1.1");
headers.add("a", "b");
headers.contentLength = 7;
headers.chunkedTransferEncoding = true;
diff --git a/test/http_ipv6_test.dart b/test/http_ipv6_test.dart
index f2135b3..7bf7b5e 100644
--- a/test/http_ipv6_test.dart
+++ b/test/http_ipv6_test.dart
@@ -11,7 +11,7 @@
// server sets a content length but still needs to close the
// connection as there is no keep alive.
Future<Null> testHttpIPv6() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("::", 0).then((server) {
server.listen((HttpRequest request) {
expect(request.headers["host"][0], equals("[::1]:${server.port}"));
@@ -19,7 +19,7 @@
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
var url = Uri.parse('http://[::1]:${server.port}/xxx');
expect(url.host, equals('::1'));
client
diff --git a/test/http_keep_alive_test.dart b/test/http_keep_alive_test.dart
index 7157465..237f01c 100644
--- a/test/http_keep_alive_test.dart
+++ b/test/http_keep_alive_test.dart
@@ -23,7 +23,7 @@
server.listen((request) {
bool chunked = request.uri.queryParameters["chunked"] == "true";
int length = int.parse(request.uri.queryParameters["length"]);
- var buffer = new List<int>.filled(length, 0);
+ var buffer = List<int>.filled(length, 0);
if (!chunked) request.response.contentLength = length;
request.response.add(buffer);
request.response.close();
@@ -33,9 +33,9 @@
}
Future<Null> testKeepAliveNonChunked() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
startServer().then((server) {
- var client = new HttpClient();
+ var client = HttpClient();
getData(client, server.port, false, 100)
.then((_) => getData(client, server.port, false, 100))
@@ -52,9 +52,9 @@
}
Future<Null> testKeepAliveChunked() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
startServer().then((server) {
- var client = new HttpClient();
+ var client = HttpClient();
getData(client, server.port, true, 100)
.then((_) => getData(client, server.port, true, 100))
@@ -71,9 +71,9 @@
}
Future<Null> testKeepAliveMixed() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
startServer().then((server) {
- var client = new HttpClient();
+ var client = HttpClient();
getData(client, server.port, true, 100)
.then((_) => getData(client, server.port, false, 100))
diff --git a/test/http_no_reason_phrase_test.dart b/test/http_no_reason_phrase_test.dart
index 97c1919..1c0550e 100644
--- a/test/http_no_reason_phrase_test.dart
+++ b/test/http_no_reason_phrase_test.dart
@@ -10,8 +10,8 @@
// Test that a response line without any reason phrase is handled.
Future<Null> missingReasonPhrase(int statusCode, bool includeSpace) {
- final completer = new Completer<Null>();
- var client = new HttpClient();
+ final completer = Completer<Null>();
+ var client = HttpClient();
ServerSocket.bind("127.0.0.1", 0).then((server) {
server.listen((client) {
client.listen(null);
diff --git a/test/http_outgoing_size_test.dart b/test/http_outgoing_size_test.dart
index 8c16c03..d39c10a 100644
--- a/test/http_outgoing_size_test.dart
+++ b/test/http_outgoing_size_test.dart
@@ -9,11 +9,13 @@
import 'package:test/test.dart';
Future<Null> testChunkedBufferSizeMsg() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
// Buffer of same size as our internal buffer, minus 4. Makes us hit the
// boundary.
- var sendData = new Uint8List(8 * 1024 - 4);
- for (int i = 0; i < sendData.length; i++) sendData[i] = i % 256;
+ var sendData = Uint8List(8 * 1024 - 4);
+ for (int i = 0; i < sendData.length; i++) {
+ sendData[i] = i % 256;
+ }
HttpServer.bind('127.0.0.1', 0).then((server) {
server.listen((request) {
@@ -29,7 +31,7 @@
request.response.add(sendData);
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
client.get('127.0.0.1', server.port, '/').then((request) {
request.headers.set(HttpHeaders.ACCEPT_ENCODING, "");
return request.close();
diff --git a/test/http_parser_test.dart b/test/http_parser_test.dart
index d25e04f..8db9d1d 100644
--- a/test/http_parser_test.dart
+++ b/test/http_parser_test.dart
@@ -23,20 +23,20 @@
static void _testParseRequest(
String request, String expectedMethod, String expectedUri,
- {int expectedTransferLength: 0,
- int expectedBytesReceived: 0,
+ {int expectedTransferLength = 0,
+ int expectedBytesReceived = 0,
Map<String, String> expectedHeaders,
- bool chunked: false,
- bool upgrade: false,
- int unparsedLength: 0,
- bool connectionClose: false,
- String expectedVersion: "1.1"}) {
+ bool chunked = false,
+ bool upgrade = false,
+ int unparsedLength = 0,
+ bool connectionClose = false,
+ String expectedVersion = "1.1"}) {
StreamController<Uint8List> controller;
void reset() {
- HttpParser httpParser = new HttpParser.requestParser();
- controller = new StreamController(sync: true);
- var port1 = new ReceivePort();
- var port2 = new ReceivePort();
+ HttpParser httpParser = HttpParser.requestParser();
+ controller = StreamController(sync: true);
+ var port1 = ReceivePort();
+ var port2 = ReceivePort();
String method;
Uri uri;
@@ -113,7 +113,7 @@
// Test parsing the request three times delivering the data in
// different chunks.
- Uint8List requestData = new Uint8List.fromList(request.codeUnits);
+ Uint8List requestData = Uint8List.fromList(request.codeUnits);
testWrite(requestData);
testWrite(requestData, 10);
testWrite(requestData, 1);
@@ -121,14 +121,14 @@
static void _testParseRequestLean(
String request, String expectedMethod, String expectedUri,
- {int expectedTransferLength: 0,
- int expectedBytesReceived: 0,
+ {int expectedTransferLength = 0,
+ int expectedBytesReceived = 0,
Map<String, String> expectedHeaders,
- bool chunked: false,
- bool upgrade: false,
- int unparsedLength: 0,
- bool connectionClose: false,
- String expectedVersion: "1.1"}) {
+ bool chunked = false,
+ bool upgrade = false,
+ int unparsedLength = 0,
+ bool connectionClose = false,
+ String expectedVersion = "1.1"}) {
_testParseRequest(request, expectedMethod, expectedUri,
expectedTransferLength: expectedTransferLength,
expectedBytesReceived: expectedBytesReceived,
@@ -156,9 +156,9 @@
StreamController<Uint8List> controller;
void reset() {
- httpParser = new HttpParser.requestParser();
- controller = new StreamController(sync: true);
- var port = new ReceivePort();
+ httpParser = HttpParser.requestParser();
+ controller = StreamController(sync: true);
+ var port = ReceivePort();
httpParser.listenToStream(controller.stream);
var subscription = httpParser.listen((incoming) {
fail("Expected request");
@@ -187,7 +187,7 @@
// Test parsing the request three times delivering the data in
// different chunks.
- Uint8List requestData = new Uint8List.fromList(request.codeUnits);
+ Uint8List requestData = Uint8List.fromList(request.codeUnits);
testWrite(requestData);
testWrite(requestData, 10);
testWrite(requestData, 1);
@@ -195,16 +195,16 @@
static void _testParseResponse(
String response, int expectedStatusCode, String expectedReasonPhrase,
- {int expectedTransferLength: 0,
- int expectedBytesReceived: 0,
+ {int expectedTransferLength = 0,
+ int expectedBytesReceived = 0,
Map<String, String> expectedHeaders,
- bool chunked: false,
- bool close: false,
+ bool chunked = false,
+ bool close = false,
String responseToMethod,
- bool connectionClose: false,
- bool upgrade: false,
- int unparsedLength: 0,
- String expectedVersion: "1.1"}) {
+ bool connectionClose = false,
+ bool upgrade = false,
+ int unparsedLength = 0,
+ String expectedVersion = "1.1"}) {
StreamController<Uint8List> controller;
void reset() {
@@ -216,9 +216,9 @@
String reasonPhrase;
HttpHeaders headers;
int bytesReceived;
- httpParser = new HttpParser.responseParser();
- controller = new StreamController(sync: true);
- var port = new ReceivePort();
+ httpParser = HttpParser.responseParser();
+ controller = StreamController(sync: true);
+ var port = ReceivePort();
httpParser.listenToStream(controller.stream);
int doneCallCount = 0;
// Called when done parsing entire message and done parsing body.
@@ -287,7 +287,7 @@
// Test parsing the request three times delivering the data in
// different chunks.
- Uint8List responseData = new Uint8List.fromList(response.codeUnits);
+ Uint8List responseData = Uint8List.fromList(response.codeUnits);
testWrite(responseData);
testWrite(responseData, 10);
testWrite(responseData, 1);
@@ -295,13 +295,13 @@
static void _testParseInvalidResponse(String response, [bool close = false]) {
void testWrite(Uint8List requestData, [int chunkSize = -1]) {
- HttpParser httpParser = new HttpParser.responseParser();
- StreamController<Uint8List> controller = new StreamController(sync: true);
+ HttpParser httpParser = HttpParser.responseParser();
+ StreamController<Uint8List> controller = StreamController(sync: true);
bool errorCalled = false;
if (chunkSize == -1) chunkSize = requestData.length;
- var port = new ReceivePort();
+ var port = ReceivePort();
httpParser.listenToStream(controller.stream);
var subscription = httpParser.listen((incoming) {
incoming.listen((data) {}, onError: (e) {
@@ -330,7 +330,7 @@
// Test parsing the request three times delivering the data in
// different chunks.
- Uint8List responseData = new Uint8List.fromList(response.codeUnits);
+ Uint8List responseData = Uint8List.fromList(response.codeUnits);
testWrite(responseData);
testWrite(responseData, 10);
testWrite(responseData, 1);
@@ -382,7 +382,7 @@
X-Header-B: bbb\r
\r
""";
- headers = new Map();
+ headers = Map();
headers["header-a"] = "AAA";
headers["x-header-b"] = "bbb";
_testParseRequestLean(request, "POST", "/test", expectedHeaders: headers);
@@ -394,7 +394,7 @@
\r
\r
""";
- headers = new Map();
+ headers = Map();
headers["empty-header-1"] = "";
headers["empty-header-2"] = "";
_testParseRequestLean(request, "POST", "/test", expectedHeaders: headers);
@@ -405,7 +405,7 @@
X-Header-B:\t \t bbb\r
\r
""";
- headers = new Map();
+ headers = Map();
headers["header-a"] = "AAA";
headers["x-header-b"] = "bbb";
_testParseRequestLean(request, "POST", "/test", expectedHeaders: headers);
@@ -420,7 +420,7 @@
\r
""";
- headers = new Map();
+ headers = Map();
headers["header-a"] = "AAA";
headers["x-header-b"] = "bbb";
_testParseRequestLean(request, "POST", "/test", expectedHeaders: headers);
@@ -512,7 +512,7 @@
Upgrade: irc/1.2\r
Connection: Upgrade\r
\r\n\x01\x01\x01\x01\x01\x02\x02\x02\x02\xFF""";
- headers = new Map();
+ headers = Map();
headers["upgrade"] = "irc/1.2";
_testParseRequest(request, "GET", "/irc",
expectedHeaders: headers, upgrade: true, unparsedLength: 10);
@@ -523,7 +523,7 @@
Upgrade: irc/1.2\r
Connection: Upgrade\r
\r\n""";
- headers = new Map();
+ headers = Map();
headers["upgrade"] = "irc/1.2";
_testParseRequest(request, "GET", "/irc",
expectedHeaders: headers, upgrade: true);
@@ -538,7 +538,7 @@
Origin: http://example.com\r
Sec-WebSocket-Version: 13\r
\r\n""";
- headers = new Map();
+ headers = Map();
headers["host"] = "server.example.com";
headers["upgrade"] = "websocket";
headers["sec-websocket-key"] = "dGhlIHNhbXBsZSBub25jZQ==";
@@ -561,7 +561,7 @@
Origin: http://example.com\r
Sec-WebSocket-Version: 13\r
\r\n0123456""";
- headers = new Map();
+ headers = Map();
headers["host"] = "server.example.com";
headers["upgrade"] = "websocket";
headers["sec-websocket-key"] = "dGhlIHNhbXBsZSBub25jZQ==";
@@ -619,7 +619,7 @@
Content-Length: 20\r
Content-Type: text/html\r
\r\n""";
- headers = new Map();
+ headers = Map();
headers["content-length"] = "20";
headers["content-type"] = "text/html";
_testParseResponse(response, 200, "OK",
@@ -678,7 +678,7 @@
Upgrade: irc/1.2\r
Connection: Upgrade\r
\r\n""";
- headers = new Map();
+ headers = Map();
headers["upgrade"] = "irc/1.2";
_testParseResponse(response, 101, "Switching Protocols",
expectedHeaders: headers, upgrade: true);
@@ -689,7 +689,7 @@
Upgrade: irc/1.2\r
Connection: Upgrade\r
\r\n\x00\x10\x20\x30\x40\x50\x60\x70\x80\x90\xA0\xB0\xC0\xD0\xE0\xF0""";
- headers = new Map();
+ headers = Map();
headers["upgrade"] = "irc/1.2";
_testParseResponse(response, 101, "Switching Protocols",
expectedHeaders: headers, upgrade: true, unparsedLength: 16);
@@ -701,7 +701,7 @@
Connection: Upgrade\r
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r
\r\n""";
- headers = new Map();
+ headers = Map();
headers["upgrade"] = "websocket";
headers["sec-websocket-accept"] = "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=";
_testParseResponse(response, 101, "Switching Protocols",
@@ -714,7 +714,7 @@
Connection: Upgrade\r
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r
\r\nABCD""";
- headers = new Map();
+ headers = Map();
headers["upgrade"] = "websocket";
headers["sec-websocket-accept"] = "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=";
_testParseResponse(response, 101, "Switching Protocols",
diff --git a/test/http_proxy_advanced_test.dart b/test/http_proxy_advanced_test.dart
index b60ec83..24a2051 100644
--- a/test/http_proxy_advanced_test.dart
+++ b/test/http_proxy_advanced_test.dart
@@ -13,18 +13,18 @@
String localFile(path) {
final localPath = '${Directory.current.path}/test/$path';
- if (!(new File(localPath).existsSync())) {
+ if (!(File(localPath).existsSync())) {
return Platform.script.resolve(path).toFilePath();
}
return localPath;
}
-final SecurityContext serverContext = new SecurityContext()
+final SecurityContext serverContext = SecurityContext()
..useCertificateChain(localFile('certificates/server_chain.pem'))
..usePrivateKey(localFile('certificates/server_key.pem'),
password: 'dartdart');
-final SecurityContext clientContext = new SecurityContext()
+final SecurityContext clientContext = SecurityContext()
..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
class Server {
@@ -60,7 +60,7 @@
} else {
expect(request.headers[HttpHeaders.VIA], isNull);
}
- var body = new StringBuffer();
+ var body = StringBuffer();
onRequestComplete() {
String path = request.uri.path.substring(1);
if (path != "A") {
@@ -72,7 +72,7 @@
}
request.listen((data) {
- body.write(new String.fromCharCodes(data));
+ body.write(String.fromCharCodes(data));
}, onDone: onRequestComplete);
}
@@ -84,8 +84,8 @@
}
Future<Server> setupServer(int proxyHops,
- {List<String> directRequestPaths: const <String>[], secure: false}) {
- Server server = new Server(proxyHops, directRequestPaths, secure);
+ {List<String> directRequestPaths = const <String>[], secure = false}) {
+ Server server = Server(proxyHops, directRequestPaths, secure);
return server.start();
}
@@ -102,11 +102,11 @@
String ha1;
String serverAlgorithm = "MD5";
String serverQop = "auth";
- Set ncs = new Set();
+ Set ncs = Set();
var nonce = "12345678"; // No need for random nonce in test.
- ProxyServer({this.ipV6: false}) : client = new HttpClient();
+ ProxyServer({this.ipV6 = false}) : client = HttpClient();
void useBasicAuthentication(String username, String password) {
this.username = username;
@@ -134,11 +134,11 @@
});
}
- digestAuthenticationRequired(request, {stale: false}) {
+ digestAuthenticationRequired(request, {stale = false}) {
request.fold(null, (x, y) {}).then((_) {
var response = request.response;
response.statusCode = HttpStatus.PROXY_AUTHENTICATION_REQUIRED;
- StringBuffer authHeader = new StringBuffer();
+ StringBuffer authHeader = StringBuffer();
authHeader.write('Digest');
authHeader.write(', realm="$realm"');
authHeader.write(', nonce="$nonce"');
@@ -153,7 +153,7 @@
}
Future<ProxyServer> start() {
- var x = new Completer<ProxyServer>();
+ var x = Completer<ProxyServer>();
var host = ipV6 ? "::1" : "localhost";
HttpServer.bind(host, 0).then((s) {
server = s;
@@ -278,19 +278,19 @@
int get port => server.port;
}
-Future<ProxyServer> setupProxyServer({ipV6: false}) {
- ProxyServer proxyServer = new ProxyServer(ipV6: ipV6);
+Future<ProxyServer> setupProxyServer({ipV6 = false}) {
+ ProxyServer proxyServer = ProxyServer(ipV6: ipV6);
return proxyServer.start();
}
int testProxyIPV6DoneCount = 0;
Future<Null> testProxyIPV6() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupProxyServer(ipV6: true).then((proxyServer) {
setupServer(1, directRequestPaths: ["/4"]).then((server) {
setupServer(1, directRequestPaths: ["/4"], secure: true)
.then((secureServer) {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
List<String> proxy = ["PROXY [::1]:${proxyServer.port}"];
client.findProxy = (Uri uri) {
@@ -338,11 +338,11 @@
int testProxyFromEnviromentDoneCount = 0;
Future<Null> testProxyFromEnviroment() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupProxyServer().then((proxyServer) {
setupServer(1).then((server) {
setupServer(1, secure: true).then((secureServer) {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
client.findProxy = (Uri uri) {
return HttpClient.findProxyFromEnvironment(uri, environment: {
@@ -392,15 +392,15 @@
int testProxyAuthenticateCount = 0;
Future testProxyAuthenticate(bool useDigestAuthentication) {
testProxyAuthenticateCount = 0;
- var completer = new Completer();
+ var completer = Completer();
setupProxyServer().then((proxyServer) {
setupServer(1).then((server) {
setupServer(1, secure: true).then((secureServer) {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
- Completer step1 = new Completer();
- Completer step2 = new Completer();
+ Completer step1 = Completer();
+ Completer step2 = Completer();
if (useDigestAuthentication) {
proxyServer.useDigestAuthentication("dart", "password");
@@ -447,7 +447,7 @@
client.findProxy =
(Uri uri) => "PROXY localhost:${proxyServer.port}";
client.addProxyCredentials("localhost", proxyServer.port, "test",
- new HttpClientDigestCredentials("dart", "password"));
+ HttpClientDigestCredentials("dart", "password"));
} else {
client.findProxy = (Uri uri) {
return "PROXY dart:password@localhost:${proxyServer.port}";
@@ -493,8 +493,8 @@
client.authenticateProxy = (host, port, scheme, realm) {
client.addProxyCredentials("localhost", proxyServer.port, "realm",
- new HttpClientBasicCredentials("dart", "password"));
- return new Future.value(true);
+ HttpClientBasicCredentials("dart", "password"));
+ return Future.value(true);
};
for (int i = 0; i < loopCount; i++) {
@@ -540,9 +540,9 @@
int testRealProxyDoneCount = 0;
void testRealProxy() {
setupServer(1).then((server) {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
client.addProxyCredentials("localhost", 8080, "test",
- new HttpClientBasicCredentials("dart", "password"));
+ HttpClientBasicCredentials("dart", "password"));
List<String> proxy = [
"PROXY localhost:8080",
@@ -581,7 +581,7 @@
int testRealProxyAuthDoneCount = 0;
void testRealProxyAuth() {
setupServer(1).then((server) {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
List<String> proxy = [
"PROXY dart:password@localhost:8080",
diff --git a/test/http_proxy_test.dart b/test/http_proxy_test.dart
index 286d192..edceedf 100644
--- a/test/http_proxy_test.dart
+++ b/test/http_proxy_test.dart
@@ -13,18 +13,18 @@
String localFile(path) {
final localPath = "${Directory.current.path}/test/$path";
- if (!(new File(localPath).existsSync())) {
+ if (!(File(localPath).existsSync())) {
return Platform.script.resolve(path).toFilePath();
}
return localPath;
}
-final SecurityContext serverContext = new SecurityContext()
+final SecurityContext serverContext = SecurityContext()
..useCertificateChain(localFile('certificates/server_chain.pem'))
..usePrivateKey(localFile('certificates/server_key.pem'),
password: 'dartdart');
-final SecurityContext clientContext = new SecurityContext()
+final SecurityContext clientContext = SecurityContext()
..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
class Server {
@@ -61,7 +61,7 @@
} else {
expect(request.headers[HttpHeaders.VIA], isNull);
}
- var body = new StringBuffer();
+ var body = StringBuffer();
onRequestComplete() {
String path = request.uri.path.substring(1);
if (path != "A") {
@@ -73,7 +73,7 @@
}
request.listen((data) {
- body.write(new String.fromCharCodes(data));
+ body.write(String.fromCharCodes(data));
}, onDone: onRequestComplete);
}
@@ -85,8 +85,8 @@
}
Future<Server> setupServer(int proxyHops,
- {List<String> directRequestPaths: const <String>[], secure: false}) {
- Server server = new Server(proxyHops, directRequestPaths, secure);
+ {List<String> directRequestPaths = const <String>[], secure = false}) {
+ Server server = Server(proxyHops, directRequestPaths, secure);
return server.start();
}
@@ -103,11 +103,11 @@
String ha1;
String serverAlgorithm = "MD5";
String serverQop = "auth";
- Set ncs = new Set();
+ Set ncs = Set();
var nonce = "12345678"; // No need for random nonce in test.
- ProxyServer({this.ipV6: false}) : client = new HttpClient();
+ ProxyServer({this.ipV6 = false}) : client = HttpClient();
void useBasicAuthentication(String username, String password) {
this.username = username;
@@ -125,11 +125,11 @@
});
}
- digestAuthenticationRequired(request, {stale: false}) {
+ digestAuthenticationRequired(request, {stale = false}) {
request.fold(null, (x, y) {}).then((_) {
var response = request.response;
response.statusCode = HttpStatus.PROXY_AUTHENTICATION_REQUIRED;
- StringBuffer authHeader = new StringBuffer();
+ StringBuffer authHeader = StringBuffer();
authHeader.write('Digest');
authHeader.write(', realm="$realm"');
authHeader.write(', nonce="$nonce"');
@@ -144,7 +144,7 @@
}
Future<ProxyServer> start() {
- var x = new Completer<ProxyServer>();
+ var x = Completer<ProxyServer>();
var host = ipV6 ? "::1" : "localhost";
HttpServer.bind(host, 0).then((s) {
server = s;
@@ -269,13 +269,13 @@
int get port => server.port;
}
-Future<ProxyServer> setupProxyServer({ipV6: false}) {
- ProxyServer proxyServer = new ProxyServer(ipV6: ipV6);
+Future<ProxyServer> setupProxyServer({ipV6 = false}) {
+ ProxyServer proxyServer = ProxyServer(ipV6: ipV6);
return proxyServer.start();
}
testInvalidProxy() {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
client.findProxy = (Uri uri) => "";
client
@@ -300,9 +300,9 @@
int testDirectDoneCount = 0;
Future<Null> testDirectProxy() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer(0).then((server) {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
List<String> proxy = [
"DIRECT",
" DIRECT ",
@@ -344,12 +344,12 @@
int testProxyDoneCount = 0;
Future<Null> testProxy() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupProxyServer().then((proxyServer) {
setupServer(1, directRequestPaths: ["/4"]).then((server) {
setupServer(1, directRequestPaths: ["/4"], secure: true)
.then((secureServer) {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
List<String> proxy;
if (Platform.operatingSystem == "windows") {
@@ -418,7 +418,7 @@
int testProxyChainDoneCount = 0;
Future<Null> testProxyChain() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
// Setup two proxy servers having the first using the second as its proxy.
setupProxyServer().then((proxyServer1) {
setupProxyServer().then((proxyServer2) {
@@ -426,7 +426,7 @@
(_) => "PROXY localhost:${proxyServer2.port}";
setupServer(2, directRequestPaths: ["/4"]).then((server) {
- HttpClient client = new HttpClient(context: clientContext);
+ HttpClient client = HttpClient(context: clientContext);
List<String> proxy;
if (Platform.operatingSystem == "windows") {
diff --git a/test/http_read_test.dart b/test/http_read_test.dart
index 59c4b6d..7941a7e 100644
--- a/test/http_read_test.dart
+++ b/test/http_read_test.dart
@@ -10,7 +10,7 @@
class IsolatedHttpServer {
IsolatedHttpServer()
- : _statusPort = new ReceivePort(),
+ : _statusPort = ReceivePort(),
_serverPort = null;
void setServerStartedHandler(void startedCallback(int port)) {
@@ -18,7 +18,7 @@
}
void start([bool chunkedEncoding = false]) {
- ReceivePort receivePort = new ReceivePort();
+ ReceivePort receivePort = ReceivePort();
Isolate.spawn(startIsolatedHttpServer, receivePort.sendPort);
receivePort.first.then((port) {
_serverPort = port;
@@ -26,13 +26,13 @@
if (chunkedEncoding) {
// Send chunked encoding message to the server.
port.send([
- new IsolatedHttpServerCommand.chunkedEncoding(),
+ IsolatedHttpServerCommand.chunkedEncoding(),
_statusPort.sendPort
]);
}
// Send server start message to the server.
- var command = new IsolatedHttpServerCommand.start();
+ var command = IsolatedHttpServerCommand.start();
port.send([command, _statusPort.sendPort]);
});
@@ -46,12 +46,11 @@
void shutdown() {
// Send server stop message to the server.
- _serverPort
- .send([new IsolatedHttpServerCommand.stop(), _statusPort.sendPort]);
+ _serverPort.send([IsolatedHttpServerCommand.stop(), _statusPort.sendPort]);
_statusPort.close();
}
- ReceivePort _statusPort; // Port for receiving messages from the server.
+ final ReceivePort _statusPort; // Port for receiving messages from the server.
SendPort _serverPort; // Port for sending messages to the server.
void Function(int) _startedCallback;
}
@@ -69,7 +68,7 @@
bool get isStop => _command == STOP;
bool get isChunkedEncoding => _command == CHUNKED_ENCODING;
- int _command;
+ final int _command;
}
class IsolatedHttpServerStatus {
@@ -77,23 +76,27 @@
static const STOPPED = 1;
static const ERROR = 2;
- IsolatedHttpServerStatus.started(this._port) : _state = STARTED;
- IsolatedHttpServerStatus.stopped() : _state = STOPPED;
- IsolatedHttpServerStatus.error() : _state = ERROR;
+ IsolatedHttpServerStatus.started(this.port) : _state = STARTED;
+
+ IsolatedHttpServerStatus.stopped()
+ : port = null,
+ _state = STOPPED;
+
+ IsolatedHttpServerStatus.error()
+ : port = null,
+ _state = ERROR;
bool get isStarted => _state == STARTED;
bool get isStopped => _state == STOPPED;
bool get isError => _state == ERROR;
- int get port => _port;
-
- int _state;
- int _port;
+ final int _state;
+ final int port;
}
void startIsolatedHttpServer(Object replyToObj) {
SendPort replyTo = replyToObj;
- var server = new TestServer();
+ var server = TestServer();
server.init();
replyTo.send(server.dispatchSendPort);
}
@@ -120,9 +123,9 @@
void init() {
// Setup request handlers.
- _requestHandlers = new Map();
+ _requestHandlers = Map();
_requestHandlers["/echo"] = _echoHandler;
- _dispatchPort = new ReceivePort();
+ _dispatchPort = ReceivePort();
_dispatchPort.listen(dispatch);
}
@@ -136,15 +139,15 @@
HttpServer.bind("127.0.0.1", 0).then((server) {
_server = server;
_server.listen(_requestReceivedHandler);
- replyTo.send(new IsolatedHttpServerStatus.started(_server.port));
+ replyTo.send(IsolatedHttpServerStatus.started(_server.port));
});
} catch (e) {
- replyTo.send(new IsolatedHttpServerStatus.error());
+ replyTo.send(IsolatedHttpServerStatus.error());
}
} else if (command.isStop) {
_server.close();
_dispatchPort.close();
- replyTo.send(new IsolatedHttpServerStatus.stopped());
+ replyTo.send(IsolatedHttpServerStatus.stopped());
}
}
@@ -163,15 +166,15 @@
}
Future<Null> testRead(bool chunkedEncoding) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
String data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
final int kMessageCount = 10;
- IsolatedHttpServer server = new IsolatedHttpServer();
+ IsolatedHttpServer server = IsolatedHttpServer();
void runTest(int port) {
int count = 0;
- HttpClient httpClient = new HttpClient();
+ HttpClient httpClient = HttpClient();
void sendRequest() {
httpClient.post("127.0.0.1", port, "/echo").then((request) {
if (chunkedEncoding) {
@@ -184,9 +187,9 @@
return request.close();
}).then((response) {
expect(HttpStatus.OK, equals(response.statusCode));
- List<int> body = new List<int>();
+ List<int> body = List<int>();
response.listen(body.addAll, onDone: () {
- expect(data, equals(new String.fromCharCodes(body)));
+ expect(data, equals(String.fromCharCodes(body)));
count++;
if (count < kMessageCount) {
sendRequest();
diff --git a/test/http_redirect_test.dart b/test/http_redirect_test.dart
index f1e9f15..420688e 100644
--- a/test/http_redirect_test.dart
+++ b/test/http_redirect_test.dart
@@ -9,7 +9,7 @@
Future<HttpServer> setupServer() {
return HttpServer.bind("127.0.0.1", 0).then((server) {
- var handlers = new Map<String, Function>();
+ var handlers = Map<String, Function>();
addRequestHandler(
String path, void handler(HttpRequest request, HttpResponse response)) {
handlers[path] = handler;
@@ -191,9 +191,9 @@
}
Future<Null> testManualRedirect() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
int redirectCount = 0;
handleResponse(HttpClientResponse response) {
@@ -223,9 +223,9 @@
}
Future<Null> testManualRedirectWithHeaders() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
int redirectCount = 0;
@@ -256,10 +256,10 @@
}
Future<Null> testAutoRedirect() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.getUrl(Uri.parse("http://127.0.0.1:${server.port}/redirect"))
@@ -278,9 +278,9 @@
}
Future<Null> testAutoRedirectWithHeaders() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.getUrl(Uri.parse("http://127.0.0.1:${server.port}/src"))
@@ -300,9 +300,9 @@
}
Future<Null> testAutoRedirect301POST() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.postUrl(Uri.parse("http://127.0.0.1:${server.port}/301src"))
@@ -322,9 +322,9 @@
}
Future<Null> testAutoRedirect303POST() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.postUrl(Uri.parse("http://127.0.0.1:${server.port}/303src"))
@@ -344,9 +344,9 @@
}
Future<Null> testAutoRedirectLimit() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.getUrl(Uri.parse("http://127.0.0.1:${server.port}/1"))
.then((HttpClientRequest request) => request.close())
@@ -361,9 +361,9 @@
}
Future<Null> testRedirectLoop() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.getUrl(Uri.parse("http://127.0.0.1:${server.port}/A"))
.then((HttpClientRequest request) => request.close())
@@ -378,9 +378,9 @@
}
Future<Null> testRedirectClosingConnection() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.getUrl(Uri.parse("http://127.0.0.1:${server.port}/closing"))
.then((request) => request.close())
@@ -398,9 +398,9 @@
Future<Null> testRedirectRelativeUrl() async {
Future<Null> testPath(String path) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.getUrl(Uri.parse("http://127.0.0.1:${server.port}$path"))
.then((request) => request.close())
@@ -426,9 +426,9 @@
}
Future<Null> testRedirectRelativeToAbsolute() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
setupServer().then((server) {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
handleResponse(HttpClientResponse response) {
response.listen((_) => fail("Response data not expected"), onDone: () {
diff --git a/test/http_request_pipeling_test.dart b/test/http_request_pipeling_test.dart
index 6aa4131..49b67a0 100644
--- a/test/http_request_pipeling_test.dart
+++ b/test/http_request_pipeling_test.dart
@@ -9,7 +9,7 @@
import 'package:test/test.dart';
Future<Null> requestPipeling() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
final int REQUEST_COUNT = 100;
int count = 0;
HttpServer.bind("127.0.0.1", 0).then((server) {
diff --git a/test/http_requested_uri_test.dart b/test/http_requested_uri_test.dart
index ad2faaf..67abd55 100644
--- a/test/http_requested_uri_test.dart
+++ b/test/http_requested_uri_test.dart
@@ -11,14 +11,14 @@
const expectedPath = '/path?a=b';
Future<Null> runTest(String expected, Map headers) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("localhost", 0).then((server) {
expected = expected.replaceAll('%PORT', server.port.toString());
server.listen((request) {
expect("$expected$expectedPath", equals(request.requestedUri.toString()));
request.response.close();
});
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.get("localhost", server.port, sendPath)
.then((request) {
diff --git a/test/http_response_deadline_test.dart b/test/http_response_deadline_test.dart
index c6b69c9..517423b 100644
--- a/test/http_response_deadline_test.dart
+++ b/test/http_response_deadline_test.dart
@@ -9,7 +9,7 @@
import 'package:test/test.dart';
Future<Null> testSimpleDeadline(int connections) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind('localhost', 0).then((server) {
server.listen((request) {
request.response.deadline = const Duration(seconds: 1000);
@@ -18,7 +18,7 @@
});
var futures = <Future>[];
- var client = new HttpClient();
+ var client = HttpClient();
for (int i = 0; i < connections; i++) {
futures.add(client
.get('localhost', server.port, '/')
@@ -34,7 +34,7 @@
}
Future<Null> testExceedDeadline(int connections) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind('localhost', 0).then((server) {
server.listen((request) {
request.response.deadline = const Duration(milliseconds: 100);
@@ -43,7 +43,7 @@
});
var futures = <Future>[];
- var client = new HttpClient();
+ var client = HttpClient();
for (int i = 0; i < connections; i++) {
futures.add(client
.get('localhost', server.port, '/')
@@ -64,14 +64,14 @@
}
Future<Null> testDeadlineAndDetach(int connections) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind('localhost', 0).then((server) {
server.listen((request) {
request.response.deadline = const Duration(milliseconds: 0);
request.response.contentLength = 5;
request.response.persistentConnection = false;
request.response.detachSocket().then((socket) {
- new Timer(const Duration(milliseconds: 100), () {
+ Timer(const Duration(milliseconds: 100), () {
socket.write('stuff');
socket.close();
socket.listen(null);
@@ -80,17 +80,16 @@
});
var futures = <Future>[];
- var client = new HttpClient();
+ var client = HttpClient();
for (int i = 0; i < connections; i++) {
futures.add(client
.get('localhost', server.port, '/')
.then((request) => request.close())
.then((response) {
return response
- .fold(new BytesBuilder(), (b, d) => b..add(d))
+ .fold(BytesBuilder(), (b, d) => b..add(d))
.then((builder) {
- expect(
- 'stuff', equals(new String.fromCharCodes(builder.takeBytes())));
+ expect('stuff', equals(String.fromCharCodes(builder.takeBytes())));
});
}));
}
diff --git a/test/http_reuse_server_port_test.dart b/test/http_reuse_server_port_test.dart
index 3ee4ea9..0e78bb9 100644
--- a/test/http_reuse_server_port_test.dart
+++ b/test/http_reuse_server_port_test.dart
@@ -8,7 +8,7 @@
import 'package:test/test.dart';
Future<int> runServer(int port, int connections, bool clean) {
- Completer<int> completer = new Completer<int>();
+ Completer<int> completer = Completer<int>();
HttpServer.bind("127.0.0.1", port).then((server) {
int i = 0;
server.listen((request) {
@@ -20,8 +20,8 @@
}
});
- Future.wait(new List.generate(connections, (_) {
- var client = new HttpClient();
+ Future.wait(List.generate(connections, (_) {
+ var client = HttpClient();
return client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -40,10 +40,10 @@
}
Future<Null> testReusePort() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
runServer(0, 10, true).then((int port) {
// Stress test the port reusing it 10 times.
- Future.forEach(new List(10), (_) {
+ Future.forEach(List(10), (_) {
return runServer(port, 10, true);
}).then((_) {
completer.complete();
@@ -53,10 +53,10 @@
}
Future<Null> testUncleanReusePort() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
runServer(0, 10, false).then((int port) {
// Stress test the port reusing it 10 times.
- Future.forEach(new List(10), (_) {
+ Future.forEach(List(10), (_) {
return runServer(port, 10, false);
}).then((_) {
completer.complete();
diff --git a/test/http_server_close_response_after_error_client.dart b/test/http_server_close_response_after_error_client.dart
index dd11b24..aa86b1f 100644
--- a/test/http_server_close_response_after_error_client.dart
+++ b/test/http_server_close_response_after_error_client.dart
@@ -20,5 +20,7 @@
});
}
- for (int i = 0; i < 4; i++) run();
+ for (int i = 0; i < 4; i++) {
+ run();
+ }
}
diff --git a/test/http_server_close_response_after_error_test.dart b/test/http_server_close_response_after_error_test.dart
index 16c04f9..22c1332 100644
--- a/test/http_server_close_response_after_error_test.dart
+++ b/test/http_server_close_response_after_error_test.dart
@@ -11,7 +11,7 @@
const CLIENT_SCRIPT = "http_server_close_response_after_error_client.dart";
Future<Null> serverCloseResponseAfterError() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
request.listen(null, onError: (e) {}, onDone: () {
@@ -19,7 +19,7 @@
});
});
var name = '${Directory.current.path}/test/$CLIENT_SCRIPT';
- if (!new File(name).existsSync()) {
+ if (!File(name).existsSync()) {
name = Platform.script.resolve(CLIENT_SCRIPT).toString();
}
Process.run(Platform.executable, [name, server.port.toString()])
diff --git a/test/http_server_early_client_close2_test.dart b/test/http_server_early_client_close2_test.dart
index 353b42f..2a81214 100644
--- a/test/http_server_early_client_close2_test.dart
+++ b/test/http_server_early_client_close2_test.dart
@@ -9,15 +9,15 @@
import 'package:test/test.dart';
Future<Null> httpServerEarlyClientClose2() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
String name =
'${Directory.current.path}/test/http_server_early_client_close2_test.dart';
- if (!new File(name).existsSync()) {
+ if (!File(name).existsSync()) {
name = Platform.script.toFilePath();
}
- new File(name)
+ File(name)
.openRead()
.cast<List<int>>()
.pipe(request.response)
diff --git a/test/http_server_early_client_close_test.dart b/test/http_server_early_client_close_test.dart
index 9cad8b7..cc2d4c9 100644
--- a/test/http_server_early_client_close_test.dart
+++ b/test/http_server_early_client_close_test.dart
@@ -26,12 +26,12 @@
Future execute() {
return HttpServer.bind("127.0.0.1", 0).then((server) {
- Completer c = new Completer();
+ Completer c = Completer();
bool calledOnRequest = false;
bool calledOnError = false;
- ReceivePort port = new ReceivePort();
- var requestCompleter = new Completer();
+ ReceivePort port = ReceivePort();
+ var requestCompleter = Completer();
server.listen((request) {
expect(expectRequest, isTrue);
expect(calledOnError, isFalse);
@@ -70,9 +70,9 @@
}
Future<Null> testEarlyClose1() async {
- List<EarlyCloseTest> tests = new List<EarlyCloseTest>();
+ List<EarlyCloseTest> tests = List<EarlyCloseTest>();
void add(Object data, [String exception, bool expectRequest = false]) {
- tests.add(new EarlyCloseTest(data, exception, expectRequest));
+ tests.add(EarlyCloseTest(data, exception, expectRequest));
}
// The empty packet is valid.
@@ -94,15 +94,15 @@
}
Future<Null> testEarlyClose2() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
String name =
"${Directory.current.path}/test/http_server_early_client_close_test.dart";
- if (!new File(name).existsSync()) {
+ if (!File(name).existsSync()) {
name = Platform.script.toFilePath();
}
- new File(name)
+ File(name)
.openRead()
.cast<List<int>>()
.pipe(request.response)
@@ -135,7 +135,7 @@
}
Future<Null> testEarlyClose3() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
StreamSubscription subscription;
diff --git a/test/http_server_idle_timeout_test.dart b/test/http_server_idle_timeout_test.dart
index 2f03bb9..1774282 100644
--- a/test/http_server_idle_timeout_test.dart
+++ b/test/http_server_idle_timeout_test.dart
@@ -9,7 +9,7 @@
import 'package:test/test.dart';
Future<Null> testTimeoutAfterRequest() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.idleTimeout = null;
@@ -32,7 +32,7 @@
}
Future<Null> testTimeoutBeforeRequest() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.idleTimeout = const Duration(milliseconds: 100);
diff --git a/test/http_server_response_test.dart b/test/http_server_response_test.dart
index 243ed8a..34999d0 100644
--- a/test/http_server_response_test.dart
+++ b/test/http_server_response_test.dart
@@ -21,7 +21,7 @@
handler(server, request);
});
- var client = new HttpClient();
+ var client = HttpClient();
// We only close the client on either
// - Bad response headers
// - Response done (with optional errors in between).
@@ -51,8 +51,8 @@
}
Future<List> testResponseDone() {
- final completers = new List<Future<Null>>();
- final completer = new Completer<Null>();
+ final completers = List<Future<Null>>();
+ final completer = Completer<Null>();
testServerRequest((server, request) {
request.response.close();
request.response.done.then((response) {
@@ -63,9 +63,9 @@
});
completers.add(completer.future);
- final completer2 = new Completer<Null>();
+ final completer2 = Completer<Null>();
testServerRequest((server, request) {
- new File("__nonexistent_file_")
+ File("__nonexistent_file_")
.openRead()
.cast<List<int>>()
.pipe(request.response)
@@ -76,7 +76,7 @@
});
completers.add(completer2.future);
- final completer3 = new Completer<Null>();
+ final completer3 = Completer<Null>();
testServerRequest((server, request) {
request.response.done.then((_) {
server.close();
@@ -93,8 +93,8 @@
Future<List> testResponseAddStream() {
File file = scriptSource;
int bytes = file.lengthSync();
- final completers = new List<Future<Null>>();
- final completer = new Completer<Null>();
+ final completers = List<Future<Null>>();
+ final completer = Completer<Null>();
testServerRequest((server, request) {
request.response.addStream(file.openRead()).then((response) {
response.close();
@@ -106,7 +106,7 @@
}, bytes: bytes);
completers.add(completer.future);
- final completer2 = new Completer<Null>();
+ final completer2 = Completer<Null>();
testServerRequest((server, request) {
request.response.addStream(file.openRead()).then((response) {
request.response.addStream(file.openRead()).then((response) {
@@ -120,9 +120,9 @@
}, bytes: bytes * 2);
completers.add(completer2.future);
- final completer3 = new Completer<Null>();
+ final completer3 = Completer<Null>();
testServerRequest((server, request) {
- var controller = new StreamController<List<int>>(sync: true);
+ var controller = StreamController<List<int>>(sync: true);
request.response.addStream(controller.stream).then((response) {
response.close();
response.done.then((_) {
@@ -134,10 +134,10 @@
}, bytes: 0);
completers.add(completer3.future);
- final completer4 = new Completer<Null>();
+ final completer4 = Completer<Null>();
testServerRequest((server, request) {
request.response
- .addStream(new File("__nonexistent_file_").openRead())
+ .addStream(File("__nonexistent_file_").openRead())
.catchError((e) {
server.close();
completer4.complete();
@@ -145,9 +145,9 @@
});
completers.add(completer4.future);
- final completer5 = new Completer<Null>();
+ final completer5 = Completer<Null>();
testServerRequest((server, request) {
- new File("__nonexistent_file_")
+ File("__nonexistent_file_")
.openRead()
.cast<List<int>>()
.pipe(request.response)
@@ -161,7 +161,7 @@
}
Future<Null> testResponseAddStreamClosed() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
File file = scriptSource;
testServerRequest((server, request) {
request.response
@@ -197,9 +197,9 @@
Future<List> testResponseAddClosed() {
File file = scriptSource;
- final completers = new List<Future<Null>>();
+ final completers = List<Future<Null>>();
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
testServerRequest((server, request) {
request.response.add(file.readAsBytesSync());
request.response.close();
@@ -210,7 +210,7 @@
}, closeClient: true);
completers.add(completer.future);
- final completer2 = new Completer<Null>();
+ final completer2 = Completer<Null>();
testServerRequest((server, request) {
for (int i = 0; i < 1000; i++) {
request.response.add(file.readAsBytesSync());
@@ -223,7 +223,7 @@
}, closeClient: true);
completers.add(completer2.future);
- final completer3 = new Completer<Null>();
+ final completer3 = Completer<Null>();
testServerRequest((server, request) {
int count = 0;
write() {
@@ -249,8 +249,8 @@
}
Future<List> testBadResponseAdd() {
- final completers = new List<Future<Null>>();
- final completer = new Completer<Null>();
+ final completers = List<Future<Null>>();
+ final completer = Completer<Null>();
testServerRequest((server, request) {
request.response.contentLength = 0;
request.response.add([0]);
@@ -262,7 +262,7 @@
});
completers.add(completer.future);
- final completer2 = new Completer<Null>();
+ final completer2 = Completer<Null>();
testServerRequest((server, request) {
request.response.contentLength = 5;
request.response.add([0, 0, 0]);
@@ -275,12 +275,12 @@
});
completers.add(completer2.future);
- final completer3 = new Completer<Null>();
+ final completer3 = Completer<Null>();
testServerRequest((server, request) {
request.response.contentLength = 0;
- request.response.add(new Uint8List(64 * 1024));
- request.response.add(new Uint8List(64 * 1024));
- request.response.add(new Uint8List(64 * 1024));
+ request.response.add(Uint8List(64 * 1024));
+ request.response.add(Uint8List(64 * 1024));
+ request.response.add(Uint8List(64 * 1024));
request.response.close();
request.response.done.catchError((error) {
server.close();
@@ -292,8 +292,8 @@
}
Future<List> testBadResponseClose() {
- final completers = new List<Future<Null>>();
- final completer = new Completer<Null>();
+ final completers = List<Future<Null>>();
+ final completer = Completer<Null>();
testServerRequest((server, request) {
request.response.contentLength = 5;
request.response.close();
@@ -304,7 +304,7 @@
});
completers.add(completer.future);
- final completer2 = new Completer<Null>();
+ final completer2 = Completer<Null>();
testServerRequest((server, request) {
request.response.contentLength = 5;
request.response.add([0]);
@@ -319,7 +319,7 @@
}
Future<Null> testIgnoreRequestData() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
// Ignore request data.
@@ -327,10 +327,10 @@
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
client.get("127.0.0.1", server.port, "/").then((request) {
request.contentLength = 1024 * 1024;
- request.add(new Uint8List(1024 * 1024));
+ request.add(Uint8List(1024 * 1024));
return request.close();
}).then((response) {
response.fold(0, (s, b) => s + b.length).then((bytes) {
@@ -344,7 +344,7 @@
}
Future<Null> testWriteCharCode() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
testServerRequest((server, request) {
// Test that default is latin-1 (only 2 bytes).
request.response.writeCharCode(0xFF);
@@ -359,11 +359,11 @@
void main() {
scriptSource =
- new File('${Directory.current.path}/test/http_server_response_test.dart');
+ File('${Directory.current.path}/test/http_server_response_test.dart');
if (!scriptSource.existsSync()) {
// If we can't find the file relative to the cwd, then look relative
// to Platform.script.
- scriptSource = new File(
+ scriptSource = File(
Platform.script.resolve('http_server_response_test.dart').toFilePath());
}
test('responseDone', () => testResponseDone());
diff --git a/test/http_server_test.dart b/test/http_server_test.dart
index fd8fa28..c7e5803 100644
--- a/test/http_server_test.dart
+++ b/test/http_server_test.dart
@@ -35,7 +35,7 @@
doTest(bool clearHeaders, Map<String, dynamic> defaultHeaders,
Function checker) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
if (clearHeaders) server.defaultResponseHeaders.clear();
if (defaultHeaders != null) {
@@ -47,7 +47,7 @@
request.response.close();
});
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -68,7 +68,7 @@
Future<Null> testDefaultResponseHeadersContentType() {
doTest(bool clearHeaders, String requestBody, List<int> responseBody) {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
if (clearHeaders) server.defaultResponseHeaders.clear();
server.listen((request) {
@@ -76,7 +76,7 @@
request.response.close();
});
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -98,14 +98,14 @@
}
Future<Null> testListenOn() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
ServerSocket socket;
HttpServer server;
void doTest(void onDone()) {
expect(socket.port, equals(server.port));
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
client.get("127.0.0.1", socket.port, "/").then((request) {
return request.close();
}).then((response) {
@@ -123,7 +123,7 @@
// Test two connection after each other.
ServerSocket.bind("127.0.0.1", 0).then((s) {
socket = s;
- server = new HttpServer.listenOn(socket);
+ server = HttpServer.listenOn(socket);
expect(server.address.address, equals('127.0.0.1'));
expect(server.address.host, equals('127.0.0.1'));
server.listen((HttpRequest request) {
@@ -144,7 +144,7 @@
}
Future<Null> testHttpServerZone() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
Zone parent = Zone.current;
runZoned(() {
expect(parent, isNot(equals(Zone.current)));
@@ -155,7 +155,7 @@
request.response.close();
server.close();
});
- new HttpClient()
+ HttpClient()
.get("127.0.0.1", server.port, '/')
.then((request) => request.close())
.then((response) => response.drain())
@@ -166,7 +166,7 @@
}
Future<Null> testHttpServerZoneError() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
Zone parent = Zone.current;
runZoned(() {
expect(parent, isNot(equals(Zone.current)));
@@ -194,13 +194,13 @@
}
Future<Null> testHttpServerClientClose() {
- Completer<Null> completer = new Completer();
+ Completer<Null> completer = Completer();
HttpServer.bind("127.0.0.1", 0).then((server) {
runZoned(() {
server.listen((request) {
request.response.bufferOutput = false;
- request.response.add(new Uint8List(64 * 1024));
- new Timer(const Duration(milliseconds: 100), () {
+ request.response.add(Uint8List(64 * 1024));
+ Timer(const Duration(milliseconds: 100), () {
request.response.close().then((_) {
server.close();
completer.complete(null);
@@ -210,7 +210,7 @@
}, onError: (e, s) {
fail("Unexpected error: $e(${e.hashCode})\n$s");
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
diff --git a/test/http_session_test.dart b/test/http_session_test.dart
index a713139..5d23b05 100644
--- a/test/http_session_test.dart
+++ b/test/http_session_test.dart
@@ -26,7 +26,7 @@
[String session]) {
return client.get("127.0.0.1", port, "/").then((request) {
if (session != null) {
- request.cookies.add(new Cookie(SESSION_ID, session));
+ request.cookies.add(Cookie(SESSION_ID, session));
}
return request.close();
}).then((response) {
@@ -35,10 +35,10 @@
}
Future<Null> testSessions(int sessionCount) {
- final completer = new Completer<Null>();
- var client = new HttpClient();
+ final completer = Completer<Null>();
+ var client = HttpClient();
HttpServer.bind("127.0.0.1", 0).then((server) {
- var sessions = new Set();
+ var sessions = Set();
server.listen((request) {
sessions.add(request.session.id);
request.response.close();
@@ -58,7 +58,7 @@
}
Future.wait(futures).then((clientSessions) {
expect(sessions.length, equals(sessionCount));
- expect(new Set.from(clientSessions), equals(sessions));
+ expect(Set.from(clientSessions), equals(sessions));
server.close();
client.close();
completer.complete();
@@ -68,13 +68,13 @@
}
Future<Null> testTimeout(int sessionCount) {
- final completer = new Completer<Null>();
- var client = new HttpClient();
+ final completer = Completer<Null>();
+ var client = HttpClient();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.sessionTimeout = 1;
var timeouts = <Future>[];
server.listen((request) {
- var c = new Completer();
+ var c = Completer();
timeouts.add(c.future);
request.session.onTimeout = () {
c.complete(null);
@@ -108,7 +108,7 @@
}
Future<Null> testSessionsData() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
bool firstHit = false;
bool secondHit = false;
@@ -129,7 +129,7 @@
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -138,7 +138,7 @@
var id = getSessionId(response.cookies);
expect(id, isNotNull);
client.get("127.0.0.1", server.port, "/").then((request) {
- request.cookies.add(new Cookie(SESSION_ID, id));
+ request.cookies.add(Cookie(SESSION_ID, id));
return request.close();
}).then((response) {
response.listen((_) {}, onDone: () {
@@ -157,7 +157,7 @@
}
Future<Null> testSessionsDestroy() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
bool firstHit = false;
server.listen((request) {
@@ -174,7 +174,7 @@
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -183,7 +183,7 @@
var id = getSessionId(response.cookies);
expect(id, isNotNull);
client.get("127.0.0.1", server.port, "/").then((request) {
- request.cookies.add(new Cookie(SESSION_ID, id));
+ request.cookies.add(Cookie(SESSION_ID, id));
return request.close();
}).then((response) {
response.listen((_) {}, onDone: () {
diff --git a/test/http_shutdown_test.dart b/test/http_shutdown_test.dart
index a07502e..a06123b 100644
--- a/test/http_shutdown_test.dart
+++ b/test/http_shutdown_test.dart
@@ -9,7 +9,7 @@
import "package:test/test.dart";
Future<Null> test1(int totalConnections) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
// Server which just closes immediately.
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
@@ -17,7 +17,7 @@
});
int count = 0;
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < totalConnections; i++) {
client
.get("127.0.0.1", server.port, "/")
@@ -38,7 +38,7 @@
}
Future<Null> test2(int totalConnections, int outputStreamWrites) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
// Server which responds without waiting for request body.
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
@@ -47,7 +47,7 @@
});
int count = 0;
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < totalConnections; i++) {
client
.get("127.0.0.1", server.port, "/")
@@ -81,7 +81,7 @@
}
Future<Null> test3(int totalConnections) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
// Server which responds when request body has been received.
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((HttpRequest request) {
@@ -92,7 +92,7 @@
});
int count = 0;
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < totalConnections; i++) {
client
.get("127.0.0.1", server.port, "/")
@@ -116,11 +116,11 @@
}
Future<Null> test4() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((var request) {
request.listen((_) {}, onDone: () {
- new Timer.periodic(new Duration(milliseconds: 100), (timer) {
+ Timer.periodic(Duration(milliseconds: 100), (timer) {
if (server.connectionsInfo().total == 0) {
server.close();
timer.cancel();
@@ -131,7 +131,7 @@
});
});
- var client = new HttpClient();
+ var client = HttpClient();
client
.get("127.0.0.1", server.port, "/")
.then((request) => request.close())
@@ -145,7 +145,7 @@
}
Future<Null> test5(int totalConnections) {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
HttpServer.bind("127.0.0.1", 0).then((server) {
server.listen((request) {
request.listen((_) {}, onDone: () {
@@ -157,7 +157,7 @@
// Create a number of client requests and keep then active. Then
// close the client and wait for the server to lose all active
// connections.
- var client = new HttpClient();
+ var client = HttpClient();
client.maxConnectionsPerHost = totalConnections;
for (int i = 0; i < totalConnections; i++) {
client
@@ -175,7 +175,7 @@
test: (e) => e is HttpException || e is SocketException);
}
bool clientClosed = false;
- new Timer.periodic(new Duration(milliseconds: 100), (timer) {
+ Timer.periodic(Duration(milliseconds: 100), (timer) {
if (!clientClosed) {
if (server.connectionsInfo().total == totalConnections) {
clientClosed = true;
diff --git a/test/https_unauthorized_client.dart b/test/https_unauthorized_client.dart
index 4ab4434..d53c2e2 100644
--- a/test/https_unauthorized_client.dart
+++ b/test/https_unauthorized_client.dart
@@ -17,14 +17,14 @@
void expect(condition, message) {
if (!condition) {
- throw new ExpectException(message);
+ throw ExpectException(message);
}
}
const HOST_NAME = "localhost";
Future<Null> runClients(int port) async {
- HttpClient client = new HttpClient();
+ HttpClient client = HttpClient();
for (int i = 0; i < 20; ++i) {
await client.getUrl(Uri.parse('https://$HOST_NAME:$port/')).then(
(HttpClientRequest request) {
diff --git a/test/https_unauthorized_test.dart b/test/https_unauthorized_test.dart
index dacaf10..79cb3bf 100644
--- a/test/https_unauthorized_test.dart
+++ b/test/https_unauthorized_test.dart
@@ -24,7 +24,7 @@
String localFile(path) {
var script = "${Directory.current.path}/test/$path";
- if (!(new File(script)).existsSync()) {
+ if (!(File(script)).existsSync()) {
// If we can't find the file relative to the cwd, then look relative to
// Platform.script.
script = Platform.script.resolve(path).toFilePath();
@@ -32,12 +32,12 @@
return script;
}
-SecurityContext untrustedServerContext = new SecurityContext()
+SecurityContext untrustedServerContext = SecurityContext()
..useCertificateChain(localFile('certificates/untrusted_server_chain.pem'))
..usePrivateKey(localFile('certificates/untrusted_server_key.pem'),
password: 'dartdart');
-SecurityContext clientContext = new SecurityContext()
+SecurityContext clientContext = SecurityContext()
..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
Future<HttpServer> runServer() {
@@ -55,7 +55,7 @@
}
Future<Null> runTest() {
- final completer = new Completer<Null>();
+ final completer = Completer<Null>();
var clientScript = localFile('https_unauthorized_client.dart');
Future clientProcess(int port) {
return Process.run(Platform.executable, [clientScript, port.toString()])
diff --git a/test/session_test.dart b/test/session_test.dart
index f5a96d4..aab5b89 100644
--- a/test/session_test.dart
+++ b/test/session_test.dart
@@ -27,17 +27,17 @@
var request = await client.get("127.0.0.1", port, "/");
if (session != null) {
- request.cookies.add(new Cookie(_sessionId, session));
+ request.cookies.add(Cookie(_sessionId, session));
}
var response = await request.close();
return response.fold(_getSessionId(response.cookies), (v, _) => v);
}
Future _testSessions(int sessionCount) async {
- var client = new HttpClient();
+ var client = HttpClient();
var server = await HttpServer.bind("127.0.0.1", 0);
- var sessions = new Set();
+ var sessions = Set();
server.listen((request) {
sessions.add(request.session.id);
request.response.close();
@@ -63,12 +63,12 @@
}
Future _testTimeout(int sessionCount) async {
- var client = new HttpClient();
+ var client = HttpClient();
var server = await HttpServer.bind("127.0.0.1", 0);
server.sessionTimeout = 1;
var timeouts = <Future>[];
server.listen((request) {
- var c = new Completer();
+ var c = Completer();
timeouts.add(c.future);
request.session.onTimeout = () {
c.complete(null);
@@ -117,7 +117,7 @@
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
var request = await client.get("127.0.0.1", server.port, "/");
var response = await request.close();
@@ -128,7 +128,7 @@
expect(id, isNotNull);
request = await client.get("127.0.0.1", server.port, "/");
- request.cookies.add(new Cookie(_sessionId, id));
+ request.cookies.add(Cookie(_sessionId, id));
response = await request.close();
@@ -158,7 +158,7 @@
request.response.close();
});
- var client = new HttpClient();
+ var client = HttpClient();
var request = await client.get("127.0.0.1", server.port, "/");
var response = await request.close();
@@ -170,7 +170,7 @@
request = await client.get("127.0.0.1", server.port, "/");
- request.cookies.add(new Cookie(_sessionId, id));
+ request.cookies.add(Cookie(_sessionId, id));
response = await request.close();
await response.drain();