Apama  9.12.0.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sag_connectivity_plugins.hpp
Go to the documentation of this file.
1  /*
2  * Title: sag_connectivity_plugins.hpp
3  * Description: C++ API for writing connectivity plugins
4  * $Copyright (c) 2015-2016 Software AG, Darmstadt, Germany and/or Software AG USA Inc., Reston, VA, USA, and/or its subsidiaries and/or its affiliates and/or their licensors.$
5  * Use, reproduction, transfer, publication or disclosure is prohibited except as specifically provided for in your License Agreement with Software AG
6  * @Version: $Id: sag_connectivity_plugins.hpp 291193 2016-09-21 11:56:23Z bsp $
7  */
8 
17 #ifndef _SAG_CONNECTIVITY_PLUGINS_HPP_
18 #define _SAG_CONNECTIVITY_PLUGINS_HPP_
19 
20 #include <sag_connectivity_cpp.hpp>
21 #include <memory>
22 
23 namespace com {
24 namespace softwareag {
25 namespace connectivity {
26 
33 class CacheOwner
34 {
35  friend class CacheForThisThread;
36 public:
38  CacheOwner();
40  ~CacheOwner();
41 private:
43  void *cache;
45  bool inuse;
46 };
47 
56 class CacheForThisThread
57 {
58 public:
60  CacheForThisThread(CacheOwner &owner);
62  ~CacheForThisThread();
63 private:
64  CacheOwner &owner;
65 };
66 
67 
68 
76 class Logger
77 {
78 public:
81 
86  Logger(const std::string &category): category("AP_LOG_"+category), prefix(category) {}
94  template<level_t LEVEL, typename... ARGS>
95  void log(const char *format, ARGS... args) const;
96 
104  template<typename... ARGS>
105  void log(level_t LEVEL, const char *format, ARGS... args) const;
113  template<level_t LEVEL, typename... ARGS>
114  void log(const std::string &format, ARGS... args) const;
115 
123  template<typename... ARGS>
124  void log(level_t LEVEL, const std::string &format, ARGS... args) const;
125 
126 
128  bool isEnabled(level_t LEVEL) const
129  {
130  return LEVEL <= getLevel();
131  }
132 
134  level_t getLevel() const;
135 
137  bool isCritEnabled() const { return isEnabled(SAG_LOG_CRIT); }
139  bool isFatalEnabled() const { return isEnabled(SAG_LOG_FATAL); }
141  bool isErrorEnabled() const { return isEnabled(SAG_LOG_ERROR); }
143  bool isWarnEnabled() const { return isEnabled(SAG_LOG_WARN); }
145  bool isInfoEnabled() const { return isEnabled(SAG_LOG_INFO); }
147  bool isDebugEnabled() const { return isEnabled(SAG_LOG_DEBUG); }
149  bool isTraceEnabled() const { return isEnabled(SAG_LOG_TRACE); }
150 
152  template<typename... ARGS> void crit(const char *format, ARGS... args) const { log<SAG_LOG_CRIT>(format, args...); }
154  template<typename... ARGS> void fatal(const char *format, ARGS... args) const { log<SAG_LOG_FATAL>(format, args...); }
156  template<typename... ARGS> void error(const char *format, ARGS... args) const { log<SAG_LOG_ERROR>(format, args...); }
158  template<typename... ARGS> void warn(const char *format, ARGS... args) const { log<SAG_LOG_WARN>(format, args...); }
160  template<typename... ARGS> void info(const char *format, ARGS... args) const { log<SAG_LOG_INFO>(format, args...); }
162  template<typename... ARGS> void debug(const char *format, ARGS... args) const { log<SAG_LOG_DEBUG>(format, args...); }
164  template<typename... ARGS> void trace(const char *format, ARGS... args) const { log<SAG_LOG_TRACE>(format, args...); }
165 
167  template<typename... ARGS> void crit(const std::string &format, ARGS... args) const { log<SAG_LOG_CRIT>(format, args...); }
169  template<typename... ARGS> void fatal(const std::string &format, ARGS... args) const { log<SAG_LOG_FATAL>(format, args...); }
171  template<typename... ARGS> void error(const std::string &format, ARGS... args) const { log<SAG_LOG_ERROR>(format, args...); }
173  template<typename... ARGS> void warn(const std::string &format, ARGS... args) const { log<SAG_LOG_WARN>(format, args...); }
175  template<typename... ARGS> void info(const std::string &format, ARGS... args) const { log<SAG_LOG_INFO>(format, args...); }
177  template<typename... ARGS> void debug(const std::string &format, ARGS... args) const { log<SAG_LOG_DEBUG>(format, args...); }
179  template<typename... ARGS> void trace(const std::string &format, ARGS... args) const { log<SAG_LOG_TRACE>(format, args...); }
180 
181 
182 private:
183  std::string category;
184  std::string prefix;
185 };
186 
187 
188 
199 {
200 public:
202 
204 
208  const map_t &getConfig() const { return config; }
209 
213  const std::string &getChainId() const { return chainId; }
214 
218  const std::string &getPluginName() const { return pluginName; }
219 
220 protected:
224  PluginConstructorParameters(const std::string &pluginName, const std::string &chainId, const map_t &config, void* connectivityManager, void* reserved)
225  : chainId(chainId), pluginName(pluginName), config(config.copy()), connectivityManager(connectivityManager), reserved(reserved)
226  {}
227 
228 private:
229  std::string chainId;
230  std::string pluginName;
231  map_t config;
233  void* connectivityManager;
235  void* reserved;
236 };
237 
240 {
241 public:
245  TransportConstructorParameters(const std::string &pluginName, const std::string &chainId, const map_t &config, void* connectivityManager, void* reserved)
246  : PluginConstructorParameters(pluginName, chainId, config, connectivityManager, reserved)
247  {}
248 };
249 
252 {
253 public:
257  CodecConstructorParameters(const std::string &pluginName, const std::string &chainId, const map_t &config, void* connectivityManager, void* reserved)
258  : PluginConstructorParameters(pluginName, chainId, config, connectivityManager, reserved)
259  {}
260 };
261 
269 class Plugin
270 {
271 public:
272  /* Legacy constructor.
273  */
274  Plugin(const std::string &pluginName, const std::string &chainId, const map_t &config)
275  : name(pluginName), chainId(chainId), config(config.copy()), LOGGER(name + "." + chainId), logger(name + "." + chainId)
276  {
277  logger.info("The %s connectivity plug-in in chain '%s' is using the legacy (std::string&,std::string&,map_t&) constructor which will be deprecated in a future release. We recommend changing to use the recommended (PluginConstructorParameters&) constructor instead.",
278  pluginName.c_str(), chainId.c_str());
279  }
280 
281  /* Constructor.
282  * @since 9.12.0.1
283  */
284  Plugin(const PluginConstructorParameters &params)
285  : name(params.getPluginName()), chainId(params.getChainId()), config(params.getConfig().copy()), LOGGER(params.getPluginName() + "." + params.getChainId()), logger(name + "." + chainId)
286  {}
287 
289  virtual ~Plugin() {}
290 
301  virtual void start() {}
302 
310  virtual void hostReady() {}
311 
327  virtual void shutdown() {}
329  const std::string &getName() const { return name; }
330 protected:
332  std::string name;
334  std::string chainId;
337 public:
344 
349 };
350 
355 class HostSide
356 {
357 public:
359  virtual ~HostSide() {}
361  typedef std::auto_ptr<HostSide> ptr_t;
378  virtual void sendBatchTowardsHost(Message *start, Message *end) = 0;
379 };
380 
386 {
387 public:
388  RemoteHostSide(sag_plugin_t other, sag_send_fn_t fn): other(other), fn(fn) {}
389  virtual ~RemoteHostSide() {}
390  virtual void sendBatchTowardsHost(Message *start, Message *end);
391 private:
392  sag_plugin_t other;
393  sag_send_fn_t fn;
394 };
395 
401 {
402 public:
404  virtual ~TransportSide() {}
406  typedef std::auto_ptr<TransportSide> ptr_t;
423  virtual void sendBatchTowardsTransport(Message *start, Message *end) = 0;
424 };
425 
431 {
432 public:
433  RemoteTransportSide(sag_plugin_t other, sag_send_fn_t fn): other(other), fn(fn) {}
434  virtual ~RemoteTransportSide() {}
435  virtual void sendBatchTowardsTransport(Message *start, Message *end);
436 private:
437  sag_plugin_t other;
438  sag_send_fn_t fn;
439 };
440 
441 
466 class AbstractCodec: public Plugin, public HostSide, public TransportSide
467 {
468 public:
470 
485  AbstractCodec(const std::string &pluginName, const std::string &chainId, const map_t &config)
486  : Plugin(pluginName, chainId, config)
487  {}
488 
498  : Plugin(params)
499  {}
500 
501  // these methods do not need to show up in doxygen
502  /* Called between construction and start() to set the hostSide field */
503  virtual void setNextTowardsHost(HostSide::ptr_t &&host)
504  {
505  hostSide = std::move(host);
506  }
507  /* Called between construction and start() to set the transportSide field */
508  virtual void setNextTowardsTransport(TransportSide::ptr_t &&transport)
509  {
510  transportSide = std::move(transport);
511  }
512 protected:
518 
524 };
525 
558 {
559 public:
561 
576  AbstractTransport(const std::string &name, const std::string &chainId, const map_t &config)
577  : Plugin(name, chainId, config)
578  {}
579 
589  : Plugin(params)
590  {}
591 
592  // this method does not need to show up in doxygen
593  /* Called between construction and start() to set the hostSide field */
594  virtual void setNextTowardsHost(HostSide::ptr_t &&host)
595  {
596  hostSide = std::move(host);
597  }
598 protected:
604 };
605 
622 {
623 public:
624 
639  AbstractSimpleTransport(const std::string &name, const std::string &chainId, const map_t &config)
640  : AbstractTransport(name, chainId, config)
641  {}
642 
652  : AbstractTransport(params)
653  {}
654 
655 
661  {
662  for (Message *it = start; it != end; ++it) {
663  try {
664  if (it->getPayload().empty()) {
666  } else {
668  }
669  } catch (...) {
670  handleException(*it);
671  }
672  }
673  }
675  virtual void deliverMessageTowardsTransport(Message &msg) = 0;
678  {
679  // do nothing
680  }
681 
700  virtual void handleException(Message &m)
701  {
702  try {
703  throw;
704  } catch (const std::exception &e) {
705  logger.warn("Caught exception delivering message: %s", e.what());
706  } catch (...) {
707  logger.warn("Caught unknown exception delivering message: %s");
708  }
709  }
710 };
711 
731 {
732 public:
747  AbstractSimpleCodec(const std::string &name, const std::string &chainId, const map_t &config)
748  : AbstractCodec(name, chainId, config)
749  {}
750 
760  : AbstractCodec(params)
761  {}
762 
769  {
770  Message *curr = start;
771  for (Message *it = start; it != end; ++it) {
772  bool rv;
773  try {
774  if (it->getPayload().empty()) {
776  } else {
777  rv = transformMessageTowardsHost(*it);
778  }
779  } catch (...) {
780  rv = handleException(*it, false);
781  }
782  // if we keep it (and it didn't throw) swap it with the accumulator
783  if (rv) {
784  if (it != curr) it->swap(std::move(*curr)); // don't self-swap
785  ++curr;
786  }
787  }
788  if (hostSide.get()) hostSide->sendBatchTowardsHost(start, curr);
789  }
796  {
797  Message *curr = start;
798  for (Message *it = start; it != end; ++it) {
799  bool rv;
800  try {
801  // process the message
802  if (it->getPayload().empty()) {
804  } else {
806  }
807  } catch (...) {
808  rv = handleException(*it, true);
809  }
810  // if we keep it (and it didn't throw) swap it with the accumulator
811  if (rv) {
812  if (it != curr) it->swap(std::move(*curr)); // don't self-swap
813  ++curr;
814  }
815  }
816  if (transportSide.get()) transportSide->sendBatchTowardsTransport(start, curr);
817  }
818 
822  virtual bool transformMessageTowardsHost(Message &msg) = 0;
826  virtual bool transformMessageTowardsTransport(Message &msg) = 0;
831  {
832  // do nothing
833  return true;
834  }
839  {
840  // do nothing
841  return true;
842  }
864  virtual bool handleException(Message &m, bool towardsTransport)
865  {
866  try {
867  throw;
868  } catch (const std::exception &e) {
869  logger.warn("Caught exception transforming message: %s", e.what());
870  } catch (...) {
871  logger.warn("Caught unknown exception transforming message");
872  }
873  return false;
874  }
875 };
876 
877 }}} // com.softwareag.connectivity
878 
879 // internal implementation included from these files
880 #include <sag_internal/exception.hpp>
881 #include <sag_internal/remote_plugins.hpp>
882 #include <sag_internal/plugin_macros.hpp>
883 #include <sag_internal/logging.hpp>
884 
894 #define SAG_DECLARE_CONNECTIVITY_TRANSPORT_CLASS(Class) _SAG_DECLARE_CONNECTIVITY_TRANSPORT_CLASS(Class)
895 
907 #define SAG_DECLARE_CONNECTIVITY_TRANSPORT(Class) _SAG_DECLARE_CONNECTIVITY_TRANSPORT_LEGACY(Class)
908 
918 #define SAG_DECLARE_CONNECTIVITY_CODEC_CLASS(Class) _SAG_DECLARE_CONNECTIVITY_CODEC_CLASS(Class)
919 
930 #define SAG_DECLARE_CONNECTIVITY_CODEC(Class) _SAG_DECLARE_CONNECTIVITY_CODEC_LEGACY(Class)
931 
932 #endif // _SAG_CONNECTIVITY_PLUGINS_HPP_
A container for parameters passed to the constructor of a codec plug-in.
Definition: sag_connectivity_plugins.hpp:251
Logger LOGGER
Legacy logging for writing to the host log file.
Definition: sag_connectivity_plugins.hpp:343
Base class that simplifies implementation of codec plug-ins that deal only with individual messages n...
Definition: sag_connectivity_plugins.hpp:730
AbstractTransport(const PluginConstructorParameters::TransportConstructorParameters &params)
Constructor.
Definition: sag_connectivity_plugins.hpp:588
Base class that simplifies implementation of transport plug-ins that deal only with individual messag...
Definition: sag_connectivity_plugins.hpp:621
Wrap the next plugin in order as a TransportSide object.
Definition: sag_connectivity_plugins.hpp:430
HostSide::ptr_t hostSide
The next plug-in in the chain towards host.
Definition: sag_connectivity_plugins.hpp:517
An interface to the next component (plugin or host) towards the host.
Definition: sag_connectivity_plugins.hpp:355
virtual void sendBatchTowardsHost(Message *start, Message *end)=0
Abstract method that must be implemented to handle delivery of a batch of messages heading towards th...
bool isDebugEnabled() const
Returns true if DEBUG messages will be written to the log.
Definition: sag_connectivity_plugins.hpp:147
void debug(const std::string &format, ARGS...args) const
Log a message at DEBUG level.
Definition: sag_connectivity_plugins.hpp:177
map_t config
The configuration of this plug-in.
Definition: sag_connectivity_plugins.hpp:336
bool isInfoEnabled() const
Returns true if INFO messages will be written to the log.
Definition: sag_connectivity_plugins.hpp:145
Fatal errors.
Definition: sag_connectivity_c.h:78
void warn(const char *format, ARGS...args) const
Log a message at WARN level.
Definition: sag_connectivity_plugins.hpp:158
Class for writing to the host logger.
Definition: sag_connectivity_plugins.hpp:76
void error(const char *format, ARGS...args) const
Log a message at ERROR level.
Definition: sag_connectivity_plugins.hpp:156
Trace.
Definition: sag_connectivity_c.h:88
std::string name
The name used for this plug-in in the configuration file.
Definition: sag_connectivity_plugins.hpp:332
Contains the C++ implementation of the underlying datatypes used by connectivity plugins and their ac...
bool isTraceEnabled() const
Returns true if TRACE messages will be written to the log.
Definition: sag_connectivity_plugins.hpp:149
bool isErrorEnabled() const
Returns true if ERROR messages will be written to the log.
Definition: sag_connectivity_plugins.hpp:141
virtual void sendBatchTowardsTransport(Message *start, Message *end)
Implements batch sending, calling deliverMessageTowardsTransport(Message&) for each message individua...
Definition: sag_connectivity_plugins.hpp:660
Base of the inheritance tree for Connectivity plugins.
Definition: sag_connectivity_plugins.hpp:269
void warn(const std::string &format, ARGS...args) const
Log a message at WARN level.
Definition: sag_connectivity_plugins.hpp:173
sag_log_level_t level_t
The available log levels.
Definition: sag_connectivity_plugins.hpp:80
TransportSide::ptr_t transportSide
The next plug-in in the chain towards transport.
Definition: sag_connectivity_plugins.hpp:523
virtual void sendBatchTowardsTransport(Message *start, Message *end)=0
Abstract method that must be implemented to handle delivery of a batch of messages heading towards th...
void crit(const std::string &format, ARGS...args) const
Log a message at CRIT level.
Definition: sag_connectivity_plugins.hpp:167
Debug messages.
Definition: sag_connectivity_c.h:86
Critical log messages.
Definition: sag_connectivity_c.h:76
Definition: sag_connectivity_threading.h:178
std::auto_ptr< TransportSide > ptr_t
Pointers to TransportSides should always be this ptr_t type, which is a std::auto_ptr.
Definition: sag_connectivity_plugins.hpp:406
AbstractSimpleTransport(const PluginConstructorParameters::TransportConstructorParameters &params)
Constructor.
Definition: sag_connectivity_plugins.hpp:651
Logger logger
Logging for writing to the host log file.
Definition: sag_connectivity_plugins.hpp:348
void info(const char *format, ARGS...args) const
Log a message at INFO level.
Definition: sag_connectivity_plugins.hpp:160
virtual bool transformNullPayloadTowardsTransport(Message &msg)
Transform a message with a null payload in a transport-wards direction.
Definition: sag_connectivity_plugins.hpp:838
virtual void start()
Called when an entire chain has been created and the plugin is allowed to start up (after all plugins...
Definition: sag_connectivity_plugins.hpp:301
sag_log_level_t
Log levels for logging to the system log.
Definition: sag_connectivity_c.h:73
Non-fatal errors.
Definition: sag_connectivity_c.h:80
void fatal(const char *format, ARGS...args) const
Log a message at FATAL level.
Definition: sag_connectivity_plugins.hpp:154
virtual ~TransportSide()
Ensure virtual destruction.
Definition: sag_connectivity_plugins.hpp:404
Base class for transport plug-ins.
Definition: sag_connectivity_plugins.hpp:557
void error(const std::string &format, ARGS...args) const
Log a message at ERROR level.
Definition: sag_connectivity_plugins.hpp:171
Logger(const std::string &category)
Construct a logger for the given category.
Definition: sag_connectivity_plugins.hpp:86
AbstractSimpleTransport(const std::string &name, const std::string &chainId, const map_t &config)
Legacy constructor.
Definition: sag_connectivity_plugins.hpp:639
Informational messages (default)
Definition: sag_connectivity_c.h:84
virtual void handleException(Message &m)
Handle an exception thrown while delivering a message towards the transport.
Definition: sag_connectivity_plugins.hpp:700
bool isCritEnabled() const
Returns true if CRIT messages will be written to the log.
Definition: sag_connectivity_plugins.hpp:137
Wrap the next plugin in order as a HostSide object.
Definition: sag_connectivity_plugins.hpp:385
virtual ~HostSide()
Ensure virtual destruction.
Definition: sag_connectivity_plugins.hpp:359
AbstractSimpleCodec(const PluginConstructorParameters::CodecConstructorParameters &params)
Constructor.
Definition: sag_connectivity_plugins.hpp:759
virtual void hostReady()
Called some time after start(), when the host is ready to start receiving input (sends will be queued...
Definition: sag_connectivity_plugins.hpp:310
bool isEnabled(level_t LEVEL) const
Returns true if messages at the given level will be written to the log file.
Definition: sag_connectivity_plugins.hpp:128
Base class for codec plug-ins.
Definition: sag_connectivity_plugins.hpp:466
void trace(const char *format, ARGS...args) const
Log a message at TRACE level.
Definition: sag_connectivity_plugins.hpp:164
virtual bool transformMessageTowardsTransport(Message &msg)=0
Abstract method that must be implemented to handle transformation of an individual message in a trans...
void log(const char *format, ARGS...args) const
Log a message at a given level.
AbstractSimpleCodec(const std::string &name, const std::string &chainId, const map_t &config)
Legacy constructor.
Definition: sag_connectivity_plugins.hpp:747
virtual bool transformMessageTowardsHost(Message &msg)=0
Abstract method that must be implemented to handle transformation of an individual message...
A map class which implements many of the functions on std::map.
Definition: sag_connectivity_cpp.hpp:723
const std::string & getPluginName() const
Get the name used in the configuration file for this plug-in.
Definition: sag_connectivity_plugins.hpp:218
A container for an payload and associated metadata.
Definition: sag_connectivity_cpp.hpp:1545
virtual void shutdown()
Release any resources created by the connectivity plug-in, and terminate and join any background thre...
Definition: sag_connectivity_plugins.hpp:327
level_t getLevel() const
Returns the current log level.
void fatal(const std::string &format, ARGS...args) const
Log a message at FATAL level.
Definition: sag_connectivity_plugins.hpp:169
virtual void sendBatchTowardsHost(Message *start, Message *end)
Implements batch sending, calling transformMessageTowardsHost(Message &) for each message individuall...
Definition: sag_connectivity_plugins.hpp:768
An interface to the next component (plugin or host) towards the transport.
Definition: sag_connectivity_plugins.hpp:400
AbstractCodec(const PluginConstructorParameters::CodecConstructorParameters &params)
Constructor.
Definition: sag_connectivity_plugins.hpp:497
virtual void deliverMessageTowardsTransport(Message &msg)=0
Abstract method that must be implemented to handle delivery of an individual message.
virtual void deliverNullPayloadTowardsTransport(Message &msg)
Deliver a message with a null payload.
Definition: sag_connectivity_plugins.hpp:677
void crit(const char *format, ARGS...args) const
Log a message at CRIT level.
Definition: sag_connectivity_plugins.hpp:152
void debug(const char *format, ARGS...args) const
Log a message at DEBUG level.
Definition: sag_connectivity_plugins.hpp:162
AbstractCodec(const std::string &pluginName, const std::string &chainId, const map_t &config)
Legacy constructor.
Definition: sag_connectivity_plugins.hpp:485
void info(const std::string &format, ARGS...args) const
Log a message at INFO level.
Definition: sag_connectivity_plugins.hpp:175
A container for parameters passed to the constructor of a transport plug-in.
Definition: sag_connectivity_plugins.hpp:239
bool isFatalEnabled() const
Returns true if FATAL messages will be written to the log.
Definition: sag_connectivity_plugins.hpp:139
map_t copy() const
Return a deep copy of this map.
Definition: sag_connectivity_cpp.hpp:874
AbstractTransport(const std::string &name, const std::string &chainId, const map_t &config)
Legacy constructor.
Definition: sag_connectivity_plugins.hpp:576
const std::string & getChainId() const
Get the identifier used for the chain this plug-in is part of.
Definition: sag_connectivity_plugins.hpp:213
A base interface for parameters passed to the constructor of transport or codec plug-ins.
Definition: sag_connectivity_plugins.hpp:198
virtual bool handleException(Message &m, bool towardsTransport)
Handle an exception thrown while delivering a message.
Definition: sag_connectivity_plugins.hpp:864
std::string chainId
The identifier used for the chain this plug-in is part of.
Definition: sag_connectivity_plugins.hpp:334
virtual void sendBatchTowardsHost(Message *start, Message *end)
Abstract method that must be implemented to handle delivery of a batch of messages heading towards th...
void trace(const std::string &format, ARGS...args) const
Log a message at TRACE level.
Definition: sag_connectivity_plugins.hpp:179
const map_t & getConfig() const
Get the configuration for this plug-in.
Definition: sag_connectivity_plugins.hpp:208
virtual void sendBatchTowardsTransport(Message *start, Message *end)
Implements batch sending, calling transformMessageTowardsTransport(Message &) for each message indivi...
Definition: sag_connectivity_plugins.hpp:795
bool isWarnEnabled() const
Returns true if WARN messages will be written to the log.
Definition: sag_connectivity_plugins.hpp:143
std::auto_ptr< HostSide > ptr_t
Pointers to HostSides should always be this ptr_t type, which is a std::auto_ptr. ...
Definition: sag_connectivity_plugins.hpp:361
virtual ~Plugin()
Virtual destructor to ensure that we can delete any part of the tree.
Definition: sag_connectivity_plugins.hpp:289
Warnings.
Definition: sag_connectivity_c.h:82
HostSide::ptr_t hostSide
The next plug-in in the chain towards host.
Definition: sag_connectivity_plugins.hpp:603
virtual void sendBatchTowardsTransport(Message *start, Message *end)
Abstract method that must be implemented to handle delivery of a batch of messages heading towards th...
const std::string & getName() const
Return the name of this plugin instance.
Definition: sag_connectivity_plugins.hpp:329
virtual bool transformNullPayloadTowardsHost(Message &msg)
Transform a message with a null payload in a host-wards direction.
Definition: sag_connectivity_plugins.hpp:830