blob: df4c4ae3c6f0a761817a22bce3d7a66a2e8285ce [file] [log] [blame]
Darin Petkov887f2982011-07-14 16:10:17 -07001// Copyright (c) 2011 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#include "shill/modem_manager.h"
6
7#include <base/logging.h>
8
9using std::string;
10
11namespace shill {
12
13ModemManager::ModemManager(const string &service,
14 const string &path,
15 ControlInterface *control_interface,
16 EventDispatcher *dispatcher,
17 Manager *manager,
18 GLib *glib)
19 : service_(service),
20 path_(path),
21 watcher_id_(0),
22 control_interface_(control_interface),
23 dispatcher_(dispatcher),
24 glib_(glib) {}
25
26ModemManager::~ModemManager() {
27 Stop();
28}
29
30void ModemManager::Start() {
31 LOG(INFO) << "Start watching modem manager service: " << service_;
32 CHECK_EQ(0, watcher_id_);
33 watcher_id_ = glib_->BusWatchName(G_BUS_TYPE_SYSTEM,
34 service_.c_str(),
35 G_BUS_NAME_WATCHER_FLAGS_NONE,
36 OnAppear,
37 OnVanish,
38 this,
39 NULL);
40}
41
42void ModemManager::Stop() {
43 LOG(INFO) << "Stop watching modem manager service: " << service_;
44 if (watcher_id_) {
45 glib_->BusUnwatchName(watcher_id_);
46 watcher_id_ = 0;
47 }
48 Disconnect();
49}
50
51void ModemManager::Connect(const string &owner) {
52 owner_ = owner;
53 // TODO(petkov): Create a proxy to the manager and enumerate its devices.
54}
55
56void ModemManager::Disconnect() {
57 owner_.clear();
58 // TODO(petkov): Destroy manager's proxy and its devices.
59}
60
61void ModemManager::OnAppear(GDBusConnection *connection,
62 const gchar *name,
63 const gchar *name_owner,
64 gpointer user_data) {
65 LOG(INFO) << "Modem manager " << name << " appeared. Owner: " << name_owner;
66 ModemManager *manager = reinterpret_cast<ModemManager *>(user_data);
67 manager->Connect(name_owner);
68}
69
70void ModemManager::OnVanish(GDBusConnection *connection,
71 const gchar *name,
72 gpointer user_data) {
73 LOG(INFO) << "Modem manager " << name << " vanished.";
74 ModemManager *manager = reinterpret_cast<ModemManager *>(user_data);
75 manager->Disconnect();
76}
77
78} // namespace shill