| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * HTTP status codes. | 8 * HTTP status codes. |
| 9 */ | 9 */ |
| 10 abstract class HttpStatus { | 10 abstract class HttpStatus { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 static const int INTERNAL_SERVER_ERROR = 500; | 46 static const int INTERNAL_SERVER_ERROR = 500; |
| 47 static const int NOT_IMPLEMENTED = 501; | 47 static const int NOT_IMPLEMENTED = 501; |
| 48 static const int BAD_GATEWAY = 502; | 48 static const int BAD_GATEWAY = 502; |
| 49 static const int SERVICE_UNAVAILABLE = 503; | 49 static const int SERVICE_UNAVAILABLE = 503; |
| 50 static const int GATEWAY_TIMEOUT = 504; | 50 static const int GATEWAY_TIMEOUT = 504; |
| 51 static const int HTTP_VERSION_NOT_SUPPORTED = 505; | 51 static const int HTTP_VERSION_NOT_SUPPORTED = 505; |
| 52 // Client generated status code. | 52 // Client generated status code. |
| 53 static const int NETWORK_CONNECT_TIMEOUT_ERROR = 599; | 53 static const int NETWORK_CONNECT_TIMEOUT_ERROR = 599; |
| 54 } | 54 } |
| 55 | 55 |
| 56 | |
| 57 /** | 56 /** |
| 58 * A server that delivers content, such as web pages, using the HTTP protocol. | 57 * A server that delivers content, such as web pages, using the HTTP protocol. |
| 59 * | 58 * |
| 60 * The HttpServer is a [Stream] that provides [HttpRequest] objects. Each | 59 * The HttpServer is a [Stream] that provides [HttpRequest] objects. Each |
| 61 * HttpRequest has an associated [HttpResponse] object. | 60 * HttpRequest has an associated [HttpResponse] object. |
| 62 * The server responds to a request by writing to that HttpResponse object. | 61 * The server responds to a request by writing to that HttpResponse object. |
| 63 * The following example shows how to bind an HttpServer to an IPv6 | 62 * The following example shows how to bind an HttpServer to an IPv6 |
| 64 * [InternetAddress] on port 80 (the standard port for HTTP servers) | 63 * [InternetAddress] on port 80 (the standard port for HTTP servers) |
| 65 * and how to listen for requests. | 64 * and how to listen for requests. |
| 66 * Port 80 is the default HTTP port. However, on most systems accessing | 65 * Port 80 is the default HTTP port. However, on most systems accessing |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 * Content-Type: text/plain; charset=utf-8 | 173 * Content-Type: text/plain; charset=utf-8 |
| 175 * X-Frame-Options: SAMEORIGIN | 174 * X-Frame-Options: SAMEORIGIN |
| 176 * X-Content-Type-Options: nosniff | 175 * X-Content-Type-Options: nosniff |
| 177 * X-XSS-Protection: 1; mode=block | 176 * X-XSS-Protection: 1; mode=block |
| 178 * | 177 * |
| 179 * If the `Server` header is added here and the `serverHeader` is set as | 178 * If the `Server` header is added here and the `serverHeader` is set as |
| 180 * well then the value of `serverHeader` takes precedence. | 179 * well then the value of `serverHeader` takes precedence. |
| 181 */ | 180 */ |
| 182 HttpHeaders get defaultResponseHeaders; | 181 HttpHeaders get defaultResponseHeaders; |
| 183 | 182 |
| 184 /** | 183 /** |
| 185 * Whether the [HttpServer] should compress the content, if possible. | 184 * Whether the [HttpServer] should compress the content, if possible. |
| 186 * | 185 * |
| 187 * The content can only be compressed when the response is using | 186 * The content can only be compressed when the response is using |
| 188 * chunked Transfer-Encoding and the incoming request has `gzip` | 187 * chunked Transfer-Encoding and the incoming request has `gzip` |
| 189 * as an accepted encoding in the Accept-Encoding header. | 188 * as an accepted encoding in the Accept-Encoding header. |
| 190 * | 189 * |
| 191 * The default value is `false` (compression disabled). | 190 * The default value is `false` (compression disabled). |
| 192 * To enable, set `autoCompress` to `true`. | 191 * To enable, set `autoCompress` to `true`. |
| 193 */ | 192 */ |
| 194 bool autoCompress; | 193 bool autoCompress; |
| 195 | 194 |
| 196 /** | 195 /** |
| 197 * Get or set the timeout used for idle keep-alive connections. If no further | 196 * Get or set the timeout used for idle keep-alive connections. If no further |
| 198 * request is seen within [idleTimeout] after the previous request was | 197 * request is seen within [idleTimeout] after the previous request was |
| 199 * completed, the connection is dropped. | 198 * completed, the connection is dropped. |
| 200 * | 199 * |
| 201 * Default is 120 seconds. | 200 * Default is 120 seconds. |
| 202 * | 201 * |
| 203 * Note that it may take up to `2 * idleTimeout` before a idle connection is | 202 * Note that it may take up to `2 * idleTimeout` before a idle connection is |
| 204 * aborted. | 203 * aborted. |
| 205 * | 204 * |
| 206 * To disable, set [idleTimeout] to `null`. | 205 * To disable, set [idleTimeout] to `null`. |
| 207 */ | 206 */ |
| 208 Duration idleTimeout; | 207 Duration idleTimeout; |
| 209 | 208 |
| 210 | |
| 211 /** | 209 /** |
| 212 * Starts listening for HTTP requests on the specified [address] and | 210 * Starts listening for HTTP requests on the specified [address] and |
| 213 * [port]. | 211 * [port]. |
| 214 * | 212 * |
| 215 * The [address] can either be a [String] or an | 213 * The [address] can either be a [String] or an |
| 216 * [InternetAddress]. If [address] is a [String], [bind] will | 214 * [InternetAddress]. If [address] is a [String], [bind] will |
| 217 * perform a [InternetAddress.lookup] and use the first value in the | 215 * perform a [InternetAddress.lookup] and use the first value in the |
| 218 * list. To listen on the loopback adapter, which will allow only | 216 * list. To listen on the loopback adapter, which will allow only |
| 219 * incoming connections from the local host, use the value | 217 * incoming connections from the local host, use the value |
| 220 * [InternetAddress.LOOPBACK_IP_V4] or | 218 * [InternetAddress.LOOPBACK_IP_V4] or |
| (...skipping 16 matching lines...) Expand all Loading... |
| 237 * value of [:0:] (the default) a reasonable value will be chosen by | 235 * value of [:0:] (the default) a reasonable value will be chosen by |
| 238 * the system. | 236 * the system. |
| 239 * | 237 * |
| 240 * The optional argument [shared] specifies whether additional HttpServer | 238 * The optional argument [shared] specifies whether additional HttpServer |
| 241 * objects can bind to the same combination of `address`, `port` and `v6Only`. | 239 * objects can bind to the same combination of `address`, `port` and `v6Only`. |
| 242 * If `shared` is `true` and more `HttpServer`s from this isolate or other | 240 * If `shared` is `true` and more `HttpServer`s from this isolate or other |
| 243 * isolates are bound to the port, then the incoming connections will be | 241 * isolates are bound to the port, then the incoming connections will be |
| 244 * distributed among all the bound `HttpServer`s. Connections can be | 242 * distributed among all the bound `HttpServer`s. Connections can be |
| 245 * distributed over multiple isolates this way. | 243 * distributed over multiple isolates this way. |
| 246 */ | 244 */ |
| 247 static Future<HttpServer> bind(address, | 245 static Future<HttpServer> bind(address, int port, |
| 248 int port, | 246 {int backlog: 0, bool v6Only: false, bool shared: false}) => |
| 249 {int backlog: 0, | 247 _HttpServer.bind(address, port, backlog, v6Only, shared); |
| 250 bool v6Only: false, | |
| 251 bool shared: false}) | |
| 252 => _HttpServer.bind(address, port, backlog, v6Only, shared); | |
| 253 | 248 |
| 254 /** | 249 /** |
| 255 * The [address] can either be a [String] or an | 250 * The [address] can either be a [String] or an |
| 256 * [InternetAddress]. If [address] is a [String], [bind] will | 251 * [InternetAddress]. If [address] is a [String], [bind] will |
| 257 * perform a [InternetAddress.lookup] and use the first value in the | 252 * perform a [InternetAddress.lookup] and use the first value in the |
| 258 * list. To listen on the loopback adapter, which will allow only | 253 * list. To listen on the loopback adapter, which will allow only |
| 259 * incoming connections from the local host, use the value | 254 * incoming connections from the local host, use the value |
| 260 * [InternetAddress.LOOPBACK_IP_V4] or | 255 * [InternetAddress.LOOPBACK_IP_V4] or |
| 261 * [InternetAddress.LOOPBACK_IP_V6]. To allow for incoming | 256 * [InternetAddress.LOOPBACK_IP_V6]. To allow for incoming |
| 262 * connection from the network use either one of the values | 257 * connection from the network use either one of the values |
| (...skipping 21 matching lines...) Expand all Loading... |
| 284 * set using [SecurityContext.setClientAuthorities]. | 279 * set using [SecurityContext.setClientAuthorities]. |
| 285 * | 280 * |
| 286 * The optional argument [shared] specifies whether additional HttpServer | 281 * The optional argument [shared] specifies whether additional HttpServer |
| 287 * objects can bind to the same combination of `address`, `port` and `v6Only`. | 282 * objects can bind to the same combination of `address`, `port` and `v6Only`. |
| 288 * If `shared` is `true` and more `HttpServer`s from this isolate or other | 283 * If `shared` is `true` and more `HttpServer`s from this isolate or other |
| 289 * isolates are bound to the port, then the incoming connections will be | 284 * isolates are bound to the port, then the incoming connections will be |
| 290 * distributed among all the bound `HttpServer`s. Connections can be | 285 * distributed among all the bound `HttpServer`s. Connections can be |
| 291 * distributed over multiple isolates this way. | 286 * distributed over multiple isolates this way. |
| 292 */ | 287 */ |
| 293 | 288 |
| 294 static Future<HttpServer> bindSecure(address, | 289 static Future<HttpServer> bindSecure( |
| 295 int port, | 290 address, int port, SecurityContext context, |
| 296 SecurityContext context, | 291 {int backlog: 0, |
| 297 {int backlog: 0, | 292 bool v6Only: false, |
| 298 bool v6Only: false, | 293 bool requestClientCertificate: false, |
| 299 bool requestClientCertificate: false, | 294 bool shared: false}) => |
| 300 bool shared: false}) | 295 _HttpServer.bindSecure(address, port, context, backlog, v6Only, |
| 301 => _HttpServer.bindSecure(address, | 296 requestClientCertificate, shared); |
| 302 port, | |
| 303 context, | |
| 304 backlog, | |
| 305 v6Only, | |
| 306 requestClientCertificate, | |
| 307 shared); | |
| 308 | 297 |
| 309 /** | 298 /** |
| 310 * Attaches the HTTP server to an existing [ServerSocket]. When the | 299 * Attaches the HTTP server to an existing [ServerSocket]. When the |
| 311 * [HttpServer] is closed, the [HttpServer] will just detach itself, | 300 * [HttpServer] is closed, the [HttpServer] will just detach itself, |
| 312 * closing current connections but not closing [serverSocket]. | 301 * closing current connections but not closing [serverSocket]. |
| 313 */ | 302 */ |
| 314 factory HttpServer.listenOn(ServerSocket serverSocket) | 303 factory HttpServer.listenOn(ServerSocket serverSocket) => |
| 315 => new _HttpServer.listenOn(serverSocket); | 304 new _HttpServer.listenOn(serverSocket); |
| 316 | 305 |
| 317 /** | 306 /** |
| 318 * Permanently stops this [HttpServer] from listening for new | 307 * Permanently stops this [HttpServer] from listening for new |
| 319 * connections. This closes the [Stream] of [HttpRequest]s with a | 308 * connections. This closes the [Stream] of [HttpRequest]s with a |
| 320 * done event. The returned future completes when the server is | 309 * done event. The returned future completes when the server is |
| 321 * stopped. For a server started using [bind] or [bindSecure] this | 310 * stopped. For a server started using [bind] or [bindSecure] this |
| 322 * means that the port listened on no longer in use. | 311 * means that the port listened on no longer in use. |
| 323 * | 312 * |
| 324 * If [force] is `true`, active connections will be closed immediately. | 313 * If [force] is `true`, active connections will be closed immediately. |
| 325 */ | 314 */ |
| (...skipping 19 matching lines...) Expand all Loading... |
| 345 */ | 334 */ |
| 346 set sessionTimeout(int timeout); | 335 set sessionTimeout(int timeout); |
| 347 | 336 |
| 348 /** | 337 /** |
| 349 * Returns an [HttpConnectionsInfo] object summarizing the number of | 338 * Returns an [HttpConnectionsInfo] object summarizing the number of |
| 350 * current connections handled by the server. | 339 * current connections handled by the server. |
| 351 */ | 340 */ |
| 352 HttpConnectionsInfo connectionsInfo(); | 341 HttpConnectionsInfo connectionsInfo(); |
| 353 } | 342 } |
| 354 | 343 |
| 355 | |
| 356 /** | 344 /** |
| 357 * Summary statistics about an [HttpServer]s current socket connections. | 345 * Summary statistics about an [HttpServer]s current socket connections. |
| 358 */ | 346 */ |
| 359 class HttpConnectionsInfo { | 347 class HttpConnectionsInfo { |
| 360 /** | 348 /** |
| 361 * Total number of socket connections. | 349 * Total number of socket connections. |
| 362 */ | 350 */ |
| 363 int total = 0; | 351 int total = 0; |
| 364 | 352 |
| 365 /** | 353 /** |
| 366 * Number of active connections where actual request/response | 354 * Number of active connections where actual request/response |
| 367 * processing is active. | 355 * processing is active. |
| 368 */ | 356 */ |
| 369 int active = 0; | 357 int active = 0; |
| 370 | 358 |
| 371 /** | 359 /** |
| 372 * Number of idle connections held by clients as persistent connections. | 360 * Number of idle connections held by clients as persistent connections. |
| 373 */ | 361 */ |
| 374 int idle = 0; | 362 int idle = 0; |
| 375 | 363 |
| 376 /** | 364 /** |
| 377 * Number of connections which are preparing to close. Note: These | 365 * Number of connections which are preparing to close. Note: These |
| 378 * connections are also part of the [:active:] count as they might | 366 * connections are also part of the [:active:] count as they might |
| 379 * still be sending data to the client before finally closing. | 367 * still be sending data to the client before finally closing. |
| 380 */ | 368 */ |
| 381 int closing = 0; | 369 int closing = 0; |
| 382 } | 370 } |
| 383 | 371 |
| 384 | |
| 385 /** | 372 /** |
| 386 * Headers for HTTP requests and responses. | 373 * Headers for HTTP requests and responses. |
| 387 * | 374 * |
| 388 * In some situations, headers are immutable: | 375 * In some situations, headers are immutable: |
| 389 * | 376 * |
| 390 * * HttpRequest and HttpClientResponse always have immutable headers. | 377 * * HttpRequest and HttpClientResponse always have immutable headers. |
| 391 * | 378 * |
| 392 * * HttpResponse and HttpClientRequest have immutable headers | 379 * * HttpResponse and HttpClientRequest have immutable headers |
| 393 * from the moment the body is written to. | 380 * from the moment the body is written to. |
| 394 * | 381 * |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 static const USER_AGENT = "user-agent"; | 444 static const USER_AGENT = "user-agent"; |
| 458 static const VARY = "vary"; | 445 static const VARY = "vary"; |
| 459 static const VIA = "via"; | 446 static const VIA = "via"; |
| 460 static const WARNING = "warning"; | 447 static const WARNING = "warning"; |
| 461 static const WWW_AUTHENTICATE = "www-authenticate"; | 448 static const WWW_AUTHENTICATE = "www-authenticate"; |
| 462 | 449 |
| 463 // Cookie headers from RFC 6265. | 450 // Cookie headers from RFC 6265. |
| 464 static const COOKIE = "cookie"; | 451 static const COOKIE = "cookie"; |
| 465 static const SET_COOKIE = "set-cookie"; | 452 static const SET_COOKIE = "set-cookie"; |
| 466 | 453 |
| 467 static const GENERAL_HEADERS = const [CACHE_CONTROL, | 454 static const GENERAL_HEADERS = const [ |
| 468 CONNECTION, | 455 CACHE_CONTROL, |
| 469 DATE, | 456 CONNECTION, |
| 470 PRAGMA, | 457 DATE, |
| 471 TRAILER, | 458 PRAGMA, |
| 472 TRANSFER_ENCODING, | 459 TRAILER, |
| 473 UPGRADE, | 460 TRANSFER_ENCODING, |
| 474 VIA, | 461 UPGRADE, |
| 475 WARNING]; | 462 VIA, |
| 463 WARNING |
| 464 ]; |
| 476 | 465 |
| 477 static const ENTITY_HEADERS = const [ALLOW, | 466 static const ENTITY_HEADERS = const [ |
| 478 CONTENT_ENCODING, | 467 ALLOW, |
| 479 CONTENT_LANGUAGE, | 468 CONTENT_ENCODING, |
| 480 CONTENT_LENGTH, | 469 CONTENT_LANGUAGE, |
| 481 CONTENT_LOCATION, | 470 CONTENT_LENGTH, |
| 482 CONTENT_MD5, | 471 CONTENT_LOCATION, |
| 483 CONTENT_RANGE, | 472 CONTENT_MD5, |
| 484 CONTENT_TYPE, | 473 CONTENT_RANGE, |
| 485 EXPIRES, | 474 CONTENT_TYPE, |
| 486 LAST_MODIFIED]; | 475 EXPIRES, |
| 476 LAST_MODIFIED |
| 477 ]; |
| 487 | 478 |
| 479 static const RESPONSE_HEADERS = const [ |
| 480 ACCEPT_RANGES, |
| 481 AGE, |
| 482 ETAG, |
| 483 LOCATION, |
| 484 PROXY_AUTHENTICATE, |
| 485 RETRY_AFTER, |
| 486 SERVER, |
| 487 VARY, |
| 488 WWW_AUTHENTICATE |
| 489 ]; |
| 488 | 490 |
| 489 static const RESPONSE_HEADERS = const [ACCEPT_RANGES, | 491 static const REQUEST_HEADERS = const [ |
| 490 AGE, | 492 ACCEPT, |
| 491 ETAG, | 493 ACCEPT_CHARSET, |
| 492 LOCATION, | 494 ACCEPT_ENCODING, |
| 493 PROXY_AUTHENTICATE, | 495 ACCEPT_LANGUAGE, |
| 494 RETRY_AFTER, | 496 AUTHORIZATION, |
| 495 SERVER, | 497 EXPECT, |
| 496 VARY, | 498 FROM, |
| 497 WWW_AUTHENTICATE]; | 499 HOST, |
| 498 | 500 IF_MATCH, |
| 499 static const REQUEST_HEADERS = const [ACCEPT, | 501 IF_MODIFIED_SINCE, |
| 500 ACCEPT_CHARSET, | 502 IF_NONE_MATCH, |
| 501 ACCEPT_ENCODING, | 503 IF_RANGE, |
| 502 ACCEPT_LANGUAGE, | 504 IF_UNMODIFIED_SINCE, |
| 503 AUTHORIZATION, | 505 MAX_FORWARDS, |
| 504 EXPECT, | 506 PROXY_AUTHORIZATION, |
| 505 FROM, | 507 RANGE, |
| 506 HOST, | 508 REFERER, |
| 507 IF_MATCH, | 509 TE, |
| 508 IF_MODIFIED_SINCE, | 510 USER_AGENT |
| 509 IF_NONE_MATCH, | 511 ]; |
| 510 IF_RANGE, | |
| 511 IF_UNMODIFIED_SINCE, | |
| 512 MAX_FORWARDS, | |
| 513 PROXY_AUTHORIZATION, | |
| 514 RANGE, | |
| 515 REFERER, | |
| 516 TE, | |
| 517 USER_AGENT]; | |
| 518 | 512 |
| 519 /** | 513 /** |
| 520 * Gets and sets the date. The value of this property will | 514 * Gets and sets the date. The value of this property will |
| 521 * reflect the 'date' header. | 515 * reflect the 'date' header. |
| 522 */ | 516 */ |
| 523 DateTime date; | 517 DateTime date; |
| 524 | 518 |
| 525 /** | 519 /** |
| 526 * Gets and sets the expiry date. The value of this property will | 520 * Gets and sets the expiry date. The value of this property will |
| 527 * reflect the 'expires' header. | 521 * reflect the 'expires' header. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 | 560 |
| 567 /** | 561 /** |
| 568 * Gets and sets the chunked transfer encoding header value. | 562 * Gets and sets the chunked transfer encoding header value. |
| 569 */ | 563 */ |
| 570 bool chunkedTransferEncoding; | 564 bool chunkedTransferEncoding; |
| 571 | 565 |
| 572 /** | 566 /** |
| 573 * Returns the list of values for the header named [name]. If there | 567 * Returns the list of values for the header named [name]. If there |
| 574 * is no header with the provided name, [:null:] will be returned. | 568 * is no header with the provided name, [:null:] will be returned. |
| 575 */ | 569 */ |
| 576 List<String> operator[](String name); | 570 List<String> operator [](String name); |
| 577 | 571 |
| 578 /** | 572 /** |
| 579 * Convenience method for the value for a single valued header. If | 573 * Convenience method for the value for a single valued header. If |
| 580 * there is no header with the provided name, [:null:] will be | 574 * there is no header with the provided name, [:null:] will be |
| 581 * returned. If the header has more than one value an exception is | 575 * returned. If the header has more than one value an exception is |
| 582 * thrown. | 576 * thrown. |
| 583 */ | 577 */ |
| 584 String value(String name); | 578 String value(String name); |
| 585 | 579 |
| 586 /** | 580 /** |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 void noFolding(String name); | 625 void noFolding(String name); |
| 632 | 626 |
| 633 /** | 627 /** |
| 634 * Remove all headers. Some headers have system supplied values and | 628 * Remove all headers. Some headers have system supplied values and |
| 635 * for these the system supplied values will still be added to the | 629 * for these the system supplied values will still be added to the |
| 636 * collection of values for the header. | 630 * collection of values for the header. |
| 637 */ | 631 */ |
| 638 void clear(); | 632 void clear(); |
| 639 } | 633 } |
| 640 | 634 |
| 641 | |
| 642 /** | 635 /** |
| 643 * Representation of a header value in the form: | 636 * Representation of a header value in the form: |
| 644 * | 637 * |
| 645 * [:value; parameter1=value1; parameter2=value2:] | 638 * [:value; parameter1=value1; parameter2=value2:] |
| 646 * | 639 * |
| 647 * [HeaderValue] can be used to conveniently build and parse header | 640 * [HeaderValue] can be used to conveniently build and parse header |
| 648 * values on this form. | 641 * values on this form. |
| 649 * | 642 * |
| 650 * To build an [:accepts:] header with the value | 643 * To build an [:accepts:] header with the value |
| 651 * | 644 * |
| (...skipping 23 matching lines...) Expand all Loading... |
| 675 */ | 668 */ |
| 676 factory HeaderValue([String value = "", Map<String, String> parameters]) { | 669 factory HeaderValue([String value = "", Map<String, String> parameters]) { |
| 677 return new _HeaderValue(value, parameters); | 670 return new _HeaderValue(value, parameters); |
| 678 } | 671 } |
| 679 | 672 |
| 680 /** | 673 /** |
| 681 * Creates a new header value object from parsing a header value | 674 * Creates a new header value object from parsing a header value |
| 682 * string with both value and optional parameters. | 675 * string with both value and optional parameters. |
| 683 */ | 676 */ |
| 684 static HeaderValue parse(String value, | 677 static HeaderValue parse(String value, |
| 685 {String parameterSeparator: ";", | 678 {String parameterSeparator: ";", |
| 686 String valueSeparator: null, | 679 String valueSeparator: null, |
| 687 bool preserveBackslash: false}) { | 680 bool preserveBackslash: false}) { |
| 688 return _HeaderValue.parse(value, | 681 return _HeaderValue.parse(value, |
| 689 parameterSeparator: parameterSeparator, | 682 parameterSeparator: parameterSeparator, |
| 690 valueSeparator: valueSeparator, | 683 valueSeparator: valueSeparator, |
| 691 preserveBackslash: preserveBackslash); | 684 preserveBackslash: preserveBackslash); |
| 692 } | 685 } |
| 693 | 686 |
| 694 /** | 687 /** |
| 695 * Gets the header value. | 688 * Gets the header value. |
| 696 */ | 689 */ |
| 697 String get value; | 690 String get value; |
| 698 | 691 |
| 699 /** | 692 /** |
| 700 * Gets the map of parameters. | 693 * Gets the map of parameters. |
| 701 * | 694 * |
| (...skipping 26 matching lines...) Expand all Loading... |
| 728 * Sets a callback that will be called when the session is timed out. | 721 * Sets a callback that will be called when the session is timed out. |
| 729 */ | 722 */ |
| 730 void set onTimeout(void callback()); | 723 void set onTimeout(void callback()); |
| 731 | 724 |
| 732 /** | 725 /** |
| 733 * Is true if the session has not been sent to the client yet. | 726 * Is true if the session has not been sent to the client yet. |
| 734 */ | 727 */ |
| 735 bool get isNew; | 728 bool get isNew; |
| 736 } | 729 } |
| 737 | 730 |
| 738 | |
| 739 /** | 731 /** |
| 740 * Representation of a content type. An instance of [ContentType] is | 732 * Representation of a content type. An instance of [ContentType] is |
| 741 * immutable. | 733 * immutable. |
| 742 */ | 734 */ |
| 743 abstract class ContentType implements HeaderValue { | 735 abstract class ContentType implements HeaderValue { |
| 744 /** | 736 /** |
| 745 * Content type for plain text using UTF-8 encoding. | 737 * Content type for plain text using UTF-8 encoding. |
| 746 * | 738 * |
| 747 * text/plain; charset=utf-8 | 739 * text/plain; charset=utf-8 |
| 748 */ | 740 */ |
| (...skipping 22 matching lines...) Expand all Loading... |
| 771 | 763 |
| 772 /** | 764 /** |
| 773 * Creates a new content type object setting the primary type and | 765 * Creates a new content type object setting the primary type and |
| 774 * sub type. The charset and additional parameters can also be set | 766 * sub type. The charset and additional parameters can also be set |
| 775 * using [charset] and [parameters]. If charset is passed and | 767 * using [charset] and [parameters]. If charset is passed and |
| 776 * [parameters] contains charset as well the passed [charset] will | 768 * [parameters] contains charset as well the passed [charset] will |
| 777 * override the value in parameters. Keys passed in parameters will be | 769 * override the value in parameters. Keys passed in parameters will be |
| 778 * converted to lower case. The `charset` entry, whether passed as `charset` | 770 * converted to lower case. The `charset` entry, whether passed as `charset` |
| 779 * or in `parameters`, will have its value converted to lower-case. | 771 * or in `parameters`, will have its value converted to lower-case. |
| 780 */ | 772 */ |
| 781 factory ContentType(String primaryType, | 773 factory ContentType(String primaryType, String subType, |
| 782 String subType, | 774 {String charset, Map<String, String> parameters}) { |
| 783 {String charset, Map<String, String> parameters}) { | |
| 784 return new _ContentType(primaryType, subType, charset, parameters); | 775 return new _ContentType(primaryType, subType, charset, parameters); |
| 785 } | 776 } |
| 786 | 777 |
| 787 /** | 778 /** |
| 788 * Creates a new content type object from parsing a Content-Type | 779 * Creates a new content type object from parsing a Content-Type |
| 789 * header value. As primary type, sub type and parameter names and | 780 * header value. As primary type, sub type and parameter names and |
| 790 * values are not case sensitive all these values will be converted | 781 * values are not case sensitive all these values will be converted |
| 791 * to lower case. Parsing this string | 782 * to lower case. Parsing this string |
| 792 * | 783 * |
| 793 * text/html; charset=utf-8 | 784 * text/html; charset=utf-8 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 813 * Gets the sub type. | 804 * Gets the sub type. |
| 814 */ | 805 */ |
| 815 String get subType; | 806 String get subType; |
| 816 | 807 |
| 817 /** | 808 /** |
| 818 * Gets the character set. | 809 * Gets the character set. |
| 819 */ | 810 */ |
| 820 String get charset; | 811 String get charset; |
| 821 } | 812 } |
| 822 | 813 |
| 823 | |
| 824 /** | 814 /** |
| 825 * Representation of a cookie. For cookies received by the server as | 815 * Representation of a cookie. For cookies received by the server as |
| 826 * Cookie header values only [:name:] and [:value:] fields will be | 816 * Cookie header values only [:name:] and [:value:] fields will be |
| 827 * set. When building a cookie for the 'set-cookie' header in the server | 817 * set. When building a cookie for the 'set-cookie' header in the server |
| 828 * and when receiving cookies in the client as 'set-cookie' headers all | 818 * and when receiving cookies in the client as 'set-cookie' headers all |
| 829 * fields can be used. | 819 * fields can be used. |
| 830 */ | 820 */ |
| 831 abstract class Cookie { | 821 abstract class Cookie { |
| 832 /** | 822 /** |
| 833 * Gets and sets the name. | 823 * Gets and sets the name. |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 } | 876 } |
| 887 | 877 |
| 888 /** | 878 /** |
| 889 * Returns the formatted string representation of the cookie. The | 879 * Returns the formatted string representation of the cookie. The |
| 890 * string representation can be used for for setting the Cookie or | 880 * string representation can be used for for setting the Cookie or |
| 891 * 'set-cookie' headers | 881 * 'set-cookie' headers |
| 892 */ | 882 */ |
| 893 String toString(); | 883 String toString(); |
| 894 } | 884 } |
| 895 | 885 |
| 896 | |
| 897 /** | 886 /** |
| 898 * A server-side object | 887 * A server-side object |
| 899 * that contains the content of and information about an HTTP request. | 888 * that contains the content of and information about an HTTP request. |
| 900 * | 889 * |
| 901 * __Note__: Check out the | 890 * __Note__: Check out the |
| 902 * [http_server](http://pub.dartlang.org/packages/http_server) | 891 * [http_server](http://pub.dartlang.org/packages/http_server) |
| 903 * package, which makes working with the low-level | 892 * package, which makes working with the low-level |
| 904 * dart:io HTTP server subsystem easier. | 893 * dart:io HTTP server subsystem easier. |
| 905 * | 894 * |
| 906 * `HttpRequest` objects are generated by an [HttpServer], | 895 * `HttpRequest` objects are generated by an [HttpServer], |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1033 * The [HttpResponse] object, used for sending back the response to the | 1022 * The [HttpResponse] object, used for sending back the response to the |
| 1034 * client. | 1023 * client. |
| 1035 * | 1024 * |
| 1036 * If the [contentLength] of the body isn't 0, and the body isn't being read, | 1025 * If the [contentLength] of the body isn't 0, and the body isn't being read, |
| 1037 * any write calls on the [HttpResponse] automatically drain the request | 1026 * any write calls on the [HttpResponse] automatically drain the request |
| 1038 * body. | 1027 * body. |
| 1039 */ | 1028 */ |
| 1040 HttpResponse get response; | 1029 HttpResponse get response; |
| 1041 } | 1030 } |
| 1042 | 1031 |
| 1043 | |
| 1044 /** | 1032 /** |
| 1045 * An HTTP response, which returns the headers and data | 1033 * An HTTP response, which returns the headers and data |
| 1046 * from the server to the client in response to an HTTP request. | 1034 * from the server to the client in response to an HTTP request. |
| 1047 * | 1035 * |
| 1048 * Every HttpRequest object provides access to the associated [HttpResponse] | 1036 * Every HttpRequest object provides access to the associated [HttpResponse] |
| 1049 * object through the `response` property. | 1037 * object through the `response` property. |
| 1050 * The server sends its response to the client by writing to the | 1038 * The server sends its response to the client by writing to the |
| 1051 * HttpResponse object. | 1039 * HttpResponse object. |
| 1052 * | 1040 * |
| 1053 * ## Writing the response | 1041 * ## Writing the response |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 */ | 1180 */ |
| 1193 Future<Socket> detachSocket({bool writeHeaders: true}); | 1181 Future<Socket> detachSocket({bool writeHeaders: true}); |
| 1194 | 1182 |
| 1195 /** | 1183 /** |
| 1196 * Gets information about the client connection. Returns [:null:] if the | 1184 * Gets information about the client connection. Returns [:null:] if the |
| 1197 * socket is not available. | 1185 * socket is not available. |
| 1198 */ | 1186 */ |
| 1199 HttpConnectionInfo get connectionInfo; | 1187 HttpConnectionInfo get connectionInfo; |
| 1200 } | 1188 } |
| 1201 | 1189 |
| 1202 | |
| 1203 /** | 1190 /** |
| 1204 * A client that receives content, such as web pages, from | 1191 * A client that receives content, such as web pages, from |
| 1205 * a server using the HTTP protocol. | 1192 * a server using the HTTP protocol. |
| 1206 * | 1193 * |
| 1207 * HttpClient contains a number of methods to send an [HttpClientRequest] | 1194 * HttpClient contains a number of methods to send an [HttpClientRequest] |
| 1208 * to an Http server and receive an [HttpClientResponse] back. | 1195 * to an Http server and receive an [HttpClientResponse] back. |
| 1209 * For example, you can use the [get], [getUrl], [post], and [postUrl] methods | 1196 * For example, you can use the [get], [getUrl], [post], and [postUrl] methods |
| 1210 * for GET and POST requests, respectively. | 1197 * for GET and POST requests, respectively. |
| 1211 * | 1198 * |
| 1212 * ## Making a simple GET request: an example | 1199 * ## Making a simple GET request: an example |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1361 * The `Host` header for the request will be set to the value | 1348 * The `Host` header for the request will be set to the value |
| 1362 * [host]:[port]. This can be overridden through the | 1349 * [host]:[port]. This can be overridden through the |
| 1363 * [HttpClientRequest] interface before the request is sent. NOTE | 1350 * [HttpClientRequest] interface before the request is sent. NOTE |
| 1364 * if [host] is an IP address this will still be set in the `Host` | 1351 * if [host] is an IP address this will still be set in the `Host` |
| 1365 * header. | 1352 * header. |
| 1366 * | 1353 * |
| 1367 * For additional information on the sequence of events during an | 1354 * For additional information on the sequence of events during an |
| 1368 * HTTP transaction, and the objects returned by the futures, see | 1355 * HTTP transaction, and the objects returned by the futures, see |
| 1369 * the overall documentation for the class [HttpClient]. | 1356 * the overall documentation for the class [HttpClient]. |
| 1370 */ | 1357 */ |
| 1371 Future<HttpClientRequest> open(String method, | 1358 Future<HttpClientRequest> open( |
| 1372 String host, | 1359 String method, String host, int port, String path); |
| 1373 int port, | |
| 1374 String path); | |
| 1375 | 1360 |
| 1376 /** | 1361 /** |
| 1377 * Opens a HTTP connection. | 1362 * Opens a HTTP connection. |
| 1378 * | 1363 * |
| 1379 * The HTTP method is specified in [method] and the URL to use in | 1364 * The HTTP method is specified in [method] and the URL to use in |
| 1380 * [url]. | 1365 * [url]. |
| 1381 * | 1366 * |
| 1382 * The `Host` header for the request will be set to the value | 1367 * The `Host` header for the request will be set to the value |
| 1383 * [host]:[port]. This can be overridden through the | 1368 * [host]:[port]. This can be overridden through the |
| 1384 * [HttpClientRequest] interface before the request is sent. NOTE | 1369 * [HttpClientRequest] interface before the request is sent. NOTE |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1602 * url, {"http_proxy": ..., "no_proxy": ...}); | 1587 * url, {"http_proxy": ..., "no_proxy": ...}); |
| 1603 * } | 1588 * } |
| 1604 * | 1589 * |
| 1605 * If a proxy requires authentication it is possible to configure | 1590 * If a proxy requires authentication it is possible to configure |
| 1606 * the username and password as well. Use the format | 1591 * the username and password as well. Use the format |
| 1607 * [:username:password@hostname:port:] to include the username and | 1592 * [:username:password@hostname:port:] to include the username and |
| 1608 * password. Alternatively the API [addProxyCredentials] can be used | 1593 * password. Alternatively the API [addProxyCredentials] can be used |
| 1609 * to set credentials for proxies which require authentication. | 1594 * to set credentials for proxies which require authentication. |
| 1610 */ | 1595 */ |
| 1611 static String findProxyFromEnvironment(Uri url, | 1596 static String findProxyFromEnvironment(Uri url, |
| 1612 {Map<String, String> environment}) { | 1597 {Map<String, String> environment}) { |
| 1613 return _HttpClient._findProxyFromEnvironment(url, environment); | 1598 return _HttpClient._findProxyFromEnvironment(url, environment); |
| 1614 } | 1599 } |
| 1615 | 1600 |
| 1616 /** | 1601 /** |
| 1617 * Sets the function to be called when a proxy is requesting | 1602 * Sets the function to be called when a proxy is requesting |
| 1618 * authentication. Information on the proxy in use and the security | 1603 * authentication. Information on the proxy in use and the security |
| 1619 * realm for the authentication are passed in the arguments [host], | 1604 * realm for the authentication are passed in the arguments [host], |
| 1620 * [port] and [realm]. | 1605 * [port] and [realm]. |
| 1621 * | 1606 * |
| 1622 * The function returns a [Future] which should complete when the | 1607 * The function returns a [Future] which should complete when the |
| 1623 * authentication has been resolved. If credentials cannot be | 1608 * authentication has been resolved. If credentials cannot be |
| 1624 * provided the [Future] should complete with [:false:]. If | 1609 * provided the [Future] should complete with [:false:]. If |
| 1625 * credentials are available the function should add these using | 1610 * credentials are available the function should add these using |
| 1626 * [addProxyCredentials] before completing the [Future] with the value | 1611 * [addProxyCredentials] before completing the [Future] with the value |
| 1627 * [:true:]. | 1612 * [:true:]. |
| 1628 * | 1613 * |
| 1629 * If the [Future] completes with [:true:] the request will be retried | 1614 * If the [Future] completes with [:true:] the request will be retried |
| 1630 * using the updated credentials. Otherwise response processing will | 1615 * using the updated credentials. Otherwise response processing will |
| 1631 * continue normally. | 1616 * continue normally. |
| 1632 */ | 1617 */ |
| 1633 set authenticateProxy( | 1618 set authenticateProxy( |
| 1634 Future<bool> f(String host, int port, String scheme, String realm)); | 1619 Future<bool> f(String host, int port, String scheme, String realm)); |
| 1635 | 1620 |
| 1636 /** | 1621 /** |
| 1637 * Add credentials to be used for authorizing HTTP proxies. | 1622 * Add credentials to be used for authorizing HTTP proxies. |
| 1638 */ | 1623 */ |
| 1639 void addProxyCredentials(String host, | 1624 void addProxyCredentials( |
| 1640 int port, | 1625 String host, int port, String realm, HttpClientCredentials credentials); |
| 1641 String realm, | |
| 1642 HttpClientCredentials credentials); | |
| 1643 | 1626 |
| 1644 /** | 1627 /** |
| 1645 * Sets a callback that will decide whether to accept a secure connection | 1628 * Sets a callback that will decide whether to accept a secure connection |
| 1646 * with a server certificate that cannot be authenticated by any of our | 1629 * with a server certificate that cannot be authenticated by any of our |
| 1647 * trusted root certificates. | 1630 * trusted root certificates. |
| 1648 * | 1631 * |
| 1649 * When an secure HTTP request if made, using this HttpClient, and the | 1632 * When an secure HTTP request if made, using this HttpClient, and the |
| 1650 * server returns a server certificate that cannot be authenticated, the | 1633 * server returns a server certificate that cannot be authenticated, the |
| 1651 * callback is called asynchronously with the [X509Certificate] object and | 1634 * callback is called asynchronously with the [X509Certificate] object and |
| 1652 * the server's hostname and port. If the value of [badCertificateCallback] | 1635 * the server's hostname and port. If the value of [badCertificateCallback] |
| 1653 * is [:null:], the bad certificate is rejected, as if the callback | 1636 * is [:null:], the bad certificate is rejected, as if the callback |
| 1654 * returned [:false:] | 1637 * returned [:false:] |
| 1655 * | 1638 * |
| 1656 * If the callback returns true, the secure connection is accepted and the | 1639 * If the callback returns true, the secure connection is accepted and the |
| 1657 * [:Future<HttpClientRequest>:] that was returned from the call making the | 1640 * [:Future<HttpClientRequest>:] that was returned from the call making the |
| 1658 * request completes with a valid HttpRequest object. If the callback returns | 1641 * request completes with a valid HttpRequest object. If the callback returns |
| 1659 * false, the [:Future<HttpClientRequest>:] completes with an exception. | 1642 * false, the [:Future<HttpClientRequest>:] completes with an exception. |
| 1660 * | 1643 * |
| 1661 * If a bad certificate is received on a connection attempt, the library calls | 1644 * If a bad certificate is received on a connection attempt, the library calls |
| 1662 * the function that was the value of badCertificateCallback at the time | 1645 * the function that was the value of badCertificateCallback at the time |
| 1663 * the request is made, even if the value of badCertificateCallback | 1646 * the request is made, even if the value of badCertificateCallback |
| 1664 * has changed since then. | 1647 * has changed since then. |
| 1665 */ | 1648 */ |
| 1666 set badCertificateCallback(bool callback(X509Certificate cert, | 1649 set badCertificateCallback( |
| 1667 String host, | 1650 bool callback(X509Certificate cert, String host, int port)); |
| 1668 int port)); | |
| 1669 | 1651 |
| 1670 /** | 1652 /** |
| 1671 * Shut down the HTTP client. If [force] is [:false:] (the default) | 1653 * Shut down the HTTP client. If [force] is [:false:] (the default) |
| 1672 * the [:HttpClient:] will be kept alive until all active | 1654 * the [:HttpClient:] will be kept alive until all active |
| 1673 * connections are done. If [force] is [:true:] any active | 1655 * connections are done. If [force] is [:true:] any active |
| 1674 * connections will be closed to immediately release all | 1656 * connections will be closed to immediately release all |
| 1675 * resources. These closed connections will receive an [:onError:] | 1657 * resources. These closed connections will receive an [:onError:] |
| 1676 * callback to indicate that the client was shut down. In both cases | 1658 * callback to indicate that the client was shut down. In both cases |
| 1677 * trying to establish a new connection after calling [close] | 1659 * trying to establish a new connection after calling [close] |
| 1678 * will throw an exception. | 1660 * will throw an exception. |
| 1679 */ | 1661 */ |
| 1680 void close({bool force: false}); | 1662 void close({bool force: false}); |
| 1681 } | 1663 } |
| 1682 | 1664 |
| 1683 | |
| 1684 /** | 1665 /** |
| 1685 * HTTP request for a client connection. | 1666 * HTTP request for a client connection. |
| 1686 * | 1667 * |
| 1687 * To set up a request, set the headers using the headers property | 1668 * To set up a request, set the headers using the headers property |
| 1688 * provided in this class and write the data to the body of the request. | 1669 * provided in this class and write the data to the body of the request. |
| 1689 * HttpClientRequest is an [IOSink]. Use the methods from IOSink, | 1670 * HttpClientRequest is an [IOSink]. Use the methods from IOSink, |
| 1690 * such as writeCharCode(), to write the body of the HTTP | 1671 * such as writeCharCode(), to write the body of the HTTP |
| 1691 * request. When one of the IOSink methods is used for the first | 1672 * request. When one of the IOSink methods is used for the first |
| 1692 * time, the request header is sent. Calling any methods that | 1673 * time, the request header is sent. Calling any methods that |
| 1693 * change the header after it is sent throws an exception. | 1674 * change the header after it is sent throws an exception. |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1801 */ | 1782 */ |
| 1802 Future<HttpClientResponse> close(); | 1783 Future<HttpClientResponse> close(); |
| 1803 | 1784 |
| 1804 /** | 1785 /** |
| 1805 * Get information about the client connection. Returns [:null:] if the socket | 1786 * Get information about the client connection. Returns [:null:] if the socket |
| 1806 * is not available. | 1787 * is not available. |
| 1807 */ | 1788 */ |
| 1808 HttpConnectionInfo get connectionInfo; | 1789 HttpConnectionInfo get connectionInfo; |
| 1809 } | 1790 } |
| 1810 | 1791 |
| 1811 | |
| 1812 /** | 1792 /** |
| 1813 * HTTP response for a client connection. | 1793 * HTTP response for a client connection. |
| 1814 * | 1794 * |
| 1815 * The body of a [HttpClientResponse] object is a | 1795 * The body of a [HttpClientResponse] object is a |
| 1816 * [Stream] of data from the server. Listen to the body to handle | 1796 * [Stream] of data from the server. Listen to the body to handle |
| 1817 * the data and be notified when the entire body is received. | 1797 * the data and be notified when the entire body is received. |
| 1818 * | 1798 * |
| 1819 * new HttpClient().get('localhost', 80, '/file.txt') | 1799 * new HttpClient().get('localhost', 80, '/file.txt') |
| 1820 * .then((HttpClientRequest request) => request.close()) | 1800 * .then((HttpClientRequest request) => request.close()) |
| 1821 * .then((HttpClientResponse response) { | 1801 * .then((HttpClientResponse response) { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1886 * | 1866 * |
| 1887 * All headers added to the request will be added to the redirection | 1867 * All headers added to the request will be added to the redirection |
| 1888 * request. However, any body sent with the request will not be | 1868 * request. However, any body sent with the request will not be |
| 1889 * part of the redirection request. | 1869 * part of the redirection request. |
| 1890 * | 1870 * |
| 1891 * If [followLoops] is set to [:true:], redirect will follow the redirect, | 1871 * If [followLoops] is set to [:true:], redirect will follow the redirect, |
| 1892 * even if the URL was already visited. The default value is [:false:]. | 1872 * even if the URL was already visited. The default value is [:false:]. |
| 1893 * | 1873 * |
| 1894 * [redirect] will ignore [maxRedirects] and will always perform the redirect. | 1874 * [redirect] will ignore [maxRedirects] and will always perform the redirect. |
| 1895 */ | 1875 */ |
| 1896 Future<HttpClientResponse> redirect([String method, | 1876 Future<HttpClientResponse> redirect( |
| 1897 Uri url, | 1877 [String method, Uri url, bool followLoops]); |
| 1898 bool followLoops]); | |
| 1899 | |
| 1900 | 1878 |
| 1901 /** | 1879 /** |
| 1902 * Returns the client response headers. | 1880 * Returns the client response headers. |
| 1903 * | 1881 * |
| 1904 * The client response headers are immutable. | 1882 * The client response headers are immutable. |
| 1905 */ | 1883 */ |
| 1906 HttpHeaders get headers; | 1884 HttpHeaders get headers; |
| 1907 | 1885 |
| 1908 /** | 1886 /** |
| 1909 * Detach the underlying socket from the HTTP client. When the | 1887 * Detach the underlying socket from the HTTP client. When the |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1926 */ | 1904 */ |
| 1927 X509Certificate get certificate; | 1905 X509Certificate get certificate; |
| 1928 | 1906 |
| 1929 /** | 1907 /** |
| 1930 * Gets information about the client connection. Returns [:null:] if the socke
t | 1908 * Gets information about the client connection. Returns [:null:] if the socke
t |
| 1931 * is not available. | 1909 * is not available. |
| 1932 */ | 1910 */ |
| 1933 HttpConnectionInfo get connectionInfo; | 1911 HttpConnectionInfo get connectionInfo; |
| 1934 } | 1912 } |
| 1935 | 1913 |
| 1936 | 1914 abstract class HttpClientCredentials {} |
| 1937 abstract class HttpClientCredentials { } | |
| 1938 | |
| 1939 | 1915 |
| 1940 /** | 1916 /** |
| 1941 * Represents credentials for basic authentication. | 1917 * Represents credentials for basic authentication. |
| 1942 */ | 1918 */ |
| 1943 abstract class HttpClientBasicCredentials extends HttpClientCredentials { | 1919 abstract class HttpClientBasicCredentials extends HttpClientCredentials { |
| 1944 factory HttpClientBasicCredentials(String username, String password) => | 1920 factory HttpClientBasicCredentials(String username, String password) => |
| 1945 new _HttpClientBasicCredentials(username, password); | 1921 new _HttpClientBasicCredentials(username, password); |
| 1946 } | 1922 } |
| 1947 | 1923 |
| 1948 | |
| 1949 /** | 1924 /** |
| 1950 * Represents credentials for digest authentication. Digest | 1925 * Represents credentials for digest authentication. Digest |
| 1951 * authentication is only supported for servers using the MD5 | 1926 * authentication is only supported for servers using the MD5 |
| 1952 * algorithm and quality of protection (qop) of either "none" or | 1927 * algorithm and quality of protection (qop) of either "none" or |
| 1953 * "auth". | 1928 * "auth". |
| 1954 */ | 1929 */ |
| 1955 abstract class HttpClientDigestCredentials extends HttpClientCredentials { | 1930 abstract class HttpClientDigestCredentials extends HttpClientCredentials { |
| 1956 factory HttpClientDigestCredentials(String username, String password) => | 1931 factory HttpClientDigestCredentials(String username, String password) => |
| 1957 new _HttpClientDigestCredentials(username, password); | 1932 new _HttpClientDigestCredentials(username, password); |
| 1958 } | 1933 } |
| 1959 | 1934 |
| 1960 | |
| 1961 /** | 1935 /** |
| 1962 * Information about an [HttpRequest], [HttpResponse], [HttpClientRequest], or | 1936 * Information about an [HttpRequest], [HttpResponse], [HttpClientRequest], or |
| 1963 * [HttpClientResponse] connection. | 1937 * [HttpClientResponse] connection. |
| 1964 */ | 1938 */ |
| 1965 abstract class HttpConnectionInfo { | 1939 abstract class HttpConnectionInfo { |
| 1966 InternetAddress get remoteAddress; | 1940 InternetAddress get remoteAddress; |
| 1967 int get remotePort; | 1941 int get remotePort; |
| 1968 int get localPort; | 1942 int get localPort; |
| 1969 } | 1943 } |
| 1970 | 1944 |
| 1971 | |
| 1972 /** | 1945 /** |
| 1973 * Redirect information. | 1946 * Redirect information. |
| 1974 */ | 1947 */ |
| 1975 abstract class RedirectInfo { | 1948 abstract class RedirectInfo { |
| 1976 /** | 1949 /** |
| 1977 * Returns the status code used for the redirect. | 1950 * Returns the status code used for the redirect. |
| 1978 */ | 1951 */ |
| 1979 int get statusCode; | 1952 int get statusCode; |
| 1980 | 1953 |
| 1981 /** | 1954 /** |
| 1982 * Returns the method used for the redirect. | 1955 * Returns the method used for the redirect. |
| 1983 */ | 1956 */ |
| 1984 String get method; | 1957 String get method; |
| 1985 | 1958 |
| 1986 /** | 1959 /** |
| 1987 * Returns the location for the redirect. | 1960 * Returns the location for the redirect. |
| 1988 */ | 1961 */ |
| 1989 Uri get location; | 1962 Uri get location; |
| 1990 } | 1963 } |
| 1991 | 1964 |
| 1992 | |
| 1993 /** | 1965 /** |
| 1994 * When detaching a socket from either the [:HttpServer:] or the | 1966 * When detaching a socket from either the [:HttpServer:] or the |
| 1995 * [:HttpClient:] due to a HTTP connection upgrade there might be | 1967 * [:HttpClient:] due to a HTTP connection upgrade there might be |
| 1996 * unparsed data already read from the socket. This unparsed data | 1968 * unparsed data already read from the socket. This unparsed data |
| 1997 * together with the detached socket is returned in an instance of | 1969 * together with the detached socket is returned in an instance of |
| 1998 * this class. | 1970 * this class. |
| 1999 */ | 1971 */ |
| 2000 abstract class DetachedSocket { | 1972 abstract class DetachedSocket { |
| 2001 Socket get socket; | 1973 Socket get socket; |
| 2002 List<int> get unparsedData; | 1974 List<int> get unparsedData; |
| 2003 } | 1975 } |
| 2004 | 1976 |
| 2005 | |
| 2006 class HttpException implements IOException { | 1977 class HttpException implements IOException { |
| 2007 final String message; | 1978 final String message; |
| 2008 final Uri uri; | 1979 final Uri uri; |
| 2009 | 1980 |
| 2010 const HttpException(this.message, {this.uri}); | 1981 const HttpException(this.message, {this.uri}); |
| 2011 | 1982 |
| 2012 String toString() { | 1983 String toString() { |
| 2013 var b = new StringBuffer() | 1984 var b = new StringBuffer()..write('HttpException: ')..write(message); |
| 2014 ..write('HttpException: ') | |
| 2015 ..write(message); | |
| 2016 if (uri != null) { | 1985 if (uri != null) { |
| 2017 b.write(', uri = $uri'); | 1986 b.write(', uri = $uri'); |
| 2018 } | 1987 } |
| 2019 return b.toString(); | 1988 return b.toString(); |
| 2020 } | 1989 } |
| 2021 } | 1990 } |
| 2022 | 1991 |
| 2023 | |
| 2024 class RedirectException implements HttpException { | 1992 class RedirectException implements HttpException { |
| 2025 final String message; | 1993 final String message; |
| 2026 final List<RedirectInfo> redirects; | 1994 final List<RedirectInfo> redirects; |
| 2027 | 1995 |
| 2028 const RedirectException(this.message, this.redirects); | 1996 const RedirectException(this.message, this.redirects); |
| 2029 | 1997 |
| 2030 String toString() => "RedirectException: $message"; | 1998 String toString() => "RedirectException: $message"; |
| 2031 | 1999 |
| 2032 Uri get uri => redirects.last.location; | 2000 Uri get uri => redirects.last.location; |
| 2033 } | 2001 } |
| OLD | NEW |