MADARA  3.2.3
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 
33 namespace madara
34 {
35  namespace transport
36  {
43  };
44 
49  class MADARA_EXPORT QoSTransportSettings : public TransportSettings
50  {
51  public:
56 
60  QoSTransportSettings (const QoSTransportSettings & settings);
61 
65  QoSTransportSettings (const TransportSettings & settings);
66 
70  virtual ~QoSTransportSettings ();
71 
75  void operator= (const QoSTransportSettings & settings);
76 
80  void operator= (const TransportSettings & settings);
81 
88  void add_send_filter (uint32_t types,
91 
98  void add_send_filter (uint32_t types,
99  filters::RecordFilter * filter);
100 
106  void add_send_filter (void (*function) (
109 
116  void add_send_filter (filters::AggregateFilter * filter);
117 
122  void add_filter (filters::BufferFilter * filter);
123 
131  void add_receive_filter (uint32_t types,
134 
141  void add_receive_filter (uint32_t types,
142  filters::RecordFilter * filter);
143 
149  void add_receive_filter (void (*function) (
152 
159  void add_receive_filter (filters::AggregateFilter * filter);
160 
168  void add_rebroadcast_filter (uint32_t types,
171 
179  void add_rebroadcast_filter (uint32_t types,
180  filters::RecordFilter * filter);
181 
187  void add_rebroadcast_filter (void (*function) (
190 
197  void add_rebroadcast_filter (filters::AggregateFilter * filter);
198 
199 #ifdef _MADARA_JAVA_
200 
208  void add_receive_filter (
209  uint32_t types, jobject & object);
210 
217  void add_send_filter (
218  uint32_t types, jobject & object);
219 
227  void add_rebroadcast_filter (
228  uint32_t types, jobject & object);
229 
236  void add_receive_filter (jobject & object);
237 
244  void add_send_filter (jobject & object);
245 
252  void add_rebroadcast_filter (jobject & object);
253 
254 #endif
255 
256 #ifdef _MADARA_PYTHON_CALLBACKS_
257 
265  void add_receive_filter (
266  uint32_t types, boost::python::object & object);
267 
274  void add_send_filter (
275  uint32_t types, boost::python::object & object);
276 
284  void add_rebroadcast_filter (
285  uint32_t types, boost::python::object & object);
286 
293  void add_receive_filter (boost::python::object & object);
294 
301  void add_send_filter (boost::python::object & object);
302 
309  void add_rebroadcast_filter (boost::python::object & object);
310 
311 #endif
312 
319  void attach (knowledge::ThreadSafeContext * context);
320 
325  void clear_send_filters (uint32_t types);
326 
330  void clear_send_aggregate_filters (void);
331 
336  void clear_receive_filters (uint32_t types);
337 
341  void clear_buffer_filters (void);
342 
346  void clear_receive_aggregate_filters (void);
347 
352  void clear_rebroadcast_filters (uint32_t types);
353 
357  void clear_rebroadcast_aggregate_filters (void);
358 
366  knowledge::KnowledgeRecord filter_send (
368  const std::string & name,
369  transport::TransportContext & context) const;
370 
376  void filter_send (knowledge::KnowledgeMap & records,
377  const transport::TransportContext & transport_context) const;
378 
386  knowledge::KnowledgeRecord filter_receive (
388  const std::string & name,
389  transport::TransportContext & context) const;
390 
396  void filter_receive (knowledge::KnowledgeMap & records,
397  const transport::TransportContext & transport_context) const;
398 
406  knowledge::KnowledgeRecord filter_rebroadcast (
408  const std::string & name,
409  transport::TransportContext & context) const;
410 
416  void filter_rebroadcast (knowledge::KnowledgeMap & records,
417  const transport::TransportContext & transport_context) const;
418 
426  int filter_encode (unsigned char * source, int size, int max_size) const;
427 
435  int filter_decode (unsigned char * source, int size, int max_size) const;
436 
441  void print_num_filters_send (void) const;
442 
447  void print_num_filters_receive (void) const;
448 
453  void print_num_filters_rebroadcast (void) const;
454 
461  void set_rebroadcast_ttl (unsigned char ttl);
462 
467  unsigned char get_rebroadcast_ttl (void) const;
468 
473  size_t get_number_of_send_filtered_types (void) const;
474 
479  size_t get_number_of_send_aggregate_filters (void) const;
480 
486  size_t get_number_of_rebroadcast_aggregate_filters (void) const;
487 
492  size_t get_number_of_rebroadcast_filtered_types (void) const;
493 
498  size_t get_number_of_receive_aggregate_filters (void) const;
499 
504  size_t get_number_of_receive_filtered_types (void) const;
505 
510  size_t get_number_of_buffer_filters (void) const;
511 
517  void add_trusted_peer (const std::string & peer);
518 
524  void add_banned_peer (const std::string & peer);
525 
531  bool remove_trusted_peer (const std::string & peer);
532 
538  bool remove_banned_peer (const std::string & peer);
539 
545  bool is_trusted (const std::string & peer) const;
546 
554  void enable_participant_ttl (unsigned char maximum_ttl = 255);
555 
562  unsigned char get_participant_ttl (void) const;
563 
571  void update_drop_rate (double drop_rate,
572  int drop_type = PACKET_DROP_DETERMINISTIC,
573  uint64_t drop_burst = 1);
574 
579  double get_drop_rate (void) const;
580 
585  int get_drop_type (void) const;
586 
591  uint64_t get_drop_burst (void) const;
592 
597  void set_send_bandwidth_limit (int64_t bandwidth);
598 
603  int64_t get_send_bandwidth_limit (void) const;
604 
610  void set_total_bandwidth_limit (int64_t bandwidth);
611 
617  int64_t get_total_bandwidth_limit (void) const;
618 
626  void set_deadline (double deadline);
627 
632  double get_deadline (void) const;
633 
639  virtual void load (const std::string & filename,
640  const std::string & prefix = "transport");
641 
647  virtual void load_text (const std::string & filename,
648  const std::string & prefix = "transport");
649 
655  virtual void save (const std::string & filename,
656  const std::string & prefix = "transport") const;
657 
663  virtual void save_text (const std::string & filename,
664  const std::string & prefix = "transport") const;
665 
666  private:
667 
678  unsigned char rebroadcast_ttl_;
679 
688 
692  std::map <std::string, int> trusted_peers_;
693 
697  std::map <std::string, int> banned_peers_;
698 
703 
708 
713 
718 
723 
728 
733 
738 
743 
747  double deadline_;
748  };
749  } // end Transport namespace
750 } // end Madara namespace
751 
752 #endif // _MADARA_QOS_TRANSPORT_SETTINGS_H_
This class encapsulates an entry in a KnowledgeBase.
Abstract base class for implementing aggregate record filters via a functor interface.
This class stores variables and their values for use by any entity needing state information in a thr...
Abstract base class for implementing individual record filters via a functor interface.
Definition: RecordFilter.h:33
Holds basic transport settings.
Provides map of data types to a filter chain to apply to the data.
knowledge::KnowledgeRecordFilters send_filters_
A container for filters applied before sending from this host.
std::vector< KnowledgeRecord > FunctionArguments
Provides context about the transport.
unsigned char rebroadcast_ttl_
number of rebroadcasts for receivers to ultimately do.
unsigned char participant_rebroadcast_ttl_
This field is meant to limit the number of rebroadcasts that this transport will participate in...
static struct madara::knowledge::tags::string_t string
::std::map< std::string, KnowledgeRecord > KnowledgeMap
double deadline_
Deadline for packets at which packets drop.
filters::BufferFilters buffer_filters_
buffer filters have an encode and decode method
int64_t max_send_bandwidth_
Maximum send bandwidth usage per second before packets drop.
Container for quality-of-service settings.
std::map< std::string, int > trusted_peers_
A container of all trusted peers.
std::list< BufferFilter * > BufferFilters
Definition: BufferFilter.h:56
std::map< std::string, int > banned_peers_
A container of all banned peers.
double packet_drop_rate_
Rate for dropping packets.
int64_t max_total_bandwidth_
Maximum bandwidth usage for the transport (receive/send) before drop.
uint64_t packet_drop_burst_
Burst of packet drops.
Copyright (c) 2015 Carnegie Mellon University.
Abstract base class for implementing buffer filters via a functor interface.
Definition: BufferFilter.h:26
Provides an interface for external functions into the MADARA KaRL variable settings.
knowledge::KnowledgeRecordFilters receive_filters_
A container for receive filters.
knowledge::KnowledgeRecordFilters rebroadcast_filters_
A container for rebroadcast filters.
PacketDropType
Enumeration for packet drop policy types.