| Index: pkg/analysis_server/lib/src/server/http_server.dart
|
| diff --git a/pkg/analysis_server/lib/src/server/http_server.dart b/pkg/analysis_server/lib/src/server/http_server.dart
|
| index 67705d471e1d1180804675cab7dfdcacbebae55f..50da1549ea1ae6eaa19a72fba35f568063ae9eea 100644
|
| --- a/pkg/analysis_server/lib/src/server/http_server.dart
|
| +++ b/pkg/analysis_server/lib/src/server/http_server.dart
|
| @@ -5,7 +5,6 @@
|
| import 'dart:async';
|
| import 'dart:io';
|
|
|
| -import 'package:analysis_server/src/channel/web_socket_channel.dart';
|
| import 'package:analysis_server/src/socket_server.dart';
|
| import 'package:analysis_server/src/status/diagnostics.dart';
|
|
|
| @@ -36,7 +35,7 @@ class HttpAnalysisServer {
|
| /**
|
| * Future that is completed with the HTTP server once it is running.
|
| */
|
| - Future<HttpServer> _server;
|
| + Future<HttpServer> _serverFuture;
|
|
|
| /**
|
| * Last PRINT_BUFFER_LENGTH lines printed.
|
| @@ -51,10 +50,10 @@ class HttpAnalysisServer {
|
| /**
|
| * Return the port this server is bound to.
|
| */
|
| - Future<int> get boundPort async => (await _server)?.port;
|
| + Future<int> get boundPort async => (await _serverFuture)?.port;
|
|
|
| void close() {
|
| - _server.then((HttpServer server) {
|
| + _serverFuture.then((HttpServer server) {
|
| server.close();
|
| });
|
| }
|
| @@ -74,17 +73,22 @@ class HttpAnalysisServer {
|
| * Begin serving HTTP requests over the given port.
|
| */
|
| Future<int> serveHttp([int initialPort]) async {
|
| - if (_server != null) {
|
| + if (_serverFuture != null) {
|
| return boundPort;
|
| }
|
|
|
| try {
|
| - _server =
|
| - HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, initialPort ?? 0);
|
| - HttpServer server = await _server;
|
| + _serverFuture =
|
| + HttpServer.bind(InternetAddress.LOOPBACK_IP_V6, initialPort ?? 0);
|
| +
|
| + HttpServer server = await _serverFuture;
|
| _handleServer(server);
|
| return server.port;
|
| } catch (ignore) {
|
| + // If we can't bind to the specified port, don't remember the broken
|
| + // server.
|
| + _serverFuture = null;
|
| +
|
| return null;
|
| }
|
| }
|
| @@ -110,12 +114,18 @@ class HttpAnalysisServer {
|
| void _handleServer(HttpServer httpServer) {
|
| httpServer.listen((HttpRequest request) {
|
| List<String> updateValues = request.headers[HttpHeaders.UPGRADE];
|
| - if (updateValues != null && updateValues.indexOf('websocket') >= 0) {
|
| - WebSocketTransformer.upgrade(request).then((WebSocket websocket) {
|
| - _handleWebSocket(websocket);
|
| - });
|
| - } else if (request.method == 'GET') {
|
| + if (request.method == 'GET') {
|
| _handleGetRequest(request);
|
| + } else if (updateValues != null &&
|
| + updateValues.indexOf('websocket') >= 0) {
|
| + // We no longer support serving analysis server communications over
|
| + // WebSocket connections.
|
| + HttpResponse response = request.response;
|
| + response.statusCode = HttpStatus.NOT_FOUND;
|
| + response.headers.contentType = ContentType.TEXT;
|
| + response.write(
|
| + 'WebSocket connections not supported (${request.uri.path}).');
|
| + response.close();
|
| } else {
|
| _returnUnknownRequest(request);
|
| }
|
| @@ -123,25 +133,13 @@ class HttpAnalysisServer {
|
| }
|
|
|
| /**
|
| - * Handle an UPGRADE request received by the HTTP server by creating and
|
| - * running an analysis server on a [WebSocket]-based communication channel.
|
| - */
|
| - void _handleWebSocket(WebSocket socket) {
|
| - // TODO(devoncarew): This serves the analysis server over a websocket
|
| - // connection for historical reasons (and should probably be removed).
|
| - socketServer.createAnalysisServer(new WebSocketServerChannel(
|
| - socket, socketServer.instrumentationService));
|
| - }
|
| -
|
| - /**
|
| * Return an error in response to an unrecognized request received by the HTTP
|
| * server.
|
| */
|
| void _returnUnknownRequest(HttpRequest request) {
|
| HttpResponse response = request.response;
|
| response.statusCode = HttpStatus.NOT_FOUND;
|
| - response.headers.contentType =
|
| - new ContentType("text", "plain", charset: "utf-8");
|
| + response.headers.contentType = ContentType.TEXT;
|
| response.write('Not found');
|
| response.close();
|
| }
|
|
|