26 #error C++ is required
29 #include <yateclass.h>
54 explicit Configuration(
const char* filename,
bool warn =
true);
67 {
return m_sections.length(); }
73 inline unsigned int count()
const
74 {
return m_sections.count(); }
81 NamedList* getSection(
unsigned int index)
const;
105 const char* getValue(
const String& sect,
const String& key,
const char* defvalue = 0)
const;
118 int getIntValue(
const String& sect,
const String& key,
int defvalue = 0,
119 int minvalue = INT_MIN,
int maxvalue = INT_MAX,
bool clamp =
true)
const;
129 int getIntValue(
const String& sect,
const String& key,
const TokenDict* tokens,
int defvalue = 0)
const;
142 int64_t getInt64Value(
const String& sect,
const String& key, int64_t defvalue = 0,
143 int64_t minvalue = LLONG_MIN, int64_t maxvalue = LLONG_MAX,
bool clamp =
true)
const;
152 double getDoubleValue(
const String& sect,
const String& key,
double defvalue = 0.0)
const;
161 bool getBoolValue(
const String& sect,
const String& key,
bool defvalue =
false)
const;
167 void clearSection(
const char* sect = 0);
189 void addValue(
const String& sect,
const char* key,
const char* value = 0);
197 void setValue(
const String& sect,
const char* key,
const char* value = 0);
205 void setValue(
const String& sect,
const char* key,
int value);
213 void setValue(
const String& sect,
const char* key,
bool value);
220 bool load(
bool warn =
true);
231 bool loadFile(
const char* file,
String sect,
unsigned int depth,
bool warn);
246 :
Mutex(false,
"SharedVars"), m_vars(
"")
261 void set(
const String& name,
const char* val);
269 bool create(
const String& name,
const char* val = 0);
275 void clear(
const String& name);
282 bool exists(
const String& name);
290 unsigned int inc(
const String& name,
unsigned int wrap = 0);
298 unsigned int dec(
const String& name,
unsigned int wrap = 0);
304 class MessageDispatcher;
323 explicit Message(
const char* name,
const char* retval = 0,
bool broadcast =
false);
350 virtual void* getObject(
const String& name)
const;
387 {
return m_data ? m_data->getObject(name) : 0; }
396 { m_notify = notify; }
403 {
return m_broadcast; }
430 String encode(
const char*
id)
const;
438 String encode(
bool received,
const char*
id)
const;
448 int decode(
const char* str,
String&
id);
459 int decode(
const char* str,
bool& received,
const char*
id);
468 virtual void dispatched(
bool accepted);
478 void commonEncode(
String& str)
const;
479 int commonDecode(
const char* str,
int offs);
500 explicit MessageHandler(
const char* name,
unsigned priority = 100,
501 const char* trackName = 0,
bool addPriority =
true);
518 virtual bool received(
Message& msg) = 0;
525 {
return m_priority; }
532 {
return m_trackName; }
540 {
if (!m_dispatcher) m_trackName = name; }
547 {
return m_counter; }
559 {
return m_filterRegexp; }
573 inline void setFilter(
const char* name,
const char* value)
593 virtual bool receivedInternal(
Message& msg);
598 void safeNowInternal();
623 virtual bool received(
Message& msg,
int id) = 0;
644 int priority = 100,
const char* trackName = 0,
bool addPriority =
true)
646 m_receiver(receiver), m_id(id)
656 {
return m_receiver && m_receiver->received(msg,m_id); }
662 inline int id()
const
670 virtual bool receivedInternal(
Message& msg);
696 virtual void dispatched(
const Message& msg,
bool handled) = 0;
736 {
return m_trackParam; }
791 { m_warnTime = usec; }
797 { m_handlers.clear(); m_hookAppend = &m_hooks; m_hooks.clear(); }
804 {
return m_messages.get() || m_messages.next(); }
811 {
return m_handlers.get() || m_handlers.next(); }
818 {
return m_hooks.get() || m_hooks.next(); }
824 unsigned int messageCount();
830 unsigned int handlerCount();
836 unsigned int postHookCount();
843 {
return m_enqueueCount; }
850 {
return m_dequeueCount; }
857 {
return m_dispatchCount; }
864 {
return m_queuedMax; }
872 {
return usec ? m_msgAvgAge : ((m_msgAvgAge + 500) / 1000); }
881 void getStats(u_int64_t& enqueued, u_int64_t& dequeued, u_int64_t& dispatched, u_int64_t& queueMax);
896 { m_trackParam = paramName; }
906 unsigned int m_changes;
907 u_int64_t m_warnTime;
908 u_int64_t m_enqueueCount;
909 u_int64_t m_dequeueCount;
910 u_int64_t m_dispatchCount;
911 u_int64_t m_queuedMax;
912 u_int64_t m_msgAvgAge;
929 virtual bool enqueue(
Message* msg) = 0;
934 virtual void clear() = 0;
941 virtual bool matchesFilter(
const Message& msg) = 0;
971 virtual bool enqueue(
Message* msg);
984 void addFilter(
const char* name,
const char* value);
990 void removeFilter(
const String& name);
995 virtual void clear();
1001 void removeThread(
Thread* thread);
1015 {
return m_filters; }
1022 virtual bool matchesFilter(
const Message& msg);
1030 virtual void received(
Message& msg);
1037 unsigned int m_count;
1059 explicit Plugin(
const char* name,
bool earlyInit =
false);
1080 virtual void* getObject(
const String& name)
const;
1085 virtual void initialize() = 0;
1106 {
return m_counter; }
1137 #define INIT_PLUGIN(pclass) static pclass __plugin
1138 #ifdef DISABLE_UNLOAD
1139 #define UNLOAD_PLUGIN(arg) static bool _unused_unload(bool arg)
1142 #define UNLOAD_PLUGIN(arg) extern "C" __declspec(dllexport) bool _unload(bool arg)
1144 #define UNLOAD_PLUGIN(arg) extern "C" bool _unload(bool arg)
1169 virtual bool check(
const ObjList* cmds) = 0;
1191 friend class EnginePrivate;
1192 friend class EngineCommand;
1235 static int main(
int argc,
const char** argv,
const char** env,
1236 RunMode mode = Console,
EngineLoop loop = 0,
bool fail =
false);
1243 static void help(
bool client,
bool errout =
false);
1255 int engineCleanup();
1281 return (s_congestion && (s_accept < Congestion)) ? Congestion : s_accept;
1297 return s_callAccept;
1304 static void setCongestion(
const char* reason = 0);
1311 {
return s_congestion; }
1318 {
return (s_mode ==
Client) || (s_mode == ClientProxy); }
1326 static bool Register(
const Plugin* plugin,
bool reg =
true);
1340 {
return s_shrpath; }
1348 static String configFile(
const char* name,
bool user =
false);
1355 static const String& configPath(
bool user =
false);
1362 {
return s_cfgsuffix; }
1368 {
return s_modpath; }
1375 static void extraPath(
const String& path);
1383 static void userPath(
const String& path);
1390 {
return s_modsuffix; }
1396 static const char* pathSeparator();
1411 static unsigned int runId();
1418 {
return s_params; }
1430 static bool init(
const String& name);
1436 static void halt(
unsigned int code);
1444 static bool restart(
unsigned int code,
bool gracefull =
false);
1451 {
return s_started; }
1458 {
return (s_haltcode != -1); }
1480 static bool enqueue(
Message* msg,
bool skipHooks =
false);
1489 inline static bool enqueue(
const char* name,
bool broadcast =
false)
1490 {
return name && *name && enqueue(
new Message(name,0,broadcast)); }
1497 static bool dispatch(
Message* msg);
1504 static bool dispatch(
Message& msg);
1513 static bool dispatch(
const char* name,
bool broadcast =
false);
1521 { m_dispatcher.setHook(hook,
remove); }
1528 {
return s_self ? s_self->m_dispatcher.trackParam() :
String::empty(); }
1554 {
return m_dispatcher.messageCount(); }
1561 {
return m_dispatcher.handlerCount(); }
1568 {
return m_dispatcher.postHookCount(); }
1575 {
return m_messageRate; }
1582 {
return m_maxMsgRate; }
1590 {
return (
unsigned int)m_dispatcher.messageAge(usec); }
1599 inline void getStats(u_int64_t& enqueued, u_int64_t& dequeued, u_int64_t& dispatched, u_int64_t& queueMax)
1600 { m_dispatcher.getStats(enqueued,dequeued,dispatched,queueMax); }
1606 { m_maxMsgRate = m_messageRate; m_dispatcher.m_queuedMax = m_dispatcher.messageCount(); }
1614 {
return !!m_libs[name]; }
1621 bool loadPluginDir(
const String& relPath);
1627 static void pluginMode(PluginMode mode);
1640 static void clearEvents(
const String& type);
1654 static void buildCmdLine(
String& line);
1664 static void initLibrary(
const String& line,
String* output = 0);
1671 static int cleanupLibrary();
1687 bool loadPlugin(
const char* file,
bool local =
false,
bool nounload =
false);
1701 void internalStatisticsStart();
1702 void tryPluginFile(
const String& name,
const String& path,
bool defload);
1705 uint64_t m_dispatchedLast;
1706 unsigned int m_messageRate;
1707 unsigned int m_maxMsgRate;
1708 bool m_rateCongested;
1709 bool m_queueCongested;
1710 bool m_ageCongested;
1714 static String s_cfgsuffix;
1716 static String s_modsuffix;
1719 static int s_haltcode;
1720 static RunMode s_mode;
1721 static bool s_started;
1722 static unsigned int s_congestion;
1723 static CallAccept s_accept;
bool hasHooks() const
Definition: yatengine.h:817
unsigned int messageAge(bool usec=false) const
Definition: yatengine.h:1589
virtual bool received(Message &msg)
Definition: yatengine.h:655
static bool enqueue(const char *name, bool broadcast=false)
Definition: yatengine.h:1489
unsigned int messageMaxRate() const
Definition: yatengine.h:1581
static RunMode mode()
Definition: yatengine.h:1273
Engine checker interface.
Definition: yatengine.h:1154
bool hasHandlers() const
Definition: yatengine.h:810
Post-dispatching message hook that can be added to a list.
Definition: yatengine.h:705
Definition: yateclass.h:1173
A regexp matching class.
Definition: yateclass.h:3270
u_int64_t enqueueCount() const
Definition: yatengine.h:842
Post-dispatching message hook.
Definition: yatengine.h:683
unsigned int messageRate() const
Definition: yatengine.h:1574
unsigned int count() const
Definition: yatengine.h:1007
Thread support class.
Definition: yateclass.h:6004
const String & trackParam() const
Definition: yatengine.h:735
unsigned priority() const
Definition: yatengine.h:524
String & retValue()
Definition: yatengine.h:356
void resetMax()
Definition: yatengine.h:1605
static const String & nodeName()
Definition: yatengine.h:1332
static CallAccept accept()
Definition: yatengine.h:1280
const Time & msgTime() const
Definition: yatengine.h:416
void * userObject(const String &name) const
Definition: yatengine.h:386
unsigned int postHookCount()
Definition: yatengine.h:1567
static const TokenDict * getCallAcceptStates()
Definition: yatengine.h:1296
Configuration file handling.
Definition: yatengine.h:40
NamedCounter * objectsCounter() const
Definition: yatengine.h:546
unsigned int sections() const
Definition: yatengine.h:66
A multiple message receiver.
Definition: yatengine.h:614
MessageRelay(const char *name, MessageReceiver *receiver, int id, int priority=100, const char *trackName=0, bool addPriority=true)
Definition: yatengine.h:643
int(* EngineLoop)()
Definition: yatengine.h:1181
static void setAccept(CallAccept ca)
Definition: yatengine.h:1288
A message dispatching hub.
Definition: yatengine.h:715
A message handler relay.
Definition: yatengine.h:630
static const String & sharedPath()
Definition: yatengine.h:1339
Configuration & operator=(const String &value)
Definition: yatengine.h:59
Time & msgTime()
Definition: yatengine.h:409
void warnTime(u_int64_t usec)
Definition: yatengine.h:790
int id() const
Definition: yatengine.h:662
bool pluginLoaded(const String &name) const
Definition: yatengine.h:1613
String & operator=(const String &value)
Definition: yateclass.h:2567
PluginMode
Definition: yatengine.h:1219
A message queue.
Definition: yatengine.h:950
void destruct(GenObject *obj)
Definition: yateclass.h:1157
static bool exiting()
Definition: yatengine.h:1457
static const String & configSuffix()
Definition: yatengine.h:1361
static const NamedList & runParams()
Definition: yatengine.h:1417
static const String & trackParam()
Definition: yatengine.h:1527
A time holding class.
Definition: yateclass.h:3926
bool hasMessages() const
Definition: yatengine.h:803
const String & retValue() const
Definition: yatengine.h:363
A holder for a debug level.
Definition: yateclass.h:311
A message container class.
Definition: yatengine.h:312
static const String & modulePath()
Definition: yatengine.h:1367
void getStats(u_int64_t &enqueued, u_int64_t &dequeued, u_int64_t &dispatched, u_int64_t &queueMax)
Definition: yatengine.h:1599
Atomic access and operations to shared variables.
Definition: yatengine.h:239
void setHook(MessagePostHook *hook, bool remove=false)
Definition: yatengine.h:1520
u_int64_t messageAge(bool usec=false) const
Definition: yatengine.h:871
RefObject * userData() const
Definition: yatengine.h:370
static bool clientMode()
Definition: yatengine.h:1317
virtual const String & toString() const
Definition: yatengine.h:1072
const Regexp * filterRegexp() const
Definition: yatengine.h:558
void setFilter(const char *name, const char *value)
Definition: yatengine.h:573
A named string class.
Definition: yateclass.h:3480
unsigned int handlerCount()
Definition: yatengine.h:1560
const NamedString * filter() const
Definition: yatengine.h:552
void trackParam(const char *paramName)
Definition: yatengine.h:895
u_int64_t queuedMax() const
Definition: yatengine.h:863
SharedVars()
Definition: yatengine.h:245
A named string container class.
Definition: yateclass.h:5015
void INIT_PLUGIN(class pclass)
A message handler.
Definition: yatengine.h:488
u_int64_t dequeueCount() const
Definition: yatengine.h:849
void clear()
Definition: yatengine.h:796
unsigned int count() const
Definition: yatengine.h:73
u_int64_t dispatchCount() const
Definition: yatengine.h:856
Definition: yateclass.h:219
bool broadcast() const
Definition: yatengine.h:402
A C-style string handling class.
Definition: yateclass.h:2130
Definition: yateclass.h:848
void setNotify(bool notify=true)
Definition: yatengine.h:395
const String & name() const
Definition: yatengine.h:1098
static const String & moduleSuffix()
Definition: yatengine.h:1389
An object list class.
Definition: yateclass.h:1453
bool UNLOAD_PLUGIN(bool unloadNow)
static unsigned int getCongestion()
Definition: yatengine.h:1310
const NamedList & getFilters() const
Definition: yatengine.h:1014
static const String & empty()
virtual bool isBusy() const
Definition: yatengine.h:1091
const String & trackName() const
Definition: yatengine.h:531
Message & operator=(const char *value)
Definition: yatengine.h:422
Plugin support.
Definition: yatengine.h:1051
RunMode
Definition: yatengine.h:1198
Mutex support.
Definition: yateclass.h:5606
Engine globals.
Definition: yatengine.h:1189
Definition: yateclass.h:1048
void trackName(const char *name)
Definition: yatengine.h:539
static bool started()
Definition: yatengine.h:1450
unsigned int messageCount()
Definition: yatengine.h:1553
virtual ~EngineCheck()
Definition: yatengine.h:1160
bool earlyInit() const
Definition: yatengine.h:1112
Abstract message hook.
Definition: yatengine.h:921
NamedCounter * objectsCounter() const
Definition: yatengine.h:1105
Class that runs the User Interface.
Definition: yatecbase.h:993
Atomic counter with name.
Definition: yateclass.h:3601