Parcourir la 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 il y a 11 ans
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());