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:
Charl Wentzel
2018-11-20 11:27:09 +02:00
parent 278198171d
commit 6263c0f508
9 changed files with 248 additions and 213 deletions

View File

@@ -152,7 +152,7 @@ bool CApplication::LoadConfigData()
// Get debug level // Get debug level
pLogLevel = dlNone; pLogLevel = dlNone;
TempStr = (char*)ConfigMember->GetMemStr( "Log/Level", "Medium", true ); TempStr = (char*)ConfigMember->GetChStr( "Log/Level", "Medium", true );
if (TempStr) if (TempStr)
{ {
if (!strcasecmp( TempStr, "Low" )) if (!strcasecmp( TempStr, "Low" ))
@@ -165,7 +165,7 @@ bool CApplication::LoadConfigData()
// Set debug output // Set debug output
pLogOutput = 0; pLogOutput = 0;
if ((TempMember = ConfigMember->GetMember( "Log/Output", true ))) if ((TempMember = ConfigMember->GetChild( "Log/Output", true )))
{ {
TempMember = TempMember->GetFirstChild(); TempMember = TempMember->GetFirstChild();
while (TempMember) while (TempMember)
@@ -193,7 +193,7 @@ bool CApplication::LoadConfigData()
SetLogParam( pLogLevel, pLogOutput ); SetLogParam( pLogLevel, pLogOutput );
// Load Address List // 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 (JSONparser->ReadFromFile( "address", AddressFile )) {
if (Log) Log->Message( dlLow, dlLow, "%s: Address file loaded (%s)", ProcessName, AddressFile ); if (Log) Log->Message( dlLow, dlLow, "%s: Address file loaded (%s)", ProcessName, AddressFile );
@@ -204,10 +204,10 @@ bool CApplication::LoadConfigData()
} }
// Configure Selector // Configure Selector
if ((TempMember = ConfigMember->GetMember( "Selector" ))) if ((TempMember = ConfigMember->GetChild( "Selector" )))
{ {
// Create 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; return true;
} }
@@ -235,7 +235,7 @@ bool CApplication::Init()
bool CApplication::InitConfig( const char * pConfigPath ) bool CApplication::InitConfig( const char * pConfigPath )
{ {
// Check if Datatree exists // Check if Datatree exists
if (!DataTree || !(ConfigMember = DataTree->GetMember( pConfigPath ))) { if (!DataTree || !(ConfigMember = DataTree->GetChild( pConfigPath ))) {
return false; return false;
} }
@@ -254,7 +254,7 @@ bool CApplication::InitFunctions( const char * pConfigPath )
char * Type; char * Type;
// Check of path exists // Check of path exists
if (!DataTree || !(FunctionConfigMember = DataTree->GetMember( pConfigPath ))) if (!DataTree || !(FunctionConfigMember = DataTree->GetChild( pConfigPath )))
return false; return false;
// Process each Channel // Process each Channel
@@ -262,7 +262,7 @@ bool CApplication::InitFunctions( const char * pConfigPath )
while (TempMember) while (TempMember)
{ {
// Get function parameters // Get function parameters
Type = (char*)TempMember->GetMemStr( "Type", "Custom", true ); Type = (char*)TempMember->GetChStr( "Type", "Custom", true );
// Get or create function // Get or create function
if (!strcasecmp( Type, "WatchdogClient" )) { if (!strcasecmp( Type, "WatchdogClient" )) {
@@ -297,7 +297,7 @@ bool CApplication::InitFunctionLinks( const char * pConfigPath )
CDataMember * TempMember; CDataMember * TempMember;
// Check of path exists // Check of path exists
if (!DataTree || !(LinkConfigMember = DataTree->GetMember( pConfigPath ))) if (!DataTree || !(LinkConfigMember = DataTree->GetChild( pConfigPath )))
return false; return false;
// Process each Channel // Process each Channel
@@ -305,7 +305,7 @@ bool CApplication::InitFunctionLinks( const char * pConfigPath )
while (FunctionItem) while (FunctionItem)
{ {
// Build links for function // Build links for function
if ((TempMember = LinkConfigMember->GetMember( FunctionItem->Function->GetName() ))) if ((TempMember = LinkConfigMember->GetChild( FunctionItem->Function->GetName() )))
FunctionItem->Function->InitChannelLinks( TempMember ); FunctionItem->Function->InitChannelLinks( TempMember );
// Next // Next

View File

@@ -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 * Member;
CDataMember ** Child; CDataMember ** Child;
CDataMember * PrevChild;
char * Pos; char * Pos;
char * EndPos; char * EndPos;
char * Key; char * Key;
unsigned short KeyLen; unsigned short KeyLen;
int Index; int Index;
int Count; int Count;
bool Last = false;
// Validate // Validate
if (!Path || !*Path) { if (!Path || !*Path) {
@@ -197,11 +195,7 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
Pos++; Pos++;
if (!*Pos) if (!*Pos)
break; break;
// Check if last
Pos++; Pos++;
if (!*Pos)
Last = true;
if (Pos == Key+1) { if (Pos == Key+1) {
// Empty bracket only allowed for create // Empty bracket only allowed for create
@@ -210,10 +204,8 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
Index = -1; Index = -1;
// find end of list // find end of list
PrevChild = NULL;
Child = &(Member->FirstChild); Child = &(Member->FirstChild);
while (*Child) { while (*Child) {
PrevChild = *Child;
Child = &((*Child)->NextPeer); Child = &((*Child)->NextPeer);
} }
} }
@@ -224,11 +216,9 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
break; break;
// Find element at requested index // Find element at requested index
PrevChild = NULL;
Child = &(Member->FirstChild); Child = &(Member->FirstChild);
Count = 0; Count = 0;
while (*Child && (Count < Index)) { while (*Child && (Count < Index)) {
PrevChild = *Child;
Child = &((*Child)->NextPeer); Child = &((*Child)->NextPeer);
Count++; Count++;
} }
@@ -264,16 +254,9 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
Pos++; Pos++;
} }
// More elements?
if (!*Pos) {
Last = true;
}
// Find next parent // Find next parent
PrevChild = NULL;
Child = &(Member->FirstChild); Child = &(Member->FirstChild);
while (*Child && (((*Child)->NameLen != KeyLen) || strncasecmp( (*Child)->Name, Key, KeyLen ))) { while (*Child && (((*Child)->NameLen != KeyLen) || strncasecmp( (*Child)->Name, Key, KeyLen ))) {
PrevChild = *Child;
Child = &((*Child)->NextPeer); Child = &((*Child)->NextPeer);
} }
if (!*Child && Create) { 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; CDataMember * Member = NULL;
// Find member // Find member
Member = (!Path || !*Path)? this : GetMember( Path, false ); Member = (!Path || !*Path)? this : GetChild( Path, false );
// Check if valid type // Check if valid type
if (!Member || ((Member->Type != jtObject) && (Member->Type != jtNull))) { 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 * Member = NULL;
CDataMember * Child = NULL; CDataMember * Child = NULL;
int Count; int Count;
// Find Member // Find Member
Member = (!Path || !*Path)? this : GetMember( Path, false ); Member = (!Path || !*Path)? this : GetChild( Path, false );
// Check if valid type // Check if valid type
if (!Member || ((Member->Type != jtArray) && (Member->Type != jtNull))) { if (!Member || ((Member->Type != jtArray) && (Member->Type != jtNull))) {
@@ -340,7 +323,7 @@ bool CDataMember::Delete( const char * Path )
Clear(); Clear();
return true; return true;
} }
else if ((Member = GetMember( Path, false ))) { else if ((Member = GetChild( Path, false ))) {
// If valid path, destroy member // If valid path, destroy member
delete Member; delete Member;
return true; 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; CDataMember * Member;
// Validate // Validate
if (!(Member = GetMember( Path, true ))) { if (!(Member = GetChild( Path, true ))) {
return false; 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; CDataMember * Member;
// Validate // Validate
if (!(Member = GetMember( Path, true ))) { if (!(Member = GetChild( Path, true ))) {
return false; 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; CDataMember * Member;
// Validate // Validate
if (!(Member = GetMember( Path, true ))) { if (!(Member = GetChild( Path, true ))) {
return false; 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; CDataMember * Member;
char ValueStr[20]; char ValueStr[20];
// Validate // Validate
if (!(Member = GetMember( Path, true ))) { if (!(Member = GetChild( Path, true ))) {
return false; 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; CDataMember * Member;
char ValueStr[20]; char ValueStr[20];
// Validate // Validate
if (!(Member = GetMember( Path, true ))) { if (!(Member = GetChild( Path, true ))) {
return false; 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; CDataMember * Member;
// Validate // Validate
if (!(Member = GetMember( Path, true ))) { if (!(Member = GetChild( Path, true ))) {
return false; 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; CDataMember * Member;
// Validate // Validate
if (!(Member = GetMember( Path, true ))) { if (!(Member = GetChild( Path, true ))) {
return false; return false;
} }
@@ -500,7 +483,7 @@ const char * CDataMember::GetName( const char * Path )
CDataMember * Member; CDataMember * Member;
// Validate // Validate
if (!(Member = GetMember( Path, false ))) { if (!(Member = GetChild( Path, false ))) {
return NULL; return NULL;
} }
return Member->Name; return Member->Name;
@@ -512,7 +495,7 @@ EDataType CDataMember::GetType( const char * Path )
CDataMember * Member; CDataMember * Member;
// Validate // Validate
if (!(Member = GetMember( Path, false ))) { if (!(Member = GetChild( Path, false ))) {
return jtNull; return jtNull;
} }
return Member->Type; return Member->Type;
@@ -524,7 +507,7 @@ const int CDataMember::GetLen( const char * Path )
CDataMember * Member; CDataMember * Member;
// Validate // Validate
if ((Member = GetMember( Path, false ))) { if ((Member = GetChild( Path, false ))) {
return Member->Len; return Member->Len;
} }
else { 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; CDataMember * Member;
// Validate // Validate
if ((Member = GetMember( Path, Create )) && if ((Member = GetChild( Path, Create )) &&
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) { ((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
return Member->Value; 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; CDataMember * Member;
// Validate // Validate
if ((Member = GetMember( Path, Create )) && if ((Member = GetChild( Path, Create )) &&
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) { ((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
Len = Member->Len; Len = Member->Len;
return Member->Value; 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; CDataMember * Member;
// Validate // Validate
if ((Member = GetMember( Path, Create )) && if ((Member = GetChild( Path, Create )) &&
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) { ((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
return strtol( Member->Value, NULL, 10 ); 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; CDataMember * Member;
// Validate // Validate
if ((Member = GetMember( Path, Create )) && if ((Member = GetChild( Path, Create )) &&
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) { ((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
return strtod( Member->Value, NULL ); 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; CDataMember * Member;
// Validate // Validate
if ((Member = GetMember( Path, Create ))) { if ((Member = GetChild( Path, Create ))) {
if (Member->Type == jtString) { if (Member->Type == jtString) {
return ((!*Member->Value)? false : true); return ((!*Member->Value)? false : true);
} }

View File

@@ -66,46 +66,46 @@ public:
const int GetLen() { return Len; }; const int GetLen() { return Len; };
const int GetLen( const char * Path ); const int GetLen( const char * Path );
CDataMember * GetMember( const char * Path, bool Create = false ); CDataMember * GetChild( const char * Path, bool Create = false );
CDataMember * GetMemFirstChild( const char * Path ); CDataMember * GetChFirstChild( const char * Path );
CDataMember * GetMemElement( const char * Path, const int Index ); CDataMember * GetChElement( const char * Path, const int Index );
inline CDataMember * GetFirstChild() { return FirstChild; }; 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 * GetParent() { return Parent; };
inline CDataMember * GetPrevPeer() { return PrevPeer; }; inline CDataMember * GetPrevPeer() { return PrevPeer; };
inline CDataMember * GetNextPeer() { return NextPeer; }; inline CDataMember * GetNextPeer() { return NextPeer; };
const char * GetMemStr( const char * Path, const char * Default = NULL, bool Create = false ); const char * GetChStr( 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 char * GetChStr( 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 bool GetChBool( 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 long GetChInt( 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 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( 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 GetMemStr( NULL, Len, 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 GetMemBool( NULL, 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 GetMemInt( NULL, Default, Create, Mask ); }; 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 GetMemFloat( 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 SetChBool( const char * Path, const bool Value );
bool SetMemInt( const char * Path, const long Value, const char * Mask = NULL ); bool SetChInt( const char * Path, const long Value, const char * Mask = NULL );
bool SetMemFloat( const char * Path, const double Value, const char * Mask = NULL ); bool SetChFloat( 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 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 SetBool( const bool Value ) { return SetChBool( NULL, Value ); };
inline bool SetInt( const long Value, const char * Mask = NULL ) { return SetMemInt( NULL, Value, Mask ); }; 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 SetMemFloat( 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 SetMemStr( NULL, Value, Len ); }; inline bool SetStr( const char * Value = NULL, const int Len = -1 ) { return SetChStr( NULL, Value, Len ); };
bool SetMemNull( const char * Path ); bool SetChNull( const char * Path );
bool SetMemObject( const char * Path ); bool SetChObject( const char * Path );
bool SetMemArray( const char * Path ); bool SetChArray( const char * Path );
inline bool SetNull() { return SetMemNull( NULL ); }; inline bool SetNull() { return SetChNull( NULL ); };
inline bool SetObject() { return SetMemObject( NULL ); }; inline bool SetObject() { return SetChObject( NULL ); };
inline bool SetArray() { return SetMemArray( NULL ); }; inline bool SetArray() { return SetChArray( NULL ); };
bool Clear(); bool Clear();
bool Delete( const char * Path ); bool Delete( const char * Path );

View File

@@ -16,7 +16,7 @@
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Variable used to temp values with // Variable used to temp values with
static char ReturnStr[20]; static char ReturnStr[30];
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------

View File

@@ -342,7 +342,7 @@ bool CEventBuffer::ClearCurrentEvent()
bool CEventBuffer::AddEvent( TEventEntry * Event, unsigned int EventNo ) bool CEventBuffer::AddEvent( TEventEntry * Event, unsigned int EventNo )
{ {
bool result; bool result = true;
TEventEntry * EventCopy = NULL; TEventEntry * EventCopy = NULL;
// Validate Event // Validate Event

View File

@@ -120,7 +120,7 @@ bool CFunctionCore::LoadConfigData()
// Get debug level // Get debug level
pLogLevel = dlNone; pLogLevel = dlNone;
TempStr = (char*)ConfigMember->GetMemStr( "Log/Level", "Medium", true ); TempStr = (char*)ConfigMember->GetChStr( "Log/Level", "Medium", true );
if (TempStr) if (TempStr)
{ {
if (!strcasecmp( TempStr, "Low" )) if (!strcasecmp( TempStr, "Low" ))
@@ -133,7 +133,7 @@ bool CFunctionCore::LoadConfigData()
// Set debug output // Set debug output
pLogOutput = 0; pLogOutput = 0;
if ((TempMember = ConfigMember->GetMember( "Log/Output", true ))) if ((TempMember = ConfigMember->GetChild( "Log/Output", true )))
{ {
TempMember = TempMember->GetFirstChild(); TempMember = TempMember->GetFirstChild();
while (TempMember) while (TempMember)
@@ -163,13 +163,13 @@ bool CFunctionCore::LoadConfigData()
SetLogParam( pLogLevel, pLogOutput ); SetLogParam( pLogLevel, pLogOutput );
// Load Channels // Load Channels
TempMember = ConfigMember->GetMemFirstChild( "Channels" ); TempMember = ConfigMember->GetChFirstChild( "Channels" );
while (TempMember) while (TempMember)
{ {
if (TempMember->GetName()) { if (TempMember->GetName()) {
AddChannel( TempMember->GetName(), AddChannel( TempMember->GetName(),
TempMember->GetMemBool( "InputEnabled", true, true ), TempMember->GetChBool( "InputEnabled", true, true ),
TempMember->GetMemBool( "OutputEnabled", false, true )); TempMember->GetChBool( "OutputEnabled", false, true ));
} }
// Next // Next
@@ -197,9 +197,9 @@ bool CFunctionCore::LoadChannelLinkData()
{ {
// Get Parameters // Get Parameters
LinkOutputChannel( Channel->Name, LinkOutputChannel( Channel->Name,
FunctionMember->GetMemStr( "Function" ), FunctionMember->GetChStr( "Function" ),
FunctionMember->GetMemStr( "Channel" ), FunctionMember->GetChStr( "Channel" ),
FunctionMember->GetMemBool( "Bidirectional" ) ); FunctionMember->GetChBool( "Bidirectional" ) );
// Next // Next
FunctionMember = FunctionMember->GetNextPeer(); FunctionMember = FunctionMember->GetNextPeer();
} }
@@ -224,7 +224,7 @@ bool CFunctionCore::Init()
bool CFunctionCore::InitConfig( const char * pConfigPath ) bool CFunctionCore::InitConfig( const char * pConfigPath )
{ {
// Validate // Validate
if (!DataTree || !(ConfigMember = DataTree->GetMember( pConfigPath, true ))) if (!DataTree || !(ConfigMember = DataTree->GetChild( pConfigPath, true )))
return false; return false;
// Load configuration // Load configuration
@@ -252,7 +252,7 @@ bool CFunctionCore::InitConfig( CDataMember * pBaseMember )
bool CFunctionCore::InitChannelLinks( const char * pLinkConfigPath ) bool CFunctionCore::InitChannelLinks( const char * pLinkConfigPath )
{ {
// Validate // Validate
if (!DataTree || !(LinkConfigMember = DataTree->GetMember( pLinkConfigPath, true ))) if (!DataTree || !(LinkConfigMember = DataTree->GetChild( pLinkConfigPath, true )))
return false; return false;
// Load configuration // Load configuration

View File

@@ -136,15 +136,19 @@ bool CJSONparse::WriteToHandle( const char * BasePath, const int Handle, const i
OutputHandle = Handle; OutputHandle = Handle;
// Get Root object // Get Root object
if (!(Member = DataTree->GetMember( BasePath ))) { if (!(Member = DataTree->GetChild( BasePath ))) {
Error = true; Error = true;
sprintf( ErrorText, "Invalid root object path" ); sprintf( ErrorText, "Invalid root object path" );
OutputHandle = -1;
return false; return false;
} }
// Print to file // Print to file
PrintObject( Member, Indent ); if (!PrintObject( Member, Indent ) ||
write( OutputHandle, "\n", 1 ); (write( OutputHandle, "\n", 1 ) < 0)) {
OutputHandle = -1;
return false;
}
OutputHandle = -1; OutputHandle = -1;
return true; return true;
@@ -287,7 +291,7 @@ bool CJSONparse::ReadFromBuffer( const char * BasePath )
Error = false; Error = false;
// Get/Create Root object // Get/Create Root object
if (!(BaseMember = DataTree->GetMember( BasePath, true ))) { if (!(BaseMember = DataTree->GetChild( BasePath, true ))) {
Error = true; Error = true;
sprintf( ErrorText, "Invalid root object path" ); sprintf( ErrorText, "Invalid root object path" );
return false; return false;
@@ -568,7 +572,7 @@ bool CJSONparse::ParseObject( CDataMember * Object )
} }
// Check if Member exists // Check if Member exists
Member = Object->GetMember( MemberName, true ); Member = Object->GetChild( MemberName, true );
// Check for delimiter // Check for delimiter
SkipWhiteSpace(); SkipWhiteSpace();
@@ -753,8 +757,11 @@ bool CJSONparse::ParsePrimitive( CDataMember * Member )
bool CJSONparse::PrintString( char * String, int Len ) bool CJSONparse::PrintString( char * String, int Len )
{ {
int BytesWritten;
// Start quote // Start quote
write( OutputHandle, "\"", 1 ); if (write( OutputHandle, "\"", 1 ) < 0)
return false;
// Content // Content
BufPos = String; BufPos = String;
@@ -766,7 +773,8 @@ bool CJSONparse::PrintString( char * String, int Len )
BufPos++; BufPos++;
// Print Portion // Print Portion
write( OutputHandle, Mark, (BufPos-Mark) ); if (write( OutputHandle, Mark, (BufPos-Mark) ) < 0)
return false;
// Handle special chars // Handle special chars
if (BufPos-String >= Len) { if (BufPos-String >= Len) {
@@ -774,24 +782,27 @@ bool CJSONparse::PrintString( char * String, int Len )
} }
else { else {
switch (*BufPos) { switch (*BufPos) {
case '\b': write( OutputHandle, "\\b", 2 ); break; case '\b': BytesWritten = write( OutputHandle, "\\b", 2 ); break;
case '\f': write( OutputHandle, "\\f", 2 ); break; case '\f': BytesWritten = write( OutputHandle, "\\f", 2 ); break;
case '\n': write( OutputHandle, "\\n", 2 ); break; case '\n': BytesWritten = write( OutputHandle, "\\n", 2 ); break;
case '\r': write( OutputHandle, "\\r", 2 ); break; case '\r': BytesWritten = write( OutputHandle, "\\r", 2 ); break;
case '\t': write( OutputHandle, "\\t", 2 ); break; case '\t': BytesWritten = write( OutputHandle, "\\t", 2 ); break;
case '/': write( OutputHandle, "\\/", 2 ); break; case '/': BytesWritten = write( OutputHandle, "\\/", 2 ); break;
case '\\': write( OutputHandle, "\\\\", 2 ); break; case '\\': BytesWritten = write( OutputHandle, "\\\\", 2 ); break;
case '"': write( OutputHandle, "\\\"", 2 ); break; case '"': BytesWritten = write( OutputHandle, "\\\"", 2 ); break;
default: default:
dprintf( OutputHandle, "\\u%04X", (unsigned char)*BufPos ); BytesWritten = dprintf( OutputHandle, "\\u%04X", (unsigned char)*BufPos );
break; break;
} }
if (BytesWritten < 0)
return false;
BufPos++; BufPos++;
} }
} }
// End Quote // End Quote
write( OutputHandle, "\"", 1 ); if (write( OutputHandle, "\"", 1 ) < 0)
return false;
return true; return true;
} }
@@ -805,7 +816,8 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
int Count = 0; int Count = 0;
// Opening brace // Opening brace
write( OutputHandle, "{", 1 ); if (write( OutputHandle, "{", 1 ) < 0)
return false;
// Extend spacer // Extend spacer
if (Indent) { if (Indent) {
@@ -821,17 +833,22 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
if (Indent) { if (Indent) {
if (First) { if (First) {
First = false; 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 // Print key name
PrintString( Member->Name, strlen(Member->Name) ); if (!PrintString( Member->Name, strlen(Member->Name) ))
return false;
if (Indent) { if (Indent) {
write( OutputHandle," : ", 3 ); if (write( OutputHandle," : ", 3 ) < 0)
return false;
} else { } else {
write( OutputHandle, ":", 1 ); if (write( OutputHandle, ":", 1 ) < 0)
return false;
} }
// Print value // Print value
@@ -839,37 +856,50 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
switch (Member->Type) switch (Member->Type)
{ {
case jtNull : case jtNull :
write( OutputHandle, "null", 4 ); if (write( OutputHandle, "null", 4 ) < 0)
return false;
break; break;
case jtBool : case jtBool :
if (!strcmp( Member->Value, "0" )) if (!strcmp( Member->Value, "0" )) {
write( OutputHandle, "false", 5 ); if (write( OutputHandle, "false", 5 ) < 0)
else return false;
write( OutputHandle, "true", 4 ); }
else {
if (write( OutputHandle, "true", 4 ) < 0)
return false;
}
break; break;
case jtInt : case jtInt :
case jtFloat : case jtFloat :
write( OutputHandle, Member->Value, Member->Len ); if (write( OutputHandle, Member->Value, Member->Len ) < 0)
return false;
break; break;
case jtString : case jtString :
PrintString( Member->Value, Member->Len ); if (!PrintString( Member->Value, Member->Len ))
return false;
break; break;
case jtArray : case jtArray :
PrintArray( Member, Indent ); if (!PrintArray( Member, Indent ))
return false;
break; break;
case jtObject : case jtObject :
PrintObject( Member, Indent ); if (!PrintObject( Member, Indent ))
return false;
break; break;
} }
if (!Last) if (!Last) {
write( OutputHandle, ",", 1 ); if (write( OutputHandle, ",", 1 ) < 0)
if (Indent) return false;
write( OutputHandle, "\n", 1 ); }
if (Indent) {
if (write( OutputHandle, "\n", 1 ) < 0)
return false;
}
} }
// Shorten spacer // Shorten spacer
@@ -879,9 +909,12 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
} }
// Closing brace // Closing brace
if (Indent) if (Indent) {
write( OutputHandle, Spacer, SpacerLen ); if (write( OutputHandle, Spacer, SpacerLen ) < 0)
write( OutputHandle, "}", 1 ); return false;
}
if (write( OutputHandle, "}", 1 ))
return false;
return true; return true;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -894,7 +927,8 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
int Count = 0; int Count = 0;
// Opening brace // Opening brace
write( OutputHandle, "[", 1 ); if (write( OutputHandle, "[", 1 ) < 0)
return false;
// Extend spacer // Extend spacer
if (Indent) { if (Indent) {
@@ -910,42 +944,53 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
if (Indent) { if (Indent) {
if (First) { if (First) {
First = false; 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); Last = (++Count >= Array->Len);
switch (Member->Type) switch (Member->Type)
{ {
case jtNull : case jtNull :
write( OutputHandle, "null", 4 ); if (write( OutputHandle, "null", 4 ) < 0)
return false;
break; break;
case jtBool : case jtBool :
case jtInt : case jtInt :
case jtFloat : case jtFloat :
write( OutputHandle, Member->Value, Member->Len ); if (write( OutputHandle, Member->Value, Member->Len ) < 0)
return false;
break; break;
case jtString : case jtString :
write( OutputHandle, "\"", 1 ); if ((write( OutputHandle, "\"", 1 ) < 0) ||
write( OutputHandle, Member->Value, Member->Len ); (write( OutputHandle, Member->Value, Member->Len ) < 0) ||
write( OutputHandle, "\"", 1 ); (write( OutputHandle, "\"", 1 ) < 0))
return false;
break; break;
case jtArray : case jtArray :
PrintArray( Member, Indent ); if (!PrintArray( Member, Indent ))
return false;
break; break;
case jtObject : case jtObject :
PrintObject( Member, Indent ); if (!PrintObject( Member, Indent ))
return false;
break; break;
} }
if (!Last) if (!Last) {
write( OutputHandle, ",", 1 ); if (write( OutputHandle, ",", 1 ) < 0)
if (Indent) return false;
write( OutputHandle, "\n", 1 ); }
if (Indent) {
if (write( OutputHandle, "\n", 1 ) < 0)
return false;
}
} }
// Shorten spacer // Shorten spacer
@@ -955,9 +1000,12 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
} }
// Closing brace // Closing brace
if (Indent) if (Indent) {
write( OutputHandle, Spacer, SpacerLen ); if (write( OutputHandle, Spacer, SpacerLen ) < 0)
write( OutputHandle, "]", 1 ); return false;
}
if (write( OutputHandle, "]", 1 ) < 0)
return false;
return true; return true;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------

View File

@@ -84,7 +84,7 @@ bool CSelectableCore::LoadConfigData()
CFunctionCore::LoadConfigData(); CFunctionCore::LoadConfigData();
// Load Handles // Load Handles
if ((TempMember = ConfigMember->GetMember( "Handles", false ))) { if ((TempMember = ConfigMember->GetChild( "Handles", false ))) {
TempMember = TempMember->GetFirstChild(); TempMember = TempMember->GetFirstChild();
} }
while (TempMember) while (TempMember)
@@ -95,24 +95,24 @@ bool CSelectableCore::LoadConfigData()
// Create Handle and channel link // Create Handle and channel link
Handle = CreateHandle( TempMember->GetName(), false ); 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 (!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 ); 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 { 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 ); SetSerialHandle( Handle, Address );
// Update configuration if specified // 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" )) if (!strcasecmp( ParityText, "none" ))
Parity = NO_PARITY; Parity = NO_PARITY;
else if (!strcasecmp( ParityText, "odd" )) else if (!strcasecmp( ParityText, "odd" ))
@@ -121,132 +121,136 @@ bool CSelectableCore::LoadConfigData()
Parity = EVEN_PARITY; Parity = EVEN_PARITY;
else if (!strcasecmp( ParityText, "mark" )) else if (!strcasecmp( ParityText, "mark" ))
Parity = MARK_PARITY; 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" )) if (!strcasecmp( FlowCtrlText, "none" ))
FlowCtrl = NO_FLOWCTRL; FlowCtrl = NO_FLOWCTRL;
else if (!strcasecmp( FlowCtrlText, "hardware" )) else if (!strcasecmp( FlowCtrlText, "hardware" ))
FlowCtrl = HW_FLOWCTRL; FlowCtrl = HW_FLOWCTRL;
else if (!strcasecmp( FlowCtrlText, "software" )) else if (!strcasecmp( FlowCtrlText, "software" ))
FlowCtrl = SW_FLOWCTRL; FlowCtrl = SW_FLOWCTRL;
else
FlowCtrl = NO_FLOWCTRL;
Handle->SerialConfig = true; Handle->SerialConfig = true;
SetSerialHandleConfig( Handle, SerialConfig->GetMemInt( "BaudRate", 19200, true ), SetSerialHandleConfig( Handle, SerialConfig->GetChInt( "BaudRate", 19200, true ),
SerialConfig->GetMemInt( "DataBits", 8, true ), SerialConfig->GetChInt( "DataBits", 8, true ),
Parity, SerialConfig->GetMemInt( "StopBits", 1, true ), Parity, SerialConfig->GetChInt( "StopBits", 1, true ),
FlowCtrl, SerialConfig->GetMemInt( "DataWait", 0, true )); FlowCtrl, SerialConfig->GetChInt( "DataWait", 0, true ));
} }
} }
else if (!strcasecmp( Type, "LinePrinter" )) 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 ); 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 { 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 ); SetLinePrinterHandle( Handle, Address );
} }
else if (!strcasecmp( Type, "UNIXserver" )) 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 ); 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 { 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 ); SetUnixHandle( Handle, ctUNIXserver, Address );
} }
else if (!strcasecmp( Type, "UNIXclient" )) 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 ); 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 { 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 ); SetUnixHandle( Handle, ctUNIXclient, Address );
} }
else if (!strcasecmp( Type, "UDPserver" )) 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 ); 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 ); 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 { 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
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port 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 ); SetSocketHandle( Handle, ctUDPserver, Address, strlcase(Port), Delay );
} }
else if (!strcasecmp( Type, "UDPclient" )) 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 ); 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 ); 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 { 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
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port 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 ); SetSocketHandle( Handle, ctUDPclient, Address, strlcase(Port), Delay );
} }
else if (!strcasecmp( Type, "TCPserver" )) 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 ); 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 ); 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 { 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
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port 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 ); SetSocketHandle( Handle, ctTCPserver, Address, strlcase(Port), Delay );
} }
else if (!strcasecmp( Type, "TCPclient" )) 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 ); 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 ); 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 { 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
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port 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 ); SetSocketHandle( Handle, ctTCPclient, Address, strlcase(Port), Delay );
} }
else if (!strcasecmp( Type, "ForkPipe" )) { 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 ); SetForkPipeHandle( Handle, Address );
} }
// Set Auto Mange // Set Auto Mange
SetAutoManage( Handle, TempMember->GetMemBool( "AutoManage/Enabled", true, true ), SetAutoManage( Handle, TempMember->GetChBool( "AutoManage/Enabled", true, true ),
TempMember->GetMemBool( "AutoManage/Persistent", false, true ), TempMember->GetChBool( "AutoManage/Persistent", false, true ),
TempMember->GetMemInt( "AutoManage/ReopenDelay", 2000, true ), TempMember->GetChInt( "AutoManage/ReopenDelay", 2000, true ),
TempMember->GetMemInt( "AutoManage/CloseTimeout", 2000, true )); TempMember->GetChInt( "AutoManage/CloseTimeout", 2000, true ));
// Input buffer // Input buffer
SetInBuffer( Handle, TempMember->GetMemInt( "InputBuffer/Size", 0 ), SetInBuffer( Handle, TempMember->GetChInt( "InputBuffer/Size", 0 ),
TempMember->GetMemInt( "InputBuffer/Timeout", 250 ), TempMember->GetChInt( "InputBuffer/Timeout", 250 ),
TempMember->GetMemStr( "InputBuffer/Marker", "" ), TempMember->GetChStr( "InputBuffer/Marker", "" ),
TempMember->GetMemInt( "InputBuffer/MarkerLen", 0 ) ); TempMember->GetChInt( "InputBuffer/MarkerLen", 0 ) );
SetOutBuffer( Handle, TempMember->GetMemInt( "OutputBuffer/Size", 0 ) ); SetOutBuffer( Handle, TempMember->GetChInt( "OutputBuffer/Size", 0 ) );
// Next // Next
TempMember = TempMember->GetNextPeer(); TempMember = TempMember->GetNextPeer();

View File

@@ -50,7 +50,7 @@ bool CWatchdogCore::LoadConfigData()
CSelectableCore::LoadConfigData(); CSelectableCore::LoadConfigData();
// Set specific parameters // Set specific parameters
SetInterval( ConfigMember->GetMemInt( "Parameters/PingInterval", 500, true )); SetInterval( ConfigMember->GetChInt( "Parameters/PingInterval", 500, true ));
return true; return true;
} }