Fawkes API  Fawkes Development Version
netconf.h
1 
2 /***************************************************************************
3  * netconf.h - Fawkes remote configuration access via Fawkes net
4  *
5  * Created: Sun Jan 07 15:01:50 2007
6  * Copyright 2006-2009 Tim Niemueller [www.niemueller.de]
7  *
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version. A runtime exception applies to
14  * this software (see LICENSE.GPL_WRE file mentioned below for details).
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Library General Public License for more details.
20  *
21  * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22  */
23 
24 #ifndef _CONFIG_NETCONF_H_
25 #define _CONFIG_NETCONF_H_
26 
27 #include <config/config.h>
28 #include <core/exception.h>
29 #include <netcomm/fawkes/client_handler.h>
30 
31 #include <list>
32 #include <map>
33 #include <stdint.h>
34 #include <string>
35 
36 namespace fawkes {
37 
38 class Mutex;
39 class InterruptibleBarrier;
40 class FawkesNetworkClient;
41 class MemoryConfiguration;
42 
43 class CannotEnableMirroringException : public Exception
44 {
45 public:
46  CannotEnableMirroringException(const char *msg);
47 };
48 
50 {
51 public:
52  NetworkConfiguration(FawkesNetworkClient *c, unsigned int mirror_timeout_sec = 15);
54 
55  virtual void copy(Configuration *copyconf);
56 
59 
60  virtual void load(const char *file_path);
61 
62  virtual bool exists(const char *path);
63  virtual bool is_float(const char *path);
64  virtual bool is_uint(const char *path);
65  virtual bool is_int(const char *path);
66  virtual bool is_bool(const char *path);
67  virtual bool is_string(const char *path);
68  virtual bool is_list(const char *path);
69 
70  virtual bool is_default(const char *path);
71 
72  virtual float get_float(const char *path);
73  virtual unsigned int get_uint(const char *path);
74  virtual int get_int(const char *path);
75  virtual bool get_bool(const char *path);
76  virtual std::string get_string(const char *path);
77  virtual std::vector<float> get_floats(const char *path);
78  virtual std::vector<unsigned int> get_uints(const char *path);
79  virtual std::vector<int> get_ints(const char *path);
80  virtual std::vector<bool> get_bools(const char *path);
81  virtual std::vector<std::string> get_strings(const char *path);
82  virtual ValueIterator * get_value(const char *path);
83  virtual std::string get_comment(const char *path);
84  virtual std::string get_default_comment(const char *path);
85  virtual std::string get_type(const char *path);
86 
87  virtual void set_float(const char *path, float f);
88  virtual void set_uint(const char *path, unsigned int uint);
89  virtual void set_int(const char *path, int i);
90  virtual void set_bool(const char *path, bool b);
91  virtual void set_string(const char *path, std::string &s);
92  virtual void set_string(const char *path, const char *s);
93  virtual void set_floats(const char *path, std::vector<float> &f);
94  virtual void set_uints(const char *path, std::vector<unsigned int> &uint);
95  virtual void set_ints(const char *path, std::vector<int> &i);
96  virtual void set_bools(const char *path, std::vector<bool> &b);
97  virtual void set_strings(const char *path, std::vector<std::string> &s);
98  virtual void set_strings(const char *path, std::vector<const char *> &s);
99  virtual void set_comment(const char *path, std::string &comment);
100  virtual void set_comment(const char *path, const char *comment);
101 
102  virtual void erase(const char *path);
103 
104  virtual void set_default_float(const char *path, float f);
105  virtual void set_default_uint(const char *path, unsigned int uint);
106  virtual void set_default_int(const char *path, int i);
107  virtual void set_default_bool(const char *path, bool b);
108  virtual void set_default_string(const char *path, std::string &s);
109  virtual void set_default_string(const char *path, const char *s);
110  virtual void set_default_comment(const char *path, std::string &comment);
111  virtual void set_default_comment(const char *path, const char *comment);
112 
113  virtual void erase_default(const char *path);
114 
115  virtual void deregistered(unsigned int id) throw();
116  virtual void inbound_received(FawkesNetworkMessage *msg, unsigned int id) throw();
117  virtual void connection_died(unsigned int id) throw();
118  virtual void connection_established(unsigned int id) throw();
119 
120  virtual void set_mirror_mode(bool mirror);
121 
123  {
124  friend NetworkConfiguration;
125 
126  protected:
130 
131  public:
132  virtual ~NetConfValueIterator();
133  virtual bool next();
134  virtual bool valid() const;
135 
136  virtual const char *path() const;
137  virtual const char *type() const;
138 
139  virtual bool is_float() const;
140  virtual bool is_uint() const;
141  virtual bool is_int() const;
142  virtual bool is_bool() const;
143  virtual bool is_string() const;
144  virtual bool is_list() const;
145  virtual size_t get_list_size() const;
146 
147  virtual bool is_default() const;
148 
149  virtual float get_float() const;
150  virtual unsigned int get_uint() const;
151  virtual int get_int() const;
152  virtual bool get_bool() const;
153  virtual std::string get_string() const;
154  virtual std::vector<float> get_floats() const;
155  virtual std::vector<unsigned int> get_uints() const;
156  virtual std::vector<int> get_ints() const;
157  virtual std::vector<bool> get_bools() const;
158  virtual std::vector<std::string> get_strings() const;
159  virtual std::string get_as_string() const;
160 
161  virtual std::string get_comment() const;
162 
163  private:
165  FawkesNetworkMessage * msg;
166  bool iterated_once;
167  char * _path;
168  };
169 
173  ValueIterator *search(const char *path);
174 
175  void lock();
176  bool try_lock();
177  void unlock();
178 
179  virtual void try_dump();
180 
181 private:
182  void send_get(const char *path, unsigned int msgid, unsigned int expected_reply);
183 
184  void set_value_internal(unsigned int msg_type,
185  const char * path,
186  uint16_t num_values,
187  size_t data_size,
188  void * data);
189 
190  void erase_internal(const char *path, bool is_default);
191 
194  Mutex * mutex;
195  bool mirror_init_waiting_;
196  InterruptibleBarrier *mirror_init_barrier_;
197 
198  bool mirror_mode_;
199  bool mirror_mode_before_connection_dead_;
200  unsigned int mirror_timeout_sec_;
201  MemoryConfiguration *mirror_config;
202 
203  bool connected_;
204 };
205 
206 } // end namespace fawkes
207 
208 #endif
fawkes::NetworkConfiguration::NetConfValueIterator::NetConfValueIterator
NetConfValueIterator()
Constructor.
Definition: netconf.cpp:1412
fawkes::NetworkConfiguration::iterator_hostspecific
ValueIterator * iterator_hostspecific()
Iterator for all host-specific values.
Definition: netconf.cpp:1373
fawkes::NetworkConfiguration::NetConfValueIterator::get_comment
virtual std::string get_comment() const
Definition: netconf.cpp:1926
fawkes::NetworkConfiguration::erase_default
virtual void erase_default(const char *path)
Definition: netconf.cpp:910
fawkes::NetworkConfiguration::NetConfValueIterator::is_float
virtual bool is_float() const
Definition: netconf.cpp:1515
fawkes::NetworkConfiguration::get_bools
virtual std::vector< bool > get_bools(const char *path)
Definition: netconf.cpp:536
fawkes::NetworkConfiguration::unlock
void unlock()
Definition: netconf.cpp:1328
fawkes::NetworkConfiguration::NetConfValueIterator::is_int
virtual bool is_int() const
Definition: netconf.cpp:1541
fawkes::NetworkConfiguration::NetConfValueIterator::get_list_size
virtual size_t get_list_size() const
Definition: netconf.cpp:1594
fawkes::NetworkConfiguration::NetConfValueIterator::get_bool
virtual bool get_bool() const
Definition: netconf.cpp:1698
fawkes::NetworkConfiguration::NetConfValueIterator::get_int
virtual int get_int() const
Definition: netconf.cpp:1677
fawkes::NetworkConfiguration::get_comment
virtual std::string get_comment(const char *path)
Definition: netconf.cpp:548
fawkes::NetworkConfiguration::NetConfValueIterator::is_uint
virtual bool is_uint() const
Definition: netconf.cpp:1528
fawkes::NetworkConfiguration::get_value
virtual ValueIterator * get_value(const char *path)
Definition: netconf.cpp:647
fawkes::NetworkConfiguration::set_mirror_mode
virtual void set_mirror_mode(bool mirror)
Enable or disable mirror mode.
Definition: netconf.cpp:1268
fawkes::NetworkConfiguration::is_int
virtual bool is_int(const char *path)
Definition: netconf.cpp:193
fawkes::Mutex
Definition: mutex.h:36
fawkes::NetworkConfiguration::set_comment
virtual void set_comment(const char *path, std::string &comment)
Definition: netconf.cpp:867
fawkes::NetworkConfiguration::NetConfValueIterator::is_bool
virtual bool is_bool() const
Definition: netconf.cpp:1554
fawkes::NetworkConfiguration::NetConfValueIterator::get_uints
virtual std::vector< unsigned int > get_uints() const
Definition: netconf.cpp:1777
fawkes::NetworkConfiguration::is_bool
virtual bool is_bool(const char *path)
Definition: netconf.cpp:199
fawkes::NetworkConfiguration::set_default_comment
virtual void set_default_comment(const char *path, std::string &comment)
Definition: netconf.cpp:872
fawkes::NetworkConfiguration::set_uint
virtual void set_uint(const char *path, unsigned int uint)
Definition: netconf.cpp:742
fawkes::NetworkConfiguration::connection_died
virtual void connection_died(unsigned int id)
Definition: netconf.cpp:1230
fawkes::NetworkConfiguration::NetConfValueIterator::get_strings
virtual std::vector< std::string > get_strings() const
Definition: netconf.cpp:1867
fawkes::NetworkConfiguration::set_default_int
virtual void set_default_int(const char *path, int i)
Definition: netconf.cpp:760
fawkes::NetworkConfiguration::is_string
virtual bool is_string(const char *path)
Definition: netconf.cpp:205
fawkes::NetworkConfiguration::get_strings
virtual std::vector< std::string > get_strings(const char *path)
Definition: netconf.cpp:542
fawkes::NetworkConfiguration::erase
virtual void erase(const char *path)
Definition: netconf.cpp:904
fawkes::ConfigurationChangeHandler
Definition: change_handler.h:35
fawkes::NetworkConfiguration::iterator
ValueIterator * iterator()
Definition: netconf.cpp:1339
fawkes::NetworkConfiguration::NetConfValueIterator::valid
virtual bool valid() const
Definition: netconf.cpp:1474
fawkes::NetworkConfiguration::NetConfValueIterator::get_as_string
virtual std::string get_as_string() const
Definition: netconf.cpp:1900
fawkes::NetworkConfiguration::iterator_default
ValueIterator * iterator_default()
Iterator for all default values.
Definition: netconf.cpp:1356
fawkes::NetworkConfiguration::set_uints
virtual void set_uints(const char *path, std::vector< unsigned int > &uint)
Definition: netconf.cpp:827
fawkes::NetworkConfiguration::get_ints
virtual std::vector< int > get_ints(const char *path)
Definition: netconf.cpp:530
fawkes::NetworkConfiguration::NetConfValueIterator::path
virtual const char * path() const
Definition: netconf.cpp:1480
fawkes::NetworkConfiguration::is_uint
virtual bool is_uint(const char *path)
Definition: netconf.cpp:187
fawkes::NetworkConfiguration::load
virtual void load(const char *file_path)
Definition: netconf.cpp:107
fawkes::NetworkConfiguration::set_default_uint
virtual void set_default_uint(const char *path, unsigned int uint)
Definition: netconf.cpp:748
fawkes::Configuration::ValueIterator
Definition: config.h:75
fawkes::Configuration
Definition: config.h:68
fawkes::NetworkConfiguration::is_float
virtual bool is_float(const char *path)
Definition: netconf.cpp:181
fawkes::NetworkConfiguration::set_ints
virtual void set_ints(const char *path, std::vector< int > &i)
Definition: netconf.cpp:833
fawkes::NetworkConfiguration::NetConfValueIterator::get_ints
virtual std::vector< int > get_ints() const
Definition: netconf.cpp:1807
fawkes::NetworkConfiguration::add_change_handler
virtual void add_change_handler(ConfigurationChangeHandler *h)
Add a configuration change handler.
Definition: netconf.cpp:1246
fawkes::NetworkConfiguration::set_floats
virtual void set_floats(const char *path, std::vector< float > &f)
Definition: netconf.cpp:821
fawkes::NetworkConfiguration::copy
virtual void copy(Configuration *copyconf)
Copy all values from the given configuration.
Definition: netconf.cpp:119
fawkes::NetworkConfiguration::NetConfValueIterator::next
virtual bool next()
Definition: netconf.cpp:1459
fawkes::NetworkConfiguration::get_uint
virtual unsigned int get_uint(const char *path)
Definition: netconf.cpp:300
fawkes::NetworkConfiguration::get_default_comment
virtual std::string get_default_comment(const char *path)
Definition: netconf.cpp:597
fawkes::NetworkConfiguration::NetConfValueIterator::~NetConfValueIterator
virtual ~NetConfValueIterator()
Destructor.
Definition: netconf.cpp:1449
fawkes::NetworkConfiguration::set_bool
virtual void set_bool(const char *path, bool b)
Definition: netconf.cpp:766
fawkes::NetworkConfiguration::exists
virtual bool exists(const char *path)
Definition: netconf.cpp:142
fawkes::FawkesNetworkClientHandler
Definition: client_handler.h:35
fawkes::NetworkConfiguration
Definition: netconf.h:53
fawkes::NetworkConfiguration::set_int
virtual void set_int(const char *path, int i)
Definition: netconf.cpp:754
fawkes::NetworkConfiguration::set_strings
virtual void set_strings(const char *path, std::vector< std::string > &s)
Definition: netconf.cpp:845
fawkes
fawkes::NetworkConfiguration::set_float
virtual void set_float(const char *path, float f)
Definition: netconf.cpp:730
fawkes::NetworkConfiguration::get_string
virtual std::string get_string(const char *path)
Definition: netconf.cpp:462
fawkes::NetworkConfiguration::NetConfValueIterator::get_floats
virtual std::vector< float > get_floats() const
Definition: netconf.cpp:1747
fawkes::NetworkConfiguration::is_list
virtual bool is_list(const char *path)
Definition: netconf.cpp:211
fawkes::CannotEnableMirroringException::CannotEnableMirroringException
CannotEnableMirroringException(const char *msg)
Constructor.
Definition: netconf.cpp:50
fawkes::NetworkConfiguration::NetConfValueIterator::is_list
virtual bool is_list() const
Definition: netconf.cpp:1580
fawkes::NetworkConfiguration::get_bool
virtual bool get_bool(const char *path)
Definition: netconf.cpp:408
fawkes::NetworkConfiguration::try_lock
bool try_lock()
Definition: netconf.cpp:1322
fawkes::NetworkConfiguration::get_uints
virtual std::vector< unsigned int > get_uints(const char *path)
Definition: netconf.cpp:524
fawkes::NetworkConfiguration::NetConfValueIterator::is_string
virtual bool is_string() const
Definition: netconf.cpp:1567
fawkes::NetworkConfiguration::NetConfValueIterator::get_bools
virtual std::vector< bool > get_bools() const
Definition: netconf.cpp:1837
fawkes::NetworkConfiguration::set_default_bool
virtual void set_default_bool(const char *path, bool b)
Definition: netconf.cpp:773
fawkes::NetworkConfiguration::search
ValueIterator * search(const char *path)
Definition: netconf.cpp:1383
fawkes::NetworkConfiguration::lock
void lock()
Definition: netconf.cpp:1316
fawkes::NetworkConfiguration::set_bools
virtual void set_bools(const char *path, std::vector< bool > &b)
Definition: netconf.cpp:839
fawkes::NetworkConfiguration::set_default_string
virtual void set_default_string(const char *path, std::string &s)
Definition: netconf.cpp:815
fawkes::NetworkConfiguration::inbound_received
virtual void inbound_received(FawkesNetworkMessage *msg, unsigned int id)
Definition: netconf.cpp:925
fawkes::NetworkConfiguration::is_default
virtual bool is_default(const char *path)
Definition: netconf.cpp:151
fawkes::NetworkConfiguration::get_type
virtual std::string get_type(const char *path)
Get type of field.
Definition: netconf.cpp:164
fawkes::MemoryConfiguration
Definition: memory.h:42
fawkes::NetworkConfiguration::set_default_float
virtual void set_default_float(const char *path, float f)
Definition: netconf.cpp:736
fawkes::NetworkConfiguration::deregistered
virtual void deregistered(unsigned int id)
We are no longer registered in Fawkes network client.
Definition: netconf.cpp:920
fawkes::NetworkConfiguration::set_string
virtual void set_string(const char *path, std::string &s)
Definition: netconf.cpp:809
fawkes::NetworkConfiguration::get_floats
virtual std::vector< float > get_floats(const char *path)
Definition: netconf.cpp:518
fawkes::FawkesNetworkMessage
Definition: message.h:80
fawkes::NetworkConfiguration::try_dump
virtual void try_dump()
Definition: netconf.cpp:1334
fawkes::NetworkConfiguration::rem_change_handler
virtual void rem_change_handler(ConfigurationChangeHandler *h)
Remove a configuration change handler.
Definition: netconf.cpp:1256
fawkes::NetworkConfiguration::NetConfValueIterator::get_float
virtual float get_float() const
Definition: netconf.cpp:1635
fawkes::FawkesNetworkClient
Definition: client.h:55
fawkes::NetworkConfiguration::connection_established
virtual void connection_established(unsigned int id)
Definition: netconf.cpp:1239
fawkes::NetworkConfiguration::NetConfValueIterator::get_uint
virtual unsigned int get_uint() const
Definition: netconf.cpp:1656
fawkes::NetworkConfiguration::NetworkConfiguration
NetworkConfiguration(FawkesNetworkClient *c, unsigned int mirror_timeout_sec=15)
Constructor.
Definition: netconf.cpp:74
fawkes::NetworkConfiguration::NetConfValueIterator::type
virtual const char * type() const
Definition: netconf.cpp:1494
fawkes::NetworkConfiguration::get_int
virtual int get_int(const char *path)
Definition: netconf.cpp:354
fawkes::NetworkConfiguration::~NetworkConfiguration
virtual ~NetworkConfiguration()
Destructor.
Definition: netconf.cpp:95
fawkes::InterruptibleBarrier
Definition: interruptible_barrier.h:39
fawkes::NetworkConfiguration::NetConfValueIterator
Definition: netconf.h:126
fawkes::NetworkConfiguration::get_float
virtual float get_float(const char *path)
Definition: netconf.cpp:246
fawkes::NetworkConfiguration::NetConfValueIterator::is_default
virtual bool is_default() const
Definition: netconf.cpp:1608
fawkes::NetworkConfiguration::NetConfValueIterator::get_string
virtual std::string get_string() const
Definition: netconf.cpp:1719