- add sources.
[platform/framework/web/crosswalk.git] / src / net / tools / quic / quic_socket_utils.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // Some socket related helper methods for quic.
6
7 #ifndef NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_
8 #define NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_
9
10 #include <stddef.h>
11 #include <sys/socket.h>
12 #include <string>
13
14 #include "net/base/ip_endpoint.h"
15 #include "net/quic/quic_protocol.h"
16
17 namespace net {
18 namespace tools {
19
20 class QuicSocketUtils {
21  public:
22   // If the msghdr contains IP_PKTINFO or IPV6_PKTINFO, this will return the
23   // IPAddressNumber in that header.  Returns an uninitialized IPAddress on
24   // failure.
25   static IPAddressNumber GetAddressFromMsghdr(struct msghdr *hdr);
26
27   // If the msghdr contains an SO_RXQ_OVFL entry, this will set dropped_packets
28   // to the correct value and return true. Otherwise it will return false.
29   static bool GetOverflowFromMsghdr(struct msghdr *hdr, int *dropped_packets);
30
31   // Sets either IP_PKTINFO or IPV6_PKTINFO on the socket, based on
32   // address_family.  Returns the return code from setsockopt.
33   static int SetGetAddressInfo(int fd, int address_family);
34
35   // Reads buf_len from the socket.  If reading is successful, returns bytes
36   // read and sets peer_address to the peer address.  Otherwise returns -1.
37   //
38   // If dropped_packets is non-null, it will be set to the number of packets
39   // dropped on the socket since the socket was created, assuming the kernel
40   // supports this feature.
41   //
42   // If self_address is non-null, it will be set to the address the peer sent
43   // packets to, assuming a packet was read.
44   static int ReadPacket(int fd, char* buffer, size_t buf_len,
45                         int* dropped_packets,
46                         IPAddressNumber* self_address,
47                         IPEndPoint* peer_address);
48
49   // Writes buf_len to the socket. If writing is successful, sets the result's
50   // status to WRITE_STATUS_OK and sets bytes_written.  Otherwise sets the
51   // result's status to WRITE_STATUS_BLOCKED or WRITE_STATUS_ERROR and sets
52   // error_code to errno.
53   static WriteResult WritePacket(int fd, const char* buffer, size_t buf_len,
54                                  const IPAddressNumber& self_address,
55                                  const IPEndPoint& peer_address);
56 };
57
58 }  // namespace tools
59 }  // namespace net
60
61 #endif  // NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_