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

Side by Side Diff: net/tools/quic/test_tools/server_thread.cc

Issue 992733002: Remove //net (except for Android test stuff) and sdch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 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/test_tools/server_thread.h ('k') | net/tools/quic/test_tools/simple_client.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "net/tools/quic/test_tools/server_thread.h"
6
7 #include "net/tools/quic/quic_dispatcher.h"
8 #include "net/tools/quic/test_tools/quic_server_peer.h"
9
10 namespace net {
11 namespace tools {
12 namespace test {
13
14 ServerThread::ServerThread(QuicServer* server,
15 IPEndPoint address,
16 bool strike_register_no_startup_period)
17 : SimpleThread("server_thread"),
18 confirmed_(true, false),
19 pause_(true, false),
20 paused_(true, false),
21 resume_(true, false),
22 quit_(true, false),
23 server_(server),
24 address_(address),
25 port_(0),
26 initialized_(false) {
27 if (strike_register_no_startup_period) {
28 server_->SetStrikeRegisterNoStartupPeriod();
29 }
30 }
31
32 ServerThread::~ServerThread() {}
33
34 void ServerThread::Initialize() {
35 if (initialized_) {
36 return;
37 }
38
39 server_->Listen(address_);
40
41 port_lock_.Acquire();
42 port_ = server_->port();
43 port_lock_.Release();
44
45 initialized_ = true;
46 }
47
48 void ServerThread::Run() {
49 if (!initialized_) {
50 Initialize();
51 }
52
53 while (!quit_.IsSignaled()) {
54 if (pause_.IsSignaled() && !resume_.IsSignaled()) {
55 paused_.Signal();
56 resume_.Wait();
57 }
58 server_->WaitForEvents();
59 MaybeNotifyOfHandshakeConfirmation();
60 }
61
62 server_->Shutdown();
63 }
64
65 int ServerThread::GetPort() {
66 port_lock_.Acquire();
67 int rc = port_;
68 port_lock_.Release();
69 return rc;
70 }
71
72 void ServerThread::WaitForCryptoHandshakeConfirmed() {
73 confirmed_.Wait();
74 }
75
76 void ServerThread::Pause() {
77 DCHECK(!pause_.IsSignaled());
78 pause_.Signal();
79 paused_.Wait();
80 }
81
82 void ServerThread::Resume() {
83 DCHECK(!resume_.IsSignaled());
84 DCHECK(pause_.IsSignaled());
85 resume_.Signal();
86 }
87
88 void ServerThread::Quit() {
89 if (pause_.IsSignaled() && !resume_.IsSignaled()) {
90 resume_.Signal();
91 }
92 quit_.Signal();
93 }
94
95 void ServerThread::MaybeNotifyOfHandshakeConfirmation() {
96 if (confirmed_.IsSignaled()) {
97 // Only notify once.
98 return;
99 }
100 QuicDispatcher* dispatcher = QuicServerPeer::GetDispatcher(server());
101 if (dispatcher->session_map().empty()) {
102 // Wait for a session to be created.
103 return;
104 }
105 QuicSession* session = dispatcher->session_map().begin()->second;
106 if (session->IsCryptoHandshakeConfirmed()) {
107 confirmed_.Signal();
108 }
109 }
110
111 } // namespace test
112 } // namespace tools
113 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/test_tools/server_thread.h ('k') | net/tools/quic/test_tools/simple_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698