blob: 5cb01aa87d4e76af8f37091e50b98dcd86ce5db3 [file] [log] [blame]
// Copyright (c) 2011 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.
// TODO(vlaviano): update accessor style (GetFoo/SetFoo -> foo)
#ifndef SRC_SERVICE_H_
#define SRC_SERVICE_H_
#include <map>
#include <string>
#include <base/basictypes.h> // NOLINT
#include <dbus-c++/dbus.h> // NOLINT
#include "src/data_plan.h"
namespace cashew {
class Aggregator;
class Device;
class MetricsManager;
class Policy;
class ServiceManager;
// map of key, value pairs representing service properties received via D-Bus
typedef std::map<std::string, DBus::Variant> PropertyMap;
// Service interface
// represents a cellular service and monitors Flimflam state for that service
class Service {
public:
Service() {}
virtual ~Service() {}
// get D-Bus path for this service
virtual const DBus::Path& GetPath() const = 0;
// valid state values for this service
typedef enum {
kStateUnknown = 0,
kStateIdle,
kStateCarrier,
kStateAssociation,
kStateConfiguration,
kStateReady,
kStatePortal,
kStateOnline,
kStateDisconnect,
kStateFailure,
kStateActivationFailure,
} State;
// get state for this service
virtual State GetState() const = 0;
// valid type values for this service
typedef enum {
kTypeUnknown = 0,
kTypeEthernet,
kTypeWifi,
kTypeWimax,
kTypeBluetooth,
kTypeCellular,
} Type;
// get type for this service
// NOTE: for now, should always be kTypeCellular
virtual Type GetType() const = 0;
// convert type string to Type enum value
static Type TypeFromString(const std::string& type);
// get Device object for this service
// this can return NULL if we don't yet have Device info
virtual Device* GetDevice() const = 0;
// get data plan info, formatted for D-Bus
// filters out inactive (future, expired, or consumed) plans
virtual DBusDataPlanList GetDBusDataPlans() const = 0;
// do we think that we're the default service at this time?
virtual bool IsDefaultService() const = 0;
// Device methods
// we've received updated Cellular.Carrier info from our child Device
virtual void OnCarrierUpdate(const std::string& carrier) = 0;
// we've received updated byte counter info from our child Device
virtual void OnByteCounterUpdate(uint64 rx_bytes, uint64 tx_bytes) = 0;
// we've received a notification from our child Device that the
// byte counter has been stopped
virtual void OnByteCounterStopped() = 0;
// DataPlan methods
// we've received a notification that a data plan for this service expired
virtual bool OnDataPlanExpired(DataPlan *data_plan) = 0;
// Service Manager methods
// we've received an update from our parent about whether or not we're the
// default service
virtual void OnDefaultServiceUpdate(bool is_default_service) = 0;
// factory
static Service* NewService(ServiceManager * const parent,
DBus::Connection& connection, // NOLINT
MetricsManager * const metrics_manager,
Aggregator * const aggregator,
const DBus::Path& path);
private:
DISALLOW_COPY_AND_ASSIGN(Service);
};
} // namespace cashew
#endif // SRC_SERVICE_H_