23 #ifndef RPCSERVER_THRIFT_H
24 #define RPCSERVER_THRIFT_H
32 #include "thrift/ControlPort.h"
33 #include "thrift/gnuradio_types.h"
34 #include <boost/format.hpp>
35 #include <boost/thread/mutex.hpp>
39 #define S__LINE__ S_(__LINE__)
55 void setKnobs(
const GNURadio::KnobMap&);
57 const GNURadio::KnobIDList&);
58 void getRe(GNURadio::KnobMap&,
59 const GNURadio::KnobIDList&);
61 const GNURadio::KnobIDList& knobs);
67 typedef std::map<std::string, configureCallback_t> ConfigureCallbackMap_t;
68 ConfigureCallbackMap_t d_setcallbackmap;
70 typedef std::map<std::string, queryCallback_t> QueryCallbackMap_t;
71 QueryCallbackMap_t d_getcallbackmap;
73 template<
typename T,
typename TMap>
struct set_f
74 :
public std::unary_function<T,void>
76 set_f(TMap &_setcallbackmap,
const priv_lvl_t &_cur_priv)
77 : d_setcallbackmap(_setcallbackmap),
cur_priv(_cur_priv)
82 void operator()(
const T& p)
84 ConfigureCallbackMap_t::const_iterator iter(d_setcallbackmap.find(p.first));
85 if(iter != d_setcallbackmap.end()) {
86 if(cur_priv <= iter->second.priv) {
90 std::cout <<
"Key " << p.first <<
" requires PRIVLVL <= "
91 << iter->second.priv <<
" to set, currently at: "
96 throw apache::thrift::TApplicationException(__FILE__
" " S__LINE__);
100 TMap& d_setcallbackmap;
104 template<
typename T,
typename TMap>
105 struct get_f :
public std::unary_function<T,void>
107 get_f(TMap &_getcallbackmap,
const priv_lvl_t &_cur_priv, GNURadio::KnobMap &_outknobs) :
108 d_getcallbackmap(_getcallbackmap),
cur_priv(_cur_priv), outknobs(_outknobs)
111 void operator()(
const T& p)
113 QueryCallbackMap_t::const_iterator iter(d_getcallbackmap.find(p));
114 if(iter != d_getcallbackmap.end()) {
115 if(cur_priv <= iter->second.priv) {
119 std::cout <<
"Key " << iter->first <<
" requires PRIVLVL: <= "
120 << iter->second.priv <<
" to get, currently at: "
125 std::stringstream ss;
126 ss <<
"Ctrlport Key called with unregistered key (" << p <<
")\n";
127 std::cout << ss.str();
128 throw apache::thrift::TApplicationException(__FILE__
" " S__LINE__);
132 TMap& d_getcallbackmap;
134 GNURadio::KnobMap& outknobs;
137 template<
typename T,
typename TMap,
typename TKnobMap>
138 struct get_all_f :
public std::unary_function<T,void>
140 get_all_f(TMap &_getcallbackmap,
const priv_lvl_t &_cur_priv, TKnobMap &_outknobs) :
141 d_getcallbackmap(_getcallbackmap),
cur_priv(_cur_priv), outknobs(_outknobs)
144 void operator()(
const T& p)
150 std::cout <<
"Key " << p.first <<
" requires PRIVLVL <= "
151 << p.second.priv <<
" to get, currently at: "
156 TMap& d_getcallbackmap;
161 template<
typename T,
typename TMap,
typename TKnobMap>
162 struct properties_all_f :
public std::unary_function<T,void>
164 properties_all_f(QueryCallbackMap_t &_getcallbackmap,
166 GNURadio::KnobPropMap &_outknobs)
167 : d_getcallbackmap(_getcallbackmap),
172 void operator()(
const T& p)
175 GNURadio::KnobProp prop;
177 prop.units = p.second.units;
178 prop.description = p.second.description;
181 prop.display =
static_cast<uint32_t
>(p.second.display);
182 outknobs[p.first] = prop;
185 std::cout <<
"Key " << p.first <<
" requires PRIVLVL <= "
186 << p.second.priv <<
" to get, currently at: "
191 TMap& d_getcallbackmap;
196 template<
class T,
typename TMap,
typename TKnobMap>
197 struct properties_f :
public std::unary_function<T,void>
199 properties_f(TMap &_getcallbackmap,
const priv_lvl_t &_cur_priv, TKnobMap &_outknobs) :
200 d_getcallbackmap(_getcallbackmap),
cur_priv(_cur_priv), outknobs(_outknobs)
203 void operator()(
const T& p)
205 typename TMap::const_iterator iter(d_getcallbackmap.find(p));
206 if(iter != d_getcallbackmap.end()) {
207 if(cur_priv <= iter->second.priv) {
208 GNURadio::KnobProp prop;
210 prop.units = iter->second.units;
211 prop.description = iter->second.description;
214 prop.display =
static_cast<uint32_t
>(iter->second.display);
218 std::cout <<
"Key " << iter->first <<
" requires PRIVLVL: <= "
219 << iter->second.priv <<
" to get, currently at: " <<
cur_priv << std::endl;
223 throw apache::thrift::TApplicationException(__FILE__
" " S__LINE__);
227 TMap& d_getcallbackmap;
Definition: rpccallbackregister_base.h:80
void registerQueryCallback(const std::string &id, const queryCallback_t callback)
void properties(GNURadio::KnobPropMap &, const GNURadio::KnobIDList &knobs)
priv_lvl_t
Definition: rpccallbackregister_base.h:46
void registerConfigureCallback(const std::string &id, const configureCallback_t callback)
void getKnobs(GNURadio::KnobMap &, const GNURadio::KnobIDList &)
Definition: rpccallbackregister_base.h:54
callback_t< gr::messages::msg_accepter, gr::messages::msg_accepter_sptr > configureCallback_t
Definition: rpccallbackregister_base.h:100
void getRe(GNURadio::KnobMap &, const GNURadio::KnobIDList &)
void unregisterConfigureCallback(const std::string &id)
#define PMT_NIL
Definition: pmt.h:103
Definition: rpcserver_base.h:28
#define S__LINE__
Definition: rpcserver_thrift.h:39
static To_PMT instance
Definition: rpcpmtconverters_thrift.h:59
void unregisterQueryCallback(const std::string &id)
boost::mutex mutex
Definition: thread.h:46
Definition: rpcserver_thrift.h:41
void setKnobs(const GNURadio::KnobMap &)
GNURadio::Knob from_pmt(const pmt::pmt_t &knob)
priv_lvl_t cur_priv
Definition: rpcserver_base.h:42
virtual ~rpcserver_thrift()