// Copyright (c) 2012 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 NET_SOCKET_SOCKET_NET_LOG_PARAMS_H_
#define NET_SOCKET_SOCKET_NET_LOG_PARAMS_H_

#include "net/base/net_log.h"
#include "net/base/sys_addrinfo.h"

namespace net {

class HostPortPair;
class IPEndPoint;

// Creates a NetLog callback for socket error events.
NetLog::ParametersCallback CreateNetLogSocketErrorCallback(int net_error,
                                                           int os_error);

// Creates a NetLog callback for a HostPortPair.
// |host_and_port| must remain valid for the lifetime of the returned callback.
NetLog::ParametersCallback CreateNetLogHostPortPairCallback(
    const HostPortPair* host_and_port);

// Creates a NetLog callback for an IPEndPoint.
// |address| must remain valid for the lifetime of the returned callback.
NetLog::ParametersCallback CreateNetLogIPEndPointCallback(
    const IPEndPoint* address);

// Creates a NetLog callback for the source sockaddr on connect events.
// |net_address| must remain valid for the lifetime of the returned callback.
NetLog::ParametersCallback CreateNetLogSourceAddressCallback(
    const struct sockaddr* net_address,
    socklen_t address_len);

}  // namespace net

#endif  // NET_SOCKET_SOCKET_NET_LOG_PARAMS_H_
