Skip to content
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

Closed
justinfagnani opened this issue Mar 5, 2012 · 3 comments
Closed

Make dart:io.HttpConnection public #1993

justinfagnani opened this issue Mar 5, 2012 · 3 comments
Labels
area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. closed-not-planned Closed as we don't intend to take action on the reported issue library-io

Comments

@justinfagnani
Copy link
Contributor

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.

@sgjesse
Copy link
Contributor

sgjesse commented Mar 6, 2012

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.
  onWebSocketConnect(HttpWebSocketConnection connection)

  // For handling non-websockets upgrade requests. Should provide a mechanism
  // for getting control of the actual socket.
  onUpgrade(...)
}

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.


Added Area-IO, WontFix labels.

@sgjesse
Copy link
Contributor

sgjesse commented Mar 6, 2012

@kevmoo
Copy link
Member

kevmoo commented May 14, 2014

Removed Area-IO label.
Added Area-Library, Library-IO labels.

@justinfagnani justinfagnani added Type-Defect area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. library-io labels May 14, 2014
@kevmoo kevmoo added closed-not-planned Closed as we don't intend to take action on the reported issue and removed resolution-wont_fix labels Mar 1, 2016
copybara-service bot pushed a commit that referenced this issue Mar 7, 2023
…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>
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-core-library SDK core library issues (core, async, ...); use area-vm or area-web for platform specific libraries. closed-not-planned Closed as we don't intend to take action on the reported issue library-io
Projects
None yet
Development

No branches or pull requests

3 participants