Important update:
- DataTreeCore:
- Renamed Get/SetMemXxx() methods to Get/SetChXxx()
- Renamed GetMember() to GetChild()
- Updated: JSONparse, ApplicationCore, FunctionCore, SelectableCore,
and WatchdogCore
- Remove unused PrevChild & Last vars in GetChild (GetMember)
- JSONparseCore:
- Use return values from write() and PrintXxx() methods to report fail
- SelectableCore:
- Fix possible uninitialised FlowCtrl & Parity value
- DateTimeCore:
- Fix possible memory overrun in temp buffer
- EventBufferCore:
- Fix possible uninitialised value error in AddEvent
This commit is contained in:
@@ -152,7 +152,7 @@ bool CApplication::LoadConfigData()
|
||||
|
||||
// Get debug level
|
||||
pLogLevel = dlNone;
|
||||
TempStr = (char*)ConfigMember->GetMemStr( "Log/Level", "Medium", true );
|
||||
TempStr = (char*)ConfigMember->GetChStr( "Log/Level", "Medium", true );
|
||||
if (TempStr)
|
||||
{
|
||||
if (!strcasecmp( TempStr, "Low" ))
|
||||
@@ -165,7 +165,7 @@ bool CApplication::LoadConfigData()
|
||||
|
||||
// Set debug output
|
||||
pLogOutput = 0;
|
||||
if ((TempMember = ConfigMember->GetMember( "Log/Output", true )))
|
||||
if ((TempMember = ConfigMember->GetChild( "Log/Output", true )))
|
||||
{
|
||||
TempMember = TempMember->GetFirstChild();
|
||||
while (TempMember)
|
||||
@@ -193,7 +193,7 @@ bool CApplication::LoadConfigData()
|
||||
SetLogParam( pLogLevel, pLogOutput );
|
||||
|
||||
// Load Address List
|
||||
if ((AddressFile = (char*)ConfigMember->GetMemStr( "AddressList/Path", NULL )))
|
||||
if ((AddressFile = (char*)ConfigMember->GetChStr( "AddressList/Path", NULL )))
|
||||
{
|
||||
if (JSONparser->ReadFromFile( "address", AddressFile )) {
|
||||
if (Log) Log->Message( dlLow, dlLow, "%s: Address file loaded (%s)", ProcessName, AddressFile );
|
||||
@@ -204,10 +204,10 @@ bool CApplication::LoadConfigData()
|
||||
}
|
||||
|
||||
// Configure Selector
|
||||
if ((TempMember = ConfigMember->GetMember( "Selector" )))
|
||||
if ((TempMember = ConfigMember->GetChild( "Selector" )))
|
||||
{
|
||||
// Create Selector
|
||||
Selector = new CSelect( (int)TempMember->GetMemInt( "Wait", 5, true ), LogLevel );
|
||||
Selector = new CSelect( (int)TempMember->GetChInt( "Wait", 5, true ), LogLevel );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -235,7 +235,7 @@ bool CApplication::Init()
|
||||
bool CApplication::InitConfig( const char * pConfigPath )
|
||||
{
|
||||
// Check if Datatree exists
|
||||
if (!DataTree || !(ConfigMember = DataTree->GetMember( pConfigPath ))) {
|
||||
if (!DataTree || !(ConfigMember = DataTree->GetChild( pConfigPath ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -254,7 +254,7 @@ bool CApplication::InitFunctions( const char * pConfigPath )
|
||||
char * Type;
|
||||
|
||||
// Check of path exists
|
||||
if (!DataTree || !(FunctionConfigMember = DataTree->GetMember( pConfigPath )))
|
||||
if (!DataTree || !(FunctionConfigMember = DataTree->GetChild( pConfigPath )))
|
||||
return false;
|
||||
|
||||
// Process each Channel
|
||||
@@ -262,7 +262,7 @@ bool CApplication::InitFunctions( const char * pConfigPath )
|
||||
while (TempMember)
|
||||
{
|
||||
// Get function parameters
|
||||
Type = (char*)TempMember->GetMemStr( "Type", "Custom", true );
|
||||
Type = (char*)TempMember->GetChStr( "Type", "Custom", true );
|
||||
|
||||
// Get or create function
|
||||
if (!strcasecmp( Type, "WatchdogClient" )) {
|
||||
@@ -297,7 +297,7 @@ bool CApplication::InitFunctionLinks( const char * pConfigPath )
|
||||
CDataMember * TempMember;
|
||||
|
||||
// Check of path exists
|
||||
if (!DataTree || !(LinkConfigMember = DataTree->GetMember( pConfigPath )))
|
||||
if (!DataTree || !(LinkConfigMember = DataTree->GetChild( pConfigPath )))
|
||||
return false;
|
||||
|
||||
// Process each Channel
|
||||
@@ -305,7 +305,7 @@ bool CApplication::InitFunctionLinks( const char * pConfigPath )
|
||||
while (FunctionItem)
|
||||
{
|
||||
// Build links for function
|
||||
if ((TempMember = LinkConfigMember->GetMember( FunctionItem->Function->GetName() )))
|
||||
if ((TempMember = LinkConfigMember->GetChild( FunctionItem->Function->GetName() )))
|
||||
FunctionItem->Function->InitChannelLinks( TempMember );
|
||||
|
||||
// Next
|
||||
|
||||
@@ -148,18 +148,16 @@ bool CDataMember::Clear()
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
||||
CDataMember * CDataMember::GetChild( const char * Path, bool Create )
|
||||
{
|
||||
CDataMember * Member;
|
||||
CDataMember ** Child;
|
||||
CDataMember * PrevChild;
|
||||
char * Pos;
|
||||
char * EndPos;
|
||||
char * Key;
|
||||
unsigned short KeyLen;
|
||||
int Index;
|
||||
int Count;
|
||||
bool Last = false;
|
||||
|
||||
// Validate
|
||||
if (!Path || !*Path) {
|
||||
@@ -197,11 +195,7 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
||||
Pos++;
|
||||
if (!*Pos)
|
||||
break;
|
||||
|
||||
// Check if last
|
||||
Pos++;
|
||||
if (!*Pos)
|
||||
Last = true;
|
||||
|
||||
if (Pos == Key+1) {
|
||||
// Empty bracket only allowed for create
|
||||
@@ -210,10 +204,8 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
||||
Index = -1;
|
||||
|
||||
// find end of list
|
||||
PrevChild = NULL;
|
||||
Child = &(Member->FirstChild);
|
||||
while (*Child) {
|
||||
PrevChild = *Child;
|
||||
Child = &((*Child)->NextPeer);
|
||||
}
|
||||
}
|
||||
@@ -224,11 +216,9 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
||||
break;
|
||||
|
||||
// Find element at requested index
|
||||
PrevChild = NULL;
|
||||
Child = &(Member->FirstChild);
|
||||
Count = 0;
|
||||
while (*Child && (Count < Index)) {
|
||||
PrevChild = *Child;
|
||||
Child = &((*Child)->NextPeer);
|
||||
Count++;
|
||||
}
|
||||
@@ -264,16 +254,9 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
||||
Pos++;
|
||||
}
|
||||
|
||||
// More elements?
|
||||
if (!*Pos) {
|
||||
Last = true;
|
||||
}
|
||||
|
||||
// Find next parent
|
||||
PrevChild = NULL;
|
||||
Child = &(Member->FirstChild);
|
||||
while (*Child && (((*Child)->NameLen != KeyLen) || strncasecmp( (*Child)->Name, Key, KeyLen ))) {
|
||||
PrevChild = *Child;
|
||||
Child = &((*Child)->NextPeer);
|
||||
}
|
||||
if (!*Child && Create) {
|
||||
@@ -288,12 +271,12 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
CDataMember * CDataMember::GetMemFirstChild( const char * Path )
|
||||
CDataMember * CDataMember::GetChFirstChild( const char * Path )
|
||||
{
|
||||
CDataMember * Member = NULL;
|
||||
|
||||
// Find member
|
||||
Member = (!Path || !*Path)? this : GetMember( Path, false );
|
||||
Member = (!Path || !*Path)? this : GetChild( Path, false );
|
||||
|
||||
// Check if valid type
|
||||
if (!Member || ((Member->Type != jtObject) && (Member->Type != jtNull))) {
|
||||
@@ -304,14 +287,14 @@ CDataMember * CDataMember::GetMemFirstChild( const char * Path )
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
CDataMember * CDataMember::GetMemElement( const char * Path, const int Index )
|
||||
CDataMember * CDataMember::GetChElement( const char * Path, const int Index )
|
||||
{
|
||||
CDataMember * Member = NULL;
|
||||
CDataMember * Child = NULL;
|
||||
int Count;
|
||||
|
||||
// Find Member
|
||||
Member = (!Path || !*Path)? this : GetMember( Path, false );
|
||||
Member = (!Path || !*Path)? this : GetChild( Path, false );
|
||||
|
||||
// Check if valid type
|
||||
if (!Member || ((Member->Type != jtArray) && (Member->Type != jtNull))) {
|
||||
@@ -340,7 +323,7 @@ bool CDataMember::Delete( const char * Path )
|
||||
Clear();
|
||||
return true;
|
||||
}
|
||||
else if ((Member = GetMember( Path, false ))) {
|
||||
else if ((Member = GetChild( Path, false ))) {
|
||||
// If valid path, destroy member
|
||||
delete Member;
|
||||
return true;
|
||||
@@ -381,12 +364,12 @@ bool CDataMember::SetValue( EDataType pType, const char * pValue, int pLen )
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CDataMember::SetMemObject( const char * Path )
|
||||
bool CDataMember::SetChObject( const char * Path )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, true ))) {
|
||||
if (!(Member = GetChild( Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -396,12 +379,12 @@ bool CDataMember::SetMemObject( const char * Path )
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CDataMember::SetMemArray( const char * Path )
|
||||
bool CDataMember::SetChArray( const char * Path )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, true ))) {
|
||||
if (!(Member = GetChild( Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -411,12 +394,12 @@ bool CDataMember::SetMemArray( const char * Path )
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CDataMember::SetMemStr( const char * Path, const char * Value, const int Len )
|
||||
bool CDataMember::SetChStr( const char * Path, const char * Value, const int Len )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, true ))) {
|
||||
if (!(Member = GetChild( Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -431,13 +414,13 @@ bool CDataMember::SetMemStr( const char * Path, const char * Value, const int L
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CDataMember::SetMemInt( const char * Path, const long Value, const char * Mask )
|
||||
bool CDataMember::SetChInt( const char * Path, const long Value, const char * Mask )
|
||||
{
|
||||
CDataMember * Member;
|
||||
char ValueStr[20];
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, true ))) {
|
||||
if (!(Member = GetChild( Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -448,13 +431,13 @@ bool CDataMember::SetMemInt( const char * Path, const long Value, const char *
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CDataMember::SetMemFloat( const char * Path, const double Value, const char * Mask )
|
||||
bool CDataMember::SetChFloat( const char * Path, const double Value, const char * Mask )
|
||||
{
|
||||
CDataMember * Member;
|
||||
char ValueStr[20];
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, true ))) {
|
||||
if (!(Member = GetChild( Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -465,12 +448,12 @@ bool CDataMember::SetMemFloat( const char * Path, const double Value, const cha
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CDataMember::SetMemBool( const char * Path, const bool Value )
|
||||
bool CDataMember::SetChBool( const char * Path, const bool Value )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, true ))) {
|
||||
if (!(Member = GetChild( Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -480,12 +463,12 @@ bool CDataMember::SetMemBool( const char * Path, const bool Value )
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool CDataMember::SetMemNull( const char * Path )
|
||||
bool CDataMember::SetChNull( const char * Path )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, true ))) {
|
||||
if (!(Member = GetChild( Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -500,7 +483,7 @@ const char * CDataMember::GetName( const char * Path )
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, false ))) {
|
||||
if (!(Member = GetChild( Path, false ))) {
|
||||
return NULL;
|
||||
}
|
||||
return Member->Name;
|
||||
@@ -512,7 +495,7 @@ EDataType CDataMember::GetType( const char * Path )
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if (!(Member = GetMember( Path, false ))) {
|
||||
if (!(Member = GetChild( Path, false ))) {
|
||||
return jtNull;
|
||||
}
|
||||
return Member->Type;
|
||||
@@ -524,7 +507,7 @@ const int CDataMember::GetLen( const char * Path )
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( Path, false ))) {
|
||||
if ((Member = GetChild( Path, false ))) {
|
||||
return Member->Len;
|
||||
}
|
||||
else {
|
||||
@@ -533,12 +516,12 @@ const int CDataMember::GetLen( const char * Path )
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
const char * CDataMember::GetMemStr( const char * Path, const char * Default, bool Create )
|
||||
const char * CDataMember::GetChStr( const char * Path, const char * Default, bool Create )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( Path, Create )) &&
|
||||
if ((Member = GetChild( Path, Create )) &&
|
||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||
return Member->Value;
|
||||
}
|
||||
@@ -552,12 +535,12 @@ const char * CDataMember::GetMemStr( const char * Path, const char * Default, bo
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
const char * CDataMember::GetMemStr( const char * Path, int &Len, const char * Default, bool Create )
|
||||
const char * CDataMember::GetChStr( const char * Path, int &Len, const char * Default, bool Create )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( Path, Create )) &&
|
||||
if ((Member = GetChild( Path, Create )) &&
|
||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||
Len = Member->Len;
|
||||
return Member->Value;
|
||||
@@ -574,12 +557,12 @@ const char * CDataMember::GetMemStr( const char * Path, int &Len, const char * D
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
const long CDataMember::GetMemInt( const char * Path, long Default, bool Create, const char * Mask )
|
||||
const long CDataMember::GetChInt( const char * Path, long Default, bool Create, const char * Mask )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( Path, Create )) &&
|
||||
if ((Member = GetChild( Path, Create )) &&
|
||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||
return strtol( Member->Value, NULL, 10 );
|
||||
}
|
||||
@@ -595,12 +578,12 @@ const long CDataMember::GetMemInt( const char * Path, long Default, bool Create
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
const double CDataMember::GetMemFloat( const char * Path, double Default, bool Create, const char * Mask )
|
||||
const double CDataMember::GetChFloat( const char * Path, double Default, bool Create, const char * Mask )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( Path, Create )) &&
|
||||
if ((Member = GetChild( Path, Create )) &&
|
||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||
return strtod( Member->Value, NULL );
|
||||
}
|
||||
@@ -616,12 +599,12 @@ const double CDataMember::GetMemFloat( const char * Path, double Default, bool
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
const bool CDataMember::GetMemBool( const char * Path, bool Default, bool Create )
|
||||
const bool CDataMember::GetChBool( const char * Path, bool Default, bool Create )
|
||||
{
|
||||
CDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( Path, Create ))) {
|
||||
if ((Member = GetChild( Path, Create ))) {
|
||||
if (Member->Type == jtString) {
|
||||
return ((!*Member->Value)? false : true);
|
||||
}
|
||||
|
||||
@@ -66,46 +66,46 @@ public:
|
||||
const int GetLen() { return Len; };
|
||||
const int GetLen( const char * Path );
|
||||
|
||||
CDataMember * GetMember( const char * Path, bool Create = false );
|
||||
CDataMember * GetMemFirstChild( const char * Path );
|
||||
CDataMember * GetMemElement( const char * Path, const int Index );
|
||||
CDataMember * GetChild( const char * Path, bool Create = false );
|
||||
CDataMember * GetChFirstChild( const char * Path );
|
||||
CDataMember * GetChElement( const char * Path, const int Index );
|
||||
|
||||
inline CDataMember * GetFirstChild() { return FirstChild; };
|
||||
inline CDataMember * GetElement( const int Index ) { return GetMemElement( NULL, Index ); };
|
||||
inline CDataMember * GetElement( const int Index ) { return GetChElement( NULL, Index ); };
|
||||
|
||||
inline CDataMember * GetParent() { return Parent; };
|
||||
inline CDataMember * GetPrevPeer() { return PrevPeer; };
|
||||
inline CDataMember * GetNextPeer() { return NextPeer; };
|
||||
|
||||
const char * GetMemStr( const char * Path, const char * Default = NULL, bool Create = false );
|
||||
const char * GetMemStr( const char * Path, int &Len, const char * Default = NULL, bool Create = false );
|
||||
const bool GetMemBool( const char * Path, bool Default = false, bool Create = false );
|
||||
const long GetMemInt( const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL );
|
||||
const double GetMemFloat( const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL );
|
||||
const char * GetChStr( const char * Path, const char * Default = NULL, bool Create = false );
|
||||
const char * GetChStr( const char * Path, int &Len, const char * Default = NULL, bool Create = false );
|
||||
const bool GetChBool( const char * Path, bool Default = false, bool Create = false );
|
||||
const long GetChInt( const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL );
|
||||
const double GetChFloat( const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL );
|
||||
|
||||
inline const char * GetStr( const char * Default = NULL, bool Create = false ) { return GetMemStr( NULL, Default, Create ); };
|
||||
inline const char * GetStr( int &Len, const char * Default = NULL, bool Create = false ) { return GetMemStr( NULL, Len, Default, Create ); };
|
||||
inline const bool GetBool( bool Default = false, bool Create = false ) { return GetMemBool( NULL, Default, Create ); };
|
||||
inline const long GetInt( long Default = 0, bool Create = false, const char * Mask = NULL ) { return GetMemInt( NULL, Default, Create, Mask ); };
|
||||
inline const double GetFloat( double Default = 0.0, bool Create = false, const char * Mask = NULL ) { return GetMemFloat( NULL, Default, Create, Mask ); };
|
||||
inline const char * GetStr( const char * Default = NULL, bool Create = false ) { return GetChStr( NULL, Default, Create ); };
|
||||
inline const char * GetStr( int &Len, const char * Default = NULL, bool Create = false ) { return GetChStr( NULL, Len, Default, Create ); };
|
||||
inline const bool GetBool( bool Default = false, bool Create = false ) { return GetChBool( NULL, Default, Create ); };
|
||||
inline const long GetInt( long Default = 0, bool Create = false, const char * Mask = NULL ) { return GetChInt( NULL, Default, Create, Mask ); };
|
||||
inline const double GetFloat( double Default = 0.0, bool Create = false, const char * Mask = NULL ) { return GetChFloat( NULL, Default, Create, Mask ); };
|
||||
|
||||
bool SetMemBool( const char * Path, const bool Value );
|
||||
bool SetMemInt( const char * Path, const long Value, const char * Mask = NULL );
|
||||
bool SetMemFloat( const char * Path, const double Value, const char * Mask = NULL );
|
||||
bool SetMemStr( const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values
|
||||
bool SetChBool( const char * Path, const bool Value );
|
||||
bool SetChInt( const char * Path, const long Value, const char * Mask = NULL );
|
||||
bool SetChFloat( const char * Path, const double Value, const char * Mask = NULL );
|
||||
bool SetChStr( const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values
|
||||
|
||||
inline bool SetBool( const bool Value ) { return SetMemBool( NULL, Value ); };
|
||||
inline bool SetInt( const long Value, const char * Mask = NULL ) { return SetMemInt( NULL, Value, Mask ); };
|
||||
inline bool SetFloat( const double Value, const char * Mask = NULL ) { return SetMemFloat( NULL, Value, Mask ); };
|
||||
inline bool SetStr( const char * Value = NULL, const int Len = -1 ) { return SetMemStr( NULL, Value, Len ); };
|
||||
inline bool SetBool( const bool Value ) { return SetChBool( NULL, Value ); };
|
||||
inline bool SetInt( const long Value, const char * Mask = NULL ) { return SetChInt( NULL, Value, Mask ); };
|
||||
inline bool SetFloat( const double Value, const char * Mask = NULL ) { return SetChFloat( NULL, Value, Mask ); };
|
||||
inline bool SetStr( const char * Value = NULL, const int Len = -1 ) { return SetChStr( NULL, Value, Len ); };
|
||||
|
||||
bool SetMemNull( const char * Path );
|
||||
bool SetMemObject( const char * Path );
|
||||
bool SetMemArray( const char * Path );
|
||||
bool SetChNull( const char * Path );
|
||||
bool SetChObject( const char * Path );
|
||||
bool SetChArray( const char * Path );
|
||||
|
||||
inline bool SetNull() { return SetMemNull( NULL ); };
|
||||
inline bool SetObject() { return SetMemObject( NULL ); };
|
||||
inline bool SetArray() { return SetMemArray( NULL ); };
|
||||
inline bool SetNull() { return SetChNull( NULL ); };
|
||||
inline bool SetObject() { return SetChObject( NULL ); };
|
||||
inline bool SetArray() { return SetChArray( NULL ); };
|
||||
|
||||
bool Clear();
|
||||
bool Delete( const char * Path );
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Variable used to temp values with
|
||||
static char ReturnStr[20];
|
||||
static char ReturnStr[30];
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -342,7 +342,7 @@ bool CEventBuffer::ClearCurrentEvent()
|
||||
|
||||
bool CEventBuffer::AddEvent( TEventEntry * Event, unsigned int EventNo )
|
||||
{
|
||||
bool result;
|
||||
bool result = true;
|
||||
TEventEntry * EventCopy = NULL;
|
||||
|
||||
// Validate Event
|
||||
|
||||
@@ -120,7 +120,7 @@ bool CFunctionCore::LoadConfigData()
|
||||
|
||||
// Get debug level
|
||||
pLogLevel = dlNone;
|
||||
TempStr = (char*)ConfigMember->GetMemStr( "Log/Level", "Medium", true );
|
||||
TempStr = (char*)ConfigMember->GetChStr( "Log/Level", "Medium", true );
|
||||
if (TempStr)
|
||||
{
|
||||
if (!strcasecmp( TempStr, "Low" ))
|
||||
@@ -133,7 +133,7 @@ bool CFunctionCore::LoadConfigData()
|
||||
|
||||
// Set debug output
|
||||
pLogOutput = 0;
|
||||
if ((TempMember = ConfigMember->GetMember( "Log/Output", true )))
|
||||
if ((TempMember = ConfigMember->GetChild( "Log/Output", true )))
|
||||
{
|
||||
TempMember = TempMember->GetFirstChild();
|
||||
while (TempMember)
|
||||
@@ -163,13 +163,13 @@ bool CFunctionCore::LoadConfigData()
|
||||
SetLogParam( pLogLevel, pLogOutput );
|
||||
|
||||
// Load Channels
|
||||
TempMember = ConfigMember->GetMemFirstChild( "Channels" );
|
||||
TempMember = ConfigMember->GetChFirstChild( "Channels" );
|
||||
while (TempMember)
|
||||
{
|
||||
if (TempMember->GetName()) {
|
||||
AddChannel( TempMember->GetName(),
|
||||
TempMember->GetMemBool( "InputEnabled", true, true ),
|
||||
TempMember->GetMemBool( "OutputEnabled", false, true ));
|
||||
TempMember->GetChBool( "InputEnabled", true, true ),
|
||||
TempMember->GetChBool( "OutputEnabled", false, true ));
|
||||
}
|
||||
|
||||
// Next
|
||||
@@ -197,9 +197,9 @@ bool CFunctionCore::LoadChannelLinkData()
|
||||
{
|
||||
// Get Parameters
|
||||
LinkOutputChannel( Channel->Name,
|
||||
FunctionMember->GetMemStr( "Function" ),
|
||||
FunctionMember->GetMemStr( "Channel" ),
|
||||
FunctionMember->GetMemBool( "Bidirectional" ) );
|
||||
FunctionMember->GetChStr( "Function" ),
|
||||
FunctionMember->GetChStr( "Channel" ),
|
||||
FunctionMember->GetChBool( "Bidirectional" ) );
|
||||
// Next
|
||||
FunctionMember = FunctionMember->GetNextPeer();
|
||||
}
|
||||
@@ -224,7 +224,7 @@ bool CFunctionCore::Init()
|
||||
bool CFunctionCore::InitConfig( const char * pConfigPath )
|
||||
{
|
||||
// Validate
|
||||
if (!DataTree || !(ConfigMember = DataTree->GetMember( pConfigPath, true )))
|
||||
if (!DataTree || !(ConfigMember = DataTree->GetChild( pConfigPath, true )))
|
||||
return false;
|
||||
|
||||
// Load configuration
|
||||
@@ -252,7 +252,7 @@ bool CFunctionCore::InitConfig( CDataMember * pBaseMember )
|
||||
bool CFunctionCore::InitChannelLinks( const char * pLinkConfigPath )
|
||||
{
|
||||
// Validate
|
||||
if (!DataTree || !(LinkConfigMember = DataTree->GetMember( pLinkConfigPath, true )))
|
||||
if (!DataTree || !(LinkConfigMember = DataTree->GetChild( pLinkConfigPath, true )))
|
||||
return false;
|
||||
|
||||
// Load configuration
|
||||
|
||||
@@ -136,15 +136,19 @@ bool CJSONparse::WriteToHandle( const char * BasePath, const int Handle, const i
|
||||
OutputHandle = Handle;
|
||||
|
||||
// Get Root object
|
||||
if (!(Member = DataTree->GetMember( BasePath ))) {
|
||||
if (!(Member = DataTree->GetChild( BasePath ))) {
|
||||
Error = true;
|
||||
sprintf( ErrorText, "Invalid root object path" );
|
||||
OutputHandle = -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Print to file
|
||||
PrintObject( Member, Indent );
|
||||
write( OutputHandle, "\n", 1 );
|
||||
if (!PrintObject( Member, Indent ) ||
|
||||
(write( OutputHandle, "\n", 1 ) < 0)) {
|
||||
OutputHandle = -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
OutputHandle = -1;
|
||||
return true;
|
||||
@@ -287,7 +291,7 @@ bool CJSONparse::ReadFromBuffer( const char * BasePath )
|
||||
Error = false;
|
||||
|
||||
// Get/Create Root object
|
||||
if (!(BaseMember = DataTree->GetMember( BasePath, true ))) {
|
||||
if (!(BaseMember = DataTree->GetChild( BasePath, true ))) {
|
||||
Error = true;
|
||||
sprintf( ErrorText, "Invalid root object path" );
|
||||
return false;
|
||||
@@ -568,7 +572,7 @@ bool CJSONparse::ParseObject( CDataMember * Object )
|
||||
}
|
||||
|
||||
// Check if Member exists
|
||||
Member = Object->GetMember( MemberName, true );
|
||||
Member = Object->GetChild( MemberName, true );
|
||||
|
||||
// Check for delimiter
|
||||
SkipWhiteSpace();
|
||||
@@ -753,8 +757,11 @@ bool CJSONparse::ParsePrimitive( CDataMember * Member )
|
||||
|
||||
bool CJSONparse::PrintString( char * String, int Len )
|
||||
{
|
||||
int BytesWritten;
|
||||
|
||||
// Start quote
|
||||
write( OutputHandle, "\"", 1 );
|
||||
if (write( OutputHandle, "\"", 1 ) < 0)
|
||||
return false;
|
||||
|
||||
// Content
|
||||
BufPos = String;
|
||||
@@ -766,7 +773,8 @@ bool CJSONparse::PrintString( char * String, int Len )
|
||||
BufPos++;
|
||||
|
||||
// Print Portion
|
||||
write( OutputHandle, Mark, (BufPos-Mark) );
|
||||
if (write( OutputHandle, Mark, (BufPos-Mark) ) < 0)
|
||||
return false;
|
||||
|
||||
// Handle special chars
|
||||
if (BufPos-String >= Len) {
|
||||
@@ -774,24 +782,27 @@ bool CJSONparse::PrintString( char * String, int Len )
|
||||
}
|
||||
else {
|
||||
switch (*BufPos) {
|
||||
case '\b': write( OutputHandle, "\\b", 2 ); break;
|
||||
case '\f': write( OutputHandle, "\\f", 2 ); break;
|
||||
case '\n': write( OutputHandle, "\\n", 2 ); break;
|
||||
case '\r': write( OutputHandle, "\\r", 2 ); break;
|
||||
case '\t': write( OutputHandle, "\\t", 2 ); break;
|
||||
case '/': write( OutputHandle, "\\/", 2 ); break;
|
||||
case '\\': write( OutputHandle, "\\\\", 2 ); break;
|
||||
case '"': write( OutputHandle, "\\\"", 2 ); break;
|
||||
case '\b': BytesWritten = write( OutputHandle, "\\b", 2 ); break;
|
||||
case '\f': BytesWritten = write( OutputHandle, "\\f", 2 ); break;
|
||||
case '\n': BytesWritten = write( OutputHandle, "\\n", 2 ); break;
|
||||
case '\r': BytesWritten = write( OutputHandle, "\\r", 2 ); break;
|
||||
case '\t': BytesWritten = write( OutputHandle, "\\t", 2 ); break;
|
||||
case '/': BytesWritten = write( OutputHandle, "\\/", 2 ); break;
|
||||
case '\\': BytesWritten = write( OutputHandle, "\\\\", 2 ); break;
|
||||
case '"': BytesWritten = write( OutputHandle, "\\\"", 2 ); break;
|
||||
default:
|
||||
dprintf( OutputHandle, "\\u%04X", (unsigned char)*BufPos );
|
||||
BytesWritten = dprintf( OutputHandle, "\\u%04X", (unsigned char)*BufPos );
|
||||
break;
|
||||
}
|
||||
if (BytesWritten < 0)
|
||||
return false;
|
||||
BufPos++;
|
||||
}
|
||||
}
|
||||
|
||||
// End Quote
|
||||
write( OutputHandle, "\"", 1 );
|
||||
if (write( OutputHandle, "\"", 1 ) < 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -805,7 +816,8 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
|
||||
int Count = 0;
|
||||
|
||||
// Opening brace
|
||||
write( OutputHandle, "{", 1 );
|
||||
if (write( OutputHandle, "{", 1 ) < 0)
|
||||
return false;
|
||||
|
||||
// Extend spacer
|
||||
if (Indent) {
|
||||
@@ -821,17 +833,22 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
|
||||
if (Indent) {
|
||||
if (First) {
|
||||
First = false;
|
||||
write( OutputHandle, "\n", 1 );
|
||||
if (write( OutputHandle, "\n", 1 ) < 0)
|
||||
return false;
|
||||
}
|
||||
write( OutputHandle, Spacer, SpacerLen );
|
||||
if (write( OutputHandle, Spacer, SpacerLen ) < 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Print key name
|
||||
PrintString( Member->Name, strlen(Member->Name) );
|
||||
if (!PrintString( Member->Name, strlen(Member->Name) ))
|
||||
return false;
|
||||
if (Indent) {
|
||||
write( OutputHandle," : ", 3 );
|
||||
if (write( OutputHandle," : ", 3 ) < 0)
|
||||
return false;
|
||||
} else {
|
||||
write( OutputHandle, ":", 1 );
|
||||
if (write( OutputHandle, ":", 1 ) < 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Print value
|
||||
@@ -839,37 +856,50 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
|
||||
switch (Member->Type)
|
||||
{
|
||||
case jtNull :
|
||||
write( OutputHandle, "null", 4 );
|
||||
if (write( OutputHandle, "null", 4 ) < 0)
|
||||
return false;
|
||||
break;
|
||||
|
||||
case jtBool :
|
||||
if (!strcmp( Member->Value, "0" ))
|
||||
write( OutputHandle, "false", 5 );
|
||||
else
|
||||
write( OutputHandle, "true", 4 );
|
||||
if (!strcmp( Member->Value, "0" )) {
|
||||
if (write( OutputHandle, "false", 5 ) < 0)
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
if (write( OutputHandle, "true", 4 ) < 0)
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case jtInt :
|
||||
case jtFloat :
|
||||
write( OutputHandle, Member->Value, Member->Len );
|
||||
if (write( OutputHandle, Member->Value, Member->Len ) < 0)
|
||||
return false;
|
||||
break;
|
||||
|
||||
case jtString :
|
||||
PrintString( Member->Value, Member->Len );
|
||||
if (!PrintString( Member->Value, Member->Len ))
|
||||
return false;
|
||||
break;
|
||||
|
||||
case jtArray :
|
||||
PrintArray( Member, Indent );
|
||||
if (!PrintArray( Member, Indent ))
|
||||
return false;
|
||||
break;
|
||||
|
||||
case jtObject :
|
||||
PrintObject( Member, Indent );
|
||||
if (!PrintObject( Member, Indent ))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
if (!Last)
|
||||
write( OutputHandle, ",", 1 );
|
||||
if (Indent)
|
||||
write( OutputHandle, "\n", 1 );
|
||||
if (!Last) {
|
||||
if (write( OutputHandle, ",", 1 ) < 0)
|
||||
return false;
|
||||
}
|
||||
if (Indent) {
|
||||
if (write( OutputHandle, "\n", 1 ) < 0)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Shorten spacer
|
||||
@@ -879,9 +909,12 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
|
||||
}
|
||||
|
||||
// Closing brace
|
||||
if (Indent)
|
||||
write( OutputHandle, Spacer, SpacerLen );
|
||||
write( OutputHandle, "}", 1 );
|
||||
if (Indent) {
|
||||
if (write( OutputHandle, Spacer, SpacerLen ) < 0)
|
||||
return false;
|
||||
}
|
||||
if (write( OutputHandle, "}", 1 ))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -894,7 +927,8 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
|
||||
int Count = 0;
|
||||
|
||||
// Opening brace
|
||||
write( OutputHandle, "[", 1 );
|
||||
if (write( OutputHandle, "[", 1 ) < 0)
|
||||
return false;
|
||||
|
||||
// Extend spacer
|
||||
if (Indent) {
|
||||
@@ -910,42 +944,53 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
|
||||
if (Indent) {
|
||||
if (First) {
|
||||
First = false;
|
||||
write( OutputHandle, "\n", 1 );
|
||||
if (write( OutputHandle, "\n", 1 ) < 0)
|
||||
return false;
|
||||
}
|
||||
write( OutputHandle, Spacer, SpacerLen );
|
||||
if (write( OutputHandle, Spacer, SpacerLen ) < 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
Last = (++Count >= Array->Len);
|
||||
switch (Member->Type)
|
||||
{
|
||||
case jtNull :
|
||||
write( OutputHandle, "null", 4 );
|
||||
if (write( OutputHandle, "null", 4 ) < 0)
|
||||
return false;
|
||||
break;
|
||||
|
||||
case jtBool :
|
||||
case jtInt :
|
||||
case jtFloat :
|
||||
write( OutputHandle, Member->Value, Member->Len );
|
||||
if (write( OutputHandle, Member->Value, Member->Len ) < 0)
|
||||
return false;
|
||||
break;
|
||||
|
||||
case jtString :
|
||||
write( OutputHandle, "\"", 1 );
|
||||
write( OutputHandle, Member->Value, Member->Len );
|
||||
write( OutputHandle, "\"", 1 );
|
||||
if ((write( OutputHandle, "\"", 1 ) < 0) ||
|
||||
(write( OutputHandle, Member->Value, Member->Len ) < 0) ||
|
||||
(write( OutputHandle, "\"", 1 ) < 0))
|
||||
return false;
|
||||
break;
|
||||
|
||||
case jtArray :
|
||||
PrintArray( Member, Indent );
|
||||
if (!PrintArray( Member, Indent ))
|
||||
return false;
|
||||
break;
|
||||
|
||||
case jtObject :
|
||||
PrintObject( Member, Indent );
|
||||
if (!PrintObject( Member, Indent ))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
if (!Last)
|
||||
write( OutputHandle, ",", 1 );
|
||||
if (Indent)
|
||||
write( OutputHandle, "\n", 1 );
|
||||
if (!Last) {
|
||||
if (write( OutputHandle, ",", 1 ) < 0)
|
||||
return false;
|
||||
}
|
||||
if (Indent) {
|
||||
if (write( OutputHandle, "\n", 1 ) < 0)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Shorten spacer
|
||||
@@ -955,9 +1000,12 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
|
||||
}
|
||||
|
||||
// Closing brace
|
||||
if (Indent)
|
||||
write( OutputHandle, Spacer, SpacerLen );
|
||||
write( OutputHandle, "]", 1 );
|
||||
if (Indent) {
|
||||
if (write( OutputHandle, Spacer, SpacerLen ) < 0)
|
||||
return false;
|
||||
}
|
||||
if (write( OutputHandle, "]", 1 ) < 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -84,7 +84,7 @@ bool CSelectableCore::LoadConfigData()
|
||||
CFunctionCore::LoadConfigData();
|
||||
|
||||
// Load Handles
|
||||
if ((TempMember = ConfigMember->GetMember( "Handles", false ))) {
|
||||
if ((TempMember = ConfigMember->GetChild( "Handles", false ))) {
|
||||
TempMember = TempMember->GetFirstChild();
|
||||
}
|
||||
while (TempMember)
|
||||
@@ -95,24 +95,24 @@ bool CSelectableCore::LoadConfigData()
|
||||
|
||||
// Create Handle and channel link
|
||||
Handle = CreateHandle( TempMember->GetName(), false );
|
||||
Handle->Channel = GetChannel( TempMember->GetMemStr( "Channel" ) );
|
||||
Handle->Channel = GetChannel( TempMember->GetChStr( "Channel" ) );
|
||||
|
||||
Type = (char*)TempMember->GetMemStr( "Type", "TCPclient", true );
|
||||
Type = (char*)TempMember->GetChStr( "Type", "TCPclient", true );
|
||||
if (!strcasecmp( Type, "Serial" ))
|
||||
{
|
||||
if ((Name = (char*)TempMember->GetMemStr( "Port/Name", NULL ))) {
|
||||
if ((Name = (char*)TempMember->GetChStr( "Port/Name", NULL ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get address list value
|
||||
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get address list value
|
||||
}
|
||||
else {
|
||||
Address = (char*)TempMember->GetMemStr( "Port/Address", NULL, true ); // Get default value
|
||||
Address = (char*)TempMember->GetChStr( "Port/Address", NULL, true ); // Get default value
|
||||
}
|
||||
SetSerialHandle( Handle, Address );
|
||||
|
||||
// Update configuration if specified
|
||||
if ((SerialConfig = TempMember->GetMember( "Port/SerialConfig", false )))
|
||||
if ((SerialConfig = TempMember->GetChild( "Port/SerialConfig", false )))
|
||||
{
|
||||
ParityText = (char*)SerialConfig->GetMemStr( "Parity", "none", true );
|
||||
ParityText = (char*)SerialConfig->GetChStr( "Parity", "none", true );
|
||||
if (!strcasecmp( ParityText, "none" ))
|
||||
Parity = NO_PARITY;
|
||||
else if (!strcasecmp( ParityText, "odd" ))
|
||||
@@ -121,132 +121,136 @@ bool CSelectableCore::LoadConfigData()
|
||||
Parity = EVEN_PARITY;
|
||||
else if (!strcasecmp( ParityText, "mark" ))
|
||||
Parity = MARK_PARITY;
|
||||
else
|
||||
Parity = NO_PARITY;
|
||||
|
||||
FlowCtrlText = (char*)SerialConfig->GetMemStr( "FlowCtrl", "none", true );
|
||||
FlowCtrlText = (char*)SerialConfig->GetChStr( "FlowCtrl", "none", true );
|
||||
if (!strcasecmp( FlowCtrlText, "none" ))
|
||||
FlowCtrl = NO_FLOWCTRL;
|
||||
else if (!strcasecmp( FlowCtrlText, "hardware" ))
|
||||
FlowCtrl = HW_FLOWCTRL;
|
||||
else if (!strcasecmp( FlowCtrlText, "software" ))
|
||||
FlowCtrl = SW_FLOWCTRL;
|
||||
else
|
||||
FlowCtrl = NO_FLOWCTRL;
|
||||
|
||||
Handle->SerialConfig = true;
|
||||
SetSerialHandleConfig( Handle, SerialConfig->GetMemInt( "BaudRate", 19200, true ),
|
||||
SerialConfig->GetMemInt( "DataBits", 8, true ),
|
||||
Parity, SerialConfig->GetMemInt( "StopBits", 1, true ),
|
||||
FlowCtrl, SerialConfig->GetMemInt( "DataWait", 0, true ));
|
||||
SetSerialHandleConfig( Handle, SerialConfig->GetChInt( "BaudRate", 19200, true ),
|
||||
SerialConfig->GetChInt( "DataBits", 8, true ),
|
||||
Parity, SerialConfig->GetChInt( "StopBits", 1, true ),
|
||||
FlowCtrl, SerialConfig->GetChInt( "DataWait", 0, true ));
|
||||
}
|
||||
}
|
||||
else if (!strcasecmp( Type, "LinePrinter" ))
|
||||
{
|
||||
if ((Name = (char*)TempMember->GetMemStr( "Port/Name", NULL ))) {
|
||||
if ((Name = (char*)TempMember->GetChStr( "Port/Name", NULL ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get address list value
|
||||
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get address list value
|
||||
}
|
||||
else {
|
||||
Address = (char*)TempMember->GetMemStr( "Port/Address", NULL, true ); // Get default value
|
||||
Address = (char*)TempMember->GetChStr( "Port/Address", NULL, true ); // Get default value
|
||||
}
|
||||
SetLinePrinterHandle( Handle, Address );
|
||||
}
|
||||
else if (!strcasecmp( Type, "UNIXserver" ))
|
||||
{
|
||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
||||
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
||||
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||
}
|
||||
else {
|
||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
}
|
||||
SetUnixHandle( Handle, ctUNIXserver, Address );
|
||||
}
|
||||
else if (!strcasecmp( Type, "UNIXclient" ))
|
||||
{
|
||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
||||
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
||||
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||
}
|
||||
else {
|
||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
}
|
||||
SetUnixHandle( Handle, ctUNIXclient, Address );
|
||||
}
|
||||
else if (!strcasecmp( Type, "UDPserver" ))
|
||||
{
|
||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
||||
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
||||
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||
sprintf( Path, "Address/%s/Port", Name );
|
||||
Port = (char*)DataTree->GetMemStr( Path, "0", true ); // Get AddressList Port value
|
||||
Port = (char*)DataTree->GetChStr( Path, "0", true ); // Get AddressList Port value
|
||||
}
|
||||
else {
|
||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port value
|
||||
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = (char*)TempMember->GetChStr( "Socket/Port", "0", true ); // Get default Port value
|
||||
}
|
||||
Delay = TempMember->GetMemInt( "Socket/ResolveDelay", 0, true );
|
||||
Delay = TempMember->GetChInt( "Socket/ResolveDelay", 0, true );
|
||||
SetSocketHandle( Handle, ctUDPserver, Address, strlcase(Port), Delay );
|
||||
}
|
||||
else if (!strcasecmp( Type, "UDPclient" ))
|
||||
{
|
||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
||||
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
||||
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||
sprintf( Path, "Address/%s/Port", Name );
|
||||
Port = (char*)DataTree->GetMemStr( Path, "0", true ); // Get AddressList Port value
|
||||
Port = (char*)DataTree->GetChStr( Path, "0", true ); // Get AddressList Port value
|
||||
}
|
||||
else {
|
||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port value
|
||||
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = (char*)TempMember->GetChStr( "Socket/Port", "0", true ); // Get default Port value
|
||||
}
|
||||
Delay = TempMember->GetMemInt( "Socket/ResolveDelay", 0, true );
|
||||
Delay = TempMember->GetChInt( "Socket/ResolveDelay", 0, true );
|
||||
SetSocketHandle( Handle, ctUDPclient, Address, strlcase(Port), Delay );
|
||||
}
|
||||
else if (!strcasecmp( Type, "TCPserver" ))
|
||||
{
|
||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
||||
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
||||
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||
sprintf( Path, "Address/%s/Port", Name );
|
||||
Port = (char*)DataTree->GetMemStr( Path, "0", true ); // Get AddressList Port value
|
||||
Port = (char*)DataTree->GetChStr( Path, "0", true ); // Get AddressList Port value
|
||||
}
|
||||
else {
|
||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port value
|
||||
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = (char*)TempMember->GetChStr( "Socket/Port", "0", true ); // Get default Port value
|
||||
}
|
||||
Delay = TempMember->GetMemInt( "Socket/ResolveDelay", 0, true );
|
||||
Delay = TempMember->GetChInt( "Socket/ResolveDelay", 0, true );
|
||||
SetSocketHandle( Handle, ctTCPserver, Address, strlcase(Port), Delay );
|
||||
}
|
||||
else if (!strcasecmp( Type, "TCPclient" ))
|
||||
{
|
||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
||||
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||
sprintf( Path, "Address/%s/Address", Name );
|
||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
||||
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||
sprintf( Path, "Address/%s/Port", Name );
|
||||
Port = (char*)DataTree->GetMemStr( Path, "0", true ); // Get AddressList Port value
|
||||
Port = (char*)DataTree->GetChStr( Path, "0", true ); // Get AddressList Port value
|
||||
}
|
||||
else {
|
||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port value
|
||||
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||
Port = (char*)TempMember->GetChStr( "Socket/Port", "0", true ); // Get default Port value
|
||||
}
|
||||
Delay = TempMember->GetMemInt( "Socket/ResolveDelay", 0, true );
|
||||
Delay = TempMember->GetChInt( "Socket/ResolveDelay", 0, true );
|
||||
SetSocketHandle( Handle, ctTCPclient, Address, strlcase(Port), Delay );
|
||||
}
|
||||
else if (!strcasecmp( Type, "ForkPipe" )) {
|
||||
Address = (char*)TempMember->GetMemStr( "Fork/ExecPath", NULL, true ); // Get default value
|
||||
Address = (char*)TempMember->GetChStr( "Fork/ExecPath", NULL, true ); // Get default value
|
||||
SetForkPipeHandle( Handle, Address );
|
||||
}
|
||||
|
||||
// Set Auto Mange
|
||||
SetAutoManage( Handle, TempMember->GetMemBool( "AutoManage/Enabled", true, true ),
|
||||
TempMember->GetMemBool( "AutoManage/Persistent", false, true ),
|
||||
TempMember->GetMemInt( "AutoManage/ReopenDelay", 2000, true ),
|
||||
TempMember->GetMemInt( "AutoManage/CloseTimeout", 2000, true ));
|
||||
SetAutoManage( Handle, TempMember->GetChBool( "AutoManage/Enabled", true, true ),
|
||||
TempMember->GetChBool( "AutoManage/Persistent", false, true ),
|
||||
TempMember->GetChInt( "AutoManage/ReopenDelay", 2000, true ),
|
||||
TempMember->GetChInt( "AutoManage/CloseTimeout", 2000, true ));
|
||||
|
||||
// Input buffer
|
||||
SetInBuffer( Handle, TempMember->GetMemInt( "InputBuffer/Size", 0 ),
|
||||
TempMember->GetMemInt( "InputBuffer/Timeout", 250 ),
|
||||
TempMember->GetMemStr( "InputBuffer/Marker", "" ),
|
||||
TempMember->GetMemInt( "InputBuffer/MarkerLen", 0 ) );
|
||||
SetOutBuffer( Handle, TempMember->GetMemInt( "OutputBuffer/Size", 0 ) );
|
||||
SetInBuffer( Handle, TempMember->GetChInt( "InputBuffer/Size", 0 ),
|
||||
TempMember->GetChInt( "InputBuffer/Timeout", 250 ),
|
||||
TempMember->GetChStr( "InputBuffer/Marker", "" ),
|
||||
TempMember->GetChInt( "InputBuffer/MarkerLen", 0 ) );
|
||||
SetOutBuffer( Handle, TempMember->GetChInt( "OutputBuffer/Size", 0 ) );
|
||||
|
||||
// Next
|
||||
TempMember = TempMember->GetNextPeer();
|
||||
|
||||
@@ -50,7 +50,7 @@ bool CWatchdogCore::LoadConfigData()
|
||||
CSelectableCore::LoadConfigData();
|
||||
|
||||
// Set specific parameters
|
||||
SetInterval( ConfigMember->GetMemInt( "Parameters/PingInterval", 500, true ));
|
||||
SetInterval( ConfigMember->GetChInt( "Parameters/PingInterval", 500, true ));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user