tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

DashboardTypes.h (8316B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #ifndef mozilla_net_DashboardTypes_h_
      6 #define mozilla_net_DashboardTypes_h_
      7 
      8 #include "ipc/IPCMessageUtils.h"
      9 #include "ipc/IPCMessageUtilsSpecializations.h"
     10 #include "nsHttp.h"
     11 #include "nsString.h"
     12 #include "nsTArray.h"
     13 
     14 namespace mozilla {
     15 namespace net {
     16 
     17 struct SocketInfo {
     18  nsCString host;
     19  uint64_t sent;
     20  uint64_t received;
     21  uint16_t port;
     22  bool active;
     23  nsCString type;
     24 };
     25 
     26 inline bool operator==(const SocketInfo& a, const SocketInfo& b) {
     27  return a.host == b.host && a.sent == b.sent && a.received == b.received &&
     28         a.port == b.port && a.active == b.active && a.type == b.type;
     29 }
     30 
     31 struct DnsAndConnectSockets {
     32  bool speculative;
     33 };
     34 
     35 struct DNSCacheEntries {
     36  nsCString hostname;
     37  nsTArray<nsCString> hostaddr;
     38  uint16_t family{0};
     39  int64_t expiration{0};
     40  bool TRR{false};
     41  nsCString originAttributesSuffix;
     42  nsCString flags;
     43  uint16_t resolveType{0};
     44 };
     45 
     46 struct HttpConnInfo {
     47  uint32_t ttl;
     48  uint32_t rtt;
     49  nsString protocolVersion;
     50 
     51  void SetHTTPProtocolVersion(HttpVersion pv);
     52 };
     53 
     54 struct HttpRetParams {
     55  nsCString host;
     56  CopyableTArray<HttpConnInfo> active;
     57  CopyableTArray<HttpConnInfo> idle;
     58  CopyableTArray<DnsAndConnectSockets> dnsAndSocks;
     59  uint32_t counter;
     60  uint16_t port;
     61  nsCString httpVersion;
     62  bool ssl;
     63 };
     64 
     65 struct Http3ConnStats {
     66  // Total packets received, including all the bad ones.
     67  uint64_t packetsRx;
     68  // Duplicate packets received.
     69  uint64_t dupsRx;
     70  // Dropped packets or dropped garbage.
     71  uint64_t droppedRx;
     72  // The number of packet that were saved for later processing.
     73  uint64_t savedDatagrams;
     74  // Total packets sent.
     75  uint64_t packetsTx;
     76  // Total number of packets that are declared lost.
     77  uint64_t lost;
     78  // Late acknowledgments, for packets that were declared lost already.
     79  uint64_t lateAck;
     80  // Acknowledgments for packets that contained data that was marked
     81  // for retransmission when the PTO timer popped.
     82  uint64_t ptoAck;
     83  // Count PTOs. Single PTOs, 2 PTOs in a row, 3 PTOs in row, etc. are counted
     84  // separately.
     85  CopyableTArray<uint64_t> ptoCounts;
     86  // The count of WouldBlock errors encountered during receive operations.
     87  uint64_t wouldBlockRx;
     88  // The count of WouldBlock errors encountered during transmit operations.
     89  uint64_t wouldBlockTx;
     90 };
     91 
     92 struct Http3ConnectionStatsParams {
     93  nsCString host;
     94  uint16_t port;
     95  CopyableTArray<Http3ConnStats> stats;
     96 };
     97 
     98 }  // namespace net
     99 }  // namespace mozilla
    100 
    101 namespace IPC {
    102 
    103 template <>
    104 struct ParamTraits<mozilla::net::SocketInfo> {
    105  typedef mozilla::net::SocketInfo paramType;
    106 
    107  static void Write(MessageWriter* aWriter, const paramType& aParam) {
    108    WriteParam(aWriter, aParam.host);
    109    WriteParam(aWriter, aParam.sent);
    110    WriteParam(aWriter, aParam.received);
    111    WriteParam(aWriter, aParam.port);
    112    WriteParam(aWriter, aParam.active);
    113    WriteParam(aWriter, aParam.type);
    114  }
    115 
    116  static bool Read(MessageReader* aReader, paramType* aResult) {
    117    return ReadParam(aReader, &aResult->host) &&
    118           ReadParam(aReader, &aResult->sent) &&
    119           ReadParam(aReader, &aResult->received) &&
    120           ReadParam(aReader, &aResult->port) &&
    121           ReadParam(aReader, &aResult->active) &&
    122           ReadParam(aReader, &aResult->type);
    123  }
    124 };
    125 
    126 template <>
    127 struct ParamTraits<mozilla::net::DNSCacheEntries> {
    128  typedef mozilla::net::DNSCacheEntries paramType;
    129 
    130  static void Write(MessageWriter* aWriter, const paramType& aParam) {
    131    WriteParam(aWriter, aParam.hostname);
    132    WriteParam(aWriter, aParam.hostaddr);
    133    WriteParam(aWriter, aParam.family);
    134    WriteParam(aWriter, aParam.expiration);
    135    WriteParam(aWriter, aParam.TRR);
    136    WriteParam(aWriter, aParam.originAttributesSuffix);
    137    WriteParam(aWriter, aParam.flags);
    138    WriteParam(aWriter, aParam.resolveType);
    139  }
    140 
    141  static bool Read(MessageReader* aReader, paramType* aResult) {
    142    return ReadParam(aReader, &aResult->hostname) &&
    143           ReadParam(aReader, &aResult->hostaddr) &&
    144           ReadParam(aReader, &aResult->family) &&
    145           ReadParam(aReader, &aResult->expiration) &&
    146           ReadParam(aReader, &aResult->TRR) &&
    147           ReadParam(aReader, &aResult->originAttributesSuffix) &&
    148           ReadParam(aReader, &aResult->flags) &&
    149           ReadParam(aReader, &aResult->resolveType);
    150  }
    151 };
    152 
    153 template <>
    154 struct ParamTraits<mozilla::net::DnsAndConnectSockets> {
    155  typedef mozilla::net::DnsAndConnectSockets paramType;
    156 
    157  static void Write(MessageWriter* aWriter, const paramType& aParam) {
    158    WriteParam(aWriter, aParam.speculative);
    159  }
    160 
    161  static bool Read(MessageReader* aReader, paramType* aResult) {
    162    return ReadParam(aReader, &aResult->speculative);
    163  }
    164 };
    165 
    166 template <>
    167 struct ParamTraits<mozilla::net::HttpConnInfo> {
    168  typedef mozilla::net::HttpConnInfo paramType;
    169 
    170  static void Write(MessageWriter* aWriter, const paramType& aParam) {
    171    WriteParam(aWriter, aParam.ttl);
    172    WriteParam(aWriter, aParam.rtt);
    173    WriteParam(aWriter, aParam.protocolVersion);
    174  }
    175 
    176  static bool Read(MessageReader* aReader, paramType* aResult) {
    177    return ReadParam(aReader, &aResult->ttl) &&
    178           ReadParam(aReader, &aResult->rtt) &&
    179           ReadParam(aReader, &aResult->protocolVersion);
    180  }
    181 };
    182 
    183 template <>
    184 struct ParamTraits<mozilla::net::HttpRetParams> {
    185  typedef mozilla::net::HttpRetParams paramType;
    186 
    187  static void Write(MessageWriter* aWriter, const paramType& aParam) {
    188    WriteParam(aWriter, aParam.host);
    189    WriteParam(aWriter, aParam.active);
    190    WriteParam(aWriter, aParam.idle);
    191    WriteParam(aWriter, aParam.dnsAndSocks);
    192    WriteParam(aWriter, aParam.counter);
    193    WriteParam(aWriter, aParam.port);
    194    WriteParam(aWriter, aParam.httpVersion);
    195    WriteParam(aWriter, aParam.ssl);
    196  }
    197 
    198  static bool Read(MessageReader* aReader, paramType* aResult) {
    199    return ReadParam(aReader, &aResult->host) &&
    200           ReadParam(aReader, &aResult->active) &&
    201           ReadParam(aReader, &aResult->idle) &&
    202           ReadParam(aReader, &aResult->dnsAndSocks) &&
    203           ReadParam(aReader, &aResult->counter) &&
    204           ReadParam(aReader, &aResult->port) &&
    205           ReadParam(aReader, &aResult->httpVersion) &&
    206           ReadParam(aReader, &aResult->ssl);
    207  }
    208 };
    209 
    210 template <>
    211 struct ParamTraits<mozilla::net::Http3ConnStats> {
    212  typedef mozilla::net::Http3ConnStats paramType;
    213 
    214  static void Write(MessageWriter* aWriter, const paramType& aParam) {
    215    WriteParam(aWriter, aParam.packetsRx);
    216    WriteParam(aWriter, aParam.dupsRx);
    217    WriteParam(aWriter, aParam.droppedRx);
    218    WriteParam(aWriter, aParam.savedDatagrams);
    219    WriteParam(aWriter, aParam.packetsTx);
    220    WriteParam(aWriter, aParam.lost);
    221    WriteParam(aWriter, aParam.lateAck);
    222    WriteParam(aWriter, aParam.ptoAck);
    223    WriteParam(aWriter, aParam.ptoCounts);
    224    WriteParam(aWriter, aParam.wouldBlockRx);
    225    WriteParam(aWriter, aParam.wouldBlockTx);
    226  }
    227 
    228  static bool Read(MessageReader* aReader, paramType* aResult) {
    229    return ReadParam(aReader, &aResult->packetsRx) &&
    230           ReadParam(aReader, &aResult->dupsRx) &&
    231           ReadParam(aReader, &aResult->droppedRx) &&
    232           ReadParam(aReader, &aResult->savedDatagrams) &&
    233           ReadParam(aReader, &aResult->packetsTx) &&
    234           ReadParam(aReader, &aResult->lost) &&
    235           ReadParam(aReader, &aResult->lateAck) &&
    236           ReadParam(aReader, &aResult->ptoAck) &&
    237           ReadParam(aReader, &aResult->ptoCounts) &&
    238           ReadParam(aReader, &aResult->wouldBlockRx) &&
    239           ReadParam(aReader, &aResult->wouldBlockTx);
    240  }
    241 };
    242 
    243 template <>
    244 struct ParamTraits<mozilla::net::Http3ConnectionStatsParams> {
    245  typedef mozilla::net::Http3ConnectionStatsParams paramType;
    246 
    247  static void Write(MessageWriter* aWriter, const paramType& aParam) {
    248    WriteParam(aWriter, aParam.host);
    249    WriteParam(aWriter, aParam.port);
    250    WriteParam(aWriter, aParam.stats);
    251  }
    252 
    253  static bool Read(MessageReader* aReader, paramType* aResult) {
    254    return ReadParam(aReader, &aResult->host) &&
    255           ReadParam(aReader, &aResult->port) &&
    256           ReadParam(aReader, &aResult->stats);
    257  }
    258 };
    259 
    260 }  // namespace IPC
    261 
    262 #endif  // mozilla_net_DashboardTypes_h_