OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #ifndef NET_TOOLS_QUIC_SERVER_THREAD_H_ | 5 #ifndef NET_TOOLS_QUIC_SERVER_THREAD_H_ |
6 #define NET_TOOLS_QUIC_SERVER_THREAD_H_ | 6 #define NET_TOOLS_QUIC_SERVER_THREAD_H_ |
7 | 7 |
8 #include "base/threading/simple_thread.h" | 8 #include "base/threading/simple_thread.h" |
9 #include "net/base/ip_endpoint.h" | 9 #include "net/base/ip_endpoint.h" |
10 #include "net/quic/quic_config.h" | 10 #include "net/quic/quic_config.h" |
11 #include "net/tools/quic/quic_server.h" | 11 #include "net/tools/quic/quic_server.h" |
12 | 12 |
13 namespace net { | 13 namespace net { |
14 namespace tools { | 14 namespace tools { |
15 namespace test { | 15 namespace test { |
16 | 16 |
17 // Simple wrapper class to run server in a thread. | 17 // Simple wrapper class to run server in a thread. |
18 class ServerThread : public base::SimpleThread { | 18 class ServerThread : public base::SimpleThread { |
19 public: | 19 public: |
20 ServerThread(IPEndPoint address, | 20 ServerThread(QuicServer* server, |
21 const QuicConfig& config, | 21 IPEndPoint address, |
22 const QuicVersionVector& supported_versions, | |
23 bool strike_register_no_startup_period); | 22 bool strike_register_no_startup_period); |
24 | 23 |
25 virtual ~ServerThread(); | 24 virtual ~ServerThread(); |
26 | 25 |
27 // Prepares the server, but does not start accepting connections. Useful for | 26 // Prepares the server, but does not start accepting connections. Useful for |
28 // injecting mocks. | 27 // injecting mocks. |
29 void Initialize(); | 28 void Initialize(); |
30 | 29 |
31 // Runs the event loop. Will initialize if necessary. | 30 // Runs the event loop. Will initialize if necessary. |
32 virtual void Run() OVERRIDE; | 31 virtual void Run() OVERRIDE; |
33 | 32 |
34 // Waits for the handshake to be confirmed for the first session created. | 33 // Waits for the handshake to be confirmed for the first session created. |
35 void WaitForCryptoHandshakeConfirmed(); | 34 void WaitForCryptoHandshakeConfirmed(); |
36 | 35 |
37 // Pauses execution of the server until Resume() is called. May only be | 36 // Pauses execution of the server until Resume() is called. May only be |
38 // called once. | 37 // called once. |
39 void Pause(); | 38 void Pause(); |
40 | 39 |
41 // Resumes execution of the server after Pause() has been called. May only | 40 // Resumes execution of the server after Pause() has been called. May only |
42 // be called once. | 41 // be called once. |
43 void Resume(); | 42 void Resume(); |
44 | 43 |
45 // Stops the server from executing and shuts it down, destroying all | 44 // Stops the server from executing and shuts it down, destroying all |
46 // server objects. | 45 // server objects. |
47 void Quit(); | 46 void Quit(); |
48 | 47 |
49 // Returns the underlying server. Care must be taken to avoid data races | 48 // Returns the underlying server. Care must be taken to avoid data races |
50 // when accessing the server. It is always safe to access the server | 49 // when accessing the server. It is always safe to access the server |
51 // after calling Pause() and before calling Resume(). | 50 // after calling Pause() and before calling Resume(). |
52 QuicServer* server() { return &server_; } | 51 QuicServer* server() { return server_.get(); } |
53 | 52 |
54 // Returns the port that the server is listening on. | 53 // Returns the port that the server is listening on. |
55 int GetPort(); | 54 int GetPort(); |
56 | 55 |
57 private: | 56 private: |
58 void MaybeNotifyOfHandshakeConfirmation(); | 57 void MaybeNotifyOfHandshakeConfirmation(); |
59 | 58 |
60 base::WaitableEvent confirmed_; // Notified when the first handshake is | 59 base::WaitableEvent confirmed_; // Notified when the first handshake is |
61 // confirmed. | 60 // confirmed. |
62 base::WaitableEvent pause_; // Notified when the server should pause. | 61 base::WaitableEvent pause_; // Notified when the server should pause. |
63 base::WaitableEvent paused_; // Notitied when the server has paused | 62 base::WaitableEvent paused_; // Notitied when the server has paused |
64 base::WaitableEvent resume_; // Notified when the server should resume. | 63 base::WaitableEvent resume_; // Notified when the server should resume. |
65 base::WaitableEvent quit_; // Notified when the server should quit. | 64 base::WaitableEvent quit_; // Notified when the server should quit. |
66 | 65 |
67 tools::QuicServer server_; | 66 scoped_ptr<QuicServer> server_; |
68 IPEndPoint address_; | 67 IPEndPoint address_; |
69 base::Lock port_lock_; | 68 base::Lock port_lock_; |
70 int port_; | 69 int port_; |
71 | 70 |
72 bool initialized_; | 71 bool initialized_; |
73 | 72 |
74 DISALLOW_COPY_AND_ASSIGN(ServerThread); | 73 DISALLOW_COPY_AND_ASSIGN(ServerThread); |
75 }; | 74 }; |
76 | 75 |
77 } // namespace test | 76 } // namespace test |
78 } // namespace tools | 77 } // namespace tools |
79 } // namespace net | 78 } // namespace net |
80 | 79 |
81 #endif // NET_TOOLS_QUIC_SERVER_THREAD_H_ | 80 #endif // NET_TOOLS_QUIC_SERVER_THREAD_H_ |
OLD | NEW |