OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // Some socket related helper methods for quic. | 5 // Some socket related helper methods for quic. |
6 | 6 |
7 #ifndef NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_ | 7 #ifndef NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_ |
8 #define NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_ | 8 #define NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_ |
9 | 9 |
10 #include <stddef.h> | 10 #include <stddef.h> |
11 #include <sys/socket.h> | 11 #include <sys/socket.h> |
12 #include <string> | 12 #include <string> |
13 | 13 |
14 #include "base/basictypes.h" | 14 #include "base/basictypes.h" |
15 #include "net/base/ip_endpoint.h" | 15 #include "net/base/ip_endpoint.h" |
| 16 #include "net/quic/quic_bandwidth.h" |
16 #include "net/quic/quic_types.h" | 17 #include "net/quic/quic_types.h" |
17 | 18 |
18 namespace net { | 19 namespace net { |
19 namespace tools { | 20 namespace tools { |
20 | 21 |
21 class QuicSocketUtils { | 22 class QuicSocketUtils { |
22 public: | 23 public: |
23 // If the msghdr contains IP_PKTINFO or IPV6_PKTINFO, this will return the | 24 // If the msghdr contains IP_PKTINFO or IPV6_PKTINFO, this will return the |
24 // IPAddressNumber in that header. Returns an uninitialized IPAddress on | 25 // IPAddressNumber in that header. Returns an uninitialized IPAddress on |
25 // failure. | 26 // failure. |
26 static IPAddressNumber GetAddressFromMsghdr(struct msghdr *hdr); | 27 static IPAddressNumber GetAddressFromMsghdr(struct msghdr *hdr); |
27 | 28 |
28 // If the msghdr contains an SO_RXQ_OVFL entry, this will set dropped_packets | 29 // If the msghdr contains an SO_RXQ_OVFL entry, this will set dropped_packets |
29 // to the correct value and return true. Otherwise it will return false. | 30 // to the correct value and return true. Otherwise it will return false. |
30 static bool GetOverflowFromMsghdr(struct msghdr *hdr, | 31 static bool GetOverflowFromMsghdr(struct msghdr *hdr, |
31 uint32 *dropped_packets); | 32 QuicPacketCount *dropped_packets); |
32 | 33 |
33 // Sets either IP_PKTINFO or IPV6_PKTINFO on the socket, based on | 34 // Sets either IP_PKTINFO or IPV6_PKTINFO on the socket, based on |
34 // address_family. Returns the return code from setsockopt. | 35 // address_family. Returns the return code from setsockopt. |
35 static int SetGetAddressInfo(int fd, int address_family); | 36 static int SetGetAddressInfo(int fd, int address_family); |
36 | 37 |
37 // Sets the send buffer size to |size| and returns false if it fails. | 38 // Sets the send buffer size to |size| and returns false if it fails. |
38 static bool SetSendBufferSize(int fd, size_t size); | 39 static bool SetSendBufferSize(int fd, size_t size); |
39 | 40 |
40 // Sets the receive buffer size to |size| and returns false if it fails. | 41 // Sets the receive buffer size to |size| and returns false if it fails. |
41 static bool SetReceiveBufferSize(int fd, size_t size); | 42 static bool SetReceiveBufferSize(int fd, size_t size); |
42 | 43 |
43 // Reads buf_len from the socket. If reading is successful, returns bytes | 44 // Reads buf_len from the socket. If reading is successful, returns bytes |
44 // read and sets peer_address to the peer address. Otherwise returns -1. | 45 // read and sets peer_address to the peer address. Otherwise returns -1. |
45 // | 46 // |
46 // If dropped_packets is non-null, it will be set to the number of packets | 47 // If dropped_packets is non-null, it will be set to the number of packets |
47 // dropped on the socket since the socket was created, assuming the kernel | 48 // dropped on the socket since the socket was created, assuming the kernel |
48 // supports this feature. | 49 // supports this feature. |
49 // | 50 // |
50 // If self_address is non-null, it will be set to the address the peer sent | 51 // If self_address is non-null, it will be set to the address the peer sent |
51 // packets to, assuming a packet was read. | 52 // packets to, assuming a packet was read. |
52 static int ReadPacket(int fd, | 53 static int ReadPacket(int fd, |
53 char* buffer, | 54 char* buffer, |
54 size_t buf_len, | 55 size_t buf_len, |
55 uint32* dropped_packets, | 56 QuicPacketCount* dropped_packets, |
56 IPAddressNumber* self_address, | 57 IPAddressNumber* self_address, |
57 IPEndPoint* peer_address); | 58 IPEndPoint* peer_address); |
58 | 59 |
59 // Writes buf_len to the socket. If writing is successful, sets the result's | 60 // Writes buf_len to the socket. If writing is successful, sets the result's |
60 // status to WRITE_STATUS_OK and sets bytes_written. Otherwise sets the | 61 // status to WRITE_STATUS_OK and sets bytes_written. Otherwise sets the |
61 // result's status to WRITE_STATUS_BLOCKED or WRITE_STATUS_ERROR and sets | 62 // result's status to WRITE_STATUS_BLOCKED or WRITE_STATUS_ERROR and sets |
62 // error_code to errno. | 63 // error_code to errno. |
63 static WriteResult WritePacket(int fd, | 64 static WriteResult WritePacket(int fd, |
64 const char* buffer, | 65 const char* buffer, |
65 size_t buf_len, | 66 size_t buf_len, |
66 const IPAddressNumber& self_address, | 67 const IPAddressNumber& self_address, |
67 const IPEndPoint& peer_address); | 68 const IPEndPoint& peer_address); |
68 | 69 |
69 // A helper for WritePacket which fills in the cmsg with the supplied self | 70 // A helper for WritePacket which fills in the cmsg with the supplied self |
70 // address. | 71 // address. |
71 // Returns the length of the packet info structure used. | 72 // Returns the length of the packet info structure used. |
72 static size_t SetIpInfoInCmsg(const IPAddressNumber& self_address, | 73 static size_t SetIpInfoInCmsg(const IPAddressNumber& self_address, |
73 cmsghdr* cmsg); | 74 cmsghdr* cmsg); |
74 | 75 |
75 private: | 76 private: |
76 DISALLOW_COPY_AND_ASSIGN(QuicSocketUtils); | 77 DISALLOW_COPY_AND_ASSIGN(QuicSocketUtils); |
77 }; | 78 }; |
78 | 79 |
79 } // namespace tools | 80 } // namespace tools |
80 } // namespace net | 81 } // namespace net |
81 | 82 |
82 #endif // NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_ | 83 #endif // NET_TOOLS_QUIC_QUIC_SOCKET_UTILS_H_ |
OLD | NEW |