blob: d8d217274893120315eddb33cb771f44ea05a7c8 [file] [log] [blame]
// Copyright 2014 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.
// This file defines some basic types used by the P2P-related IPC
// messages.
#ifndef CONTENT_COMMON_P2P_SOCKET_TYPE_H_
#define CONTENT_COMMON_P2P_SOCKET_TYPE_H_
#include <stdint.h>
#include <string>
#include "base/time/time.h"
#include "net/base/ip_endpoint.h"
namespace content {
enum P2PSocketOption {
P2P_SOCKET_OPT_RCVBUF, // Receive buffer size.
P2P_SOCKET_OPT_SNDBUF, // Send buffer size.
P2P_SOCKET_OPT_DSCP, // DSCP code.
P2P_SOCKET_OPT_MAX
};
// Type of P2P Socket.
enum P2PSocketType {
P2P_SOCKET_UDP,
P2P_SOCKET_TCP_SERVER,
P2P_SOCKET_STUN_TCP_SERVER,
P2P_SOCKET_TCP_CLIENT,
P2P_SOCKET_STUN_TCP_CLIENT,
P2P_SOCKET_SSLTCP_CLIENT,
P2P_SOCKET_STUN_SSLTCP_CLIENT,
P2P_SOCKET_TLS_CLIENT,
P2P_SOCKET_STUN_TLS_CLIENT,
P2P_SOCKET_TYPE_LAST = P2P_SOCKET_STUN_TLS_CLIENT
};
// Struct which carries both resolved IP address and host string literal.
// Port number will be part of |ip_address|.
struct P2PHostAndIPEndPoint {
P2PHostAndIPEndPoint() {}
P2PHostAndIPEndPoint(const std::string& hostname,
const net::IPEndPoint& ip_address)
: hostname(hostname), ip_address(ip_address) {
}
std::string hostname;
net::IPEndPoint ip_address;
};
// Struct which keeps track of metrics during a send operation on P2P sockets.
struct P2PSendPacketMetrics {
P2PSendPacketMetrics() {}
P2PSendPacketMetrics(uint64_t packet_id,
int32_t rtc_packet_id,
base::TimeTicks send_time)
: packet_id(packet_id),
rtc_packet_id(rtc_packet_id),
send_time(send_time) {}
uint64_t packet_id = 0;
// rtc_packet_id is a sequential packet counter written in the RTP header and
// used by RTP receivers to ACK received packets. It is sent back with a
// corresponding send time to WebRTC in the browser process so that it can be
// combined with ACKs to compute inter-packet delay variations.
int32_t rtc_packet_id = -1;
base::TimeTicks send_time;
};
// Struct that carries a port range.
struct P2PPortRange {
P2PPortRange() : P2PPortRange(0, 0) {}
P2PPortRange(uint16_t min_port, uint16_t max_port)
: min_port(min_port), max_port(max_port) {
DCHECK_LE(min_port, max_port);
DCHECK((min_port == 0 && max_port == 0) || min_port > 0);
}
uint16_t min_port;
uint16_t max_port;
};
} // namespace content
#endif // CONTENT_COMMON_P2P_SOCKET_TYPE_H_