-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make dart:io.HttpConnection public #1993
Comments
The HttpConnection class was made private by design for handling the internal HTTP connection state. That said of cause we need to support things like WebSockets, but it should be build into the current public interface. Maybe something like this: interface HttpServer { // For handling WebSocket requests. // For handling non-websockets upgrade requests. Should provide a mechanism For experimenting you can always copy the HTTP code from runtime/bin. It is currently all Dart and should run without problems as such. For HttpParser we have made it private as the implementation is subject to change. The parsing could become a performance bottleneck and something we would like to tune in various ways including moving from using Dart code to using C++ code. For HttpUtils they are various internal helpers. Of cause some of the features are useful in other places, but thay need a better API design to be made public. For HttpParser and HttpUtils it should be relatively easy to reuse the code by either copying it or #source from runtime/bin. This is what the tests tests/standalone/src/io/HttpParserTest.dart and tests/standalone/src/io/UrlEncodingTest.dart does. I will mark this as "WontFix" and open two new bugs on supporting connection upgrade in general and on supporting web sockets in particular. |
Created issues http://code.google.com/p/dart/issues/detail?id=2001 http://code.google.com/p/dart/issues/detail?id=2002 for tracking this. |
Removed Area-IO label. |
…stack_trace, stream_channel, test, tools, watcher, webdev, yaml, yaml_edit Revisions updated by `dart tools/rev_sdk_deps.dart`. async (https://github.com/dart-lang/async/compare/8deaa40..f454380): f454380 2023-03-02 Natalie Weizenbaum Add `StreamExtensions.listenAndBuffer()` (#235) dartdoc (https://github.com/dart-lang/dartdoc/compare/77d5994..98fa859): 98fa859c 2023-03-05 dependabot[bot] Bump cli_util from 0.3.5 to 0.4.0 (#3360) html (https://github.com/dart-lang/html/compare/0b8025c..08643e9): 08643e9 2023-03-02 Devon Carew prep for publishing 0.15.2 (#205) http (https://github.com/dart-lang/http/compare/1500a71..805a147): 805a147 2023-03-02 Kevin Moore Fix some spelling (#884) 5a2f036 2023-03-02 Kevin Moore Move to pkg:dart_flutter_team_lints, require Dart 2.19 (#883) 35b2cef 2023-03-02 Bahaa Fathi Yousef Corrected the spelling of "Implements" in "/http/lib/src/io_client.dart" (#871) bb86cf3 2023-02-27 Brian Quinlan Provide access to NSURLSession.sessionDescription (#881) http_multi_server (https://github.com/dart-lang/http_multi_server/compare/2cd5355..7bd190c): 7bd190c 2023-03-06 Kevin Moore Require Dart 2.19, enable and fix new team lints (#51) source_map_stack_trace (https://github.com/dart-lang/source_map_stack_trace/compare/a60ef54..45ea368): 45ea368 2023-03-07 Kevin Moore Require Dart 2.19, use pkg:dart_flutter_team_lints (#35) stream_channel (https://github.com/dart-lang/stream_channel/compare/0850515..a20ccd4): a20ccd4 2023-02-28 Kevin Moore move to pkg:dart_flutter_team_lints lints, fix code, bump min SDK (#87) test (https://github.com/dart-lang/test/compare/1307cc5..92da93a): 92da93a8 2023-03-06 Devon Carew dogfood the new setup-dart action (#1964) e49818ec 2023-03-01 dependabot[bot] Bump github/codeql-action from 2.2.1 to 2.2.5 (#1963) tools (https://github.com/dart-lang/tools/compare/28b7be8..a1c3506): a1c3506 2023-03-07 Devon Carew dogfood the new setup-dart action (#25) fb46723 2023-03-07 Elias Yishak Update pubspec.yaml (#24) 5a72344 2023-03-06 Elias Yishak Add `DashEvent` for toggling telemetry collection + send event whenever toggled (#23) watcher (https://github.com/dart-lang/watcher/compare/0ca6638..5968409): 5968409 2023-03-07 Kevin Moore blast_repo fixes (#139) e8f771a 2023-03-07 Kevin Moore Require Dart 2.19, use new team lints (#138) webdev (https://github.com/dart-lang/webdev/compare/deb801b..c007560): c007560 2023-03-06 Elliott Brooks (she/her) [MV3 Debug Extension] Show warning when clicking on debug extension for non Dart app (#2015) 1a010dc 2023-03-06 Devon Carew dogfood the new setup-dart action (#2017) 07743a3 2023-03-06 Anna Gringauze Fix exception mapping from JS to dart (#2004) eb63b31 2023-03-03 Elliott Brooks (she/her) Create a Dart Debug Extension issue template (#2014) 85f35d4 2023-03-01 Devon Carew update publishing automation integration (#2002) e748045 2023-02-28 Anna Gringauze Prepare to release webdev 3.0.1 (#2000) 5355050 2023-02-27 Elliott Brooks (she/her) [MV3 Debug Extension] Ignore page reloads for detecting navigation away from app (#1994) 4e08276 2023-02-27 Anna Gringauze Prepare to release dwds 18.0.0 (#1993) fc54d68 2023-02-27 Anna Gringauze Fix expression evaluation failures on empty scopes (#1998) 496a2b4 2023-02-27 Anna Gringauze Temporarily disable publish verification (#1996) yaml (https://github.com/dart-lang/yaml/compare/a6d8781..1ad2f49): 1ad2f49 2023-03-01 Kevin Moore Require Dart 2.19, migrate to dart_flutter_team_lints, make associated fixes (#138) 4d369fd 2023-03-01 Kevin Moore benchmark: fix output.json (#137) yaml_edit (https://github.com/dart-lang/yaml_edit/compare/998eea2..0668eb5): 0668eb5 2023-03-02 Jonas Finnemann Jensen Wrap recursively, prepare release (#28) a4ff857 2023-03-01 Mohamed Ishad Update CHANGELOG.md (#37) 2fdfbdb 2023-02-28 Mohamed Ishad Fix for issue #23 (#34) 494ad7c 2023-02-25 MikiPaul fixed typo (#36) Change-Id: I101c94575c20fca55c7440e84668413207073a32 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/287162 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Devon Carew <devoncarew@google.com>
HttpConnection is useful outside of HttpServer, for example when negotiating the handshake of a WebSocket connection.
Here's a rough sketch of code that worked with the http server when it was part of the chat sample:
server = new ServerSocket("127.0.0.1", 8888, 0);
server.connectionHandler = (Socket socket) {
// setup an HTTPConnection for the WebSocket handshake
HttpConnection httpConnection = new HttpConnection(socket);
httpConnection.requestReceived = (HttpRequest request, HttpResponse response) {
response.statusCode = HttpStatus.SWITCHING_PROTOCOLS;
response.setHeader("Connection", "Upgrade");
response.setHeader("Upgrade", "WebSocket");
response.setHeader("Sec-WebSocket-Accept", makeWebSocketAccept(request.headers["sec-websocket-key"]));
// remove HttpConnection's handlers and add our own
socket.dataHandler = () { ... }
}
}
HttpParser and HttpUtils would be useful as well.
The text was updated successfully, but these errors were encountered: