Browse Source

[3401] Addressed reveiw comments

Static handlers were removed from DControllerBase.
Developer's guide has been updated to with --with-kea-config
discussion and updated diagrams.
Other minor corrections.

(Note ingore diffs in the diagram .svg files, they aren't particularly
meaningful to the human eye).
Thomas Markwalder 11 years ago
parent
commit
2c0ab179a5

+ 63 - 33
src/bin/d2/d2.dox

@@ -52,39 +52,45 @@ base are shown in the following class diagram:
 - isc::d2::DControllerBase - provides all of the services necessary to manage
 an application process class derived from isc::d2::DProcess. These services include:
     - Command line argument handling
-    - Process instantiation and initialization
+    - Process instantiation and initialization0
     - Support for stand-alone execution
-    - Support for integrated operation as a BIND10 module (session management
+    - Support for integrated operation as a BUNDY module (session management
       and event handling)
     - Process event loop invocation and shutdown
-    .
-    It creates and manages an instance of isc::d2::DProcessBase.  The CPL is designed
-    for asynchronous event processing applications.  It is constructed to use ASIO
-    library for IO processing.  DControllerBase own an isc::asiolink::io_service instance and it pas    ses this into the @c DProcessBase constructor and it is this
-    service that is used drivel the process's event loop.
-
-    @c DControllerBase also provides the ability to operate one of two modes:
-    "stand-alone" mode or "managed" mode.  In stand-alone mode, the controller has
-    no IO of it's own, thus there is two-way control communication between the application and the outside world.
-
-    In "managed mode" the controller creates a BIND10 Session, allowing it to
-    participate as a BIND10 module and therefore receive control commands such as
-    configuration updates, status requests, and shutdown.  BIND10 modules are
-    required to supply two callbacks: one for configuration events and one for
-    command events. @c DControllerBase supplies these callbacks which largely
-    pass the information through to its @c DProcessBase instance.  The key aspect
-    to take from this is that the controller handles the interface for receiving
-    asynchronous commands and the invokes the appropriate services in the process's
-    interface.
-
-    @todo DControllerBase does yet support reading the configuration from a
-    command line argument. It's command line argument processing can be very easily
-    extended to do so.
-
-    @todo At the time of this writing Kea is being separated from the BIND10
-    framework.  As such, use of the BIND10 Session will be removed but could
-    readily be replaced with an authenticated socket connection for receiving and
-    responding to directives asynchronously.
+
+    It creates and manages an instance of isc::d2::DProcessBase.  The CPL is
+    designed for asynchronous event processing applications.  It is constructed
+    to use ASIO library for IO processing.  DControllerBase owns an
+    isc::asiolink::io_service instance and it passes this into the @c
+    DProcessBase constructor. It is this io_service that is used drive the
+    process's event loop.  The controller is designed to provide any interfaces
+    between the process it controls and the outside world.
+
+    @c DControllerBase provides configuration for its process via a JSON file
+    specified as a mandatory command line argument. The file structure is
+    expected be as follows:
+
+    { "<module-name>": {<module-config>} }
+
+    where:
+        module-name : is a label which uniquely identifies the
+        configuration data for the (i.e. the controlled process.)
+        It is the value returned by @ref
+        isc::d2::DControllerBase::getAppName()
+
+        module-config: a set of zero or more JSON elements which comprise
+        application's configuration values.  Element syntax is governed
+        by those elements supported in isc::cc.
+
+    The file may contain an arbitrary number of other modules.
+
+    @todo DControllerBase will soon support dynamic reloading of the
+    configuration file upon receipt of the SIGHUP signal, and graceful
+    shutdown upon receipt of either SIGTERM or SIGINT.
+
+    @todo Eventually, some sort of secure socket interface which supports remote
+    control operations such as configuration changes or status reporting will
+    likely be implemented.
 
 - isc::d2::DProcessBase - defines an asynchronous-event processor (i.e.
 application) which provides a uniform interface to:
@@ -105,10 +111,10 @@ information or "context".  It provides a single enclosure for the storage of
 configuration parameters or any other information that needs to accessible
 within a given context.
 
-The following sequence diagram shows how a configuration update, received
-asynchronously through the session command channel, moves through the CPL:
+The following sequence diagram shows how a configuration from file moves
+through the CPL layer:
 
-@image html config_sequence.svg "CPL Configuration Update Sequence"
+@image html config_from_file_sequence.svg "CPL Configuration From File Sequence"
 
 The CPL classes will likely move into a common library.
 
@@ -122,6 +128,30 @@ in the diagram below:
 - isc::d2::D2Controller - entry point for running D2, it processes command line
 options, starts and controls the application process, @c D2Process.
 
+Currently there are two implementations of D2Controller selected through the
+configuration script switch, "--with-kea-config":
+
+1. --with-kea-config=JSON - The implementation is contained in isc/d2/d2_controller.*.  This form allows D2 to run as a stand-alone process configured via JSON
+text file specified as a command line argument.  The file content is described
+in isc/d2/dhcp-ddns.spec, unit tests are in
+isc/d2/tests/bundy_d2_controller_unittests.cc.  As of Kea 0.9, this form will
+be the default form.
+
+2. --with-kea-config=BUNDY - The implementation is containd in
+isc/d2/bundy_d2_controller.*, unit tests are in isc/d2/tests/d2_controller_unittests.cc and d_controller_unittests.cc  This form allows D2 to run as a a Bundy
+module. It creates a BUNDY Session, allowing it to receive control commands
+such as configuration updates, status requests, and shutdown.  BUNDY modules
+are required to supply two callbacks: one for configuration events and one for
+command events.  This form of D2Controller supplies these callbacks which
+largely pass the information through to its @c D2Process instance.   If the
+controller cannot establish a BUNDY session it will exit with a fatal error.
+
+The configuration switch deteremines which of two forms and tests are compiled
+and they are mutually exclusive.
+
+@note The inclusion of the BUNDY form should be considered temporary. Long range
+planning should be based on the JSON form.
+
 - isc::d2::D2Process - creates and manages D2's primary resources and implements
 the main event loop described in @ref d2EventLoop.
 

+ 1 - 3
src/bin/d2/d2_controller.cc

@@ -31,9 +31,7 @@ const char* D2Controller::d2_bin_name_ = "b10-dhcp-ddns";
 DControllerBasePtr&
 D2Controller::instance() {
     // If the instance hasn't been created yet, create it.  Note this method
-    // must use the base class singleton instance methods.  The base class
-    // must have access to the singleton in order to use it within BIND10
-    // static function callbacks.
+    // must use the base class singleton instance methods.
     if (!getController()) {
         DControllerBasePtr controller_ptr(new D2Controller());
         setController(controller_ptr);

+ 1 - 28
src/bin/d2/d_controller.cc

@@ -156,28 +156,6 @@ DControllerBase::parseArgs(int argc, char* argv[])
     }
 }
 
-isc::data::ConstElementPtr
-DControllerBase::configHandler(isc::data::ConstElementPtr new_config) {
-    LOG_DEBUG(dctl_logger, DBGLVL_COMMAND, DCTL_CONFIG_UPDATE)
-              .arg(controller_->getAppName()).arg(new_config->str());
-
-    // Invoke the instance method on the controller singleton.
-    return (controller_->updateConfig(new_config));
-}
-
-// Static callback which invokes non-static handler on singleton
-isc::data::ConstElementPtr
-DControllerBase::commandHandler(const std::string& command,
-                                isc::data::ConstElementPtr args) {
-
-    LOG_DEBUG(dctl_logger, DBGLVL_COMMAND, DCTL_COMMAND_RECEIVED)
-        .arg(controller_->getAppName()).arg(command)
-        .arg(args ? args->str() : "(no args)");
-
-    // Invoke the instance method on the controller singleton.
-    return (controller_->executeCommand(command, args));
-}
-
 bool
 DControllerBase::customOption(int /* option */, char* /*optarg*/)
 {
@@ -212,7 +190,7 @@ DControllerBase::configFromFile() {
     isc::data::ConstElementPtr module_config;
 
     try {
-        std::string config_file = getConfigFileName();
+        std::string config_file = getConfigFile();
         if (config_file.empty()) {
             // Basic sanity check: file name must not be empty.
             isc_throw(BadValue, "JSON configuration file not specified. Please "
@@ -328,11 +306,6 @@ DControllerBase::usage(const std::string & text)
 DControllerBase::~DControllerBase() {
 }
 
-std::string
-DControllerBase::getConfigFileName() {
-    return (Daemon::getConfigFile());
-}
-
 }; // namespace isc::d2
 
 // Provide an implementation until we figure out a better way to do this.

+ 2 - 38
src/bin/d2/d_controller.h

@@ -30,10 +30,6 @@
 namespace isc {
 namespace d2 {
 
-/// @brief DControllerBase launch exit status values.  Upon service shutdown
-/// normal or otherwise, the Controller's launch method will return one of
-/// these values.
-
 /// @brief Exception thrown when the command line is invalid.
 class InvalidUsage : public isc::Exception {
 public:
@@ -206,44 +202,17 @@ public:
                                                       isc::data::
                                                       ConstElementPtr args);
 
-    /// @brief A callback for handling all incoming configuration updates.
-    ///
-    /// Provides a static callback that can be used to handle asynchronsouly
-    /// received configurations. It acts as a wrapper around the singleton's
-    /// virtual instance method, updateConfig.
-    ///
-    /// @param new_config textual representation of the new configuration
-    ///
-    /// @return status of the config update
-    static isc::data::ConstElementPtr configHandler(isc::data::ConstElementPtr
-                                                    new_config);
-
-    /// @brief A callback for handling all incoming commands.
-    ///
-    /// Provides a static callback that can be used to handle asynchronsouly
-    /// received commands. It acts as a wrapper around the singleton's virtual
-    /// instance method, executeCommand.
-    ///
-    /// @param command textual representation of the command
-    /// @param args parameters of the command. It can be NULL pointer if no
-    /// arguments exist for a particular command.
-    ///
-    /// @return status of the processed command
-    static isc::data::ConstElementPtr commandHandler(const std::string& command,
-                                                     isc::data::ConstElementPtr
-                                                     args);
-
     /// @brief Fetches the name of the application under control.
     ///
     /// @return returns the controller service name string
-    const std::string getAppName() const {
+    std::string getAppName() const {
         return (app_name_);
     }
 
     /// @brief Fetches the name of the application executable.
     ///
     /// @return returns the controller logger name string
-    const std::string getBinName() const {
+    std::string getBinName() const {
         return (bin_name_);
     }
 
@@ -414,11 +383,6 @@ protected:
     /// non-zero means failure), and a string explanation of the outcome.
     isc::data::ConstElementPtr shutdownProcess(isc::data::ConstElementPtr args);
 
-    /// @brief Fetches the name of the configuration file
-    ///
-    /// @return the configuration file name as a string
-    virtual std::string getConfigFileName();
-
     /// @brief Fetches the current process
     ///
     /// @return the a pointer to the current process instance.

+ 179 - 182
src/bin/d2/images/abstract_app_classes.svg

@@ -1,225 +1,222 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Created with Bouml (http://bouml.free.fr/) -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="749" height="595" version="1.1" xmlns="http://www.w3.org/2000/svg">
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="733" y="357" width="3" height="225" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="627" y="579" width="109" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="623" y="353" width="110" height="226" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="678" y="366">DCfgContextBase</text>
-	<line stroke="black" stroke-opacity="1" x1="623" y1="368" x2="733" y2="368" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="627" y="381">OPTIONAL</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="627" y="394">REQUIRED</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="407">boolean_values_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="420">uint32_values_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="433">string_values_</text>
-	<line stroke="black" stroke-opacity="1" x1="623" y1="435" x2="733" y2="435" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="448">DCfgContextBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="461">~DCfgContextBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="474">getParam()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="487">getParam()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="500">getParam()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="513">getBooleanStorage()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="526">getUint32Storage()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="539">getStringStorage()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="627" y="552">clone()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="565">DCfgContextBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="627" y="578">operator =()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="179" y="15" width="3" height="511" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="35" y="523" width="147" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="31" y="11" width="148" height="512" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="105" y="24">DControllerBase</text>
-	<line stroke="black" stroke-opacity="1" x1="31" y1="26" x2="179" y2="26" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="39">app_name_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="52">bin_name_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="65">stand_alone_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="78">verbose_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="91">spec_file_name_</text>
-	<line stroke="black" stroke-opacity="1" x1="31" y1="93" x2="179" y2="93" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="106">DControllerBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="119">~DControllerBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="132">launch()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="35" y="145">dummyConfigHandler()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="35" y="158">configHandler()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="35" y="171">commandHandler()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="184">updateConfig()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="197">executeCommand()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="210">customOption()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="35" y="223">createProcess()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="236">customControllerCommand()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="249">onSessionConnect()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="262">onSessionDisconnect()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="275">getUsageText()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="288">getCustomOpts()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="301">getAppName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="314">getBinName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="327">isStandAlone()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="340">setStandAlone()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="353">isVerbose()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="366">setVerbose()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="379">getIOService()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="392">getSpecFileName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="405">setSpecFileName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="35" y="418">getController()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="35" y="431">setController()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="444">parseArgs()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="457">initProcess()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="470">establishSession()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="483">runProcess()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="496">disconnectSession()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="509">shutdown()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="35" y="522">usage()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="420" y="119" width="3" height="213" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="324" y="329" width="99" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="320" y="115" width="100" height="214" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="370" y="128">DProcessBase</text>
-	<line stroke="black" stroke-opacity="1" x1="320" y1="130" x2="420" y2="130" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="143">app_name_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="156">shut_down_flag_</text>
-	<line stroke="black" stroke-opacity="1" x1="320" y1="158" x2="420" y2="158" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="171">DProcessBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="324" y="184">init()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="324" y="197">run()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="324" y="210">shutdown()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="324" y="223">configure()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="324" y="236">command()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="249">~DProcessBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="262">shouldShutdown()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="275">setShutdownFlag()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="288">getAppName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="301">getIoService()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="314">stopIOService()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="324" y="327">getCfgMgr()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="585" y="240" width="3" height="127" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="479" y="364" width="109" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="475" y="236" width="110" height="128" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="530" y="249">DCfgMgrBase</text>
-	<line stroke="black" stroke-opacity="1" x1="475" y1="251" x2="585" y2="251" />
-	<line stroke="black" stroke-opacity="1" x1="475" y1="259" x2="585" y2="259" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="479" y="272">DCfgMgrBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="479" y="285">~DCfgMgrBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="479" y="298">parseConfig()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="479" y="311">addToParseOrder()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="479" y="324">getParseOrder()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="479" y="337">getContext()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="479" y="350">createConfigParser()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="479" y="363">buildAndCommit()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="419" y="56" width="3" height="45" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="323" y="98" width="99" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="319" y="52" width="100" height="46" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-anchor="middle" x="369" y="65">&lt;&lt;typedef&gt;&gt;</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="369" y="80">DProcessBasePtr</text>
-	<line stroke="black" stroke-opacity="1" x1="319" y1="82" x2="419" y2="82" />
-	<line stroke="black" stroke-opacity="1" x1="319" y1="90" x2="419" y2="90" />
+<svg width="770" height="641" version="1.1" xmlns="http://www.w3.org/2000/svg">
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="588" y="279" width="3" height="193" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="474" y="469" width="117" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="470" y="275" width="118" height="194" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="529" y="289">DCfgMgrBase</text>
+	<line stroke="black" stroke-opacity="1" x1="470" y1="291" x2="588" y2="291" />
+	<line stroke="black" stroke-opacity="1" x1="470" y1="299" x2="588" y2="299" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="313">DCfgMgrBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="327">~DCfgMgrBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="341">parseConfig()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="355">addToParseOrder()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="369">getParseOrder()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="383">getContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="397">buildParams()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="474" y="411">createConfigParser()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="474" y="425">createNewContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="439">resetContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="453">setContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="474" y="467">buildAndCommit()</text>
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="754" y="385" width="3" height="243" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="640" y="625" width="117" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="636" y="381" width="118" height="244" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="695" y="395">DCfgContextBase</text>
+	<line stroke="black" stroke-opacity="1" x1="636" y1="397" x2="754" y2="397" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="640" y="411">OPTIONAL</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="640" y="425">REQUIRED</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="439">boolean_values_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="453">uint32_values_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="467">string_values_</text>
+	<line stroke="black" stroke-opacity="1" x1="636" y1="469" x2="754" y2="469" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="483">DCfgContextBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="497">~DCfgContextBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="511">getParam()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="525">getParam()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="539">getParam()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="553">getBooleanStorage()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="567">getUint32Storage()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="581">getStringStorage()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="640" y="595">clone()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="609">DCfgContextBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="640" y="623">operator =()</text>
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="175" y="14" width="3" height="453" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="17" y="464" width="161" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="13" y="10" width="162" height="454" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="94" y="24">DControllerBase</text>
+	<line stroke="black" stroke-opacity="1" x1="13" y1="26" x2="175" y2="26" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="40">app_name_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="54">bin_name_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="68">verbose_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="82">spec_file_name_</text>
+	<line stroke="black" stroke-opacity="1" x1="13" y1="84" x2="175" y2="84" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="98">DControllerBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="112">~DControllerBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="126">launch()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="140">updateConfig()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="154">configFromFile()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="168">executeCommand()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="182">getAppName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="196">getBinName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="210">customOption()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="17" y="224">createProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="238">customControllerCommand()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="252">getUsageText()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="266">getCustomOpts()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="280">isVerbose()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="294">setVerbose()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="308">getIOService()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="322">getSpecFileName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="336">setSpecFileName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="17" y="350">getController()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="17" y="364">setController()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="378">parseArgs()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="392">initProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="406">runProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="420">shutdownProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="434">getConfigFileName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="448">getProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="462">usage()</text>
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="274" y="165" width="3" height="47" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="198" y="209" width="79" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="194" y="161" width="80" height="48" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-anchor="middle" x="234" y="175">&lt;&lt;typedef&gt;&gt;</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="234" y="191">IOServicePtr</text>
+	<line stroke="black" stroke-opacity="1" x1="194" y1="193" x2="274" y2="193" />
+	<line stroke="black" stroke-opacity="1" x1="194" y1="201" x2="274" y2="201" />
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="179" y1="118" x2="236" y2="118" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="179,118 185,112 191,118 185,124" />
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="236" y1="160" x2="242" y2="154" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="160" x2="230" y2="154" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="118" x2="236" y2="160" />
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="426" y="148" width="3" height="229" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="322" y="374" width="107" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="318" y="144" width="108" height="230" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="372" y="158">DProcessBase</text>
+	<line stroke="black" stroke-opacity="1" x1="318" y1="160" x2="426" y2="160" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="174">app_name_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="188">shut_down_flag_</text>
+	<line stroke="black" stroke-opacity="1" x1="318" y1="190" x2="426" y2="190" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="204">DProcessBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="322" y="218">init()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="322" y="232">run()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="322" y="246">shutdown()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="322" y="260">configure()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="322" y="274">command()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="288">~DProcessBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="302">shouldShutdown()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="316">setShutdownFlag()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="330">getAppName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="344">getIoService()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="358">stopIOService()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="322" y="372">getCfgMgr()</text>
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="371" y1="114" x2="377" y2="108" />
-	<line stroke="black" stroke-opacity="1" x1="371" y1="114" x2="365" y2="108" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="371" y1="102" x2="371" y2="114" />
+	<line stroke="black" stroke-opacity="1" x1="317" y1="260" x2="236" y2="260" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="317,260 311,266 305,260 311,254" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="183" y1="34" x2="371" y2="34" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="183,34 189,28 195,34 189,40" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="213" x2="230" y2="219" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="213" x2="242" y2="219" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="260" x2="236" y2="213" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="371" y1="51" x2="377" y2="45" />
-	<line stroke="black" stroke-opacity="1" x1="371" y1="51" x2="365" y2="45" />
-	<line stroke="black" stroke-opacity="1" x1="371" y1="34" x2="371" y2="51" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="424" y="72" width="3" height="47" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="320" y="116" width="107" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="316" y="68" width="108" height="48" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-anchor="middle" x="370" y="82">&lt;&lt;typedef&gt;&gt;</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="370" y="98">DProcessBasePtr</text>
+	<line stroke="black" stroke-opacity="1" x1="316" y1="100" x2="424" y2="100" />
+	<line stroke="black" stroke-opacity="1" x1="316" y1="108" x2="424" y2="108" />
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="685" y="273">context_</text>
+	<line stroke="black" stroke-opacity="1" x1="372" y1="143" x2="378" y2="137" />
+	<line stroke="black" stroke-opacity="1" x1="372" y1="143" x2="366" y2="137" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="372" y1="120" x2="372" y2="143" />
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="381" y="48">process_</text>
+	<line stroke="black" stroke-opacity="1" x1="372" y1="67" x2="378" y2="61" />
+	<line stroke="black" stroke-opacity="1" x1="372" y1="67" x2="366" y2="61" />
+	<line stroke="black" stroke-opacity="1" x1="372" y1="39" x2="372" y2="67" />
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="251" y="174">io_service_</text>
+	<line stroke="black" stroke-opacity="1" x1="179" y1="39" x2="372" y2="39" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="179,39 185,33 191,39 185,45" />
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="535" y="155">cfg_mgr_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="382" y="63">process_</text>
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="250" y="244">io_service_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="534" y="196">cfg_mgr_</text>
 </g>
 <g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="275" y="182" width="3" height="45" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="205" y="224" width="73" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="201" y="178" width="74" height="46" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-anchor="middle" x="238" y="191">&lt;&lt;typedef&gt;&gt;</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="238" y="206">IOServicePtr</text>
-	<line stroke="black" stroke-opacity="1" x1="201" y1="208" x2="275" y2="208" />
-	<line stroke="black" stroke-opacity="1" x1="201" y1="216" x2="275" y2="216" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="696" y="302">context_</text>
 </g>
 <g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="571" y="163" width="3" height="45" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="479" y="205" width="95" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="475" y="159" width="96" height="46" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-anchor="middle" x="523" y="172">&lt;&lt;typedef&gt;&gt;</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="523" y="187">DCfgMgrBasePtr</text>
-	<line stroke="black" stroke-opacity="1" x1="475" y1="189" x2="571" y2="189" />
-	<line stroke="black" stroke-opacity="1" x1="475" y1="197" x2="571" y2="197" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="246" y="156">io_service_</text>
 </g>
 <g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="731" y="281" width="3" height="45" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="619" y="323" width="115" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="615" y="277" width="116" height="46" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-anchor="middle" x="673" y="290">&lt;&lt;typedef&gt;&gt;</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="673" y="305">DCfgContextBasePtr</text>
-	<line stroke="black" stroke-opacity="1" x1="615" y1="307" x2="731" y2="307" />
-	<line stroke="black" stroke-opacity="1" x1="615" y1="315" x2="731" y2="315" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="246" y="231">io_service_</text>
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="319" y1="282" x2="240" y2="282" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="319,282 313,288 307,282 313,276" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="747" y="311" width="3" height="47" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="625" y="355" width="125" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="621" y="307" width="126" height="48" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-anchor="middle" x="684" y="321">&lt;&lt;typedef&gt;&gt;</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="684" y="337">DCfgContextBasePtr</text>
+	<line stroke="black" stroke-opacity="1" x1="621" y1="339" x2="747" y2="339" />
+	<line stroke="black" stroke-opacity="1" x1="621" y1="347" x2="747" y2="347" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="183" y1="154" x2="241" y2="154" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="183,154 189,148 195,154 189,160" />
+	<line stroke="black" stroke-opacity="1" x1="688" y1="380" x2="693" y2="373" />
+	<line stroke="black" stroke-opacity="1" x1="688" y1="380" x2="681" y2="374" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="687" y1="359" x2="688" y2="380" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="424" y1="135" x2="525" y2="135" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="424,135 430,129 436,135 430,141" />
+	<line stroke="black" stroke-opacity="1" x1="686" y1="306" x2="692" y2="300" />
+	<line stroke="black" stroke-opacity="1" x1="686" y1="306" x2="680" y2="300" />
+	<line stroke="black" stroke-opacity="1" x1="686" y1="289" x2="686" y2="306" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="525" y1="158" x2="531" y2="152" />
-	<line stroke="black" stroke-opacity="1" x1="525" y1="158" x2="519" y2="152" />
-	<line stroke="black" stroke-opacity="1" x1="525" y1="135" x2="525" y2="158" />
+	<line stroke="black" stroke-opacity="1" x1="592" y1="289" x2="686" y2="289" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="592,289 598,283 604,289 598,295" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="675" y1="352" x2="681" y2="346" />
-	<line stroke="black" stroke-opacity="1" x1="675" y1="352" x2="669" y2="346" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="675" y1="327" x2="675" y2="352" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="574" y="205" width="3" height="47" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="474" y="249" width="103" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="470" y="201" width="104" height="48" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-anchor="middle" x="522" y="215">&lt;&lt;typedef&gt;&gt;</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="522" y="231">DCfgMgrBasePtr</text>
+	<line stroke="black" stroke-opacity="1" x1="470" y1="233" x2="574" y2="233" />
+	<line stroke="black" stroke-opacity="1" x1="470" y1="241" x2="574" y2="241" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="589" y1="247" x2="675" y2="247" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="589,247 595,241 601,247 595,253" />
+	<line stroke="black" stroke-opacity="1" x1="524" y1="274" x2="530" y2="268" />
+	<line stroke="black" stroke-opacity="1" x1="524" y1="274" x2="518" y2="268" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="524" y1="253" x2="524" y2="274" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="675" y1="276" x2="681" y2="270" />
-	<line stroke="black" stroke-opacity="1" x1="675" y1="276" x2="669" y2="270" />
-	<line stroke="black" stroke-opacity="1" x1="675" y1="247" x2="675" y2="276" />
+	<line stroke="black" stroke-opacity="1" x1="430" y1="168" x2="524" y2="168" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="430,168 436,162 442,168 436,174" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="526" y1="235" x2="531" y2="228" />
-	<line stroke="black" stroke-opacity="1" x1="526" y1="235" x2="519" y2="229" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="525" y1="209" x2="526" y2="235" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="240" y1="228" x2="234" y2="234" />
-	<line stroke="black" stroke-opacity="1" x1="240" y1="228" x2="246" y2="234" />
-	<line stroke="black" stroke-opacity="1" x1="240" y1="282" x2="240" y2="228" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="241" y1="177" x2="247" y2="171" />
-	<line stroke="black" stroke-opacity="1" x1="241" y1="177" x2="235" y2="171" />
-	<line stroke="black" stroke-opacity="1" x1="241" y1="154" x2="241" y2="177" />
+	<line stroke="black" stroke-opacity="1" x1="524" y1="200" x2="530" y2="194" />
+	<line stroke="black" stroke-opacity="1" x1="524" y1="200" x2="518" y2="194" />
+	<line stroke="black" stroke-opacity="1" x1="524" y1="168" x2="524" y2="200" />
 </g>
 </svg>

+ 83 - 0
src/bin/d2/images/config_from_file_sequence.svg

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Bouml (http://bouml.free.fr/) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="746" height="226" version="1.1" xmlns="http://www.w3.org/2000/svg">
+<g>
+	<line stroke="black" stroke-dasharray="18,6"  stroke-opacity="1" x1="214" y1="45" x2="214" y2="226" />
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="261" y="8" width="3" height="18" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="167" y="23" width="97" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="163" y="4" width="98" height="19" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" text-anchor="middle" x="212" y="20">:DControllerBase</text>
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="730" y="8" width="3" height="18" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="648" y="23" width="85" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="644" y="4" width="86" height="19" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" text-anchor="middle" x="687" y="20">:DCfgMgrBase</text>
+</g>
+<g>
+	<line stroke="black" stroke-dasharray="18,6"  stroke-opacity="1" x1="689" y1="45" x2="689" y2="226" />
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="488" y="8" width="3" height="18" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="402" y="23" width="89" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="398" y="4" width="90" height="19" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" text-anchor="middle" x="443" y="20">:DProcessBase</text>
+</g>
+<g>
+	<line stroke="black" stroke-dasharray="18,6"  stroke-opacity="1" x1="445" y1="45" x2="445" y2="226" />
+</g>
+<g>
+	<rect fill="none" stroke="black" stroke-width="1" stroke-opacity="1" x="684" y="180" width="10" height="24" />
+</g>
+<g>
+	<rect fill="none" stroke="black" stroke-width="1" stroke-opacity="1" x="440" y="175" width="10" height="28" />
+</g>
+<g>
+	<rect fill="none" stroke="black" stroke-width="1" stroke-opacity="1" x="209" y="67" width="10" height="147" />
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="451" y1="194" x2="684" y2="194" />
+	<polygon fill="#000000" stroke="none" points="684,194 680,190 680,198" />
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="39" y1="72" x2="209" y2="72" />
+	<polygon fill="#000000" stroke="none" points="209,72 205,68 205,76" />
+</g>
+<ellipse fill="black" stroke="none" cx="34.5" cy="73.5" rx="4.5" ry="4.5" />
+<g>
+	<rect fill="none" stroke="black" stroke-width="1" stroke-opacity="1" x="215" y="164" width="10" height="37" />
+</g>
+<g>
+	<rect fill="none" stroke="black" stroke-width="1" stroke-opacity="1" x="215" y="99" width="10" height="24" />
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="226" y1="187" x2="440" y2="187" />
+	<polygon fill="#000000" stroke="none" points="440,187 436,183 436,191" />
+</g>
+<g>
+	<path fill="none" stroke="black" stroke-opacity="1" d="M 227 100 L 244 100 L 244 107 L 227 107" />
+	<polygon fill="#000000" stroke="none" points="227,107 231,111 231,103" />
+</g>
+<g>
+	<path fill="none" stroke="black" stroke-opacity="1" d="M 227 165 L 244 165 L 244 172 L 227 172" />
+	<polygon fill="#000000" stroke="none" points="227,172 231,176 231,168" />
+</g>
+<g>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="231" y="160">updateConfig()</text>
+</g>
+<g>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="111" y="67">configFromFile()</text>
+</g>
+<g>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="591" y="191">parseConfig()</text>
+</g>
+<g>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="372" y="182">configure()</text>
+</g>
+<g>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="224" y="95">getConfigFileName()</text>
+</g>
+</svg>

+ 0 - 94
src/bin/d2/images/config_sequence.svg

@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Bouml (http://bouml.free.fr/) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="847" height="290" version="1.1" xmlns="http://www.w3.org/2000/svg">
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="674" y="8" width="3" height="16" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="606" y="21" width="71" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="602" y="4" width="72" height="17" />
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" text-decoration="underline" text-anchor="middle" x="638" y="18">:DCfgMgrBase</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="116" y="8" width="3" height="16" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="28" y="21" width="91" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="24" y="4" width="92" height="17" />
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" text-decoration="underline" text-anchor="middle" x="70" y="18">:ModuleCCSession</text>
-</g>
-<g>
-	<line stroke="black" stroke-dasharray="18,6"  stroke-opacity="1" x1="72" y1="45" x2="72" y2="290" />
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="469" y="8" width="3" height="16" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="397" y="21" width="75" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="393" y="4" width="76" height="17" />
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" text-decoration="underline" text-anchor="middle" x="431" y="18">:DProcessBase</text>
-</g>
-<g>
-	<line stroke="black" stroke-dasharray="18,6"  stroke-opacity="1" x1="640" y1="45" x2="640" y2="290" />
-</g>
-<g>
-	<line stroke="black" stroke-dasharray="18,6"  stroke-opacity="1" x1="433" y1="45" x2="433" y2="290" />
-</g>
-<g>
-	<line stroke="black" stroke-dasharray="18,6"  stroke-opacity="1" x1="260" y1="45" x2="260" y2="290" />
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="300" y="8" width="3" height="16" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="221" y="21" width="82" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="217" y="4" width="83" height="17" />
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" text-decoration="underline" text-anchor="middle" x="259" y="18">:DControllerBase</text>
-</g>
-<g>
-	<rect fill="#ffffff" stroke="black" stroke-width="1" stroke-opacity="1" x="635" y="153" width="10" height="34" />
-</g>
-<g>
-	<rect fill="#ffffff" stroke="black" stroke-width="1" stroke-opacity="1" x="255" y="62" width="10" height="125" />
-</g>
-<g>
-	<rect fill="#ffffff" stroke="black" stroke-width="1" stroke-opacity="1" x="67" y="59" width="10" height="131" />
-</g>
-<g>
-	<rect fill="#ffffff" stroke="black" stroke-width="1" stroke-opacity="1" x="428" y="144" width="10" height="43" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="439" y1="182" x2="635" y2="182" />
-	<polygon fill="#000000" stroke="none" points="635,182 631,178 631,186" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="78" y1="67" x2="255" y2="67" />
-	<polygon fill="#000000" stroke="none" points="255,67 251,63 251,71" />
-</g>
-<g>
-	<rect fill="#ffffff" stroke="black" stroke-width="1" stroke-opacity="1" x="73" y="104" width="10" height="25" />
-</g>
-<g>
-	<rect fill="#ffffff" stroke="black" stroke-width="1" stroke-opacity="1" x="261" y="95" width="10" height="84" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="272" y1="152" x2="428" y2="152" />
-	<polygon fill="#000000" stroke="none" points="428,152 424,148 424,156" />
-</g>
-<g>
-	<path fill="none" stroke="black" stroke-opacity="1" d="M 273 96 L 290 96 L 290 103 L 273 103" />
-	<polygon fill="#000000" stroke="none" points="273,103 277,107 277,99" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="84" y1="116" x2="261" y2="116" />
-	<polygon fill="#000000" stroke="none" points="84,116 88,112 88,120" />
-</g>
-<g>
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" x="446" y="206">parseConfig(in new_config : isc::data::ElementPtr) : isc::data::ConstElementPtr</text>
-</g>
-<g>
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" x="277" y="89">updateConfig(in new_config : isc::data::ConstElementPtr) : isc::data::ConstElementPtr</text>
-</g>
-<g>
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" x="96" y="113">getFullConfig() : ConstElementPtr</text>
-</g>
-<g>
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" x="281" y="145">configure(in config_set : isc::data::ConstElementPtr) : isc::data::ConstElementPtr</text>
-</g>
-<g>
-	<text font-family="Helvetica" font-size="10" fill="#000000" xml:space="preserve" x="79" y="59">configHandler(in new_config : isc::data::ConstElementPtr) : isc::data::ConstElementPtr</text>
-</g>
-</svg>

+ 293 - 290
src/bin/d2/images/d2_app_classes.svg

@@ -1,342 +1,345 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Created with Bouml (http://bouml.free.fr/) -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg width="755" height="774" version="1.1" xmlns="http://www.w3.org/2000/svg">
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="731" y="569" width="3" height="127" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="645" y="693" width="89" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="641" y="565" width="90" height="128" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="686" y="578">D2CfgContext</text>
-	<line stroke="black" stroke-opacity="1" x1="641" y1="580" x2="731" y2="580" />
-	<line stroke="black" stroke-opacity="1" x1="641" y1="588" x2="731" y2="588" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="645" y="601">D2CfgContext()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="645" y="614">~D2CfgContext()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="645" y="627">clone()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="645" y="640">getForwardMgr()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="645" y="653">getReverseMgr()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="645" y="666">getKeys()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="645" y="679">D2CfgContext()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="645" y="692">operator =()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="160" y="11" width="3" height="511" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="16" y="519" width="147" height="3" />
-	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="12" y="7" width="148" height="512" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="86" y="20">DControllerBase</text>
-	<line stroke="black" stroke-opacity="1" x1="12" y1="22" x2="160" y2="22" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="35">app_name_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="48">bin_name_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="61">stand_alone_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="74">verbose_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="87">spec_file_name_</text>
-	<line stroke="black" stroke-opacity="1" x1="12" y1="89" x2="160" y2="89" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="102">DControllerBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="115">~DControllerBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="128">launch()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="16" y="141">dummyConfigHandler()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="16" y="154">configHandler()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="16" y="167">commandHandler()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="180">updateConfig()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="193">executeCommand()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="206">customOption()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="16" y="219">createProcess()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="232">customControllerCommand()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="245">onSessionConnect()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="258">onSessionDisconnect()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="271">getUsageText()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="284">getCustomOpts()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="297">getAppName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="310">getBinName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="323">isStandAlone()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="336">setStandAlone()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="349">isVerbose()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="362">setVerbose()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="375">getIOService()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="388">getSpecFileName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="401">setSpecFileName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="16" y="414">getController()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="16" y="427">setController()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="440">parseArgs()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="453">initProcess()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="466">establishSession()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="479">runProcess()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="492">disconnectSession()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="505">shutdown()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="16" y="518">usage()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="389" y="120" width="3" height="213" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="293" y="330" width="99" height="3" />
-	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="289" y="116" width="100" height="214" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="339" y="129">DProcessBase</text>
-	<line stroke="black" stroke-opacity="1" x1="289" y1="131" x2="389" y2="131" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="144">app_name_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="157">shut_down_flag_</text>
-	<line stroke="black" stroke-opacity="1" x1="289" y1="159" x2="389" y2="159" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="172">DProcessBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="293" y="185">init()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="293" y="198">run()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="293" y="211">shutdown()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="293" y="224">configure()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="293" y="237">command()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="250">~DProcessBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="263">shouldShutdown()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="276">setShutdownFlag()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="289">getAppName()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="302">getIoService()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="315">stopIOService()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="293" y="328">getCfgMgr()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="739" y="314" width="3" height="225" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="633" y="536" width="109" height="3" />
-	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="629" y="310" width="110" height="226" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="684" y="323">DCfgContextBase</text>
-	<line stroke="black" stroke-opacity="1" x1="629" y1="325" x2="739" y2="325" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="633" y="338">OPTIONAL</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="633" y="351">REQUIRED</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="364">boolean_values_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="377">uint32_values_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="390">string_values_</text>
-	<line stroke="black" stroke-opacity="1" x1="629" y1="392" x2="739" y2="392" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="405">DCfgContextBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="418">~DCfgContextBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="431">getParam()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="444">getParam()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="457">getParam()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="470">getBooleanStorage()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="483">getUint32Storage()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="496">getStringStorage()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="633" y="509">clone()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="522">DCfgContextBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="633" y="535">operator =()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="604" y="542" width="3" height="161" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="466" y="700" width="141" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="462" y="538" width="142" height="162" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="533" y="551">D2CfgMgr</text>
-	<line stroke="black" stroke-opacity="1" x1="462" y1="553" x2="604" y2="553" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="466" y="566">IPV4_REV_ZONE_SUFFIX</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="466" y="579">IPV6_REV_ZONE_SUFFIX</text>
-	<line stroke="black" stroke-opacity="1" x1="462" y1="581" x2="604" y2="581" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="466" y="594">D2CfgMgr()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="466" y="607">~D2CfgMgr()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="466" y="620">getD2CfgContext()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="466" y="633">matchForward()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="466" y="646">matchReverse()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="466" y="659">reverseIpAddress()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="466" y="672">reverseV4Address()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="466" y="685">reverseV6Address()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="466" y="698">createConfigParser()</text>
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="687" y1="564" x2="686" y2="545" />
-	<line stroke="black" stroke-opacity="1" x1="686" y1="540" x2="680" y2="546" />
-	<line stroke="black" stroke-opacity="1" x1="686" y1="540" x2="692" y2="545" />
-	<line stroke="black" stroke-opacity="1" x1="680" y1="546" x2="692" y2="545" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="640" y1="607" x2="634" y2="601" />
-	<line stroke="black" stroke-opacity="1" x1="640" y1="607" x2="634" y2="613" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="608" y1="607" x2="640" y2="607" />
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="418" y="470" width="3" height="291" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="260" y="758" width="161" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="256" y="466" width="162" height="292" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="337" y="479">D2Process</text>
-	<line stroke="black" stroke-opacity="1" x1="256" y1="481" x2="418" y2="481" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="260" y="494">QUEUE_RESTART_PERCENT</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="507">reconf_queue_flag_</text>
-	<line stroke="black" stroke-opacity="1" x1="256" y1="509" x2="418" y2="509" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="522">D2Process()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="535">init()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="548">run()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="561">shutdown()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="574">configure()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="587">command()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="600">~D2Process()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="613">checkQueueStatus()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="626">reconfigureQueueMgr()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="639">runIO()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="652">canShutdown()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="665">setReconfQueueFlag()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="678">setShutdownType()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="691">getD2CfgMgr()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="704">getD2QueueMgr()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="717">getD2UpdateMgr()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="730">getReconfQueueFlag()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="260" y="743">getShutdownType()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="260" y="756">getShutdownTypeStr()</text>
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="590" y="219" width="3" height="127" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="484" y="343" width="109" height="3" />
-	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="480" y="215" width="110" height="128" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="535" y="228">DCfgMgrBase</text>
-	<line stroke="black" stroke-opacity="1" x1="480" y1="230" x2="590" y2="230" />
-	<line stroke="black" stroke-opacity="1" x1="480" y1="238" x2="590" y2="238" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="484" y="251">DCfgMgrBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="484" y="264">~DCfgMgrBase()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="484" y="277">parseConfig()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="484" y="290">addToParseOrder()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="484" y="303">getParseOrder()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="484" y="316">getContext()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-style="italic" x="484" y="329">createConfigParser()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="484" y="342">buildAndCommit()</text>
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="535" y1="537" x2="535" y2="352" />
-	<line stroke="black" stroke-opacity="1" x1="536" y1="347" x2="529" y2="352" />
-	<line stroke="black" stroke-opacity="1" x1="536" y1="347" x2="541" y2="353" />
-	<line stroke="black" stroke-opacity="1" x1="529" y1="352" x2="541" y2="353" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="339" y1="465" x2="339" y2="339" />
-	<line stroke="black" stroke-opacity="1" x1="340" y1="334" x2="333" y2="339" />
-	<line stroke="black" stroke-opacity="1" x1="340" y1="334" x2="345" y2="340" />
-	<line stroke="black" stroke-opacity="1" x1="333" y1="339" x2="345" y2="340" />
-</g>
-<g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="393" y="53" width="3" height="45" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="297" y="95" width="99" height="3" />
-	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="293" y="49" width="100" height="46" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-anchor="middle" x="343" y="62">&lt;&lt;typedef&gt;&gt;</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="343" y="77">DProcessBasePtr</text>
-	<line stroke="black" stroke-opacity="1" x1="293" y1="79" x2="393" y2="79" />
-	<line stroke="black" stroke-opacity="1" x1="293" y1="87" x2="393" y2="87" />
-</g>
-<g>
-	<line stroke="black" stroke-opacity="1" x1="461" y1="607" x2="455" y2="601" />
-	<line stroke="black" stroke-opacity="1" x1="461" y1="607" x2="455" y2="613" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="422" y1="607" x2="461" y2="607" />
-</g>
+<svg width="812" height="795" version="1.1" xmlns="http://www.w3.org/2000/svg">
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="175" y="14" width="3" height="453" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="17" y="464" width="161" height="3" />
+	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="13" y="10" width="162" height="454" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="94" y="24">DControllerBase</text>
+	<line stroke="black" stroke-opacity="1" x1="13" y1="26" x2="175" y2="26" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="40">app_name_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="54">bin_name_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="68">verbose_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="82">spec_file_name_</text>
+	<line stroke="black" stroke-opacity="1" x1="13" y1="84" x2="175" y2="84" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="98">DControllerBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="112">~DControllerBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="126">launch()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="140">updateConfig()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="154">configFromFile()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="168">executeCommand()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="182">getAppName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="196">getBinName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="210">customOption()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="17" y="224">createProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="238">customControllerCommand()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="252">getUsageText()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="266">getCustomOpts()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="280">isVerbose()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="294">setVerbose()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="308">getIOService()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="322">getSpecFileName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="336">setSpecFileName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="17" y="350">getController()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="17" y="364">setController()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="378">parseArgs()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="392">initProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="406">runProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="420">shutdownProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="434">getConfigFileName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="448">getProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="17" y="462">usage()</text>
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="629" y="261" width="3" height="193" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="515" y="451" width="117" height="3" />
+	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="511" y="257" width="118" height="194" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="570" y="271">DCfgMgrBase</text>
+	<line stroke="black" stroke-opacity="1" x1="511" y1="273" x2="629" y2="273" />
+	<line stroke="black" stroke-opacity="1" x1="511" y1="281" x2="629" y2="281" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="295">DCfgMgrBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="309">~DCfgMgrBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="323">parseConfig()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="337">addToParseOrder()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="351">getParseOrder()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="365">getContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="379">buildParams()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="515" y="393">createConfigParser()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="515" y="407">createNewContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="421">resetContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="435">setContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="515" y="449">buildAndCommit()</text>
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="796" y="361" width="3" height="243" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="682" y="601" width="117" height="3" />
+	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="678" y="357" width="118" height="244" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="737" y="371">DCfgContextBase</text>
+	<line stroke="black" stroke-opacity="1" x1="678" y1="373" x2="796" y2="373" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="682" y="387">OPTIONAL</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="682" y="401">REQUIRED</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="415">boolean_values_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="429">uint32_values_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="443">string_values_</text>
+	<line stroke="black" stroke-opacity="1" x1="678" y1="445" x2="796" y2="445" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="459">DCfgContextBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="473">~DCfgContextBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="487">getParam()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="501">getParam()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="515">getParam()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="529">getBooleanStorage()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="543">getUint32Storage()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="557">getStringStorage()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="682" y="571">clone()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="585">DCfgContextBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="682" y="599">operator =()</text>
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="134" y="554" width="3" height="103" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="46" y="654" width="91" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="42" y="550" width="92" height="104" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="88" y="564">D2Controller</text>
+	<line stroke="black" stroke-opacity="1" x1="42" y1="566" x2="134" y2="566" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="46" y="580">d2_app_name_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="46" y="594">d2_bin_name_</text>
+	<line stroke="black" stroke-opacity="1" x1="42" y1="596" x2="134" y2="596" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="46" y="610">instance()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="46" y="624">~D2Controller()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="46" y="638">createProcess()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="46" y="652">D2Controller()</text>
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="90" y1="549" x2="90" y2="473" />
+	<line stroke="black" stroke-opacity="1" x1="91" y1="468" x2="84" y2="473" />
+	<line stroke="black" stroke-opacity="1" x1="91" y1="468" x2="96" y2="474" />
+	<line stroke="black" stroke-opacity="1" x1="84" y1="473" x2="96" y2="474" />
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="274" y="165" width="3" height="47" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="198" y="209" width="79" height="3" />
+	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="194" y="161" width="80" height="48" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-anchor="middle" x="234" y="175">&lt;&lt;typedef&gt;&gt;</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="234" y="191">IOServicePtr</text>
+	<line stroke="black" stroke-opacity="1" x1="194" y1="193" x2="274" y2="193" />
+	<line stroke="black" stroke-opacity="1" x1="194" y1="201" x2="274" y2="201" />
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="179" y1="118" x2="236" y2="118" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="179,118 185,112 191,118 185,124" />
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="236" y1="160" x2="242" y2="154" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="160" x2="230" y2="154" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="118" x2="236" y2="160" />
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="424" y="153" width="3" height="229" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="320" y="379" width="107" height="3" />
+	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="316" y="149" width="108" height="230" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" font-style="italic" text-anchor="middle" x="370" y="163">DProcessBase</text>
+	<line stroke="black" stroke-opacity="1" x1="316" y1="165" x2="424" y2="165" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="179">app_name_</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="193">shut_down_flag_</text>
+	<line stroke="black" stroke-opacity="1" x1="316" y1="195" x2="424" y2="195" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="209">DProcessBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="320" y="223">init()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="320" y="237">run()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="320" y="251">shutdown()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="320" y="265">configure()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-style="italic" x="320" y="279">command()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="293">~DProcessBase()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="307">shouldShutdown()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="321">setShutdownFlag()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="335">getAppName()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="349">getIoService()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="363">stopIOService()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="320" y="377">getCfgMgr()</text>
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="315" y1="265" x2="236" y2="265" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="315,265 309,271 303,265 309,259" />
+</g>
+<g>
+	<line stroke="black" stroke-opacity="1" x1="236" y1="213" x2="230" y2="219" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="213" x2="242" y2="219" />
+	<line stroke="black" stroke-opacity="1" x1="236" y1="265" x2="236" y2="213" />
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="424" y="72" width="3" height="47" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="320" y="116" width="107" height="3" />
+	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="316" y="68" width="108" height="48" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-anchor="middle" x="370" y="82">&lt;&lt;typedef&gt;&gt;</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="370" y="98">DProcessBasePtr</text>
+	<line stroke="black" stroke-opacity="1" x1="316" y1="100" x2="424" y2="100" />
+	<line stroke="black" stroke-opacity="1" x1="316" y1="108" x2="424" y2="108" />
+</g>
+<g>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="448" y="468" width="3" height="313" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="276" y="778" width="175" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="272" y="464" width="176" height="314" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="360" y="478">D2Process</text>
+	<line stroke="black" stroke-opacity="1" x1="272" y1="480" x2="448" y2="480" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="276" y="494">QUEUE_RESTART_PERCENT</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="508">reconf_queue_flag_</text>
+	<line stroke="black" stroke-opacity="1" x1="272" y1="510" x2="448" y2="510" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="524">D2Process()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="538">init()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="552">run()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="566">shutdown()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="580">configure()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="594">command()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="608">~D2Process()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="622">checkQueueStatus()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="636">reconfigureQueueMgr()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="650">runIO()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="664">canShutdown()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="678">setReconfQueueFlag()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="692">setShutdownType()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="706">getD2CfgMgr()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="720">getD2QueueMgr()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="734">getD2UpdateMgr()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="748">getReconfQueueFlag()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="276" y="762">getShutdownType()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="276" y="776">getShutdownTypeStr()</text>
+</g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="343" y1="115" x2="349" y2="109" />
-	<line stroke="black" stroke-opacity="1" x1="343" y1="115" x2="337" y2="108" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="344" y1="99" x2="343" y2="115" />
+	<line stroke="black" stroke-opacity="1" x1="372" y1="148" x2="378" y2="142" />
+	<line stroke="black" stroke-opacity="1" x1="372" y1="148" x2="366" y2="142" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="372" y1="120" x2="372" y2="148" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="164" y1="30" x2="344" y2="30" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="164,30 170,24 176,30 170,36" />
+	<line stroke="black" stroke-opacity="1" x1="179" y1="39" x2="372" y2="39" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="179,39 185,33 191,39 185,45" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="344" y1="48" x2="350" y2="42" />
-	<line stroke="black" stroke-opacity="1" x1="344" y1="48" x2="338" y2="42" />
-	<line stroke="black" stroke-opacity="1" x1="344" y1="30" x2="344" y2="48" />
+	<line stroke="black" stroke-opacity="1" x1="372" y1="67" x2="378" y2="61" />
+	<line stroke="black" stroke-opacity="1" x1="372" y1="67" x2="366" y2="61" />
+	<line stroke="black" stroke-opacity="1" x1="372" y1="39" x2="372" y2="67" />
 </g>
 <g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="128" y="566" width="3" height="95" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="46" y="658" width="85" height="3" />
-	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="42" y="562" width="86" height="96" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="85" y="575">D2Controller</text>
-	<line stroke="black" stroke-opacity="1" x1="42" y1="577" x2="128" y2="577" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="46" y="590">d2_app_name_</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="46" y="603">d2_bin_name_</text>
-	<line stroke="black" stroke-opacity="1" x1="42" y1="605" x2="128" y2="605" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-decoration="underline" x="46" y="618">instance()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="46" y="631">~D2Controller()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="46" y="644">createProcess()</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="46" y="657">D2Controller()</text>
+	<line stroke="black" stroke-opacity="1" x1="366" y1="463" x2="367" y2="388" />
+	<line stroke="black" stroke-opacity="1" x1="368" y1="383" x2="361" y2="388" />
+	<line stroke="black" stroke-opacity="1" x1="368" y1="383" x2="373" y2="389" />
+	<line stroke="black" stroke-opacity="1" x1="361" y1="388" x2="373" y2="389" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="87" y1="561" x2="87" y2="529" />
-	<line stroke="black" stroke-opacity="1" x1="87" y1="523" x2="81" y2="529" />
-	<line stroke="black" stroke-opacity="1" x1="87" y1="523" x2="93" y2="529" />
-	<line stroke="black" stroke-opacity="1" x1="81" y1="529" x2="93" y2="529" />
+	<line stroke="black" stroke-opacity="1" x1="271" y1="607" x2="265" y2="600" />
+	<line stroke="black" stroke-opacity="1" x1="271" y1="607" x2="264" y2="612" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="138" y1="606" x2="271" y2="607" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="255" y1="610" x2="249" y2="604" />
-	<line stroke="black" stroke-opacity="1" x1="255" y1="610" x2="249" y2="616" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="132" y1="610" x2="255" y2="610" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="649" y="539" width="3" height="243" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="499" y="779" width="153" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="495" y="535" width="154" height="244" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="572" y="549">D2CfgMgr</text>
+	<line stroke="black" stroke-opacity="1" x1="495" y1="551" x2="649" y2="551" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="499" y="565">IPV4_REV_ZONE_SUFFIX</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="499" y="579">IPV6_REV_ZONE_SUFFIX</text>
+	<line stroke="black" stroke-opacity="1" x1="495" y1="581" x2="649" y2="581" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="595">D2CfgMgr()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="609">~D2CfgMgr()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="623">getD2CfgContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="637">forwardUpdatesEnabled()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="651">reverseUpdatesEnabled()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="665">matchForward()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="679">matchReverse()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="499" y="693">reverseIpAddress()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="499" y="707">reverseV4Address()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-decoration="underline" x="499" y="721">reverseV6Address()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="735">getD2Params()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="749">buildParams()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="763">createConfigParser()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="499" y="777">createNewContext()</text>
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="225" y="169">io_service_</text>
+	<line stroke="black" stroke-opacity="1" x1="573" y1="534" x2="572" y2="460" />
+	<line stroke="black" stroke-opacity="1" x1="572" y1="455" x2="566" y2="461" />
+	<line stroke="black" stroke-opacity="1" x1="572" y1="455" x2="578" y2="460" />
+	<line stroke="black" stroke-opacity="1" x1="566" y1="461" x2="578" y2="460" />
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="540" y="148">cfg_mgr_</text>
+	<line stroke="black" stroke-opacity="1" x1="494" y1="636" x2="487" y2="630" />
+	<line stroke="black" stroke-opacity="1" x1="494" y1="636" x2="488" y2="642" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="452" y1="637" x2="494" y2="636" />
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="355" y="45">process_</text>
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="788" y="629" width="3" height="151" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="694" y="777" width="97" height="3" />
+	<rect fill="#ffffc0" stroke="black" stroke-width="1" stroke-opacity="1" x="690" y="625" width="98" height="152" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="739" y="639">D2CfgContext</text>
+	<line stroke="black" stroke-opacity="1" x1="690" y1="641" x2="788" y2="641" />
+	<line stroke="black" stroke-opacity="1" x1="690" y1="649" x2="788" y2="649" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="663">D2CfgContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="677">~D2CfgContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="691">clone()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="705">getD2Params()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="719">getForwardMgr()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="733">getReverseMgr()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="747">getKeys()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="761">D2CfgContext()</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="694" y="775">operator =()</text>
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="690" y="242">context_</text>
+	<line stroke="black" stroke-opacity="1" x1="740" y1="624" x2="739" y2="610" />
+	<line stroke="black" stroke-opacity="1" x1="739" y1="605" x2="733" y2="611" />
+	<line stroke="black" stroke-opacity="1" x1="739" y1="605" x2="745" y2="610" />
+	<line stroke="black" stroke-opacity="1" x1="733" y1="611" x2="745" y2="610" />
 </g>
 <g>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" x="225" y="239">io_service_</text>
+	<line stroke="black" stroke-opacity="1" x1="689" y1="678" x2="682" y2="672" />
+	<line stroke="black" stroke-opacity="1" x1="689" y1="678" x2="683" y2="684" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="653" y1="679" x2="689" y2="678" />
 </g>
 <g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="251" y="177" width="3" height="45" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="181" y="219" width="73" height="3" />
-	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="177" y="173" width="74" height="46" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-anchor="middle" x="214" y="186">&lt;&lt;typedef&gt;&gt;</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="214" y="201">IOServicePtr</text>
-	<line stroke="black" stroke-opacity="1" x1="177" y1="203" x2="251" y2="203" />
-	<line stroke="black" stroke-opacity="1" x1="177" y1="211" x2="251" y2="211" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="246" y="231">io_service_</text>
 </g>
 <g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="577" y="156" width="3" height="45" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="485" y="198" width="95" height="3" />
-	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="481" y="152" width="96" height="46" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-anchor="middle" x="529" y="165">&lt;&lt;typedef&gt;&gt;</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="529" y="180">DCfgMgrBasePtr</text>
-	<line stroke="black" stroke-opacity="1" x1="481" y1="182" x2="577" y2="182" />
-	<line stroke="black" stroke-opacity="1" x1="481" y1="190" x2="577" y2="190" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="736" y="285">context_</text>
 </g>
 <g>
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="737" y="250" width="3" height="45" />
-	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="625" y="292" width="115" height="3" />
-	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="621" y="246" width="116" height="46" />
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" text-anchor="middle" x="679" y="259">&lt;&lt;typedef&gt;&gt;</text>
-	<text font-family="Helvetica" font-size="11" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="679" y="274">DCfgContextBasePtr</text>
-	<line stroke="black" stroke-opacity="1" x1="621" y1="276" x2="737" y2="276" />
-	<line stroke="black" stroke-opacity="1" x1="621" y1="284" x2="737" y2="284" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="572" y="183">cfg_mgr_</text>
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="164" y1="139" x2="215" y2="139" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="164,139 170,133 176,139 170,145" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="382" y="63">process_</text>
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="288" y1="281" x2="215" y2="281" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="288,281 282,287 276,281 282,275" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" x="246" y="156">io_service_</text>
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="393" y1="136" x2="530" y2="136" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="393,136 399,130 405,136 399,142" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="788" y="294" width="3" height="47" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="666" y="338" width="125" height="3" />
+	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="662" y="290" width="126" height="48" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-anchor="middle" x="725" y="304">&lt;&lt;typedef&gt;&gt;</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="725" y="320">DCfgContextBasePtr</text>
+	<line stroke="black" stroke-opacity="1" x1="662" y1="322" x2="788" y2="322" />
+	<line stroke="black" stroke-opacity="1" x1="662" y1="330" x2="788" y2="330" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="530" y1="151" x2="536" y2="145" />
-	<line stroke="black" stroke-opacity="1" x1="530" y1="151" x2="524" y2="145" />
-	<line stroke="black" stroke-opacity="1" x1="530" y1="136" x2="530" y2="151" />
+	<line stroke="black" stroke-opacity="1" x1="728" y1="356" x2="734" y2="350" />
+	<line stroke="black" stroke-opacity="1" x1="728" y1="356" x2="722" y2="350" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="728" y1="342" x2="728" y2="356" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="531" y1="214" x2="537" y2="208" />
-	<line stroke="black" stroke-opacity="1" x1="531" y1="214" x2="525" y2="208" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="531" y1="202" x2="531" y2="214" />
+	<line stroke="black" stroke-opacity="1" x1="633" y1="271" x2="726" y2="271" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="633,271 639,265 645,271 639,277" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="681" y1="309" x2="687" y2="303" />
-	<line stroke="black" stroke-opacity="1" x1="681" y1="309" x2="675" y2="303" />
-	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="681" y1="296" x2="681" y2="309" />
+	<line stroke="black" stroke-opacity="1" x1="726" y1="289" x2="732" y2="283" />
+	<line stroke="black" stroke-opacity="1" x1="726" y1="289" x2="720" y2="283" />
+	<line stroke="black" stroke-opacity="1" x1="726" y1="271" x2="726" y2="289" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="594" y1="226" x2="680" y2="226" />
-	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="594,226 600,220 606,226 600,232" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="612" y="192" width="3" height="47" />
+	<rect fill="#cbcbcb" stroke="none" stroke-opacity="1" x="512" y="236" width="103" height="3" />
+	<rect fill="#c0ffff" stroke="black" stroke-width="1" stroke-opacity="1" x="508" y="188" width="104" height="48" />
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" text-anchor="middle" x="560" y="202">&lt;&lt;typedef&gt;&gt;</text>
+	<text font-family="Helvetica" font-size="12" fill="#000000" xml:space="preserve" font-weight="bold" text-anchor="middle" x="560" y="218">DCfgMgrBasePtr</text>
+	<line stroke="black" stroke-opacity="1" x1="508" y1="220" x2="612" y2="220" />
+	<line stroke="black" stroke-opacity="1" x1="508" y1="228" x2="612" y2="228" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="680" y1="245" x2="686" y2="239" />
-	<line stroke="black" stroke-opacity="1" x1="680" y1="245" x2="674" y2="239" />
-	<line stroke="black" stroke-opacity="1" x1="680" y1="226" x2="680" y2="245" />
+	<line stroke="black" stroke-opacity="1" x1="564" y1="256" x2="569" y2="249" />
+	<line stroke="black" stroke-opacity="1" x1="564" y1="256" x2="557" y2="250" />
+	<line stroke-dasharray="4,4" stroke="black" stroke-opacity="1" x1="563" y1="240" x2="564" y2="256" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="215" y1="223" x2="209" y2="229" />
-	<line stroke="black" stroke-opacity="1" x1="215" y1="223" x2="221" y2="229" />
-	<line stroke="black" stroke-opacity="1" x1="215" y1="281" x2="215" y2="223" />
+	<line stroke="black" stroke-opacity="1" x1="428" y1="173" x2="562" y2="173" />
+	<polygon fill="#000000" stroke="black" stroke-opacity="1" points="428,173 434,167 440,173 434,179" />
 </g>
 <g>
-	<line stroke="black" stroke-opacity="1" x1="215" y1="172" x2="221" y2="166" />
-	<line stroke="black" stroke-opacity="1" x1="215" y1="172" x2="209" y2="166" />
-	<line stroke="black" stroke-opacity="1" x1="215" y1="139" x2="215" y2="172" />
+	<line stroke="black" stroke-opacity="1" x1="562" y1="187" x2="568" y2="181" />
+	<line stroke="black" stroke-opacity="1" x1="562" y1="187" x2="556" y2="181" />
+	<line stroke="black" stroke-opacity="1" x1="562" y1="173" x2="562" y2="187" />
 </g>
 </svg>

+ 6 - 8
src/bin/d2/tests/d2_controller_unittests.cc

@@ -154,8 +154,7 @@ TEST_F(D2ControllerTest, launchNormalShutdown) {
 /// This really tests just the ability of the handlers to invoke the necessary
 /// chain of methods and handle error conditions. Configuration parsing and
 /// retrieval should be tested as part of the d2 configuration management
-/// implementation.  Note that this testing calls the configuration update event
-/// callback, configHandler, directly.
+/// implementation.
 /// This test verifies that:
 /// 1. A valid configuration yields a successful parse result.
 /// 2. That an application process error in configuration updating is handled
@@ -173,22 +172,21 @@ TEST_F(D2ControllerTest, configUpdateTests) {
                                 isc::data::Element::fromJSON(valid_d2_config);
 
     // Verify that given a valid config we get a successful update result.
-    answer = DControllerBase::configHandler(config_set);
+    answer = updateConfig(config_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(0, rcode);
 
     // Use an invalid configuration to verify parsing error return.
     std::string config = "{ \"bogus\": 1000 } ";
     config_set = isc::data::Element::fromJSON(config);
-    answer = DControllerBase::configHandler(config_set);
+    answer = updateConfig(config_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(1, rcode);
 }
 
 /// @brief Command execution tests.
 /// This really tests just the ability of the handler to invoke the necessary
-/// chain of methods and to handle error conditions. Note that this testing
-/// calls the executeCommand method directly.
+/// chain of methods and to handle error conditions.
 /// This test verifies that:
 /// 1. That an unrecognized command is detected and returns a status of
 /// d2::COMMAND_INVALID.
@@ -204,13 +202,13 @@ TEST_F(D2ControllerTest, executeCommandTests) {
 
     // Verify that an unknown command returns an COMMAND_INVALID response.
     std::string bogus_command("bogus");
-    answer = DControllerBase::commandHandler(bogus_command, arg_set);
+    answer = executeCommand(bogus_command, arg_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(COMMAND_INVALID, rcode);
 
     // Verify that shutdown command returns COMMAND_SUCCESS response.
     //answer = executeCommand(SHUT_DOWN_COMMAND, isc::data::ElementPtr());
-    answer = DControllerBase::commandHandler(SHUT_DOWN_COMMAND, arg_set);
+    answer = executeCommand(SHUT_DOWN_COMMAND, arg_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(COMMAND_SUCCESS, rcode);
 

+ 10 - 16
src/bin/d2/tests/d_controller_unittests.cc

@@ -290,8 +290,7 @@ TEST_F(DStubControllerTest, launchRuntimeError) {
 /// This really tests just the ability of the handlers to invoke the necessary
 /// chain of methods and handle error conditions. Configuration parsing and
 /// retrieval should be tested as part of the d2 configuration management
-/// implementation.  Note that this testing calls the configuration update event
-/// callback, configHandler, directly.
+/// implementation.
 /// This test verifies that:
 /// 1. That a valid configuration update results in successful status return.
 /// 2. That an application process error in configuration updating is handled
@@ -310,21 +309,20 @@ TEST_F(DStubControllerTest, configUpdateTests) {
     isc::data::ElementPtr config_set = isc::data::Element::fromJSON(config);
 
     // Verify that a valid config gets a successful update result.
-    answer = DControllerBase::configHandler(config_set);
+    answer = updateConfig(config_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(0, rcode);
 
     // Verify that an error in process configure method is handled.
     SimFailure::set(SimFailure::ftProcessConfigure);
-    answer = DControllerBase::configHandler(config_set);
+    answer = updateConfig(config_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(1, rcode);
 }
 
 /// @brief Command execution tests.
 /// This really tests just the ability of the handler to invoke the necessary
-/// chain of methods and to handle error conditions. Note that this testing
-/// calls the command callback, commandHandler, directly.
+/// chain of methods and to handle error conditions.
 /// This test verifies that:
 /// 1. That an unrecognized command is detected and returns a status of
 /// d2::COMMAND_INVALID.
@@ -346,42 +344,38 @@ TEST_F(DStubControllerTest, executeCommandTests) {
 
     // Verify that an unknown command returns an d2::COMMAND_INVALID response.
     std::string bogus_command("bogus");
-    answer = DControllerBase::commandHandler(bogus_command, arg_set);
+    answer = executeCommand(bogus_command, arg_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(COMMAND_INVALID, rcode);
 
     // Verify that shutdown command returns d2::COMMAND_SUCCESS response.
-    answer = DControllerBase::commandHandler(SHUT_DOWN_COMMAND, arg_set);
+    answer = executeCommand(SHUT_DOWN_COMMAND, arg_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(COMMAND_SUCCESS, rcode);
 
     // Verify that a valid custom controller command returns
     // d2::COMMAND_SUCCESS response.
-    answer = DControllerBase::commandHandler(DStubController::
-                                             stub_ctl_command_, arg_set);
+    answer = executeCommand(DStubController::stub_ctl_command_, arg_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(COMMAND_SUCCESS, rcode);
 
     // Verify that a valid custom process command returns d2::COMMAND_SUCCESS
     // response.
-    answer = DControllerBase::commandHandler(DStubProcess::
-                                             stub_proc_command_, arg_set);
+    answer = executeCommand(DStubProcess::stub_proc_command_, arg_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(COMMAND_SUCCESS, rcode);
 
     // Verify that a valid custom controller command that fails returns
     // a d2::COMMAND_ERROR.
     SimFailure::set(SimFailure::ftControllerCommand);
-    answer = DControllerBase::commandHandler(DStubController::
-                                             stub_ctl_command_, arg_set);
+    answer = executeCommand(DStubController::stub_ctl_command_, arg_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(COMMAND_ERROR, rcode);
 
     // Verify that a valid custom process command that fails returns
     // a d2::COMMAND_ERROR.
     SimFailure::set(SimFailure::ftProcessCommand);
-    answer = DControllerBase::commandHandler(DStubProcess::
-                                             stub_proc_command_, arg_set);
+    answer = executeCommand(DStubProcess::stub_proc_command_, arg_set);
     isc::config::parseAnswer(rcode, answer);
     EXPECT_EQ(COMMAND_ERROR, rcode);
 }

+ 3 - 3
src/bin/d2/tests/d_test_stubs.h

@@ -381,7 +381,7 @@ public:
     ///
     /// @return returns true if the verbose flag is equal to the given value.
     bool checkConfigFileName(const std::string& value) {
-        return (getController()->getConfigFileName() == value);
+        return (getController()->getConfigFile() == value);
     }
 
     /// @Wrapper to invoke the Controller's parseArgs method.  Please refer to
@@ -421,7 +421,7 @@ public:
     /// command callback function.
     static void genShutdownCallback() {
         isc::data::ElementPtr arg_set;
-        DControllerBase::commandHandler(SHUT_DOWN_COMMAND, arg_set);
+        getController()->executeCommand(SHUT_DOWN_COMMAND, arg_set);
     }
 
     /// @brief Callback that throws an exception.
@@ -447,7 +447,7 @@ public:
     /// @param content JSON text to be written to file
     /// @param module_name  content content to be written to file
     void writeFile(const std::string& content,
-                   const std::string module_name = "") {
+                   const std::string& module_name = "") {
         std::ofstream out(CFG_TEST_FILE, std::ios::trunc);
         ASSERT_TRUE(out.is_open());