Skip to content
This repository has been archived by the owner on Sep 1, 2022. It is now read-only.

Commit

Permalink
Merge pull request #296 from dnp3/feature/map-based-database
Browse files Browse the repository at this point in the history
map based database
  • Loading branch information
jadamcrain committed Jun 6, 2019
2 parents cac77ff + b8f309d commit 9eeda2f
Show file tree
Hide file tree
Showing 91 changed files with 2,190 additions and 2,249 deletions.
8 changes: 8 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ option(DNP3_TLS "Build TLS client/server support (requires OpenSSL)" OFF)
option(DNP3_TESTS "Build unit and integration tests" OFF)
option(DNP3_EXAMPLES "Build example applications" OFF)
option(DNP3_FUZZING "Build Google OSS-Fuzz targets" OFF)
option(DNP3_EVERYTHING "Build all optional targets" OFF)

if(DNP3_EVERYTHING)
set(DNP3_TLS ON)
set(DNP3_TESTS ON)
set(DNP3_EXAMPLES ON)
set(DNP3_FUZZING ON)
endif()

# External dependencies
include(./deps/asio.cmake)
Expand Down
21 changes: 10 additions & 11 deletions cpp/examples/outstation/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,15 @@
using namespace std;
using namespace opendnp3;

void ConfigureDatabase(DatabaseConfig& config)
DatabaseConfig ConfigureDatabase()
{
// example of configuring analog index 0 for Class2 with floating point variations by default
config.analog[0].clazz = PointClass::Class2;
config.analog[0].svariation = StaticAnalogVariation::Group30Var5;
config.analog[0].evariation = EventAnalogVariation::Group32Var7;
DatabaseConfig config(10); // 10 of each type

config.analog_input[0].clazz = PointClass::Class2;
config.analog_input[0].svariation = StaticAnalogVariation::Group30Var5;
config.analog_input[0].evariation = EventAnalogVariation::Group32Var7;

return config;
}

struct State
Expand Down Expand Up @@ -69,7 +72,7 @@ int main(int argc, char* argv[])

// The main object for a outstation. The defaults are useable,
// but understanding the options are important.
OutstationStackConfig config(DatabaseSizes::AllTypes(10));
OutstationStackConfig config(ConfigureDatabase());

// Specify the maximum size of the event buffers
config.outstation.eventBufferConfig = EventBufferConfig::AllTypes(10);
Expand All @@ -83,11 +86,7 @@ int main(int argc, char* argv[])
// in this example we've changed the default link layer addressing
config.link.LocalAddr = 10;
config.link.RemoteAddr = 1;

config.link.KeepAliveTimeout = TimeDuration::Max();

// You can optionally change the default reporting variations or class assignment prior to enabling the outstation
ConfigureDatabase(config.dbConfig);
config.link.KeepAliveTimeout = TimeDuration::Max();

// Create a new outstation with a log level, command handler, and
// config info this returns a thread-safe interface used for
Expand Down
20 changes: 10 additions & 10 deletions cpp/examples/tls/outstation/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,15 @@
using namespace std;
using namespace opendnp3;

void ConfigureDatabase(DatabaseConfig& config)
DatabaseConfig ConfigureDatabase()
{
// example of configuring analog index 0 for Class2 with floating point variations by default
config.analog[0].clazz = PointClass::Class2;
config.analog[0].svariation = StaticAnalogVariation::Group30Var5;
config.analog[0].evariation = EventAnalogVariation::Group32Var7;
DatabaseConfig config(10); // 10 of each type

config.analog_input[0].clazz = PointClass::Class2;
config.analog_input[0].svariation = StaticAnalogVariation::Group30Var5;
config.analog_input[0].evariation = EventAnalogVariation::Group32Var7;

return config;
}

struct State
Expand Down Expand Up @@ -88,7 +91,7 @@ int main(int argc, char* argv[])

// The main object for a outstation. The defaults are useable,
// but understanding the options are important.
OutstationStackConfig stackConfig(DatabaseSizes::AllTypes(10));
OutstationStackConfig stackConfig(ConfigureDatabase());

// specify the maximum size of the event buffers
stackConfig.outstation.eventBufferConfig = EventBufferConfig::AllTypes(10);
Expand All @@ -101,10 +104,7 @@ int main(int argc, char* argv[])
// You can override the default link layer settings here
// in this example we've changed the default link layer addressing
stackConfig.link.LocalAddr = 10;
stackConfig.link.RemoteAddr = 1;

// You can optionally change the default reporting variations or class assignment prior to enabling the outstation
ConfigureDatabase(stackConfig.dbConfig);
stackConfig.link.RemoteAddr = 1;

// Create a new outstation with a log level, command handler, and
// config info this returns a thread-safe interface used for
Expand Down
24 changes: 9 additions & 15 deletions cpp/lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ set(opendnp3_public_headers
./include/opendnp3/app/ITransactable.h
./include/opendnp3/app/MeasurementInfo.h
./include/opendnp3/app/MeasurementTypes.h
./include/opendnp3/app/MeasurementTypeSpecs.h
./include/opendnp3/app/OctetData.h
./include/opendnp3/app/OctetString.h
./include/opendnp3/app/QualityMasks.h
Expand Down Expand Up @@ -154,7 +153,6 @@ set(opendnp3_public_headers
./include/opendnp3/master/TaskInfo.h

./include/opendnp3/outstation/ApplicationIIN.h
./include/opendnp3/outstation/Cell.h
./include/opendnp3/outstation/DatabaseConfig.h
./include/opendnp3/outstation/DatabaseSizes.h
./include/opendnp3/outstation/EventBufferConfig.h
Expand Down Expand Up @@ -198,6 +196,7 @@ set(opendnp3_private_headers
./src/app/IINValue.h
./src/app/IVariableLength.h
./src/app/MeasurementFactory.h
./src/app/MeasurementTypeSpecs.h
./src/app/Message.h
./src/app/PrefixedWriteIterator.h
./src/app/QualityFlags.h
Expand Down Expand Up @@ -357,24 +356,21 @@ set(opendnp3_private_headers
./src/master/UserPollTask.h

./src/outstation/AssignClassHandler.h
./src/outstation/StaticDataCell.h
./src/outstation/ClassBasedRequestHandler.h
./src/outstation/CommandActionAdapter.h
./src/outstation/CommandResponseHandler.h
./src/outstation/ConstantCommandAction.h
./src/outstation/ControlState.h
./src/outstation/Database.h
./src/outstation/DatabaseBuffers.h
./src/outstation/DatabaseConfigView.h
./src/outstation/DeferredRequest.h
./src/outstation/Event.h
./src/outstation/IClassAssigner.h
./src/outstation/ICommandAction.h
./src/outstation/IDatabase.h
./src/outstation/IEventReceiver.h
./src/outstation/IEventRecorder.h
./src/outstation/IEventSelector.h
./src/outstation/IINHelpers.h
./src/outstation/IndexSearch.h
./src/outstation/IINHelpers.h
./src/outstation/IResponseLoader.h
./src/outstation/IStaticSelector.h
./src/outstation/OctetStringSerializer.h
Expand All @@ -387,8 +383,7 @@ set(opendnp3_private_headers
./src/outstation/ReadHandler.h
./src/outstation/RequestHistory.h
./src/outstation/ResponseContext.h
./src/outstation/SelectedRanges.h
./src/outstation/StaticBuffers.h
./src/outstation/StaticDataMap.h
./src/outstation/StaticWriters.h
./src/outstation/TimeSyncState.h
./src/outstation/WriteHandler.h
Expand Down Expand Up @@ -448,7 +443,8 @@ set(opendnp3_src
./src/app/GroupVariationRecord.cpp
./src/app/HeaderWriter.cpp
./src/app/IINField.cpp
./src/app/MeasurementTypes.cpp
./src/app/MeasurementInfo.cpp
./src/app/MeasurementTypes.cpp
./src/app/OctetData.cpp
./src/app/QualityFlags.cpp
./src/app/SecurityStat.cpp
Expand Down Expand Up @@ -588,8 +584,7 @@ set(opendnp3_src
./src/outstation/CommandActionAdapter.cpp
./src/outstation/CommandResponseHandler.cpp
./src/outstation/Database.cpp
./src/outstation/DatabaseBuffers.cpp
./src/outstation/DatabaseConfigView.cpp
./src/outstation/DatabaseConfig.cpp
./src/outstation/DeferredRequest.cpp
./src/outstation/EventBufferConfig.cpp
./src/outstation/IINHelpers.cpp
Expand All @@ -600,10 +595,9 @@ set(opendnp3_src
./src/outstation/OutstationStates.cpp
./src/outstation/ReadHandler.cpp
./src/outstation/RequestHistory.cpp
./src/outstation/ResponseContext.cpp
./src/outstation/SelectedRanges.cpp
./src/outstation/ResponseContext.cpp
./src/outstation/SimpleCommandHandler.cpp
./src/outstation/StaticBuffers.cpp
./src/outstation/StaticDataMap.cpp
./src/outstation/StaticWriters.cpp
./src/outstation/UpdateBuilder.cpp
./src/outstation/WriteHandler.cpp
Expand Down
75 changes: 37 additions & 38 deletions cpp/lib/include/opendnp3/app/MeasurementInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@ struct BinaryInfo : private StaticOnly
typedef EventBinaryVariation event_variation_t;
typedef StaticBinaryVariation static_variation_t;

static const EventType EventTypeEnum = EventType::Binary;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::BinaryInput;
static const event_variation_t DefaultEventVariation = EventBinaryVariation::Group2Var1;
static const static_variation_t DefaultStaticVariation = StaticBinaryVariation::Group1Var2;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct DoubleBitBinaryInfo : private StaticOnly
Expand All @@ -70,24 +70,23 @@ struct DoubleBitBinaryInfo : private StaticOnly
typedef EventDoubleBinaryVariation event_variation_t;
typedef StaticDoubleBinaryVariation static_variation_t;

static const EventType EventTypeEnum = EventType::DoubleBitBinary;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::DoubleBinaryInput;
static const event_variation_t DefaultEventVariation = EventDoubleBinaryVariation::Group4Var1;
static const static_variation_t DefaultStaticVariation = StaticDoubleBinaryVariation::Group3Var2;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

class BinaryOutputStatusInfo : private StaticOnly
struct BinaryOutputStatusInfo : private StaticOnly
{
public:
typedef BinaryOutputStatus meas_t;
typedef bool value_t;
typedef EventBinaryOutputStatusVariation event_variation_t;
typedef StaticBinaryOutputStatusVariation static_variation_t;

static const EventType EventTypeEnum = EventType::BinaryOutputStatus;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::BinaryOutputStatus;
static const event_variation_t DefaultEventVariation = EventBinaryOutputStatusVariation::Group11Var1;
static const static_variation_t DefaultStaticVariation = StaticBinaryOutputStatusVariation::Group10Var2;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct AnalogInfo : private StaticOnly
Expand All @@ -97,10 +96,10 @@ struct AnalogInfo : private StaticOnly
typedef EventAnalogVariation event_variation_t;
typedef StaticAnalogVariation static_variation_t;

static const EventType EventTypeEnum = EventType::Analog;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::AnalogInput;
static const event_variation_t DefaultEventVariation = EventAnalogVariation::Group32Var1;
static const static_variation_t DefaultStaticVariation = StaticAnalogVariation::Group30Var1;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct CounterInfo : private StaticOnly
Expand All @@ -110,10 +109,10 @@ struct CounterInfo : private StaticOnly
typedef EventCounterVariation event_variation_t;
typedef StaticCounterVariation static_variation_t;

static const EventType EventTypeEnum = EventType::Counter;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::Counter;
static const event_variation_t DefaultEventVariation = EventCounterVariation::Group22Var1;
static const static_variation_t DefaultStaticVariation = StaticCounterVariation::Group20Var1;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct FrozenCounterInfo : private StaticOnly
Expand All @@ -123,10 +122,10 @@ struct FrozenCounterInfo : private StaticOnly
typedef EventFrozenCounterVariation event_variation_t;
typedef StaticFrozenCounterVariation static_variation_t;

static const EventType EventTypeEnum = EventType::FrozenCounter;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::FrozenCounter;
static const event_variation_t DefaultEventVariation = EventFrozenCounterVariation::Group23Var1;
static const static_variation_t DefaultStaticVariation = StaticFrozenCounterVariation::Group21Var1;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct AnalogOutputStatusInfo : private StaticOnly
Expand All @@ -136,10 +135,10 @@ struct AnalogOutputStatusInfo : private StaticOnly
typedef EventAnalogOutputStatusVariation event_variation_t;
typedef StaticAnalogOutputStatusVariation static_variation_t;

static const EventType EventTypeEnum = EventType::AnalogOutputStatus;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::AnalogOutputStatus;
static const event_variation_t DefaultEventVariation = EventAnalogOutputStatusVariation::Group42Var1;
static const static_variation_t DefaultStaticVariation = StaticAnalogOutputStatusVariation::Group40Var1;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct OctetStringInfo : private StaticOnly
Expand All @@ -148,19 +147,19 @@ struct OctetStringInfo : private StaticOnly
typedef EventOctetStringVariation event_variation_t;
typedef StaticOctetStringVariation static_variation_t;

static const EventType EventTypeEnum = EventType::OctetString;
static const StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::OctetString;
static const event_variation_t DefaultEventVariation = EventOctetStringVariation::Group111Var0;
static const static_variation_t DefaultStaticVariation = StaticOctetStringVariation::Group110Var0;
static const EventType EventTypeEnum;
static const StaticTypeBitmask StaticTypeEnum;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

struct TimeAndIntervalInfo : private StaticOnly
{
typedef TimeAndInterval meas_t;
typedef StaticTimeAndIntervalVariation static_variation_t;

const static StaticTypeBitmask StaticTypeEnum = StaticTypeBitmask::TimeAndInterval;
const static StaticTimeAndIntervalVariation DefaultStaticVariation = StaticTimeAndIntervalVariation::Group50Var4;
static const StaticTypeBitmask StaticTypeEnum;
static const StaticTimeAndIntervalVariation DefaultStaticVariation;
};

struct SecurityStatInfo : private StaticOnly
Expand All @@ -170,8 +169,8 @@ struct SecurityStatInfo : private StaticOnly
typedef EventSecurityStatVariation event_variation_t;
typedef StaticSecurityStatVariation static_variation_t;

const static event_variation_t DefaultEventVariation = EventSecurityStatVariation::Group122Var1;
const static static_variation_t DefaultStaticVariation = StaticSecurityStatVariation::Group121Var1;
static const event_variation_t DefaultEventVariation;
static const static_variation_t DefaultStaticVariation;
};

} // namespace opendnp3
Expand Down

0 comments on commit 9eeda2f

Please sign in to comment.