blob: 978247000960a04cb25a14bdcd7a787e51c08f09 [file] [log] [blame]
// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef P2P_SERVER_HTTP_SERVER_H_
#define P2P_SERVER_HTTP_SERVER_H_
#include <stdint.h>
#include <string>
#include <base/callback.h>
#include <base/files/file_path.h>
#include <metrics/metrics_library.h>
namespace p2p {
namespace server {
// Interface for starting/stopping a HTTP server and getting feedback
// about the number of connected HTTP clients.
class HttpServer {
public:
// Called when number of connections changes
typedef base::Callback<void(int num_connections)> NumConnectionsCallback;
virtual ~HttpServer() = default;
// Statrs the HTTP server.
virtual bool Start() = 0;
// Stops the HTTP server.
virtual bool Stop() = 0;
// Returns true the HTTP has been started.
virtual bool IsRunning() = 0;
// Returns the port number where the HTTP server is listening. A value of 0
// means that the HTTP server is not yet listening on any port.
virtual uint16_t Port() = 0;
// Sets the callback function used for reporting number of connections.
// In order to receive callbacks, you need to run the default
// GLib main-loop.
virtual void SetNumConnectionsCallback(NumConnectionsCallback callback) = 0;
// Creates and initializes a suitable HttpServer instance for
// serving files from |root_dir| on the TCP port given by |port|.
// The passed |bin_dir| directory should contain the http-server executable
// to launch.
// Note that the server will not initially be running; use the Start()
// method to start it.
static HttpServer* Construct(MetricsLibraryInterface* metrics_lib,
const base::FilePath& root_dir,
const base::FilePath& bin_dir,
uint16_t port);
};
} // namespace server
} // namespace p2p
#endif // P2P_SERVER_HTTP_SERVER_H_