blob: 9263f125ce983a5f6bfb9e9942c98f312062db2d [file] [log] [blame]
Darin Petkov1c115202012-03-22 15:35:47 +01001// Copyright (c) 2012 The Chromium OS 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#ifndef SHILL_OPENVPN_MANAGEMENT_SERVER_
6#define SHILL_OPENVPN_MANAGEMENT_SERVER_
7
8#include <base/basictypes.h>
Darin Petkov78f63262012-03-26 01:30:24 +02009#include <base/cancelable_callback.h>
10#include <base/memory/weak_ptr.h>
Darin Petkov1c115202012-03-22 15:35:47 +010011
12namespace shill {
13
Darin Petkov78f63262012-03-26 01:30:24 +020014class EventDispatcher;
15class InputData;
16class IOHandler;
Darin Petkov1c115202012-03-22 15:35:47 +010017class OpenVPNDriver;
Darin Petkov78f63262012-03-26 01:30:24 +020018class Sockets;
Darin Petkov1c115202012-03-22 15:35:47 +010019
20class OpenVPNManagementServer {
21 public:
22 OpenVPNManagementServer(OpenVPNDriver *driver);
23 virtual ~OpenVPNManagementServer();
24
25 // Returns true on success, false on failure.
Darin Petkov78f63262012-03-26 01:30:24 +020026 bool Start(EventDispatcher *dispatcher, Sockets *sockets);
27
28 void Stop();
Darin Petkov1c115202012-03-22 15:35:47 +010029
30 private:
Darin Petkov78f63262012-03-26 01:30:24 +020031 // IO handler callbacks.
32 void OnReady(int fd);
33 void OnInput(InputData *data);
34
35 void Send(const std::string &data);
36 void SendState(const std::string &state);
37
38 void ProcessMessage(const std::string &message);
39
Darin Petkov1c115202012-03-22 15:35:47 +010040 OpenVPNDriver *driver_;
Darin Petkov78f63262012-03-26 01:30:24 +020041 base::WeakPtrFactory<OpenVPNManagementServer> weak_ptr_factory_;
42 base::Callback<void(int)> ready_callback_;
43 base::Callback<void(InputData *)> input_callback_;
44
45 Sockets *sockets_;
46 int socket_;
47 scoped_ptr<IOHandler> ready_handler_;
48 EventDispatcher *dispatcher_;
49 int connected_socket_;
50 scoped_ptr<IOHandler> input_handler_;
Darin Petkov1c115202012-03-22 15:35:47 +010051
52 DISALLOW_COPY_AND_ASSIGN(OpenVPNManagementServer);
53};
54
55} // namespace shill
56
57#endif // SHILL_OPENVPN_MANAGEMENT_SERVER_