blob: 2986fdcaa8294b76b255e57cade5debfaa1921a4 [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_HTTP_SERVER_SERVER_INTERFACE_H_
#define P2P_HTTP_SERVER_SERVER_INTERFACE_H_
#include <stdint.h>
#include "p2p/common/clock_interface.h"
#include "p2p/common/server_message.h"
#include "p2p/http_server/connection_delegate_interface.h"
namespace p2p {
namespace http_server {
class ServerInterface {
public:
virtual ~ServerInterface() = default;
// Starts the server. Returns false on failure.
virtual bool Start() = 0;
// Stops the server.
//
// Note that it is considered a programming error to delete the
// object without stopping it.
virtual void Stop() = 0;
// Sets the maximum download rate. The special value 0 means there
// is no limit. Note that this is per connection.
virtual void SetMaxDownloadRate(int64_t bytes_per_sec) = 0;
// Gets the port number the server listens on.
virtual uint16_t Port() = 0;
// Gets the current number of connected clients.
virtual int NumConnections() = 0;
// Gets the clock used by the server.
virtual p2p::common::ClockInterface* Clock() = 0;
// Method called in by |delegate|, in its own thread.
virtual void ConnectionTerminated(ConnectionDelegateInterface* delegate) = 0;
// Sends a P2PServerMessage to the stdout. This is used to report various
// metrics and to report the number of current connections. This method is
// thread safe and is intended to be use by the ConnectionDelegates.
virtual void ReportServerMessage(p2p::util::P2PServerMessageType msg_type,
int64_t value) = 0;
};
} // namespace http_server
} // namespace p2p
#endif // P2P_HTTP_SERVER_SERVER_INTERFACE_H_