MADARA  3.4.1
QoSTransportSettings.h
Go to the documentation of this file.
1 #ifndef _MADARA_QOS_TRANSPORT_SETTINGS_H_
2 #define _MADARA_QOS_TRANSPORT_SETTINGS_H_
3 
12 #include <string>
13 
17 #include "madara/utility/StdInt.h"
18 #include "madara/MadaraExport.h"
23 
24 #ifdef _MADARA_JAVA_
25 #include <jni.h>
26 #endif
27 
28 #ifdef _MADARA_PYTHON_CALLBACKS_
29 #include <boost/python.hpp>
30 #endif
31 
32 namespace madara
33 {
34 namespace transport
35 {
40 {
43 };
44 
49 class MADARA_EXPORT QoSTransportSettings : public TransportSettings
50 {
51 public:
56 
62 
67  QoSTransportSettings(const TransportSettings& settings);
68 
72  virtual ~QoSTransportSettings();
73 
78  void operator=(const QoSTransportSettings& settings);
79 
84  void operator=(const TransportSettings& settings);
85 
92  void add_send_filter(uint32_t types,
93  knowledge::KnowledgeRecord (*function)(
95 
102  void add_send_filter(uint32_t types, filters::RecordFilter* filter);
103 
109  void add_send_filter(void (*function)(knowledge::KnowledgeMap&,
111 
118  void add_send_filter(filters::AggregateFilter* filter);
119 
124  void add_filter(filters::BufferFilter* filter);
125 
133  void add_receive_filter(uint32_t types,
134  knowledge::KnowledgeRecord (*function)(
136 
143  void add_receive_filter(uint32_t types, filters::RecordFilter* filter);
144 
150  void add_receive_filter(void (*function)(knowledge::KnowledgeMap&,
152 
159  void add_receive_filter(filters::AggregateFilter* filter);
160 
168  void add_rebroadcast_filter(uint32_t types,
169  knowledge::KnowledgeRecord (*function)(
171 
179  void add_rebroadcast_filter(uint32_t types, filters::RecordFilter* filter);
180 
186  void add_rebroadcast_filter(void (*function)(knowledge::KnowledgeMap&,
188 
195  void add_rebroadcast_filter(filters::AggregateFilter* filter);
196 
197 #ifdef _MADARA_JAVA_
198 
206  void add_receive_filter(uint32_t types, jobject& object);
207 
214  void add_send_filter(uint32_t types, jobject& object);
215 
223  void add_rebroadcast_filter(uint32_t types, jobject& object);
224 
231  void add_receive_filter(jobject& object);
232 
239  void add_send_filter(jobject& object);
240 
247  void add_rebroadcast_filter(jobject& object);
248 
254  void add_filter(jobject& object);
255 
256 #endif
257 
258 #ifdef _MADARA_PYTHON_CALLBACKS_
259 
267  void add_receive_filter(uint32_t types, boost::python::object& object);
268 
275  void add_send_filter(uint32_t types, boost::python::object& object);
276 
284  void add_rebroadcast_filter(uint32_t types, boost::python::object& object);
285 
292  void add_receive_filter(boost::python::object& object);
293 
300  void add_send_filter(boost::python::object& object);
301 
308  void add_rebroadcast_filter(boost::python::object& object);
309 
315  void add_filter(boost::python::object& object);
316 
317 #endif
318 
325  void attach(knowledge::ThreadSafeContext* context);
326 
331  void clear_send_filters(uint32_t types);
332 
336  void clear_send_aggregate_filters(void);
337 
342  void clear_receive_filters(uint32_t types);
343 
347  void clear_buffer_filters(void);
348 
352  void clear_receive_aggregate_filters(void);
353 
358  void clear_rebroadcast_filters(uint32_t types);
359 
363  void clear_rebroadcast_aggregate_filters(void);
364 
372  knowledge::KnowledgeRecord filter_send(
373  const madara::knowledge::KnowledgeRecord& input, const std::string& name,
374  transport::TransportContext& context) const;
375 
381  void filter_send(knowledge::KnowledgeMap& records,
382  const transport::TransportContext& transport_context) const;
383 
391  knowledge::KnowledgeRecord filter_receive(
392  const madara::knowledge::KnowledgeRecord& input, const std::string& name,
393  transport::TransportContext& context) const;
394 
400  void filter_receive(knowledge::KnowledgeMap& records,
401  const transport::TransportContext& transport_context) const;
402 
410  knowledge::KnowledgeRecord filter_rebroadcast(
411  const madara::knowledge::KnowledgeRecord& input, const std::string& name,
412  transport::TransportContext& context) const;
413 
419  void filter_rebroadcast(knowledge::KnowledgeMap& records,
420  const transport::TransportContext& transport_context) const;
421 
430  int filter_encode(char* source, int size, int max_size) const;
431 
439  int filter_decode(char* source, int size, int max_size) const;
440 
445  void print_num_filters_send(void) const;
446 
451  void print_num_filters_receive(void) const;
452 
457  void print_num_filters_rebroadcast(void) const;
458 
465  void set_rebroadcast_ttl(unsigned char ttl);
466 
471  unsigned char get_rebroadcast_ttl(void) const;
472 
477  size_t get_number_of_send_filtered_types(void) const;
478 
483  size_t get_number_of_send_aggregate_filters(void) const;
484 
490  size_t get_number_of_rebroadcast_aggregate_filters(void) const;
491 
496  size_t get_number_of_rebroadcast_filtered_types(void) const;
497 
502  size_t get_number_of_receive_aggregate_filters(void) const;
503 
508  size_t get_number_of_receive_filtered_types(void) const;
509 
514  size_t get_number_of_buffer_filters(void) const;
515 
521  void add_trusted_peer(const std::string& peer);
522 
528  void add_banned_peer(const std::string& peer);
529 
535  bool remove_trusted_peer(const std::string& peer);
536 
542  bool remove_banned_peer(const std::string& peer);
543 
549  bool is_trusted(const std::string& peer) const;
550 
558  void enable_participant_ttl(unsigned char maximum_ttl = 255);
559 
566  unsigned char get_participant_ttl(void) const;
567 
575  void update_drop_rate(double drop_rate,
576  int drop_type = PACKET_DROP_DETERMINISTIC, uint64_t drop_burst = 1);
577 
582  double get_drop_rate(void) const;
583 
588  int get_drop_type(void) const;
589 
594  uint64_t get_drop_burst(void) const;
595 
600  void set_send_bandwidth_limit(int64_t bandwidth);
601 
606  int64_t get_send_bandwidth_limit(void) const;
607 
613  void set_total_bandwidth_limit(int64_t bandwidth);
614 
620  int64_t get_total_bandwidth_limit(void) const;
621 
629  void set_deadline(double deadline);
630 
635  double get_deadline(void) const;
636 
642  virtual void load(
643  const std::string& filename, const std::string& prefix = "transport");
644 
650  virtual void load_text(
651  const std::string& filename, const std::string& prefix = "transport");
652 
658  virtual void save(const std::string& filename,
659  const std::string& prefix = "transport") const;
660 
666  virtual void save_text(const std::string& filename,
667  const std::string& prefix = "transport") const;
668 
669 private:
680  unsigned char rebroadcast_ttl_;
681 
690 
694  std::map<std::string, int> trusted_peers_;
695 
699  std::map<std::string, int> banned_peers_;
700 
705 
710 
715 
720 
725 
730 
735 
740 
745 
749  double deadline_;
750 };
751 } // end Transport namespace
752 } // end Madara namespace
753 
754 #endif // _MADARA_QOS_TRANSPORT_SETTINGS_H_
Abstract base class for implementing aggregate record filters via a functor interface.
Abstract base class for implementing buffer filters via a functor interface.
Definition: BufferFilter.h:27
Abstract base class for implementing individual record filters via a functor interface.
Definition: RecordFilter.h:34
Provides map of data types to a filter chain to apply to the data.
This class encapsulates an entry in a KnowledgeBase.
This class stores variables and their values for use by any entity needing state information in a thr...
Provides an interface for external functions into the MADARA KaRL variable settings.
Definition: Variables.h:53
Container for quality-of-service settings.
double packet_drop_rate_
Rate for dropping packets.
knowledge::KnowledgeRecordFilters receive_filters_
A container for receive filters.
unsigned char participant_rebroadcast_ttl_
This field is meant to limit the number of rebroadcasts that this transport will participate in.
std::map< std::string, int > trusted_peers_
A container of all trusted peers.
double deadline_
Deadline for packets at which packets drop.
int64_t max_send_bandwidth_
Maximum send bandwidth usage per second before packets drop.
knowledge::KnowledgeRecordFilters rebroadcast_filters_
A container for rebroadcast filters.
knowledge::KnowledgeRecordFilters send_filters_
A container for filters applied before sending from this host.
void add_filter(boost::python::object &object)
Adds a python buffer filter to the chain.
filters::BufferFilters buffer_filters_
buffer filters have an encode and decode method
unsigned char rebroadcast_ttl_
number of rebroadcasts for receivers to ultimately do.
std::map< std::string, int > banned_peers_
A container of all banned peers.
void add_filter(jobject &object)
Adds a Java buffer filter to the chain.
int64_t max_total_bandwidth_
Maximum bandwidth usage for the transport (receive/send) before drop.
uint64_t packet_drop_burst_
Burst of packet drops.
Provides context about the transport.
Holds basic transport settings.
std::list< BufferFilter * > BufferFilters
Definition: BufferFilter.h:65
constexpr string_t string
std::vector< KnowledgeRecord > FunctionArguments
::std::map< std::string, KnowledgeRecord > KnowledgeMap
PacketDropType
Enumeration for packet drop policy types.
Copyright(c) 2020 Galois.