server_thread.h revision 1e9bf3e0803691d0a228da41fc608347b6db4340
168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef NET_TOOLS_QUIC_SERVER_THREAD_H_
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define NET_TOOLS_QUIC_SERVER_THREAD_H_
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/threading/simple_thread.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "net/base/ip_endpoint.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "net/quic/quic_config.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "net/tools/quic/quic_server.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace net {
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace tools {
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace test {
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Simple wrapper class to run server in a thread.
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class ServerThread : public base::SimpleThread {
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ServerThread(IPEndPoint address,
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               const QuicConfig& config,
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)               const QuicVersionVector& supported_versions,
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               bool strike_register_no_startup_period);
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual ~ServerThread();
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void Run() OVERRIDE;
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  int GetPort();
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  base::WaitableEvent* listening() { return &listening_; }
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  base::WaitableEvent* quit() { return &quit_; }
331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  QuicServer* server() { return &server_; }
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  base::WaitableEvent listening_;
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  base::WaitableEvent quit_;
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  base::Lock port_lock_;
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  tools::QuicServer server_;
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  IPEndPoint address_;
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  int port_;
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ServerThread);
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace test
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace tools
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace net
4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif  // NET_TOOLS_QUIC_SERVER_THREAD_H_
51