Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: net/tools/quic/quic_client_base.h

Issue 2740453006: Add QuicStringPiece which is actually StringPiece. (Closed)
Patch Set: fix compile error and rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/tools/quic/quic_client.cc ('k') | net/tools/quic/quic_client_base.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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 // A base class for the toy client, which connects to a specified port and sends 5 // A base class for the toy client, which connects to a specified port and sends
6 // QUIC request to that endpoint. 6 // QUIC request to that endpoint.
7 7
8 #ifndef NET_TOOLS_QUIC_QUIC_CLIENT_BASE_H_ 8 #ifndef NET_TOOLS_QUIC_QUIC_CLIENT_BASE_H_
9 #define NET_TOOLS_QUIC_QUIC_CLIENT_BASE_H_ 9 #define NET_TOOLS_QUIC_QUIC_CLIENT_BASE_H_
10 10
11 #include <string> 11 #include <string>
12 12
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "net/quic/core/crypto/crypto_handshake.h" 14 #include "net/quic/core/crypto/crypto_handshake.h"
15 #include "net/quic/core/quic_client_push_promise_index.h" 15 #include "net/quic/core/quic_client_push_promise_index.h"
16 #include "net/quic/core/quic_config.h" 16 #include "net/quic/core/quic_config.h"
17 #include "net/quic/platform/api/quic_socket_address.h" 17 #include "net/quic/platform/api/quic_socket_address.h"
18 #include "net/quic/platform/api/quic_string_piece.h"
18 #include "net/tools/quic/quic_client_session.h" 19 #include "net/tools/quic/quic_client_session.h"
19 #include "net/tools/quic/quic_spdy_client_stream.h" 20 #include "net/tools/quic/quic_spdy_client_stream.h"
20 21
21 namespace net { 22 namespace net {
22 23
23 class ProofVerifier; 24 class ProofVerifier;
24 class QuicServerId; 25 class QuicServerId;
25 26
26 class QuicClientBase : public QuicClientPushPromiseIndex::Delegate, 27 class QuicClientBase : public QuicClientPushPromiseIndex::Delegate,
27 public QuicSpdyStream::Visitor { 28 public QuicSpdyStream::Visitor {
(...skipping 12 matching lines...) Expand all
40 // receipt of a stateless reject. Recall that the client API allows callers 41 // receipt of a stateless reject. Recall that the client API allows callers
41 // to optimistically send data to the server prior to handshake-confirmation. 42 // to optimistically send data to the server prior to handshake-confirmation.
42 // If the client subsequently receives a stateless reject, it must tear down 43 // If the client subsequently receives a stateless reject, it must tear down
43 // its existing session, create a new session, and resend all previously sent 44 // its existing session, create a new session, and resend all previously sent
44 // data. It uses these objects to keep track of all the sent data, and to 45 // data. It uses these objects to keep track of all the sent data, and to
45 // resend the data upon a subsequent connection. 46 // resend the data upon a subsequent connection.
46 class QuicDataToResend { 47 class QuicDataToResend {
47 public: 48 public:
48 // |headers| may be null, since it's possible to send data without headers. 49 // |headers| may be null, since it's possible to send data without headers.
49 QuicDataToResend(std::unique_ptr<SpdyHeaderBlock> headers, 50 QuicDataToResend(std::unique_ptr<SpdyHeaderBlock> headers,
50 base::StringPiece body, 51 QuicStringPiece body,
51 bool fin); 52 bool fin);
52 53
53 virtual ~QuicDataToResend(); 54 virtual ~QuicDataToResend();
54 55
55 // Must be overridden by specific classes with the actual method for 56 // Must be overridden by specific classes with the actual method for
56 // re-sending data. 57 // re-sending data.
57 virtual void Resend() = 0; 58 virtual void Resend() = 0;
58 59
59 protected: 60 protected:
60 std::unique_ptr<SpdyHeaderBlock> headers_; 61 std::unique_ptr<SpdyHeaderBlock> headers_;
61 base::StringPiece body_; 62 QuicStringPiece body_;
62 bool fin_; 63 bool fin_;
63 64
64 private: 65 private:
65 DISALLOW_COPY_AND_ASSIGN(QuicDataToResend); 66 DISALLOW_COPY_AND_ASSIGN(QuicDataToResend);
66 }; 67 };
67 68
68 QuicClientBase(const QuicServerId& server_id, 69 QuicClientBase(const QuicServerId& server_id,
69 const QuicVersionVector& supported_versions, 70 const QuicVersionVector& supported_versions,
70 const QuicConfig& config, 71 const QuicConfig& config,
71 QuicConnectionHelperInterface* helper, 72 QuicConnectionHelperInterface* helper,
(...skipping 22 matching lines...) Expand all
94 // Disconnects from the QUIC server. 95 // Disconnects from the QUIC server.
95 void Disconnect(); 96 void Disconnect();
96 97
97 // Returns true if the crypto handshake has yet to establish encryption. 98 // Returns true if the crypto handshake has yet to establish encryption.
98 // Returns false if encryption is active (even if the server hasn't confirmed 99 // Returns false if encryption is active (even if the server hasn't confirmed
99 // the handshake) or if the connection has been closed. 100 // the handshake) or if the connection has been closed.
100 bool EncryptionBeingEstablished(); 101 bool EncryptionBeingEstablished();
101 102
102 // Sends an HTTP request and does not wait for response before returning. 103 // Sends an HTTP request and does not wait for response before returning.
103 void SendRequest(const SpdyHeaderBlock& headers, 104 void SendRequest(const SpdyHeaderBlock& headers,
104 base::StringPiece body, 105 QuicStringPiece body,
105 bool fin); 106 bool fin);
106 107
107 // Sends an HTTP request and waits for response before returning. 108 // Sends an HTTP request and waits for response before returning.
108 void SendRequestAndWaitForResponse(const SpdyHeaderBlock& headers, 109 void SendRequestAndWaitForResponse(const SpdyHeaderBlock& headers,
109 base::StringPiece body, 110 QuicStringPiece body,
110 bool fin); 111 bool fin);
111 112
112 // Sends a request simple GET for each URL in |url_list|, and then waits for 113 // Sends a request simple GET for each URL in |url_list|, and then waits for
113 // each to complete. 114 // each to complete.
114 void SendRequestsAndWaitForResponse(const std::vector<std::string>& url_list); 115 void SendRequestsAndWaitForResponse(const std::vector<std::string>& url_list);
115 116
116 // Returns a newly created QuicSpdyClientStream, owned by the 117 // Returns a newly created QuicSpdyClientStream, owned by the
117 // QuicSimpleClient. 118 // QuicSimpleClient.
118 virtual QuicSpdyClientStream* CreateClientStream(); 119 virtual QuicSpdyClientStream* CreateClientStream();
119 120
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 QuicConnectionId GetNextServerDesignatedConnectionId(); 315 QuicConnectionId GetNextServerDesignatedConnectionId();
315 316
316 // Generates a new, random connection ID (as opposed to a server-designated 317 // Generates a new, random connection ID (as opposed to a server-designated
317 // connection ID). 318 // connection ID).
318 virtual QuicConnectionId GenerateNewConnectionId(); 319 virtual QuicConnectionId GenerateNewConnectionId();
319 320
320 // If the crypto handshake has not yet been confirmed, adds the data to the 321 // If the crypto handshake has not yet been confirmed, adds the data to the
321 // queue of data to resend if the client receives a stateless reject. 322 // queue of data to resend if the client receives a stateless reject.
322 // Otherwise, deletes the data. 323 // Otherwise, deletes the data.
323 void MaybeAddDataToResend(const SpdyHeaderBlock& headers, 324 void MaybeAddDataToResend(const SpdyHeaderBlock& headers,
324 base::StringPiece body, 325 QuicStringPiece body,
325 bool fin); 326 bool fin);
326 327
327 void ClearDataToResend(); 328 void ClearDataToResend();
328 329
329 void ResendSavedData(); 330 void ResendSavedData();
330 331
331 void AddPromiseDataToResend(const SpdyHeaderBlock& headers, 332 void AddPromiseDataToResend(const SpdyHeaderBlock& headers,
332 base::StringPiece body, 333 QuicStringPiece body,
333 bool fin); 334 bool fin);
334 335
335 QuicConnectionHelperInterface* helper() { return helper_.get(); } 336 QuicConnectionHelperInterface* helper() { return helper_.get(); }
336 337
337 QuicAlarmFactory* alarm_factory() { return alarm_factory_.get(); } 338 QuicAlarmFactory* alarm_factory() { return alarm_factory_.get(); }
338 339
339 void set_num_sent_client_hellos(int num_sent_client_hellos) { 340 void set_num_sent_client_hellos(int num_sent_client_hellos) {
340 num_sent_client_hellos_ = num_sent_client_hellos; 341 num_sent_client_hellos_ = num_sent_client_hellos;
341 } 342 }
342 343
343 void set_num_stateless_rejects_received(int num_stateless_rejects_received) { 344 void set_num_stateless_rejects_received(int num_stateless_rejects_received) {
344 num_stateless_rejects_received_ = num_stateless_rejects_received; 345 num_stateless_rejects_received_ = num_stateless_rejects_received;
345 } 346 }
346 347
347 private: 348 private:
348 // Specific QuicClient class for storing data to resend. 349 // Specific QuicClient class for storing data to resend.
349 class ClientQuicDataToResend : public QuicDataToResend { 350 class ClientQuicDataToResend : public QuicDataToResend {
350 public: 351 public:
351 ClientQuicDataToResend(std::unique_ptr<SpdyHeaderBlock> headers, 352 ClientQuicDataToResend(std::unique_ptr<SpdyHeaderBlock> headers,
352 base::StringPiece body, 353 QuicStringPiece body,
353 bool fin, 354 bool fin,
354 QuicClientBase* client) 355 QuicClientBase* client)
355 : QuicDataToResend(std::move(headers), body, fin), client_(client) { 356 : QuicDataToResend(std::move(headers), body, fin), client_(client) {
356 DCHECK(headers_); 357 DCHECK(headers_);
357 DCHECK(client); 358 DCHECK(client);
358 } 359 }
359 360
360 ~ClientQuicDataToResend() override {} 361 ~ClientQuicDataToResend() override {}
361 362
362 void Resend() override; 363 void Resend() override;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 std::vector<std::unique_ptr<QuicDataToResend>> data_to_resend_on_connect_; 458 std::vector<std::unique_ptr<QuicDataToResend>> data_to_resend_on_connect_;
458 459
459 std::unique_ptr<ClientQuicDataToResend> push_promise_data_to_resend_; 460 std::unique_ptr<ClientQuicDataToResend> push_promise_data_to_resend_;
460 461
461 DISALLOW_COPY_AND_ASSIGN(QuicClientBase); 462 DISALLOW_COPY_AND_ASSIGN(QuicClientBase);
462 }; 463 };
463 464
464 } // namespace net 465 } // namespace net
465 466
466 #endif // NET_TOOLS_QUIC_QUIC_CLIENT_BASE_H_ 467 #endif // NET_TOOLS_QUIC_QUIC_CLIENT_BASE_H_
OLDNEW
« no previous file with comments | « net/tools/quic/quic_client.cc ('k') | net/tools/quic/quic_client_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698