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_