// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

[DartPackage="mojo_services"]
module http_server;

import "http_server/public/interfaces/http_request.mojom";
import "http_server/public/interfaces/http_response.mojom";

interface HttpServer {
  // Sets a handler for URLs matching a regex pattern. Handlers are considered
  // in the order they were registered.
  //
  // Returns false if there was already a handler registered for the given
  // pattern.
  //
  // To unregister a handler, destroy the underlying pipe.
  SetHandler(string pattern, HttpHandler handler) => (bool success);

  // Returns the TCP port at which the server is running. This will not return
  // until the server is ready, ie. listening for connections.
  GetPort() => (uint16 port);
};

interface HttpHandler {
  HandleRequest(HttpRequest request) => (HttpResponse response);
};
