mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-29 16:44:29 +02:00
Cleaned up code.
This commit is contained in:
parent
877c7a09b2
commit
df4c8b9bae
2
Doxyfile
2
Doxyfile
@ -1469,7 +1469,7 @@ ENABLE_PREPROCESSING = YES
|
|||||||
# compilation will be performed. Macro expansion can be done in a controlled
|
# compilation will be performed. Macro expansion can be done in a controlled
|
||||||
# way by setting EXPAND_ONLY_PREDEF to YES.
|
# way by setting EXPAND_ONLY_PREDEF to YES.
|
||||||
|
|
||||||
MACRO_EXPANSION = NO
|
MACRO_EXPANSION = YES
|
||||||
|
|
||||||
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
|
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
|
||||||
# then the macro expansion is limited to the macros specified with the
|
# then the macro expansion is limited to the macros specified with the
|
||||||
|
@ -21,7 +21,7 @@ libbase_la_SOURCES = \
|
|||||||
delegate.h \
|
delegate.h \
|
||||||
dictionary.cpp \
|
dictionary.cpp \
|
||||||
dictionary.h \
|
dictionary.h \
|
||||||
event.h \
|
observable.h \
|
||||||
exception.cpp \
|
exception.cpp \
|
||||||
exception.h \
|
exception.h \
|
||||||
fifo.cpp \
|
fifo.cpp \
|
||||||
|
@ -460,12 +460,12 @@ int Application::Run(int argc, char **argv)
|
|||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
result = Main(m_Arguments);
|
result = Main(m_Arguments);
|
||||||
} catch (const Exception& ex) {
|
} catch (const exception& ex) {
|
||||||
Application::Instance.reset();
|
Application::Instance.reset();
|
||||||
|
|
||||||
Application::Log("---");
|
Application::Log("---");
|
||||||
Application::Log("Exception: " + Utility::GetTypeName(ex));
|
Application::Log("Exception: " + Utility::GetTypeName(ex));
|
||||||
Application::Log("Message: " + ex.GetMessage());
|
Application::Log("Message: " + string(ex.what()));
|
||||||
|
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
<ClInclude Include="cxx11-compat.h" />
|
<ClInclude Include="cxx11-compat.h" />
|
||||||
<ClInclude Include="delegate.h" />
|
<ClInclude Include="delegate.h" />
|
||||||
<ClInclude Include="dictionary.h" />
|
<ClInclude Include="dictionary.h" />
|
||||||
<ClInclude Include="event.h" />
|
<ClInclude Include="observable.h" />
|
||||||
<ClInclude Include="exception.h" />
|
<ClInclude Include="exception.h" />
|
||||||
<ClInclude Include="fifo.h" />
|
<ClInclude Include="fifo.h" />
|
||||||
<ClInclude Include="i2-base.h" />
|
<ClInclude Include="i2-base.h" />
|
||||||
|
@ -50,8 +50,8 @@ public:
|
|||||||
|
|
||||||
void ForEachObject(function<int (const EventArgs&)> callback);
|
void ForEachObject(function<int (const EventArgs&)> callback);
|
||||||
|
|
||||||
Event<EventArgs> OnObjectCommitted;
|
Observable<EventArgs> OnObjectCommitted;
|
||||||
Event<EventArgs> OnObjectRemoved;
|
Observable<EventArgs> OnObjectRemoved;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -45,8 +45,8 @@ public:
|
|||||||
void ForEachObject(const string& type,
|
void ForEachObject(const string& type,
|
||||||
function<int (const EventArgs&)> callback);
|
function<int (const EventArgs&)> callback);
|
||||||
|
|
||||||
Event<EventArgs> OnObjectCommitted;
|
Observable<EventArgs> OnObjectCommitted;
|
||||||
Event<EventArgs> OnObjectRemoved;
|
Observable<EventArgs> OnObjectRemoved;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,65 +21,6 @@
|
|||||||
|
|
||||||
using namespace icinga;
|
using namespace icinga;
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves a value from the dictionary.
|
|
||||||
*
|
|
||||||
* @param key The key.
|
|
||||||
* @param value Pointer to the value.
|
|
||||||
* @returns true if the value was retrieved, false otherwise.
|
|
||||||
*/
|
|
||||||
bool Dictionary::GetProperty(string key, Variant *value) const
|
|
||||||
{
|
|
||||||
ConstDictionaryIterator i = m_Data.find(key);
|
|
||||||
|
|
||||||
if (i == m_Data.end())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
*value = i->second;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a value in the dictionary.
|
|
||||||
*
|
|
||||||
* @param key The key.
|
|
||||||
* @param value The value.
|
|
||||||
*/
|
|
||||||
void Dictionary::SetProperty(string key, const Variant& value)
|
|
||||||
{
|
|
||||||
DictionaryIterator i = m_Data.find(key);
|
|
||||||
|
|
||||||
Variant oldValue;
|
|
||||||
if (i != m_Data.end()) {
|
|
||||||
oldValue = i->second;
|
|
||||||
m_Data.erase(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Data[key] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves a value from the dictionary.
|
|
||||||
*
|
|
||||||
* @param key The key.
|
|
||||||
* @param value Pointer to the value.
|
|
||||||
* @returns true if the value was retrieved, false otherwise.
|
|
||||||
*/
|
|
||||||
bool Dictionary::GetProperty(string key, Dictionary::Ptr *value) const
|
|
||||||
{
|
|
||||||
Object::Ptr object;
|
|
||||||
|
|
||||||
if (!GetProperty(key, &object))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
Dictionary::Ptr dictionary = dynamic_pointer_cast<Dictionary>(object);
|
|
||||||
if (!dictionary)
|
|
||||||
throw InvalidArgumentException();
|
|
||||||
|
|
||||||
*value = dictionary;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an iterator to the beginning of the dictionary.
|
* Returns an iterator to the beginning of the dictionary.
|
||||||
*
|
*
|
||||||
@ -109,25 +50,3 @@ long Dictionary::GetLength(void) const
|
|||||||
{
|
{
|
||||||
return m_Data.size();
|
return m_Data.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds an unnamed value to the dictionary.
|
|
||||||
*
|
|
||||||
* @param value The value.
|
|
||||||
*/
|
|
||||||
void Dictionary::AddUnnamedProperty(const Variant& value)
|
|
||||||
{
|
|
||||||
map<string, Variant>::const_iterator it;
|
|
||||||
string key;
|
|
||||||
long index = GetLength();
|
|
||||||
do {
|
|
||||||
stringstream s;
|
|
||||||
s << "_" << index;
|
|
||||||
index++;
|
|
||||||
|
|
||||||
key = s.str();
|
|
||||||
it = m_Data.find(key);
|
|
||||||
} while (it != m_Data.end());
|
|
||||||
|
|
||||||
m_Data[key] = value;
|
|
||||||
}
|
|
||||||
|
@ -38,29 +38,64 @@ public:
|
|||||||
typedef shared_ptr<Dictionary> Ptr;
|
typedef shared_ptr<Dictionary> Ptr;
|
||||||
typedef weak_ptr<Dictionary> WeakPtr;
|
typedef weak_ptr<Dictionary> WeakPtr;
|
||||||
|
|
||||||
bool GetProperty(string key, Variant *value) const;
|
/**
|
||||||
void SetProperty(string key, const Variant& value);
|
* Retrieves a value from the dictionary.
|
||||||
|
*
|
||||||
|
* @param key The key.
|
||||||
|
* @param value Pointer to the value.
|
||||||
|
* @returns true if the value was retrieved, false otherwise.
|
||||||
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
bool GetProperty(string key, T *value) const
|
bool GetProperty(string key, T *value) const
|
||||||
{
|
{
|
||||||
Variant data;
|
ConstDictionaryIterator i = m_Data.find(key);
|
||||||
|
|
||||||
if (!GetProperty(key, &data))
|
if (i == m_Data.end())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
*value = data;
|
*value = i->second;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetProperty(string key, Dictionary::Ptr *value) const;
|
/**
|
||||||
|
* Sets a value in the dictionary.
|
||||||
|
*
|
||||||
|
* @param key The key.
|
||||||
|
* @param value The value.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
void SetProperty(string key, const T& value)
|
||||||
|
{
|
||||||
|
m_Data[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds an unnamed value to the dictionary.
|
||||||
|
*
|
||||||
|
* @param value The value.
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
void AddUnnamedProperty(const T& value)
|
||||||
|
{
|
||||||
|
DictionaryIterator it;
|
||||||
|
string key;
|
||||||
|
long index = GetLength();
|
||||||
|
do {
|
||||||
|
stringstream s;
|
||||||
|
s << "_" << index;
|
||||||
|
index++;
|
||||||
|
|
||||||
|
key = s.str();
|
||||||
|
it = m_Data.find(key);
|
||||||
|
} while (it != m_Data.end());
|
||||||
|
|
||||||
|
SetProperty(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
DictionaryIterator Begin(void);
|
DictionaryIterator Begin(void);
|
||||||
DictionaryIterator End(void);
|
DictionaryIterator End(void);
|
||||||
|
|
||||||
void AddUnnamedProperty(const Variant& value);
|
|
||||||
|
|
||||||
long GetLength(void) const;
|
long GetLength(void) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
92
base/event.h
92
base/event.h
@ -1,92 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
* Icinga 2 *
|
|
||||||
* Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) *
|
|
||||||
* *
|
|
||||||
* This program is free software; you can redistribute it and/or *
|
|
||||||
* modify it under the terms of the GNU General Public License *
|
|
||||||
* as published by the Free Software Foundation; either version 2 *
|
|
||||||
* of the License, or (at your option) any later version. *
|
|
||||||
* *
|
|
||||||
* This program is distributed in the hope that it will be useful, *
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
||||||
* GNU General Public License for more details. *
|
|
||||||
* *
|
|
||||||
* You should have received a copy of the GNU General Public License *
|
|
||||||
* along with this program; if not, write to the Free Software Foundation *
|
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#ifndef EVENT_H
|
|
||||||
#define EVENT_H
|
|
||||||
|
|
||||||
namespace icinga
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base class for event arguments.
|
|
||||||
*/
|
|
||||||
struct I2_BASE_API EventArgs
|
|
||||||
{
|
|
||||||
Object::Ptr Source; /**< The source of the event. */
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An observable event.
|
|
||||||
*/
|
|
||||||
template<class TArgs>
|
|
||||||
class Event
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef function<int (const TArgs&)> ObserverType;
|
|
||||||
|
|
||||||
private:
|
|
||||||
vector<ObserverType> m_Observers;
|
|
||||||
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Adds an observer to this event.
|
|
||||||
*
|
|
||||||
* @param rhs The delegate.
|
|
||||||
*/
|
|
||||||
Event<TArgs>& operator +=(const ObserverType& rhs)
|
|
||||||
{
|
|
||||||
m_Observers.push_back(rhs);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes an observer from this event.
|
|
||||||
*
|
|
||||||
* @param rhs The delegate.
|
|
||||||
*/
|
|
||||||
Event<TArgs>& operator -=(const ObserverType& rhs)
|
|
||||||
{
|
|
||||||
m_Observers.erase(rhs);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Invokes each observer function that is registered for this event. Any
|
|
||||||
* observer function which returns -1 is removed.
|
|
||||||
*
|
|
||||||
* @param args Event arguments.
|
|
||||||
*/
|
|
||||||
void operator()(const TArgs& args)
|
|
||||||
{
|
|
||||||
typename vector<ObserverType>::iterator i;
|
|
||||||
|
|
||||||
for (i = m_Observers.begin(); i != m_Observers.end(); ) {
|
|
||||||
int result = (*i)(args);
|
|
||||||
|
|
||||||
if (result == -1)
|
|
||||||
i = m_Observers.erase(i);
|
|
||||||
else
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* EVENT_H */
|
|
@ -33,7 +33,7 @@ Exception::Exception(void)
|
|||||||
*
|
*
|
||||||
* @param message A message describing the exception.
|
* @param message A message describing the exception.
|
||||||
*/
|
*/
|
||||||
Exception::Exception(const string& message)
|
Exception::Exception(const char *message)
|
||||||
{
|
{
|
||||||
SetMessage(message);
|
SetMessage(message);
|
||||||
}
|
}
|
||||||
@ -43,19 +43,32 @@ Exception::Exception(const string& message)
|
|||||||
*
|
*
|
||||||
* @returns The description.
|
* @returns The description.
|
||||||
*/
|
*/
|
||||||
string Exception::GetMessage(void) const
|
const char *Exception::GetMessage(void) const
|
||||||
{
|
{
|
||||||
return m_Message;
|
return m_Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the description for the exception.
|
||||||
|
*
|
||||||
|
* @returns The description.
|
||||||
|
*/
|
||||||
|
const char *Exception::what(void) const throw()
|
||||||
|
{
|
||||||
|
return GetMessage();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the description for the exception.
|
* Sets the description for the exception.
|
||||||
*
|
*
|
||||||
* @param message The description.
|
* @param message The description.
|
||||||
*/
|
*/
|
||||||
void Exception::SetMessage(string message)
|
void Exception::SetMessage(const char *message)
|
||||||
{
|
{
|
||||||
m_Message = message;
|
if (m_Message)
|
||||||
|
delete m_Message;
|
||||||
|
|
||||||
|
m_Message = Memory::StrDup(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -26,26 +26,29 @@ namespace icinga
|
|||||||
/**
|
/**
|
||||||
* Base class for all exceptions.
|
* Base class for all exceptions.
|
||||||
*/
|
*/
|
||||||
class I2_BASE_API Exception
|
class I2_BASE_API Exception : exception
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
string m_Message;
|
const char *m_Message;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void SetMessage(string message);
|
void SetMessage(const char *message);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Exception(void);
|
Exception(void);
|
||||||
Exception(const string& message);
|
Exception(const char *message);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destructor for the Exception class. Must be virtual for RTTI to work.
|
* Destructor for the Exception class. Must be virtual for RTTI to work.
|
||||||
*/
|
*/
|
||||||
virtual ~Exception(void)
|
virtual ~Exception(void)
|
||||||
{
|
{
|
||||||
|
delete m_Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
string GetMessage(void) const;
|
const char *GetMessage(void) const;
|
||||||
|
|
||||||
|
virtual const char *what(void) const throw();
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFINE_EXCEPTION_CLASS(klass) \
|
#define DEFINE_EXCEPTION_CLASS(klass) \
|
||||||
@ -56,7 +59,7 @@ public:
|
|||||||
{ \
|
{ \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
inline klass(const string& message) \
|
inline klass(const char *message) \
|
||||||
: Exception(message) \
|
: Exception(message) \
|
||||||
{ \
|
{ \
|
||||||
} \
|
} \
|
||||||
@ -64,6 +67,7 @@ public:
|
|||||||
|
|
||||||
DEFINE_EXCEPTION_CLASS(NotImplementedException);
|
DEFINE_EXCEPTION_CLASS(NotImplementedException);
|
||||||
DEFINE_EXCEPTION_CLASS(InvalidArgumentException);
|
DEFINE_EXCEPTION_CLASS(InvalidArgumentException);
|
||||||
|
DEFINE_EXCEPTION_CLASS(InvalidCastException);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
/**
|
/**
|
||||||
@ -80,7 +84,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
inline Win32Exception(const string& message, int errorCode)
|
inline Win32Exception(const string& message, int errorCode)
|
||||||
{
|
{
|
||||||
SetMessage(message + ": " + FormatErrorCode(errorCode));
|
string msg = message + ": " + FormatErrorCode(errorCode);
|
||||||
|
SetMessage(msg.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,7 +112,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
inline PosixException(const string& message, int errorCode)
|
inline PosixException(const string& message, int errorCode)
|
||||||
{
|
{
|
||||||
SetMessage(message + ": " + FormatErrorCode(errorCode));
|
string msg = message + ": " + FormatErrorCode(errorCode);
|
||||||
|
SetMessage(msg.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -133,7 +139,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
inline OpenSSLException(const string& message, int errorCode)
|
inline OpenSSLException(const string& message, int errorCode)
|
||||||
{
|
{
|
||||||
SetMessage(message + ": " + FormatErrorCode(errorCode));
|
string msg = message + ": " + FormatErrorCode(errorCode);
|
||||||
|
SetMessage(msg.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -103,7 +103,7 @@ using namespace std::tr1::placeholders;
|
|||||||
#include "exception.h"
|
#include "exception.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "delegate.h"
|
#include "delegate.h"
|
||||||
#include "event.h"
|
#include "observable.h"
|
||||||
#include "variant.h"
|
#include "variant.h"
|
||||||
#include "dictionary.h"
|
#include "dictionary.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
@ -62,12 +62,12 @@ public:
|
|||||||
void SetFD(SOCKET fd);
|
void SetFD(SOCKET fd);
|
||||||
SOCKET GetFD(void) const;
|
SOCKET GetFD(void) const;
|
||||||
|
|
||||||
Event<EventArgs> OnReadable;
|
Observable<EventArgs> OnReadable;
|
||||||
Event<EventArgs> OnWritable;
|
Observable<EventArgs> OnWritable;
|
||||||
Event<EventArgs> OnException;
|
Observable<EventArgs> OnException;
|
||||||
|
|
||||||
Event<SocketErrorEventArgs> OnError;
|
Observable<SocketErrorEventArgs> OnError;
|
||||||
Event<EventArgs> OnClosed;
|
Observable<EventArgs> OnClosed;
|
||||||
|
|
||||||
virtual bool WantsToRead(void) const;
|
virtual bool WantsToRead(void) const;
|
||||||
virtual bool WantsToWrite(void) const;
|
virtual bool WantsToWrite(void) const;
|
||||||
|
@ -64,7 +64,7 @@ public:
|
|||||||
virtual bool WantsToRead(void) const;
|
virtual bool WantsToRead(void) const;
|
||||||
virtual bool WantsToWrite(void) const;
|
virtual bool WantsToWrite(void) const;
|
||||||
|
|
||||||
Event<EventArgs> OnDataAvailable;
|
Observable<EventArgs> OnDataAvailable;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -54,7 +54,7 @@ public:
|
|||||||
|
|
||||||
void Listen(void);
|
void Listen(void);
|
||||||
|
|
||||||
Event<NewClientEventArgs> OnNewClient;
|
Observable<NewClientEventArgs> OnNewClient;
|
||||||
|
|
||||||
virtual bool WantsToRead(void) const;
|
virtual bool WantsToRead(void) const;
|
||||||
};
|
};
|
||||||
|
@ -21,12 +21,6 @@
|
|||||||
|
|
||||||
using namespace icinga;
|
using namespace icinga;
|
||||||
|
|
||||||
typedef struct threadparam_s
|
|
||||||
{
|
|
||||||
ThreadProc callback;
|
|
||||||
void *param;
|
|
||||||
} threadparam_t;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function that deals with OS-specific differences in the thread
|
* Helper function that deals with OS-specific differences in the thread
|
||||||
* proc's function signature.
|
* proc's function signature.
|
||||||
@ -34,16 +28,16 @@ typedef struct threadparam_s
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
static DWORD WINAPI ThreadStartProc(LPVOID param)
|
static DWORD WINAPI ThreadStartProc(LPVOID param)
|
||||||
{
|
{
|
||||||
threadparam_t *tparam = (threadparam_t *)param;
|
ThreadParameters *tparam = (ThreadParameters *)param;
|
||||||
tparam->callback(tparam->param);
|
tparam->Callback(tparam->UserParams);
|
||||||
delete tparam;
|
delete tparam;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else /* _WIN32 */
|
#else /* _WIN32 */
|
||||||
static void *ThreadStartProc(void *param)
|
static void *ThreadStartProc(void *param)
|
||||||
{
|
{
|
||||||
threadparam_t *tparam = (threadparam_t *)param;
|
ThreadParameters *tparam = (ThreadParameters *)param;
|
||||||
tparam->callback(tparam->param);
|
tparam->Callback(tparam->UserParams);
|
||||||
delete tparam;
|
delete tparam;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -55,13 +49,13 @@ static void *ThreadStartProc(void *param)
|
|||||||
*/
|
*/
|
||||||
Thread::Thread(ThreadProc callback, void *param)
|
Thread::Thread(ThreadProc callback, void *param)
|
||||||
{
|
{
|
||||||
threadparam_t *tparam = new threadparam_t();
|
ThreadParameters *tparam = new ThreadParameters();
|
||||||
|
|
||||||
if (tparam == NULL)
|
if (tparam == NULL)
|
||||||
throw OutOfMemoryException("Out of memory");
|
throw OutOfMemoryException("Out of memory");
|
||||||
|
|
||||||
tparam->callback = callback;
|
tparam->Callback = callback;
|
||||||
tparam->param = param;
|
tparam->UserParams = param;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
m_Thread = CreateThread(NULL, 0, ThreadStartProc, tparam, CREATE_SUSPENDED, NULL);
|
m_Thread = CreateThread(NULL, 0, ThreadStartProc, tparam, CREATE_SUSPENDED, NULL);
|
||||||
@ -69,7 +63,8 @@ Thread::Thread(ThreadProc callback, void *param)
|
|||||||
if (m_Thread == NULL)
|
if (m_Thread == NULL)
|
||||||
throw Win32Exception("CreateThread failed.", GetLastError());
|
throw Win32Exception("CreateThread failed.", GetLastError());
|
||||||
#else /* _WIN32 */
|
#else /* _WIN32 */
|
||||||
pthread_create(&m_Thread, NULL, ThreadStartProc, &tparam);
|
if (pthread_create(&m_Thread, NULL, ThreadStartProc, &tparam) < 0)
|
||||||
|
throw PosixException("pthread_create failed.", errno);
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,12 @@ namespace icinga
|
|||||||
|
|
||||||
typedef void (*ThreadProc)(void *);
|
typedef void (*ThreadProc)(void *);
|
||||||
|
|
||||||
|
struct ThreadParameters
|
||||||
|
{
|
||||||
|
ThreadProc Callback;
|
||||||
|
void *UserParams;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A wrapper around OS-specific thread functionality.
|
* A wrapper around OS-specific thread functionality.
|
||||||
*/
|
*/
|
||||||
|
@ -72,7 +72,7 @@ public:
|
|||||||
|
|
||||||
void Reschedule(time_t next);
|
void Reschedule(time_t next);
|
||||||
|
|
||||||
Event<TimerEventArgs> OnTimerExpired;
|
Observable<TimerEventArgs> OnTimerExpired;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ public:
|
|||||||
virtual bool WantsToRead(void) const;
|
virtual bool WantsToRead(void) const;
|
||||||
virtual bool WantsToWrite(void) const;
|
virtual bool WantsToWrite(void) const;
|
||||||
|
|
||||||
Event<VerifyCertificateEventArgs> OnVerifyCertificate;
|
Observable<VerifyCertificateEventArgs> OnVerifyCertificate;
|
||||||
};
|
};
|
||||||
|
|
||||||
TCPClient::Ptr TLSClientFactory(TCPClientRole role, shared_ptr<SSL_CTX> sslContext);
|
TCPClient::Ptr TLSClientFactory(TCPClientRole role, shared_ptr<SSL_CTX> sslContext);
|
||||||
|
@ -357,10 +357,14 @@ bool DiscoveryComponent::HasMessagePermission(Dictionary::Ptr roles, string mess
|
|||||||
if (!role)
|
if (!role)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Dictionary::Ptr permissions;
|
Object::Ptr object;
|
||||||
if (!role->GetProperty(messageType, &permissions))
|
if (!role->GetProperty(messageType, &object))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
Dictionary::Ptr permissions = dynamic_pointer_cast<Dictionary>(object);
|
||||||
|
if (!permissions)
|
||||||
|
throw InvalidCastException();
|
||||||
|
|
||||||
for (DictionaryIterator is = permissions->Begin(); is != permissions->End(); is++) {
|
for (DictionaryIterator is = permissions->Begin(); is != permissions->End(); is++) {
|
||||||
if (Utility::Match(is->second.GetString(), message))
|
if (Utility::Match(is->second.GetString(), message))
|
||||||
return true;
|
return true;
|
||||||
@ -396,8 +400,15 @@ void DiscoveryComponent::ProcessDiscoveryMessage(string identity, DiscoveryMessa
|
|||||||
|
|
||||||
ConfigObject::Ptr endpointConfig = endpointCollection->GetObject(identity);
|
ConfigObject::Ptr endpointConfig = endpointCollection->GetObject(identity);
|
||||||
Dictionary::Ptr roles;
|
Dictionary::Ptr roles;
|
||||||
if (endpointConfig)
|
if (endpointConfig) {
|
||||||
endpointConfig->GetProperty("roles", &roles);
|
Object::Ptr object;
|
||||||
|
if (endpointConfig->GetProperty("roles", &object)) {
|
||||||
|
roles = dynamic_pointer_cast<Dictionary>(object);
|
||||||
|
|
||||||
|
if (!roles)
|
||||||
|
throw InvalidCastException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Endpoint::Ptr endpoint = GetEndpointManager()->GetEndpointByIdentity(identity);
|
Endpoint::Ptr endpoint = GetEndpointManager()->GetEndpointByIdentity(identity);
|
||||||
|
|
||||||
|
@ -92,8 +92,8 @@ public:
|
|||||||
ConstTopicIterator BeginPublications(void) const;
|
ConstTopicIterator BeginPublications(void) const;
|
||||||
ConstTopicIterator EndPublications(void) const;
|
ConstTopicIterator EndPublications(void) const;
|
||||||
|
|
||||||
Event<EventArgs> OnIdentityChanged;
|
Observable<EventArgs> OnIdentityChanged;
|
||||||
Event<EventArgs> OnSessionEstablished;
|
Observable<EventArgs> OnSessionEstablished;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ public:
|
|||||||
|
|
||||||
Endpoint::Ptr GetEndpointByIdentity(string identity) const;
|
Endpoint::Ptr GetEndpointByIdentity(string identity) const;
|
||||||
|
|
||||||
Event<NewEndpointEventArgs> OnNewEndpoint;
|
Observable<NewEndpointEventArgs> OnNewEndpoint;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ void VirtualEndpoint::ProcessRequest(Endpoint::Ptr sender, const RpcRequest& req
|
|||||||
if (!request.GetMethod(&method))
|
if (!request.GetMethod(&method))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
map<string, Event<NewRequestEventArgs> >::iterator i = m_TopicHandlers.find(method);
|
map<string, Observable<NewRequestEventArgs> >::iterator i = m_TopicHandlers.find(method);
|
||||||
|
|
||||||
if (i == m_TopicHandlers.end())
|
if (i == m_TopicHandlers.end())
|
||||||
return;
|
return;
|
||||||
|
@ -38,7 +38,7 @@ struct I2_ICINGA_API NewRequestEventArgs : public EventArgs
|
|||||||
class I2_ICINGA_API VirtualEndpoint : public Endpoint
|
class I2_ICINGA_API VirtualEndpoint : public Endpoint
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
map< string, Event<NewRequestEventArgs> > m_TopicHandlers;
|
map< string, Observable<NewRequestEventArgs> > m_TopicHandlers;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef shared_ptr<VirtualEndpoint> Ptr;
|
typedef shared_ptr<VirtualEndpoint> Ptr;
|
||||||
|
@ -53,7 +53,7 @@ int JsonRpcClient::DataAvailableHandler(const EventArgs&)
|
|||||||
nea.Message = message;
|
nea.Message = message;
|
||||||
OnNewMessage(nea);
|
OnNewMessage(nea);
|
||||||
} catch (const Exception& ex) {
|
} catch (const Exception& ex) {
|
||||||
Application::Log("Exception while processing message from JSON-RPC client: " + ex.GetMessage());
|
Application::Log("Exception while processing message from JSON-RPC client: " + string(ex.GetMessage()));
|
||||||
Close();
|
Close();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -46,7 +46,7 @@ public:
|
|||||||
|
|
||||||
virtual void Start(void);
|
virtual void Start(void);
|
||||||
|
|
||||||
Event<NewMessageEventArgs> OnNewMessage;
|
Observable<NewMessageEventArgs> OnNewMessage;
|
||||||
};
|
};
|
||||||
|
|
||||||
TCPClient::Ptr JsonRpcClientFactory(TCPClientRole role, shared_ptr<SSL_CTX> sslContext);
|
TCPClient::Ptr JsonRpcClientFactory(TCPClientRole role, shared_ptr<SSL_CTX> sslContext);
|
||||||
|
@ -130,10 +130,14 @@ Dictionary::Ptr MessagePart::GetDictionary(void) const
|
|||||||
|
|
||||||
bool MessagePart::GetProperty(string key, MessagePart *value) const
|
bool MessagePart::GetProperty(string key, MessagePart *value) const
|
||||||
{
|
{
|
||||||
Dictionary::Ptr dictionary;
|
Object::Ptr object;
|
||||||
if (!GetDictionary()->GetProperty(key, &dictionary))
|
if (GetDictionary()->GetProperty(key, &object))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Dictionary::Ptr dictionary = dynamic_pointer_cast<Dictionary>(object);
|
||||||
|
if (!dictionary)
|
||||||
|
throw InvalidCastException();
|
||||||
|
|
||||||
*value = MessagePart(dictionary);
|
*value = MessagePart(dictionary);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user