1 // 2 // Copyright (C) 2013 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #ifndef SHILL_SOCKET_INFO_H_ 18 #define SHILL_SOCKET_INFO_H_ 19 20 #include <base/macros.h> 21 22 #include "shill/net/ip_address.h" 23 24 namespace shill { 25 26 class SocketInfo { 27 public: 28 // These connection states (except kConnectionStateUnknown and 29 // kConnectionStateMax) are equivalent to and should be kept in sync with 30 // those defined in kernel/inlude/net/tcp_states.h 31 enum ConnectionState { 32 kConnectionStateUnknown = -1, 33 kConnectionStateEstablished = 1, 34 kConnectionStateSynSent, 35 kConnectionStateSynRecv, 36 kConnectionStateFinWait1, 37 kConnectionStateFinWait2, 38 kConnectionStateTimeWait, 39 kConnectionStateClose, 40 kConnectionStateCloseWait, 41 kConnectionStateLastAck, 42 kConnectionStateListen, 43 kConnectionStateClosing, 44 kConnectionStateMax, 45 }; 46 47 // These timer states (except kTimerStateUnknown and kTimerStateMax) are 48 // equivalent to and should be kept in sync with those specified in 49 // kernel/Documentation/networking/proc_net_tcp.txt 50 enum TimerState { 51 kTimerStateUnknown = -1, 52 kTimerStateNoTimerPending = 0, 53 kTimerStateRetransmitTimerPending, 54 kTimerStateAnotherTimerPending, 55 kTimerStateInTimeWaitState, 56 kTimerStateZeroWindowProbeTimerPending, 57 kTimerStateMax, 58 }; 59 60 SocketInfo(); 61 SocketInfo(ConnectionState connection_state, 62 const IPAddress& local_ip_address, 63 uint16_t local_port, 64 const IPAddress& remote_ip_address, 65 uint16_t remote_port, 66 uint64_t transmit_queue_value, 67 uint64_t receive_queue_value, 68 TimerState timer_state); 69 SocketInfo(const SocketInfo& socket_info); 70 ~SocketInfo(); 71 72 SocketInfo& operator=(const SocketInfo& socket_info); 73 74 // Returns true if this socket info and |socket_info| refer to the same 75 // socket, i.e. both have the same local address, local port, remote address, 76 // and remote port. 77 bool IsSameSocketAs(const SocketInfo& socket_info) const; 78 connection_state()79 ConnectionState connection_state() const { return connection_state_; } set_connection_state(ConnectionState connection_state)80 void set_connection_state(ConnectionState connection_state) { 81 connection_state_ = connection_state; 82 } 83 local_ip_address()84 const IPAddress& local_ip_address() const { return local_ip_address_; } set_local_ip_address(const IPAddress & local_ip_address)85 void set_local_ip_address(const IPAddress& local_ip_address) { 86 local_ip_address_ = local_ip_address; 87 } 88 local_port()89 uint16_t local_port() const { return local_port_; } set_local_port(uint16_t local_port)90 void set_local_port(uint16_t local_port) { local_port_ = local_port; } 91 remote_ip_address()92 const IPAddress& remote_ip_address() const { return remote_ip_address_; } set_remote_ip_address(const IPAddress & remote_ip_address)93 void set_remote_ip_address(const IPAddress& remote_ip_address) { 94 remote_ip_address_ = remote_ip_address; 95 } 96 remote_port()97 uint16_t remote_port() const { return remote_port_; } set_remote_port(uint16_t remote_port)98 void set_remote_port(uint16_t remote_port) { remote_port_ = remote_port; } 99 transmit_queue_value()100 uint64_t transmit_queue_value() const { return transmit_queue_value_; } set_transmit_queue_value(uint64_t transmit_queue_value)101 void set_transmit_queue_value(uint64_t transmit_queue_value) { 102 transmit_queue_value_ = transmit_queue_value; 103 } 104 receive_queue_value()105 uint64_t receive_queue_value() const { return receive_queue_value_; } set_receive_queue_value(uint64_t receive_queue_value)106 void set_receive_queue_value(uint64_t receive_queue_value) { 107 receive_queue_value_ = receive_queue_value; 108 } 109 timer_state()110 TimerState timer_state() const { return timer_state_; } set_timer_state(TimerState timer_state)111 void set_timer_state(TimerState timer_state) { timer_state_ = timer_state; } 112 113 private: 114 ConnectionState connection_state_; 115 IPAddress local_ip_address_; 116 uint16_t local_port_; 117 IPAddress remote_ip_address_; 118 uint16_t remote_port_; 119 uint64_t transmit_queue_value_; 120 uint64_t receive_queue_value_; 121 TimerState timer_state_; 122 123 // No DISALLOW_COPY_AND_ASSIGN(SocketInfo) as SocketInfo needs to be kept in 124 // STL containers. 125 }; 126 127 } // namespace shill 128 129 #endif // SHILL_SOCKET_INFO_H_ 130