blob: 8947798ca4c55da9f4002b09a0c03c2110727b19 [file] [log] [blame]
Darin Petkov41c0e0a2012-01-09 16:38:53 +01001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkov887f2982011-07-14 16:10:17 -07002// 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_MODEM_MANAGER_
6#define SHILL_MODEM_MANAGER_
7
Darin Petkov5c97ac52011-07-19 16:30:49 -07008#include <map>
Hristo Stefanoved2c28c2011-11-29 15:37:30 -08009#include <string>
Darin Petkov5c97ac52011-07-19 16:30:49 -070010#include <tr1/memory>
11
Darin Petkov887f2982011-07-14 16:10:17 -070012#include <base/basictypes.h>
Darin Petkovc90fe522011-07-15 13:59:47 -070013#include <base/memory/scoped_ptr.h>
Darin Petkov887f2982011-07-14 16:10:17 -070014#include <gtest/gtest_prod.h> // for FRIEND_TEST
15
16#include "shill/glib.h"
17
Darin Petkov137884a2011-10-26 18:52:47 +020018struct mobile_provider_db;
19
Darin Petkov887f2982011-07-14 16:10:17 -070020namespace shill {
21
22class ControlInterface;
23class EventDispatcher;
24class Manager;
Thieu Le3426c8f2012-01-11 17:35:11 -080025class Metrics;
Darin Petkov5c97ac52011-07-19 16:30:49 -070026class Modem;
Darin Petkovc90fe522011-07-15 13:59:47 -070027class ModemManagerProxyInterface;
Darin Petkovab565bb2011-10-06 02:55:51 -070028class ProxyFactory;
Darin Petkov887f2982011-07-14 16:10:17 -070029
Darin Petkov5c97ac52011-07-19 16:30:49 -070030// Handles a modem manager service and creates and destroys modem instances.
Darin Petkov887f2982011-07-14 16:10:17 -070031class ModemManager {
32 public:
33 ModemManager(const std::string &service,
34 const std::string &path,
35 ControlInterface *control_interface,
36 EventDispatcher *dispatcher,
Thieu Le3426c8f2012-01-11 17:35:11 -080037 Metrics *metrics,
Darin Petkov887f2982011-07-14 16:10:17 -070038 Manager *manager,
Darin Petkov137884a2011-10-26 18:52:47 +020039 GLib *glib,
40 mobile_provider_db *provider_db);
Darin Petkov887f2982011-07-14 16:10:17 -070041 ~ModemManager();
42
43 // Starts watching for and handling the DBus modem manager service.
44 void Start();
45
46 // Stops watching for the DBus modem manager service and destroys any
Darin Petkov5c97ac52011-07-19 16:30:49 -070047 // associated modems.
Darin Petkov887f2982011-07-14 16:10:17 -070048 void Stop();
49
Darin Petkov5c97ac52011-07-19 16:30:49 -070050 // Adds a modem on |path|.
51 void AddModem(const std::string &path);
52
53 // Removes a modem on |path|.
54 void RemoveModem(const std::string &path);
55
Darin Petkov41c0e0a2012-01-09 16:38:53 +010056 void OnDeviceInfoAvailable(const std::string &link_name);
57
Darin Petkov887f2982011-07-14 16:10:17 -070058 private:
59 friend class ModemManagerTest;
60 FRIEND_TEST(ModemInfoTest, RegisterModemManager);
Darin Petkov5c97ac52011-07-19 16:30:49 -070061 FRIEND_TEST(ModemManagerTest, AddRemoveModem);
Darin Petkov887f2982011-07-14 16:10:17 -070062 FRIEND_TEST(ModemManagerTest, Connect);
63 FRIEND_TEST(ModemManagerTest, Disconnect);
64 FRIEND_TEST(ModemManagerTest, OnAppear);
65 FRIEND_TEST(ModemManagerTest, OnVanish);
66 FRIEND_TEST(ModemManagerTest, Start);
67 FRIEND_TEST(ModemManagerTest, Stop);
68
Darin Petkov5c97ac52011-07-19 16:30:49 -070069 typedef std::map<std::string, std::tr1::shared_ptr<Modem> > Modems;
70
Darin Petkov887f2982011-07-14 16:10:17 -070071 // Connects a newly appeared modem manager service.
72 void Connect(const std::string &owner);
73
74 // Disconnects a vanished modem manager service.
75 void Disconnect();
76
77 // DBus service watcher callbacks.
78 static void OnAppear(GDBusConnection *connection,
79 const gchar *name,
80 const gchar *name_owner,
81 gpointer user_data);
82 static void OnVanish(GDBusConnection *connection,
83 const gchar *name,
84 gpointer user_data);
85
Darin Petkovab565bb2011-10-06 02:55:51 -070086 // Store cached copies of singletons for speed/ease of testing.
87 ProxyFactory *proxy_factory_;
88
Darin Petkov887f2982011-07-14 16:10:17 -070089 const std::string service_;
90 const std::string path_;
91 guint watcher_id_;
92
Darin Petkovc90fe522011-07-15 13:59:47 -070093 std::string owner_; // DBus service owner.
94 scoped_ptr<ModemManagerProxyInterface> proxy_; // DBus service proxy.
Darin Petkov887f2982011-07-14 16:10:17 -070095
Darin Petkov5c97ac52011-07-19 16:30:49 -070096 Modems modems_; // Maps a modem |path| to a modem instance.
97
Darin Petkov887f2982011-07-14 16:10:17 -070098 ControlInterface *control_interface_;
99 EventDispatcher *dispatcher_;
Thieu Le3426c8f2012-01-11 17:35:11 -0800100 Metrics *metrics_;
Darin Petkov887f2982011-07-14 16:10:17 -0700101 Manager *manager_;
102 GLib *glib_;
Darin Petkov137884a2011-10-26 18:52:47 +0200103 mobile_provider_db *provider_db_;
Darin Petkov887f2982011-07-14 16:10:17 -0700104
105 DISALLOW_COPY_AND_ASSIGN(ModemManager);
106};
107
108} // namespace shill
109
110#endif // SHILL_MODEM_MANAGER_