// Copyright (c) 2008 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.

#include "net/ftp/ftp_network_layer.h"

#include "net/ftp/ftp_network_session.h"
#include "net/ftp/ftp_network_transaction.h"
#include "net/socket/client_socket_factory.h"

namespace net {

FtpNetworkLayer::FtpNetworkLayer(HostResolver* host_resolver)
    : session_(new FtpNetworkSession(host_resolver)),
      suspended_(false) {
}

FtpNetworkLayer::~FtpNetworkLayer() {
}

// static
FtpTransactionFactory* FtpNetworkLayer::CreateFactory(
    HostResolver* host_resolver) {
  return new FtpNetworkLayer(host_resolver);
}

FtpTransaction* FtpNetworkLayer::CreateTransaction() {
  if (suspended_)
    return NULL;

  return new FtpNetworkTransaction(session_.get(),
                                   ClientSocketFactory::GetDefaultFactory());
}

void FtpNetworkLayer::Suspend(bool suspend) {
  suspended_ = suspend;

  /* TODO(darin): We'll need this code once we have a connection manager.
  if (suspend)
    session_->connection_manager()->CloseIdleSockets();
  */
}

}  // namespace net
