//
// Copyright (C) 2015 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#include "shill/icmp_session_factory.h"

#include <memory>

namespace shill {

namespace {
base::LazyInstance<IcmpSessionFactory>::Leaky g_icmp_session_factory =
    LAZY_INSTANCE_INITIALIZER;
}  // namespace

IcmpSessionFactory::IcmpSessionFactory() {}
IcmpSessionFactory::~IcmpSessionFactory() {}

IcmpSessionFactory* IcmpSessionFactory::GetInstance() {
  return g_icmp_session_factory.Pointer();
}

std::unique_ptr<IcmpSession> IcmpSessionFactory::CreateIcmpSession(
    EventDispatcher* dispatcher) {
  return std::make_unique<IcmpSession>(dispatcher);
}

}  // namespace shill
