quic_simple_client.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. //
  5. // A toy client, which connects to a specified port and sends QUIC
  6. // request to that endpoint.
  7. #ifndef NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_
  8. #define NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_
  9. #include <stddef.h>
  10. #include <memory>
  11. #include "base/command_line.h"
  12. #include "net/base/ip_address.h"
  13. #include "net/base/ip_endpoint.h"
  14. #include "net/http/http_response_headers.h"
  15. #include "net/log/net_log.h"
  16. #include "net/quic/platform/impl/quic_chromium_clock.h"
  17. #include "net/quic/quic_chromium_packet_reader.h"
  18. #include "net/third_party/quiche/src/quiche/quic/core/http/quic_spdy_stream.h"
  19. #include "net/third_party/quiche/src/quiche/quic/core/quic_config.h"
  20. #include "net/third_party/quiche/src/quiche/quic/tools/quic_spdy_client_base.h"
  21. #include "net/tools/quic/quic_client_message_loop_network_helper.h"
  22. namespace net {
  23. class QuicChromiumAlarmFactory;
  24. class QuicChromiumConnectionHelper;
  25. namespace test {
  26. class QuicClientPeer;
  27. } // namespace test
  28. class QuicSimpleClient : public quic::QuicSpdyClientBase {
  29. public:
  30. // Create a quic client, which will have events managed by the message loop.
  31. QuicSimpleClient(quic::QuicSocketAddress server_address,
  32. const quic::QuicServerId& server_id,
  33. const quic::ParsedQuicVersionVector& supported_versions,
  34. const quic::QuicConfig& config,
  35. std::unique_ptr<quic::ProofVerifier> proof_verifier);
  36. QuicSimpleClient(const QuicSimpleClient&) = delete;
  37. QuicSimpleClient& operator=(const QuicSimpleClient&) = delete;
  38. ~QuicSimpleClient() override;
  39. std::unique_ptr<quic::QuicSession> CreateQuicClientSession(
  40. const quic::ParsedQuicVersionVector& supported_versions,
  41. quic::QuicConnection* connection) override;
  42. private:
  43. friend class net::test::QuicClientPeer;
  44. QuicChromiumAlarmFactory* CreateQuicAlarmFactory();
  45. QuicChromiumConnectionHelper* CreateQuicConnectionHelper();
  46. // Used by |helper_| to time alarms.
  47. quic::QuicChromiumClock clock_;
  48. // Tracks if the client is initialized to connect.
  49. bool initialized_ = false;
  50. base::WeakPtrFactory<QuicSimpleClient> weak_factory_{this};
  51. };
  52. } // namespace net
  53. #endif // NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_