// Copyright 2015 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.

#ifndef MOJO_SERVICES_NETWORK_HTTP_SERVER_IMPL_H_
#define MOJO_SERVICES_NETWORK_HTTP_SERVER_IMPL_H_

#include <map>

#include "base/macros.h"
#include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h"
#include "mojo/services/network/interfaces/http_server.mojom.h"
#include "mojo/services/network/interfaces/net_address.mojom.h"
#include "net/server/http_server.h"

namespace net {
class HttpServer;
}

namespace mojo {

class HttpConnectionImpl;

class HttpServerImpl : public net::HttpServer::Delegate {
 public:
  static void Create(
      NetAddressPtr local_address,
      InterfaceHandle<HttpServerDelegate> delegate,
      const Callback<void(NetworkErrorPtr, NetAddressPtr)>& callback);

  net::HttpServer* server() { return server_.get(); }

 private:
  // The lifetime of the returned HttpServerImpl object is bound to that of
  // |delegate|'s underlying pipe. The object will self-destruct when it is
  // notified that |delegate|'s pipe is closed. Deleting the object directly
  // before that is okay, too.
  explicit HttpServerImpl(InterfaceHandle<HttpServerDelegate> delegate);
  virtual ~HttpServerImpl();

  int Start(NetAddressPtr local_address);
  NetAddressPtr GetLocalAddress() const;

  // net::HttpServer::Delegate implementation.
  void OnConnect(int connection_id) override;
  void OnHttpRequest(int connection_id,
                     const net::HttpServerRequestInfo& info) override;
  void OnWebSocketRequest(int connection_id,
                          const net::HttpServerRequestInfo& info) override;
  void OnWebSocketMessage(int connection_id, const std::string& data) override;
  void OnClose(int connection_id) override;

  HttpServerDelegatePtr delegate_;
  scoped_ptr<net::HttpServer> server_;

  std::map<int, linked_ptr<HttpConnectionImpl>> connections_;

  DISALLOW_COPY_AND_ASSIGN(HttpServerImpl);
};

}  // namespace mojo

#endif  // MOJO_SERVICES_NETWORK_HTTP_SERVER_IMPL_H_
