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.
5 #include "net/tools/quic/test_tools/server_thread.h"
7 #include "net/tools/quic/test_tools/quic_server_peer.h"
13 ServerThread::ServerThread(QuicServer* server,
15 bool strike_register_no_startup_period)
16 : SimpleThread("server_thread"),
17 confirmed_(true, false),
26 if (strike_register_no_startup_period) {
27 server_->SetStrikeRegisterNoStartupPeriod();
31 ServerThread::~ServerThread() {}
33 void ServerThread::Initialize() {
38 server_->Listen(address_);
41 port_ = server_->port();
47 void ServerThread::Run() {
52 while (!quit_.IsSignaled()) {
53 if (pause_.IsSignaled() && !resume_.IsSignaled()) {
57 server_->WaitForEvents();
58 MaybeNotifyOfHandshakeConfirmation();
64 int ServerThread::GetPort() {
71 void ServerThread::WaitForCryptoHandshakeConfirmed() {
75 void ServerThread::Pause() {
76 DCHECK(!pause_.IsSignaled());
81 void ServerThread::Resume() {
82 DCHECK(!resume_.IsSignaled());
83 DCHECK(pause_.IsSignaled());
87 void ServerThread::Quit() {
88 if (pause_.IsSignaled() && !resume_.IsSignaled()) {
94 void ServerThread::MaybeNotifyOfHandshakeConfirmation() {
95 if (confirmed_.IsSignaled()) {
99 QuicDispatcher* dispatcher = QuicServerPeer::GetDispatcher(server());
100 if (dispatcher->session_map().empty()) {
101 // Wait for a session to be created.
104 QuicSession* session = dispatcher->session_map().begin()->second;
105 if (session->IsCryptoHandshakeConfirmed()) {