| // Copyright 2017 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_TAG_H_ |
| #define NET_SOCKET_SOCKET_TAG_H_ |
| |
| #include "build/build_config.h" |
| #include "net/base/net_export.h" |
| #include "net/socket/socket_descriptor.h" |
| |
| #if defined(OS_ANDROID) |
| #include <sys/types.h> |
| #include <unistd.h> |
| |
| #include "starboard/types.h" |
| #endif // OS_ANDROID |
| |
| namespace net { |
| |
| // SocketTag represents a tag that can be applied to a socket. Currently only |
| // implemented for Android, it facilitates assigning a Android TrafficStats tag |
| // and UID to a socket so that future network data usage by the socket is |
| // attributed to the tag and UID that the socket is tagged with. |
| // |
| // This class is small (<=64-bits) and contains only POD to facilitate default |
| // copy and assignment operators so that it can easily be passed by value. |
| class NET_EXPORT SocketTag { |
| public: |
| #if defined(OS_ANDROID) |
| // Default constructor doesn't set any tags. |
| SocketTag() : SocketTag(UNSET_UID, UNSET_TAG) {} |
| // Create a SocketTag with given UID |uid| and |traffic_stats_tag|. |
| SocketTag(uid_t uid, int32_t traffic_stats_tag) |
| : uid_(uid), traffic_stats_tag_(traffic_stats_tag) {} |
| #else |
| SocketTag() {} |
| #endif // OS_ANDROID |
| ~SocketTag() {} |
| |
| bool operator<(const SocketTag& other) const; |
| bool operator==(const SocketTag& other) const; |
| bool operator!=(const SocketTag& other) const { return !(*this == other); } |
| |
| // Apply this tag to |socket|. |
| void Apply(SocketDescriptor socket) const; |
| |
| #if defined(OS_ANDROID) |
| // Values to indicate no UID or tag should be set. These values match those in |
| // Android: |
| // http://androidxref.com/4.4_r1/xref/frameworks/base/core/java/android/net/TrafficStats.java#147 |
| // http://androidxref.com/4.4_r1/xref/frameworks/base/core/java/android/net/TrafficStats.java#169 |
| static const uid_t UNSET_UID = -1; |
| static const int32_t UNSET_TAG = -1; |
| |
| private: |
| // UID to tag with. |
| uid_t uid_; |
| // TrafficStats tag to tag with. |
| int32_t traffic_stats_tag_; |
| #endif // OS_ANDROID |
| // Copying and assignment are allowed. |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_SOCKET_SOCKET_TAG_H_ |