blob: 4ff41b795c6f0ea8d59471f14ccb3b1c24337519 [file] [log] [blame]
// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SHILL_OPENVPN_MANAGEMENT_SERVER_
#define SHILL_OPENVPN_MANAGEMENT_SERVER_
#include <base/basictypes.h>
#include <base/cancelable_callback.h>
#include <base/memory/weak_ptr.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
namespace shill {
class EventDispatcher;
class InputData;
class IOHandler;
class OpenVPNDriver;
class Sockets;
class OpenVPNManagementServer {
public:
OpenVPNManagementServer(OpenVPNDriver *driver);
virtual ~OpenVPNManagementServer();
// Returns true on success, false on failure.
bool Start(EventDispatcher *dispatcher, Sockets *sockets);
void Stop();
private:
friend class OpenVPNManagementServerTest;
FRIEND_TEST(OpenVPNManagementServerTest, OnInput);
FRIEND_TEST(OpenVPNManagementServerTest, OnReady);
FRIEND_TEST(OpenVPNManagementServerTest, OnReadyAcceptFail);
FRIEND_TEST(OpenVPNManagementServerTest, ProcessInfoMessage);
FRIEND_TEST(OpenVPNManagementServerTest, ProcessMessage);
FRIEND_TEST(OpenVPNManagementServerTest, ProcessStateMessage);
FRIEND_TEST(OpenVPNManagementServerTest, Send);
FRIEND_TEST(OpenVPNManagementServerTest, SendState);
FRIEND_TEST(OpenVPNManagementServerTest, Start);
FRIEND_TEST(OpenVPNManagementServerTest, Stop);
// IO handler callbacks.
void OnReady(int fd);
void OnInput(InputData *data);
void Send(const std::string &data);
void SendState(const std::string &state);
void ProcessMessage(const std::string &message);
bool ProcessInfoMessage(const std::string &message);
bool ProcessNeedPasswordMessage(const std::string &message);
bool ProcessFailedPasswordMessage(const std::string &message);
bool ProcessStateMessage(const std::string &message);
OpenVPNDriver *driver_;
base::WeakPtrFactory<OpenVPNManagementServer> weak_ptr_factory_;
base::Callback<void(int)> ready_callback_;
base::Callback<void(InputData *)> input_callback_;
Sockets *sockets_;
int socket_;
scoped_ptr<IOHandler> ready_handler_;
EventDispatcher *dispatcher_;
int connected_socket_;
scoped_ptr<IOHandler> input_handler_;
DISALLOW_COPY_AND_ASSIGN(OpenVPNManagementServer);
};
} // namespace shill
#endif // SHILL_OPENVPN_MANAGEMENT_SERVER_