(file) Return to indications.html CVS log (file) (dir) Up to [Pegasus] / pegasus / Attic

Diff for /pegasus/Attic/indications.html between version 1.1 and 1.1.2.1

version 1.1, 2003/02/28 21:34:05 version 1.1.2.1, 2003/02/28 21:34:05
Line 0 
Line 1 
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   <html>
     <head>
       <title>PEP # 5: Proposal to Fix Indications in Pegasus</title>
       <link rel="stylesheet" type="text/css" href="http://www.soft-hackle.net/md.css">
     </head>
     <body>
     <table>
       <tr>
   
         <td>
           <img height="70" src="http://www.opengroup.org/images/pegicon2.gif" width="70" border="0">
         </td>
         <td>
           <h1>PEP #: 5</h1>
         </td>
       </tr>
       <tr>
         <td colspan="2"><h1>TITLE: Proposal to Fix Indications in Pegasus</h1></td>
       </tr>
     </table>
     <div class="comment">
       Version: $Revision$<br>
         Author: Mike Day<br>
           State: Draft<br>
             Type: Architecture<br>
               Vote: <br>
                 Created: 6 January 2003<br>
                   Version 1.0 Mon Jan  6 17:39:09 2003
     </div>
     <hr>
       <h2>Summary</h2>
       <p>
         This document details my experiences getting CIM Indications to
         work with the Pegasus CIMOM. It explains the changes I had to
         make, the bugs I had to fix, and then makes some design
         recommendations for integrating Indication support into the Open
         Group CVS tree.
       </p>
       <h3>What Works? </h3>
       <p>
         I have Pegasus supporting Indications, subscriptions, and
         handlers. It works really well. All the CIM operations related
         to indications and subscriptions work. I have tests and test
         providers.
       </p>
   
       <h2>Proposal</h2>
       <p>
         Commit the changes outlined in this document to the
         development (main) branch of the TOG CVS for Pegasus
         for inclusion in Pegasus release 2.2
       </p>
   
       <h2>Terminology</h2>
       <p>
         Early feedback on this document has requested clarification of some
         terms I use later.
       </p>
   
       <dl class="enumerated">
         <dt>Response Handler</dt>
         <dd>Callback class that receives operation results from Providers.
           This object heirarchy was designed specifically to support
           asynchronous result delivery from providers, such as Indications.
         Examples include <code>OperationResponseHandler</code> and
         <code>EnableIndicationsResponseHandler</code></dd>
   
         <dt>Indication Consumer Provider</dt>
         <dd>The C++ object that receives the <code>CIMIndication</code> for
           handling. This proposal defines a new type of provider that
         supports the <code>CIMIndicationConsumer</code> interface
         as defined by Chip Vincent. The <code>CIMIndicationConsumer</code>
         replaces the <code>IndicationHandler</code> that is currently
         in the source tree. However, the <code>IndicationHandler</code> can be
         adjacent (post) to the <code>CIMIndicationConsumer</code> in the
         indication processing path if required for compatibilty.</dd>
   
         <dt>Indication Handler</dt>
         <dd>Existing service in Pegasus for receiving indications and
           dispatching them to applications. This service has never been
           supported, and I propose to replace it with the Indication Consumer
           Provider (above). It can be optionally layered upon the Indication Consumer
           Provider if required.</dd>
   
         <dt>Export Server</dt>
         <dd>Pegasus Service that exports <code>CIMIndication</code> instances
           to other Pegasus instances. I do not refer to the Export Server in this
           proposal. Its use is compatible with this proposal but optional.</dd>
   
         <dt>Export Client</dt> <dd>Pegasus Service that listens for and
         receives <code>CIMIndication</code> instances exported by other
         Pegasus instances. I do not refer to the Export Client in this
         proposal. Its use is compatible with this proposal but
         optional.</dd>
   
       </dl>
   
   
       <h2>Table of Contents</h2>
       <ol class="enumerated">
         <li><a href="#plan_of_attack">My Plan of Attack</a></li>
         <li><a href="#what_did_I_do">What did I have to Do?</a></li>
         <li><a href="#where_is_code">Where is the Source Code?</a></li>
         <li><a href="#cvs">What is the Status of Indication Support in the CVS?</a></li>
         <li><a href="#consumer_provider">Indication Consumer Provider</a></li>
         <li><a href="#elusive_bugs">Elusive Bugs I Fixed</a></li>
         <li><a href="#indication_consumer">Indication Consumer Support Code</a></li>
         <li><a href="#provider_schema_mods">Provider Schema Modifications</a></li>
         <li><a href="#provider_reg_mgr">Provider Registration Manager Modifications</a></li>
         <li><a href="#instantiate_providers">Instantiating the Modified Schema and Providers</a></li>
         <li><a href="#indication_provider">Indication Provider</a></li>
         <li><a href="#indication_consumer_provider">Indication Consumer Provider</a></li>
         <li><a href="#indication_processing">Indication Processing Pathway</a></li>
         </ol>
   
   <a name="plan_of_attack"><h3>My Plan of Attack</h3></a>
       <p>
         There is a ton of rich functionality in the existing Pegasus
         code base for handling Indications and Subscriptions. The
         problem is, none of it has been tested due to gating bugs in the
         Pegasus core.
       </p>
       <p>
         All of the subscription options, policies, and error handling is
         fantastic code but causes real problems when all you want to do
         is get the underlying mechanisms to work. In fact, the
         "commercial grade" features of the
         <code>IndicationService</code> tend to obfuscate the underlying
         breaks in the Pegasus core that are gating Indication
         support. So I embarked on a simplification strategy.
       </p>
       <div class="notice">
         <p>
           Basic Indication Handling should be easy, and robust
           Indication Handling should be possible. (Yes, I stole this
           quote from Larry Wall.)  To this end I removed some of the
           functionality from the <code>IndicationService</code>, such as
           enforcing the schema and implementing policy.
         </p>
         <p>
           I wrote a basic <code>IndicationService</code> and
           <code>ConsumerProvider</code> that stresses the core of
           Pegasus and assures the functionality of Indications and
           Subscriptions.</p>
         <p>
           If I need error handling policy and schema enforcement, I
           should be able to create or reactivate the more robust HP
           Indication Service and substitute it for the simple one. Or I
           can graft features from the HP service to the simple one. But
           I shouldn't have to use the untested complex features to debug
           the inner workings of Pegasus.
         </p>
       </div>
   
   <a name="what_did_I_do">
       <h3>What Did I Have to Do to get Indications Working?</h3></a>
       <p>
         A little bit of everything. This is an area of Pegasus that has
         never been completed nore tested. The table below shows the
         steps I had to take, in order, to get this work completed.
       </p>
       <ol class="enumerated">
         <caption><div class="caption">Tasks I Completed to Get
             Indications working in Pegasus<br><br>
           </div></caption>
         <li>Fix some elusive bugs.</li>
         <li>Successfully run the existing <code>wbem-exec</code> tests
           in the <code>test/wetest/cimv2/subscription</code> directory.</li>
         <li>Subclass the PG_Provider and PG_Indication Schemata to allow
           Providers to be Indication Handlers.</li>
         <li>Modify the <code>ProviderRegistrationManager</code> to allow
           for the new "type 6" provider (see above).</li>
         <li>Create a new <code>CIMConsumeIndication</code> Message (see
           item 3 above).
         <li>Rewrite the <code>IndicationService</code> to redirect
           Indications to the <code>ProviderManager</code> (see items 3-5
           and above).
         <li>Modify the <code>ProviderManager</code> to treat
           <code>CIMConsumerProvider</code> modules differently because
           they are asynchronous by definition.</li>
         <li>Instantiate the new Providers in a compiled Schema. (I
           piggy-backed on the existing repository build scripts.)</li>
         <li>Write a <code>CIMIndicationProvider</code> and a
           <code>CIMIndicationConsumer</code> and start testing.</li>
       </ol>
   <a name="where_is_code">
       <h3>Where is the source code?</h3></a>
       <p>
         IBM has, out of necessity, maintained a version of Pegasus that
         has the original C++ provider interfaces. We did this to support
         existing providers that we shipped prior to the interface
         changes this past fall.
   
         I did the work necessary to support indications on IBM's
         "classic" snapshot of the source repository. That's where the
         source code is. Most of the changes were not related to provider
         interfaces so merging indication support into the Open Group CVS
         is feasible.
       </p>
       <p>
         Consider this document as a design proposal for indication
         support; and also as a proposal for checking the source code
         into the Open Group CVS.
       </p>
       <p>
         I also anticipate making this available as a snapshot on an ftp
         server.
       </p>
   
       <a name="cvs">
       <h3>What is the status of Indication Support in the Open Group
         CVS?</h3></a>
       <p>
         Indications in the Open Group Pegasus 2.x do not work and are
         not close to working. There are bugs that need to be fixed and
         design changes that need to be made. They are fairly completely
         discussed in this document.
       </p>
   
       <a name="consumer_provider">
       <h3>Indication Consumer Provider</h3></a>
       <p>
         Chip Vincent and I have long preferred to use Pegasus providers
         to handle indications. Doing so removes the need for a separate
         <code>IndicationHandler</code> service. Instead, the handler can
         reuse all the infrastructure that exists for Providers.
       </p>
       <p>
         Another benefit of using Pegasus providers to handle indications
         is that developers do not need to learn another service
         interface. The provider interface is sufficient. Also, this
         means that we (Pegasus developers) do not need to provide
         separate developer support for handling indications and
         generating indications.
       </p>
       <p>
         Once a <code>CIMIndicationProvider</code> routine generates a
         <code>CIMIndication</code>, the modified
         <code>OperationResponseHandler</code> creates a
         <code>CIMConsumeIndication</code> message and passes the
         indication to the <code>ProviderManagerService</code>; the
         provider manager then finds the "handler," which is really a
         provider, and calls <code>provider.handleIndication()</code>.
       </p>
       <p>
         There is no need for a separate handler service, which makes
         error handling and debugging simpler.
       </p>
   
   
       <h4>Tasks to Support Indication Consumer Providers</h4>
       <p>
         This was not as simple as activiating the
         <code>CIMIndicationConsumer</code> code that has been in the
         source tree for quite some time. I had to ensure that this new
         type of provider was supported throughout Pegasus.
       </p>
       <ol class="enumerated">
           <a href="#indication_consumer"><li>Indication Consumer Support Code</a><br></li>
           <a href="#provider_schema_mods"><li>Provider Schema Modifications</a><br></li>
           <a href="#provider_reg_mgr"><li>Provider Registration Manager Modifications</a><br></li>
       <a href="#instantiate_providers"><li>Instantiating the Modified Schema and Providers</a><br></li>
   
     </ol>
   
   <a name="elusive_bugs">
       <h3>Elusive Bugs I Fixed</h3></a>
         <ol class="enumerated">
         <li>
           <a href="#bug_1">Indication Response Handler Allocated on
             Stack</a><br><br></li>
         <li><a href="#bug_2">
           Response Handler Created with Reference to Transient Messages
           </a><br><br></li>
         <li>
           <a href="#bug_3">
           Converting References to CIMInstances
           </a><br><br></li>
         <li><a href="#bug_4">
           Pegasus Array Template and Virtual Base Classes in Provider
           Heirarchy
         </a><br><br></li>
         <li><a href="#bug_5">
             Double Deletes in Redirected Message Pathways
           </a><br><br></li>
         </ol>
       <a name="bug_1">
       <h4>Indication Response Handler allocated on stack</h4></a>
       <p>
         The <code>ProviderManagerService</code> was creating an indication
           response handler within a local code block and passing that to
           the Indication Provider with an <code>EnableIndication</code>
           message. After the ProviderManagerService returned from enabling
           the indication, response handler went out of scope and was
           destroyed. When the Indication Provider called
           <code>handler.deliver(indication)</code>, it was using a
           reference to an object that was destroyed. The result was a
           core dump.
       </p>
       <div class="source">
       <h5>The fix - allocate response handler from heap and store for
       the life of the indication enablement</h5>
         <p>
           The important lines for enabling a new subscription are
           <a href="#1_line32">32</a> and
           <a href="#1_line58">58</a>.<br>
           <br>
           The important line for disabling an existing subscription is
           <a href="#1_line136">136</a>.
   
         </p>
         <!-- code2html add -lcc -N bug_1.cpp
         --><!-- code2html delete start --><pre><a name="1_line1" href="#1_line1">  1</a> <strong>void</strong> <font color="#2040a0">ProviderManagerService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">handleEnableIndicationsRequest</font><font color="4444FF">(</font>
   <a name="1_line2" href="#1_line2">  2</a>    <font color="#2040a0">AsyncOpNode</font> <font color="4444FF">*</font><font color="#2040a0">op</font>, <strong>const</strong> <font color="#2040a0">Message</font> <font color="4444FF">*</font> <font color="#2040a0">message</font><font color="4444FF">)</font> <strong>throw</strong><font color="4444FF">(</font><font color="4444FF">)</font>
   <a name="1_line3" href="#1_line3">  3</a> <font color="4444FF"><strong>{</strong></font>
   <a name="1_line4" href="#1_line4">  4</a>    <font color="#2040a0">PEG_METHOD_ENTER</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>,
   <a name="1_line5" href="#1_line5">  5</a>                   <font color="#008000">&quot;ProviderManagerService:: handleEnableIndicationsRequest&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line6" href="#1_line6">  6</a>    <font color="#2040a0">CIMEnableIndicationsRequestMessage</font> <font color="4444FF">*</font> <font color="#2040a0">request</font> <font color="4444FF">=</font>
   <a name="1_line7" href="#1_line7">  7</a>       <strong>dynamic_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">CIMEnableIndicationsRequestMessage</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font>
   <a name="1_line8" href="#1_line8">  8</a>        <font color="#2040a0">const_cast</font><font color="4444FF">&lt;</font><font color="#2040a0">Message</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">message</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line9" href="#1_line9">  9</a>
   <a name="1_line10" href="#1_line10"> 10</a>    <font color="#2040a0">AsyncRequest</font> <font color="4444FF">*</font><font color="#2040a0">async</font> <font color="4444FF">=</font>
   <a name="1_line11" href="#1_line11"> 11</a>       <strong>static_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">AsyncRequest</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">op</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_request</font>.<font color="#2040a0">next</font><font color="4444FF">(</font><font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line12" href="#1_line12"> 12</a>
   <a name="1_line13" href="#1_line13"> 13</a>    <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">request</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">&amp;</font><font color="4444FF">&amp;</font> <font color="#2040a0">async</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line14" href="#1_line14"> 14</a>
   <a name="1_line15" href="#1_line15"> 15</a>    <font color="#2040a0">CIMEnableIndicationsResponseMessage</font> <font color="4444FF">*</font> <font color="#2040a0">response</font> <font color="4444FF">=</font>
   <a name="1_line16" href="#1_line16"> 16</a>       <strong>new</strong> <font color="#2040a0">CIMEnableIndicationsResponseMessage</font><font color="4444FF">(</font>
   <a name="1_line17" href="#1_line17"> 17</a>      <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">messageId</font>,
   <a name="1_line18" href="#1_line18"> 18</a>      <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="1_line19" href="#1_line19"> 19</a>      <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">queueIds</font>.<font color="#2040a0">copyAndPop</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line20" href="#1_line20"> 20</a>
   <a name="1_line21" href="#1_line21"> 21</a>    <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">response</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line22" href="#1_line22"> 22</a>
   <a name="1_line23" href="#1_line23"> 23</a>    <font color="#444444">// preserve message key</font>
   <a name="1_line24" href="#1_line24"> 24</a>    <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">setKey</font><font color="4444FF">(</font><font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getKey</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line25" href="#1_line25"> 25</a>
   <a name="1_line26" href="#1_line26"> 26</a>    <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">dest</font> <font color="4444FF">=</font> <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">queueIds</font>.<font color="#2040a0">top</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line27" href="#1_line27"> 27</a>
   <a name="1_line28" href="#1_line28"> 28</a>    <font color="#444444">// Allocate the response handler from the heap using new (). </font>
   <a name="1_line29" href="#1_line29"> 29</a>    <font color="#444444">// Otherwise it will go out of scope and the indication, which </font>
   <a name="1_line30" href="#1_line30"> 30</a>    <font color="#444444">// happens later, will go off into outer space...</font>
   <a name="1_line31" href="#1_line31"> 31</a>
   <a name="1_line32" href="#1_line32"> 32</a>    <font color="#2040a0">EnableIndicationsResponseHandler</font> <font color="4444FF">*</font><font color="#2040a0">handler</font> <font color="4444FF">=</font>
   <a name="1_line33" href="#1_line33"> 33</a>       <strong>new</strong> <font color="#2040a0">EnableIndicationsResponseHandler</font><font color="4444FF">(</font><font color="#2040a0">request</font>, <font color="#2040a0">response</font>, <strong>this</strong><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line34" href="#1_line34"> 34</a>
   <a name="1_line35" href="#1_line35"> 35</a>    <font color="#2040a0">try</font>
   <a name="1_line36" href="#1_line36"> 36</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="1_line37" href="#1_line37"> 37</a>       <font color="#444444">// get the provider file name and logical name</font>
   <a name="1_line38" href="#1_line38"> 38</a>       <font color="#2040a0">Triad</font><font color="4444FF">&lt;</font><font color="#2040a0">String</font>, <font color="#2040a0">String</font>, <font color="#2040a0">String</font><font color="4444FF">&gt;</font> <font color="#2040a0">triad</font> <font color="4444FF">=</font>
   <a name="1_line39" href="#1_line39"> 39</a>      <font color="#2040a0">_getProviderRegPair</font><font color="4444FF">(</font><font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">provider</font>, <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">providerModule</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line40" href="#1_line40"> 40</a>
   <a name="1_line41" href="#1_line41"> 41</a>       <font color="#444444">// get cached or load new provider module</font>
   <a name="1_line42" href="#1_line42"> 42</a>       <font color="#2040a0">Provider</font> <font color="#2040a0">provider</font> <font color="4444FF">=</font>
   <a name="1_line43" href="#1_line43"> 43</a>      <font color="#2040a0">providerManager</font>.<font color="#2040a0">getProvider</font><font color="4444FF">(</font><font color="#2040a0">triad</font>.<font color="#2040a0">first</font>, <font color="#2040a0">triad</font>.<font color="#2040a0">second</font>, <font color="#2040a0">triad</font>.<font color="#2040a0">third</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line44" href="#1_line44"> 44</a>
   <a name="1_line45" href="#1_line45"> 45</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line46" href="#1_line46"> 46</a>                    <font color="#008000">&quot;Calling provider.enableIndications: &quot;</font> <font color="4444FF">+</font>
   <a name="1_line47" href="#1_line47"> 47</a>                    <font color="#2040a0">provider</font>.<font color="#2040a0">getName</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line48" href="#1_line48"> 48</a>
   <a name="1_line49" href="#1_line49"> 49</a>       <font color="#2040a0">provider</font>.<font color="#2040a0">enableIndications</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">handler</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line50" href="#1_line50"> 50</a>
   <a name="1_line51" href="#1_line51"> 51</a>       <font color="#444444">// if no exception, store the handler so it is persistent for as </font>
   <a name="1_line52" href="#1_line52"> 52</a>       <font color="#444444">// long as the provider has indications enabled. </font>
   <a name="1_line53" href="#1_line53"> 53</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line54" href="#1_line54"> 54</a>                    <font color="#008000">&quot;Storing indication handler for &quot;</font> <font color="4444FF">+</font> <font color="#2040a0">provider</font>.<font color="#2040a0">getName</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line55" href="#1_line55"> 55</a>
   <a name="1_line56" href="#1_line56"> 56</a>
   <a name="1_line57" href="#1_line57"> 57</a>       <font color="#444444">// keep indication handlers in a hash table keyed by the provider. </font>
   <a name="1_line58" href="#1_line58"> 58</a>       <font color="#2040a0">_insertEntry</font><font color="4444FF">(</font><font color="#2040a0">provider</font>, <font color="#2040a0">handler</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line59" href="#1_line59"> 59</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="1_line60" href="#1_line60"> 60</a>    <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">CIMException</font> <font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
   <a name="1_line61" href="#1_line61"> 61</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="1_line62" href="#1_line62"> 62</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line63" href="#1_line63"> 63</a>                    <font color="#008000">&quot;Exception: &quot;</font> <font color="4444FF">+</font> <font color="#2040a0">e</font>.<font color="#2040a0">getMessage</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line64" href="#1_line64"> 64</a>       <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">e</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line65" href="#1_line65"> 65</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="1_line66" href="#1_line66"> 66</a>    <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">Exception</font> <font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
   <a name="1_line67" href="#1_line67"> 67</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="1_line68" href="#1_line68"> 68</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line69" href="#1_line69"> 69</a>                    <font color="#008000">&quot;Exception: &quot;</font> <font color="4444FF">+</font> <font color="#2040a0">e</font>.<font color="#2040a0">getMessage</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line70" href="#1_line70"> 70</a>       <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>, <font color="#008000">&quot;Internal Error&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line71" href="#1_line71"> 71</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="1_line72" href="#1_line72"> 72</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
   <a name="1_line73" href="#1_line73"> 73</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="1_line74" href="#1_line74"> 74</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line75" href="#1_line75"> 75</a>                    <font color="#008000">&quot;Exception: Unknown&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line76" href="#1_line76"> 76</a>       <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>, <font color="#008000">&quot;Unknown Error&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line77" href="#1_line77"> 77</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="1_line78" href="#1_line78"> 78</a>
   <a name="1_line79" href="#1_line79"> 79</a>    <font color="#2040a0">AsyncLegacyOperationResult</font> <font color="4444FF">*</font><font color="#2040a0">async_result</font> <font color="4444FF">=</font>
   <a name="1_line80" href="#1_line80"> 80</a>       <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationResult</font><font color="4444FF">(</font>
   <a name="1_line81" href="#1_line81"> 81</a>      <font color="#2040a0">async</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getKey</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="1_line82" href="#1_line82"> 82</a>      <font color="#2040a0">async</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getRouting</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="1_line83" href="#1_line83"> 83</a>      <font color="#2040a0">op</font>,
   <a name="1_line84" href="#1_line84"> 84</a>      <font color="#2040a0">response</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line85" href="#1_line85"> 85</a>
   <a name="1_line86" href="#1_line86"> 86</a>    <font color="#2040a0">_complete_op_node</font><font color="4444FF">(</font><font color="#2040a0">op</font>, <font color="#2040a0">ASYNC_OPSTATE_COMPLETE</font>, <font color="#FF0000">0</font>, <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line87" href="#1_line87"> 87</a>    <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line88" href="#1_line88"> 88</a> <font color="4444FF"><strong>}</strong></font>
   <a name="1_line89" href="#1_line89"> 89</a>
   <a name="1_line90" href="#1_line90"> 90</a> <strong>void</strong> <font color="#2040a0">ProviderManagerService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">handleDisableIndicationsRequest</font><font color="4444FF">(</font>
   <a name="1_line91" href="#1_line91"> 91</a>    <font color="#2040a0">AsyncOpNode</font> <font color="4444FF">*</font><font color="#2040a0">op</font>, <strong>const</strong> <font color="#2040a0">Message</font> <font color="4444FF">*</font> <font color="#2040a0">message</font><font color="4444FF">)</font> <strong>throw</strong><font color="4444FF">(</font><font color="4444FF">)</font>
   <a name="1_line92" href="#1_line92"> 92</a> <font color="4444FF"><strong>{</strong></font>
   <a name="1_line93" href="#1_line93"> 93</a>    <font color="#2040a0">PEG_METHOD_ENTER</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>,
   <a name="1_line94" href="#1_line94"> 94</a>                 <font color="#008000">&quot;ProviderManagerService::handleDisableIndicationsRequest&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line95" href="#1_line95"> 95</a>    <font color="#2040a0">CIMDisableIndicationsRequestMessage</font> <font color="4444FF">*</font> <font color="#2040a0">request</font> <font color="4444FF">=</font>
   <a name="1_line96" href="#1_line96"> 96</a>       <strong>dynamic_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">CIMDisableIndicationsRequestMessage</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font>
   <a name="1_line97" href="#1_line97"> 97</a>      <font color="#2040a0">const_cast</font><font color="4444FF">&lt;</font><font color="#2040a0">Message</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">message</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line98" href="#1_line98"> 98</a>
   <a name="1_line99" href="#1_line99"> 99</a>    <font color="#2040a0">AsyncRequest</font> <font color="4444FF">*</font><font color="#2040a0">async</font> <font color="4444FF">=</font> <strong>static_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">AsyncRequest</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">op</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_request</font>.<font color="#2040a0">next</font><font color="4444FF">(</font><font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line100" href="#1_line100">100</a>
   <a name="1_line101" href="#1_line101">101</a>    <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">request</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">&amp;</font><font color="4444FF">&amp;</font> <font color="#2040a0">async</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line102" href="#1_line102">102</a>
   <a name="1_line103" href="#1_line103">103</a>    <font color="#2040a0">CIMDisableIndicationsResponseMessage</font> <font color="4444FF">*</font> <font color="#2040a0">response</font> <font color="4444FF">=</font>
   <a name="1_line104" href="#1_line104">104</a>       <strong>new</strong> <font color="#2040a0">CIMDisableIndicationsResponseMessage</font><font color="4444FF">(</font>
   <a name="1_line105" href="#1_line105">105</a>    <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">messageId</font>,
   <a name="1_line106" href="#1_line106">106</a>    <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="1_line107" href="#1_line107">107</a>    <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">queueIds</font>.<font color="#2040a0">copyAndPop</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line108" href="#1_line108">108</a>
   <a name="1_line109" href="#1_line109">109</a>    <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">response</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line110" href="#1_line110">110</a>
   <a name="1_line111" href="#1_line111">111</a>    <font color="#444444">// preserve message key</font>
   <a name="1_line112" href="#1_line112">112</a>    <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">setKey</font><font color="4444FF">(</font><font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getKey</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line113" href="#1_line113">113</a>
   <a name="1_line114" href="#1_line114">114</a>    <font color="#2040a0">OperationResponseHandler</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMIndication</font><font color="4444FF">&gt;</font> <font color="#2040a0">handler</font><font color="4444FF">(</font><font color="#2040a0">request</font>, <font color="#2040a0">response</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line115" href="#1_line115">115</a>    <font color="#2040a0">try</font>
   <a name="1_line116" href="#1_line116">116</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="1_line117" href="#1_line117">117</a>       <font color="#444444">// get the provider file name and logical name</font>
   <a name="1_line118" href="#1_line118">118</a>       <font color="#2040a0">Triad</font><font color="4444FF">&lt;</font><font color="#2040a0">String</font>, <font color="#2040a0">String</font>, <font color="#2040a0">String</font><font color="4444FF">&gt;</font> <font color="#2040a0">triad</font> <font color="4444FF">=</font>
   <a name="1_line119" href="#1_line119">119</a>    <font color="#2040a0">_getProviderRegPair</font><font color="4444FF">(</font><font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">provider</font>, <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">providerModule</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line120" href="#1_line120">120</a>
   <a name="1_line121" href="#1_line121">121</a>       <font color="#444444">// get cached or load new provider module</font>
   <a name="1_line122" href="#1_line122">122</a>       <font color="#2040a0">Provider</font> <font color="#2040a0">provider</font> <font color="4444FF">=</font>
   <a name="1_line123" href="#1_line123">123</a>    <font color="#2040a0">providerManager</font>.<font color="#2040a0">getProvider</font><font color="4444FF">(</font><font color="#2040a0">triad</font>.<font color="#2040a0">first</font>, <font color="#2040a0">triad</font>.<font color="#2040a0">second</font>, <font color="#2040a0">triad</font>.<font color="#2040a0">third</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line124" href="#1_line124">124</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line125" href="#1_line125">125</a>                  <font color="#008000">&quot;Calling provider.disableIndications: &quot;</font> <font color="4444FF">+</font>
   <a name="1_line126" href="#1_line126">126</a>                  <font color="#2040a0">provider</font>.<font color="#2040a0">getName</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line127" href="#1_line127">127</a>
   <a name="1_line128" href="#1_line128">128</a>       <font color="#2040a0">provider</font>.<font color="#2040a0">disableIndications</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line129" href="#1_line129">129</a>
   <a name="1_line130" href="#1_line130">130</a>       <font color="#444444">// Now that indications are disabled we can extract and remove the </font>
   <a name="1_line131" href="#1_line131">131</a>       <font color="#444444">// indication response handler </font>
   <a name="1_line132" href="#1_line132">132</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line133" href="#1_line133">133</a>                  <font color="#008000">&quot;Removing and Destroying indication handler for &quot;</font> <font color="4444FF">+</font>
   <a name="1_line134" href="#1_line134">134</a>                  <font color="#2040a0">provider</font>.<font color="#2040a0">getName</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line135" href="#1_line135">135</a>
   <a name="1_line136" href="#1_line136">136</a>       <strong>delete</strong> <font color="#2040a0">_removeEntry</font><font color="4444FF">(</font><font color="#2040a0">_generateKey</font><font color="4444FF">(</font><font color="#2040a0">provider</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line137" href="#1_line137">137</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="1_line138" href="#1_line138">138</a>
   <a name="1_line139" href="#1_line139">139</a>    <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">CIMException</font> <font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
   <a name="1_line140" href="#1_line140">140</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="1_line141" href="#1_line141">141</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line142" href="#1_line142">142</a>                  <font color="#008000">&quot;Exception: &quot;</font> <font color="4444FF">+</font> <font color="#2040a0">e</font>.<font color="#2040a0">getMessage</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line143" href="#1_line143">143</a>       <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">e</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line144" href="#1_line144">144</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="1_line145" href="#1_line145">145</a>    <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">Exception</font> <font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
   <a name="1_line146" href="#1_line146">146</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="1_line147" href="#1_line147">147</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line148" href="#1_line148">148</a>                  <font color="#008000">&quot;Exception: &quot;</font> <font color="4444FF">+</font> <font color="#2040a0">e</font>.<font color="#2040a0">getMessage</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line149" href="#1_line149">149</a>       <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>, <font color="#008000">&quot;Internal Error&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line150" href="#1_line150">150</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="1_line151" href="#1_line151">151</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
   <a name="1_line152" href="#1_line152">152</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="1_line153" href="#1_line153">153</a>       <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="1_line154" href="#1_line154">154</a>                  <font color="#008000">&quot;Exception: Unknown&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line155" href="#1_line155">155</a>       <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>, <font color="#008000">&quot;Unknown Error&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line156" href="#1_line156">156</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="1_line157" href="#1_line157">157</a>
   <a name="1_line158" href="#1_line158">158</a>    <font color="#2040a0">AsyncLegacyOperationResult</font> <font color="4444FF">*</font><font color="#2040a0">async_result</font> <font color="4444FF">=</font>
   <a name="1_line159" href="#1_line159">159</a>       <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationResult</font><font color="4444FF">(</font>
   <a name="1_line160" href="#1_line160">160</a>    <font color="#2040a0">async</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getKey</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="1_line161" href="#1_line161">161</a>    <font color="#2040a0">async</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getRouting</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="1_line162" href="#1_line162">162</a>    <font color="#2040a0">op</font>,
   <a name="1_line163" href="#1_line163">163</a>    <font color="#2040a0">response</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line164" href="#1_line164">164</a>
   <a name="1_line165" href="#1_line165">165</a>    <font color="#2040a0">_complete_op_node</font><font color="4444FF">(</font><font color="#2040a0">op</font>, <font color="#2040a0">ASYNC_OPSTATE_COMPLETE</font>, <font color="#FF0000">0</font>, <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line166" href="#1_line166">166</a>    <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="1_line167" href="#1_line167">167</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
       </div>
       <a name="bug_2">
       <h4>Response Handler Created with Reference to Transient Messages</h4></a>
       <p>
         The <code>OperationResponseHandler</code> and derivative classes
         are constructed with a reference to <code>CIMRequest</code> and
         <code>CIMResponse</code> messages (i.e., the request/response
         pair related to the operation). These references were stored and
         used during the processing of responses. These references
         pointed to message that were deleted when the thread of
         execution left the dispatcher. For most CIM operations this is
         not a problem. However, in the case of indications the responses
         occur asynchronously. This caused the message references to
         point to deleted memory. Even this did not manifest a problem until the
         response handler was destroyed, which occured when the
         <code>DisableIndications</code> message made its way to the
         <code>ProviderManagerService</code>.
       </p>
       <div class="source">
         <h5>The fix - copy the messages passed to the response handler.</h5>
         <p>
           The lines that implement the fix are <a href="#2_line14">14 and 15</a>
           and <a href="#2_line102">102 and 103</a>.
         </p>
         <p>
           This is a fix that, in my opinion, should be generally applied
           to all response handlers.
         </p>
         <!-- code2html add -lcc -N bug_2.h
         --><!-- code2html delete start --><pre><a name="2_line1" href="#2_line1">  1</a> <font color="#444444">////////////////////-*-c++-*-///////////////////////////////////////////</font>
   <a name="2_line2" href="#2_line2">  2</a> <strong>class</strong> <font color="#2040a0">EnableIndicationsResponseHandler</font> <font color="4444FF">:</font>
   <a name="2_line3" href="#2_line3">  3</a>    <strong>public</strong> <font color="#2040a0">OperationResponseHandler</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMIndication</font><font color="4444FF">&gt;</font>
   <a name="2_line4" href="#2_line4">  4</a> <font color="4444FF"><strong>{</strong></font>
   <a name="2_line5" href="#2_line5">  5</a>    <strong>public</strong><font color="4444FF">:</font>
   <a name="2_line6" href="#2_line6">  6</a>       <font color="#2040a0">EnableIndicationsResponseHandler</font><font color="4444FF">(</font>
   <a name="2_line7" href="#2_line7">  7</a>        <font color="#2040a0">CIMEnableIndicationsRequestMessage</font> <font color="4444FF">*</font> <font color="#2040a0">request</font>,
   <a name="2_line8" href="#2_line8">  8</a>        <font color="#2040a0">CIMEnableIndicationsResponseMessage</font> <font color="4444FF">*</font> <font color="#2040a0">response</font>,
   <a name="2_line9" href="#2_line9">  9</a>        <font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font> <font color="#2040a0">source</font>,
   <a name="2_line10" href="#2_line10"> 10</a>      <font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font> <font color="#2040a0">target</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font>
   <a name="2_line11" href="#2_line11"> 11</a>      <font color="4444FF">:</font> <font color="#2040a0">OperationResponseHandler</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMIndication</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">request</font>, <font color="#2040a0">response</font><font color="4444FF">)</font>,
   <a name="2_line12" href="#2_line12"> 12</a>        <font color="#2040a0">_source</font><font color="4444FF">(</font><font color="#2040a0">source</font><font color="4444FF">)</font>,
   <a name="2_line13" href="#2_line13"> 13</a>        <font color="#2040a0">_target</font><font color="4444FF">(</font><font color="#2040a0">target</font><font color="4444FF">)</font>,
   <a name="2_line14" href="#2_line14"> 14</a>        <font color="#2040a0">_request_copy</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">request</font><font color="4444FF">)</font>,
   <a name="2_line15" href="#2_line15"> 15</a>        <font color="#2040a0">_response_copy</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">response</font><font color="4444FF">)</font>
   <a name="2_line16" href="#2_line16"> 16</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="2_line17" href="#2_line17"> 17</a>         <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">_source</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line18" href="#2_line18"> 18</a>
   <a name="2_line19" href="#2_line19"> 19</a>         <font color="#444444">// get indication service</font>
   <a name="2_line20" href="#2_line20"> 20</a>         <strong>if</strong><font color="4444FF">(</font><font color="#2040a0">_target</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font>
   <a name="2_line21" href="#2_line21"> 21</a>         <font color="4444FF"><strong>{</strong></font>
   <a name="2_line22" href="#2_line22"> 22</a>             <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">Uint32</font><font color="4444FF">&gt;</font> <font color="#2040a0">serviceIds</font><font color="4444FF">;</font>
   <a name="2_line23" href="#2_line23"> 23</a>
   <a name="2_line24" href="#2_line24"> 24</a>             <font color="#2040a0">_source</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">find_services</font><font color="4444FF">(</font>
   <a name="2_line25" href="#2_line25"> 25</a>            <font color="#2040a0">PEGASUS_QUEUENAME_ESERVER_INDICATIONSERVICE</font>,
   <a name="2_line26" href="#2_line26"> 26</a>            <font color="#FF0000">0</font>, <font color="#FF0000">0</font>, <font color="4444FF">&amp;</font><font color="#2040a0">serviceIds</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line27" href="#2_line27"> 27</a>
   <a name="2_line28" href="#2_line28"> 28</a>             <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">serviceIds</font>.<font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line29" href="#2_line29"> 29</a>
   <a name="2_line30" href="#2_line30"> 30</a>             <font color="#2040a0">_target</font> <font color="4444FF">=</font> <strong>dynamic_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font>
   <a name="2_line31" href="#2_line31"> 31</a>            <font color="#2040a0">MessageQueue</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">lookup</font><font color="4444FF">(</font><font color="#2040a0">serviceIds</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line32" href="#2_line32"> 32</a>
   <a name="2_line33" href="#2_line33"> 33</a>             <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">_target</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line34" href="#2_line34"> 34</a>         <font color="4444FF"><strong>}</strong></font>
   <a name="2_line35" href="#2_line35"> 35</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="2_line36" href="#2_line36"> 36</a>
   <a name="2_line37" href="#2_line37"> 37</a>     <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">deliver</font><font color="4444FF">(</font><strong>const</strong> <font color="#2040a0">CIMIndication</font> <font color="4444FF">&amp;</font> <font color="#2040a0">cimIndication</font><font color="4444FF">)</font>
   <a name="2_line38" href="#2_line38"> 38</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="2_line39" href="#2_line39"> 39</a>         <font color="#2040a0">OperationContext</font> <font color="#2040a0">context</font><font color="4444FF">;</font>
   <a name="2_line40" href="#2_line40"> 40</a>
   <a name="2_line41" href="#2_line41"> 41</a>         <font color="#2040a0">deliver</font><font color="4444FF">(</font><font color="#2040a0">context</font>, <font color="#2040a0">cimIndication</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line42" href="#2_line42"> 42</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="2_line43" href="#2_line43"> 43</a>
   <a name="2_line44" href="#2_line44"> 44</a>     <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">deliver</font><font color="4444FF">(</font><strong>const</strong> <font color="#2040a0">OperationContext</font> <font color="4444FF">&amp;</font> <font color="#2040a0">context</font>,
   <a name="2_line45" href="#2_line45"> 45</a>                      <strong>const</strong> <font color="#2040a0">CIMIndication</font> <font color="4444FF">&amp;</font> <font color="#2040a0">cimIndication</font><font color="4444FF">)</font>
   <a name="2_line46" href="#2_line46"> 46</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="2_line47" href="#2_line47"> 47</a>         <font color="#444444">// ATTN: temporarily convert indication to instance</font>
   <a name="2_line48" href="#2_line48"> 48</a>         <font color="#2040a0">CIMInstance</font> <font color="#2040a0">cimInstance</font><font color="4444FF">(</font><font color="#2040a0">cimIndication</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line49" href="#2_line49"> 49</a>
   <a name="2_line50" href="#2_line50"> 50</a>         <font color="#444444">// create message</font>
   <a name="2_line51" href="#2_line51"> 51</a>         <font color="#2040a0">CIMProcessIndicationRequestMessage</font> <font color="4444FF">*</font> <font color="#2040a0">request</font> <font color="4444FF">=</font>
   <a name="2_line52" href="#2_line52"> 52</a>             <strong>new</strong> <font color="#2040a0">CIMProcessIndicationRequestMessage</font><font color="4444FF">(</font>
   <a name="2_line53" href="#2_line53"> 53</a>            <font color="#2040a0">_request_copy</font>.<font color="#2040a0">messageId</font>,
   <a name="2_line54" href="#2_line54"> 54</a>             <font color="#2040a0">cimInstance</font>.<font color="#2040a0">getPath</font><font color="4444FF">(</font><font color="4444FF">)</font>.<font color="#2040a0">getNameSpace</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="2_line55" href="#2_line55"> 55</a>             <font color="#2040a0">cimInstance</font>,
   <a name="2_line56" href="#2_line56"> 56</a>             <font color="#2040a0">QueueIdStack</font><font color="4444FF">(</font><font color="#2040a0">_target</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getQueueId</font><font color="4444FF">(</font><font color="4444FF">)</font>, <font color="#2040a0">_source</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getQueueId</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line57" href="#2_line57"> 57</a>
   <a name="2_line58" href="#2_line58"> 58</a>         <font color="#444444">// send message</font>
   <a name="2_line59" href="#2_line59"> 59</a>         <font color="#444444">// &lt;&lt;&lt; Wed Apr 10 21:04:00 2002 mdd &gt;&gt;&gt;</font>
   <a name="2_line60" href="#2_line60"> 60</a>         <font color="#444444">// AsyncOpNode * op = _source-&gt;get_op();</font>
   <a name="2_line61" href="#2_line61"> 61</a>
   <a name="2_line62" href="#2_line62"> 62</a>         <font color="#2040a0">AsyncLegacyOperationStart</font> <font color="4444FF">*</font> <font color="#2040a0">asyncRequest</font> <font color="4444FF">=</font>
   <a name="2_line63" href="#2_line63"> 63</a>             <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationStart</font><font color="4444FF">(</font>
   <a name="2_line64" href="#2_line64"> 64</a>             <font color="#2040a0">_source</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">get_next_xid</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="2_line65" href="#2_line65"> 65</a>             <font color="#FF0000">0</font>,
   <a name="2_line66" href="#2_line66"> 66</a>             <font color="#2040a0">_target</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getQueueId</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="2_line67" href="#2_line67"> 67</a>             <font color="#2040a0">request</font>,
   <a name="2_line68" href="#2_line68"> 68</a>             <font color="#2040a0">_target</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getQueueId</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line69" href="#2_line69"> 69</a>
   <a name="2_line70" href="#2_line70"> 70</a>         <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">asyncRequest</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line71" href="#2_line71"> 71</a>
   <a name="2_line72" href="#2_line72"> 72</a>         <font color="#444444">//AsyncReply * asyncReply = _source-&gt;SendWait(asyncRequest);</font>
   <a name="2_line73" href="#2_line73"> 73</a>         <font color="#444444">// &lt;&lt;&lt; Wed Apr 10 21:04:50 2002 mdd &gt;&gt;&gt;</font>
   <a name="2_line74" href="#2_line74"> 74</a>         <font color="#2040a0">_source</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">SendForget</font><font color="4444FF">(</font><font color="#2040a0">asyncRequest</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line75" href="#2_line75"> 75</a>         <font color="#444444">//PEGASUS_ASSERT(asyncReply != 0);</font>
   <a name="2_line76" href="#2_line76"> 76</a>
   <a name="2_line77" href="#2_line77"> 77</a>         <font color="#444444">//  Chip - receiver of the request should delete it</font>
   <a name="2_line78" href="#2_line78"> 78</a>         <font color="#444444">//delete asyncRequest;</font>
   <a name="2_line79" href="#2_line79"> 79</a>         <font color="#444444">// &lt;&lt;&lt; Wed Apr 10 21:05:10 2002 mdd &gt;&gt;&gt;</font>
   <a name="2_line80" href="#2_line80"> 80</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="2_line81" href="#2_line81"> 81</a>
   <a name="2_line82" href="#2_line82"> 82</a>     <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">deliver</font><font color="4444FF">(</font><strong>const</strong> <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMIndication</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">cimIndications</font><font color="4444FF">)</font>
   <a name="2_line83" href="#2_line83"> 83</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="2_line84" href="#2_line84"> 84</a>         <font color="#2040a0">OperationContext</font> <font color="#2040a0">context</font><font color="4444FF">;</font>
   <a name="2_line85" href="#2_line85"> 85</a>
   <a name="2_line86" href="#2_line86"> 86</a>         <font color="#2040a0">deliver</font><font color="4444FF">(</font><font color="#2040a0">context</font>, <font color="#2040a0">cimIndications</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line87" href="#2_line87"> 87</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="2_line88" href="#2_line88"> 88</a>
   <a name="2_line89" href="#2_line89"> 89</a>     <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">deliver</font><font color="4444FF">(</font><strong>const</strong> <font color="#2040a0">OperationContext</font> <font color="4444FF">&amp;</font> <font color="#2040a0">context</font>,
   <a name="2_line90" href="#2_line90"> 90</a>                      <strong>const</strong> <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMIndication</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">cimIndications</font><font color="4444FF">)</font>
   <a name="2_line91" href="#2_line91"> 91</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="2_line92" href="#2_line92"> 92</a>         <strong>for</strong><font color="4444FF">(</font><font color="#2040a0">Uint32</font> <font color="#2040a0">i</font> <font color="4444FF">=</font> <font color="#FF0000">0</font>, <font color="#2040a0">n</font> <font color="4444FF">=</font> <font color="#2040a0">cimIndications</font>.<font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">i</font> <font color="4444FF">&lt;</font> <font color="#2040a0">n</font><font color="4444FF">;</font> <font color="#2040a0">i</font><font color="4444FF">+</font><font color="4444FF">+</font><font color="4444FF">)</font>
   <a name="2_line93" href="#2_line93"> 93</a>         <font color="4444FF"><strong>{</strong></font>
   <a name="2_line94" href="#2_line94"> 94</a>             <font color="#2040a0">deliver</font><font color="4444FF">(</font><font color="#2040a0">context</font>, <font color="#2040a0">cimIndications</font><font color="4444FF">[</font><font color="#2040a0">i</font><font color="4444FF">]</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="2_line95" href="#2_line95"> 95</a>         <font color="4444FF"><strong>}</strong></font>
   <a name="2_line96" href="#2_line96"> 96</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="2_line97" href="#2_line97"> 97</a>
   <a name="2_line98" href="#2_line98"> 98</a>    <strong>protected</strong><font color="4444FF">:</font>
   <a name="2_line99" href="#2_line99"> 99</a>       <font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font> <font color="#2040a0">_source</font><font color="4444FF">;</font>
   <a name="2_line100" href="#2_line100">100</a>       <font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font> <font color="#2040a0">_target</font><font color="4444FF">;</font>
   <a name="2_line101" href="#2_line101">101</a>    <strong>private</strong><font color="4444FF">:</font>
   <a name="2_line102" href="#2_line102">102</a>       <font color="#2040a0">CIMEnableIndicationsRequestMessage</font> <font color="#2040a0">_request_copy</font><font color="4444FF">;</font>
   <a name="2_line103" href="#2_line103">103</a>       <font color="#2040a0">CIMEnableIndicationsResponseMessage</font> <font color="#2040a0">_response_copy</font><font color="4444FF">;</font>
   <a name="2_line104" href="#2_line104">104</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   </pre><!-- code2html delete stop -->
       </div>
   <a name="bug_3">
   <h4>Converting References to CIMInstances</h4></a>
       <p>
         References stored in subscriptions and providers were sometimes
         being handled incorrectly in the <code>IndicationService</code>
         and the <code>ProviderRegistrationManager</code>, at least when
         the relationship between class names, class properties, and
         reference properties was concerned. Reference handling in
         general could use a library of helper routines. It is too error
         prone right now to extract a reference and turn it into a
         <code>CIMInstance</code>.</p>
       <p>
         As I was reviewing the <code>IndicationService</code> I noticed
         that a lot of the "dereferencing" of references was done in
         fairly long code segments that repeated themselves several times
         with only slight differences. I decided to distill that code
         into some more compact helper routines. I started on this but
         haven't finished yet.
       </p>
   
       <div class="source">
         <h5>Partial Fix: helper routines</h5>
         <div class= "comment">
         <p>
           I started working on some helper routines in my re-written
           <code>IndicationService</code>. Distilling a few routines into
           lower-level helpers allowed my to jettison a lot of code. As
           far as I could tell the code in the original Indication
           Service that I replaced should work just fine but I couldn't
           get it to. I felt that distilling the code would give me an
           edge in fixing underlying Pegasus bugs. I still think the bugs
             were elsewhere (not in the <code>IndicationService</code>)
             but I can't prove it.
         </p>
   
         <p>
           In general I think that Pegasus could benefit greatly from a
           library of similar, more general, static helper routines to deal
           with name spaces and the conversion between references and the
           instances they refer to.
         </p>
         <p>
           I also did some similar rewrites in the
           <code>ProviderRegistrationManager</code>.
         </p>
         </div>
         <!-- code2html add -lcc -N bug_3.cpp
         --><!-- code2html delete start --><pre><a name="3_line1" href="#3_line1">  1</a>
   <a name="3_line2" href="#3_line2">  2</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
   <a name="3_line3" href="#3_line3">  3</a> <font color="#444444">// Take an association class and a name of one or the references. </font>
   <a name="3_line4" href="#3_line4">  4</a> <font color="#444444">// Return a CIMObjectPath that contains the instance of the referred </font>
   <a name="3_line5" href="#3_line5">  5</a> <font color="#444444">// to object. </font>
   <a name="3_line6" href="#3_line6">  6</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
   <a name="3_line7" href="#3_line7">  7</a> <font color="#2040a0">Boolean</font> <font color="#2040a0">eServerIndicationService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">_get_object_path_from_association</font><font color="4444FF">(</font>
   <a name="3_line8" href="#3_line8">  8</a>    <strong>const</strong> <font color="#2040a0">String</font> <font color="4444FF">&amp;</font> <font color="#2040a0">reference_name</font>,
   <a name="3_line9" href="#3_line9">  9</a>    <strong>const</strong> <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">association</font>,
   <a name="3_line10" href="#3_line10"> 10</a>    <font color="#2040a0">CIMObjectPath</font> <font color="4444FF">&amp;</font> <font color="#2040a0">path</font><font color="4444FF">)</font> <strong>const</strong>
   <a name="3_line11" href="#3_line11"> 11</a> <font color="4444FF"><strong>{</strong></font>
   <a name="3_line12" href="#3_line12"> 12</a>
   <a name="3_line13" href="#3_line13"> 13</a>    <font color="#2040a0">path</font>.<font color="#2040a0">clear</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line14" href="#3_line14"> 14</a>    <font color="#2040a0">try</font>
   <a name="3_line15" href="#3_line15"> 15</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="3_line16" href="#3_line16"> 16</a>       <font color="#2040a0">CIMValue</font> <font color="#2040a0">path_value</font> <font color="4444FF">=</font> <font color="#2040a0">association</font>.<font color="#2040a0">getProperty</font><font color="4444FF">(</font>
   <a name="3_line17" href="#3_line17"> 17</a>      <font color="#2040a0">association</font>.<font color="#2040a0">findProperty</font><font color="4444FF">(</font><font color="#2040a0">reference_name</font><font color="4444FF">)</font><font color="4444FF">)</font>.<font color="#2040a0">getValue</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line18" href="#3_line18"> 18</a>       <font color="#2040a0">path_value</font>.<font color="#2040a0">get</font><font color="4444FF">(</font><font color="#2040a0">path</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line19" href="#3_line19"> 19</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="3_line20" href="#3_line20"> 20</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
   <a name="3_line21" href="#3_line21"> 21</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="3_line22" href="#3_line22"> 22</a>       <strong>return</strong> <strong>false</strong><font color="4444FF">;</font>
   <a name="3_line23" href="#3_line23"> 23</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="3_line24" href="#3_line24"> 24</a>
   <a name="3_line25" href="#3_line25"> 25</a>    <strong>return</strong> <strong>true</strong><font color="4444FF">;</font>
   <a name="3_line26" href="#3_line26"> 26</a> <font color="4444FF"><strong>}</strong></font>
   <a name="3_line27" href="#3_line27"> 27</a>
   <a name="3_line28" href="#3_line28"> 28</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
   <a name="3_line29" href="#3_line29"> 29</a> <font color="#444444">// Get all the name spaces in the repository. </font>
   <a name="3_line30" href="#3_line30"> 30</a> <font color="#444444">// This should really be a static method that any class should be </font>
   <a name="3_line31" href="#3_line31"> 31</a> <font color="#444444">// able to call</font>
   <a name="3_line32" href="#3_line32"> 32</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
   <a name="3_line33" href="#3_line33"> 33</a> <strong>void</strong> <font color="#2040a0">eServerIndicationService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">_getNameSpaceNames</font> <font color="4444FF">(</font>
   <a name="3_line34" href="#3_line34"> 34</a>    <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">String</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">nameSpaceNames</font><font color="4444FF">)</font> <strong>const</strong>
   <a name="3_line35" href="#3_line35"> 35</a> <font color="4444FF"><strong>{</strong></font>
   <a name="3_line36" href="#3_line36"> 36</a>
   <a name="3_line37" href="#3_line37"> 37</a>    <font color="#2040a0">PEG_METHOD_ENTER</font> <font color="4444FF">(</font><font color="#2040a0">TRC_INDICATION_SERVICE</font>,
   <a name="3_line38" href="#3_line38"> 38</a>                  <font color="#008000">&quot;eServerIndicationService::__getNameSpaceNames&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line39" href="#3_line39"> 39</a>    <font color="#2040a0">nameSpaceNames</font>.<font color="#2040a0">clear</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line40" href="#3_line40"> 40</a>
   <a name="3_line41" href="#3_line41"> 41</a>    <font color="#2040a0">_repository</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">read_lock</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line42" href="#3_line42"> 42</a>
   <a name="3_line43" href="#3_line43"> 43</a>    <font color="#2040a0">try</font>
   <a name="3_line44" href="#3_line44"> 44</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="3_line45" href="#3_line45"> 45</a>       <font color="#2040a0">nameSpaceNames</font> <font color="4444FF">=</font> <font color="#2040a0">_repository</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">enumerateNameSpaces</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line46" href="#3_line46"> 46</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="3_line47" href="#3_line47"> 47</a>    <strong>catch</strong> <font color="4444FF">(</font><font color="#2040a0">Exception</font> <font color="4444FF">&amp;</font><font color="4444FF">)</font>
   <a name="3_line48" href="#3_line48"> 48</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="3_line49" href="#3_line49"> 49</a>       <font color="#2040a0">_repository</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">read_unlock</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line50" href="#3_line50"> 50</a>       <font color="#2040a0">PEG_METHOD_EXIT</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line51" href="#3_line51"> 51</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="3_line52" href="#3_line52"> 52</a>
   <a name="3_line53" href="#3_line53"> 53</a>    <font color="#2040a0">_repository</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">read_unlock</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line54" href="#3_line54"> 54</a>
   <a name="3_line55" href="#3_line55"> 55</a>    <font color="#2040a0">PEG_METHOD_EXIT</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line56" href="#3_line56"> 56</a> <font color="4444FF"><strong>}</strong></font>
   <a name="3_line57" href="#3_line57"> 57</a>
   <a name="3_line58" href="#3_line58"> 58</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
   <a name="3_line59" href="#3_line59"> 59</a> <font color="#444444">// Get all subscriptions that refer to a specific indication class</font>
   <a name="3_line60" href="#3_line60"> 60</a> <font color="#444444">// returns subscriptions in all name spaces. Calls lower-level</font>
   <a name="3_line61" href="#3_line61"> 61</a> <font color="#444444">// _getMatchingSubscriptions. </font>
   <a name="3_line62" href="#3_line62"> 62</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
   <a name="3_line63" href="#3_line63"> 63</a> <strong>void</strong> <font color="#2040a0">eServerIndicationService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">_getMatchingSubscriptions</font><font color="4444FF">(</font>
   <a name="3_line64" href="#3_line64"> 64</a>    <strong>const</strong> <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">indication</font>,
   <a name="3_line65" href="#3_line65"> 65</a>    <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">subscriptions</font><font color="4444FF">)</font> <strong>const</strong>
   <a name="3_line66" href="#3_line66"> 66</a> <font color="4444FF"><strong>{</strong></font>
   <a name="3_line67" href="#3_line67"> 67</a>    <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">String</font><font color="4444FF">&gt;</font> <font color="#2040a0">nameSpaceNames</font><font color="4444FF">;</font>
   <a name="3_line68" href="#3_line68"> 68</a>    <font color="#2040a0">_getNameSpaceNames</font><font color="4444FF">(</font><font color="#2040a0">nameSpaceNames</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line69" href="#3_line69"> 69</a>
   <a name="3_line70" href="#3_line70"> 70</a>    <strong>for</strong><font color="4444FF">(</font><font color="#2040a0">Uint8</font> <font color="#2040a0">i</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font> <font color="#2040a0">i</font> <font color="4444FF">&lt;</font> <font color="#2040a0">nameSpaceNames</font>.<font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">;</font> <font color="4444FF">+</font><font color="4444FF">+</font><font color="#2040a0">i</font><font color="4444FF">)</font>
   <a name="3_line71" href="#3_line71"> 71</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="3_line72" href="#3_line72"> 72</a>       <font color="#2040a0">_getMatchingSubscriptions</font><font color="4444FF">(</font> <font color="#2040a0">nameSpaceNames</font><font color="4444FF">[</font><font color="#2040a0">i</font><font color="4444FF">]</font>,
   <a name="3_line73" href="#3_line73"> 73</a>                              <font color="#2040a0">indication</font>,
   <a name="3_line74" href="#3_line74"> 74</a>                              <font color="#2040a0">subscriptions</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line75" href="#3_line75"> 75</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="3_line76" href="#3_line76"> 76</a> <font color="4444FF"><strong>}</strong></font>
   <a name="3_line77" href="#3_line77"> 77</a>
   <a name="3_line78" href="#3_line78"> 78</a>
   <a name="3_line79" href="#3_line79"> 79</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
   <a name="3_line80" href="#3_line80"> 80</a> <font color="#444444">// Get all subscriptions that refer to a specific indication class</font>
   <a name="3_line81" href="#3_line81"> 81</a> <font color="#444444">// for a specific name space. </font>
   <a name="3_line82" href="#3_line82"> 82</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
   <a name="3_line83" href="#3_line83"> 83</a> <strong>void</strong> <font color="#2040a0">eServerIndicationService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">_getMatchingSubscriptions</font><font color="4444FF">(</font>
   <a name="3_line84" href="#3_line84"> 84</a>    <strong>const</strong> <font color="#2040a0">String</font> <font color="4444FF">&amp;</font> <font color="#2040a0">nameSpaceName</font>,
   <a name="3_line85" href="#3_line85"> 85</a>    <strong>const</strong> <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">indication</font>,
   <a name="3_line86" href="#3_line86"> 86</a>    <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">subscriptions</font><font color="4444FF">)</font> <strong>const</strong>
   <a name="3_line87" href="#3_line87"> 87</a> <font color="4444FF"><strong>{</strong></font>
   <a name="3_line88" href="#3_line88"> 88</a>    <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="#2040a0">all_subscriptions</font><font color="4444FF">;</font>
   <a name="3_line89" href="#3_line89"> 89</a>    <font color="#2040a0">_getSubscriptions</font><font color="4444FF">(</font><font color="#2040a0">nameSpaceName</font>, <font color="#2040a0">all_subscriptions</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line90" href="#3_line90"> 90</a>
   <a name="3_line91" href="#3_line91"> 91</a>    <font color="#2040a0">String</font> <font color="#2040a0">indication_class_name</font> <font color="4444FF">=</font> <font color="#2040a0">indication</font>.<font color="#2040a0">getClassName</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line92" href="#3_line92"> 92</a>    <font color="#2040a0">CIMObjectPath</font> <font color="#2040a0">compare_path</font><font color="4444FF">;</font>
   <a name="3_line93" href="#3_line93"> 93</a>
   <a name="3_line94" href="#3_line94"> 94</a>
   <a name="3_line95" href="#3_line95"> 95</a>    <strong>for</strong><font color="4444FF">(</font><font color="#2040a0">Uint8</font> <font color="#2040a0">x</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>
   <a name="3_line96" href="#3_line96"> 96</a>        <font color="#2040a0">x</font> <font color="4444FF">&lt;</font> <font color="#2040a0">all_subscriptions</font>.<font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">;</font>
   <a name="3_line97" href="#3_line97"> 97</a>        <font color="4444FF">+</font><font color="4444FF">+</font><font color="#2040a0">x</font>, <font color="#2040a0">compare_path</font>.<font color="#2040a0">clear</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="3_line98" href="#3_line98"> 98</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="3_line99" href="#3_line99"> 99</a>       <font color="#2040a0">_get_object_path_from_association</font><font color="4444FF">(</font><font color="#008000">&quot;Indication_Class&quot;</font>,
   <a name="3_line100" href="#3_line100">100</a>                                   <font color="#2040a0">all_subscriptions</font><font color="4444FF">[</font><font color="#2040a0">x</font><font color="4444FF">]</font>,
   <a name="3_line101" href="#3_line101">101</a>                                   <font color="#2040a0">compare_path</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line102" href="#3_line102">102</a>       <strong>if</strong><font color="4444FF">(</font><font color="#2040a0">compare_path</font>.<font color="#2040a0">getClassName</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">indication_class_name</font><font color="4444FF">)</font>
   <a name="3_line103" href="#3_line103">103</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="3_line104" href="#3_line104">104</a>    <font color="#2040a0">CIMObjectPath</font> <font color="#2040a0">temp</font> <font color="4444FF">=</font> <font color="#2040a0">all_subscriptions</font><font color="4444FF">[</font><font color="#2040a0">x</font><font color="4444FF">]</font>.<font color="#2040a0">getPath</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line105" href="#3_line105">105</a>    <font color="#2040a0">temp</font>.<font color="#2040a0">setNameSpace</font><font color="4444FF">(</font><font color="#2040a0">nameSpaceName</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line106" href="#3_line106">106</a>    <font color="#2040a0">all_subscriptions</font><font color="4444FF">[</font><font color="#2040a0">x</font><font color="4444FF">]</font>.<font color="#2040a0">setPath</font><font color="4444FF">(</font><font color="#2040a0">temp</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line107" href="#3_line107">107</a>    <font color="#2040a0">subscriptions</font>.<font color="#2040a0">append</font><font color="4444FF">(</font><font color="#2040a0">all_subscriptions</font><font color="4444FF">[</font><font color="#2040a0">x</font><font color="4444FF">]</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line108" href="#3_line108">108</a>       <font color="4444FF"><strong>}</strong></font>
   <a name="3_line109" href="#3_line109">109</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="3_line110" href="#3_line110">110</a>    <strong>return</strong><font color="4444FF">;</font>
   <a name="3_line111" href="#3_line111">111</a> <font color="4444FF"><strong>}</strong></font>
   <a name="3_line112" href="#3_line112">112</a>
   <a name="3_line113" href="#3_line113">113</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
   <a name="3_line114" href="#3_line114">114</a> <font color="#444444">// Get all subscriptions in the repository for a specific name space</font>
   <a name="3_line115" href="#3_line115">115</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
   <a name="3_line116" href="#3_line116">116</a> <strong>void</strong> <font color="#2040a0">eServerIndicationService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">_getSubscriptions</font> <font color="4444FF">(</font>
   <a name="3_line117" href="#3_line117">117</a>    <strong>const</strong> <font color="#2040a0">String</font> <font color="4444FF">&amp;</font> <font color="#2040a0">nameSpaceName</font>,
   <a name="3_line118" href="#3_line118">118</a>    <font color="#2040a0">Array</font> <font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">subscriptions</font><font color="4444FF">)</font> <strong>const</strong>
   <a name="3_line119" href="#3_line119">119</a> <font color="4444FF"><strong>{</strong></font>
   <a name="3_line120" href="#3_line120">120</a>
   <a name="3_line121" href="#3_line121">121</a>
   <a name="3_line122" href="#3_line122">122</a>    <font color="#2040a0">PEG_METHOD_ENTER</font> <font color="4444FF">(</font><font color="#2040a0">TRC_INDICATION_SERVICE</font>,
   <a name="3_line123" href="#3_line123">123</a>                <font color="#008000">&quot;eServerIndicationService::_getSubscriptions&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line124" href="#3_line124">124</a>
   <a name="3_line125" href="#3_line125">125</a>    <font color="#444444">//</font>
   <a name="3_line126" href="#3_line126">126</a>    <font color="#444444">//  Get existing subscriptions in current namespace</font>
   <a name="3_line127" href="#3_line127">127</a>    <font color="#444444">//</font>
   <a name="3_line128" href="#3_line128">128</a>    <font color="#2040a0">_repository</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">read_lock</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line129" href="#3_line129">129</a>
   <a name="3_line130" href="#3_line130">130</a>    <font color="#2040a0">try</font>
   <a name="3_line131" href="#3_line131">131</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="3_line132" href="#3_line132">132</a>       <font color="#2040a0">subscriptions</font>  <font color="4444FF">=</font> <font color="#2040a0">_repository</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">enumerateInstances</font>
   <a name="3_line133" href="#3_line133">133</a>    <font color="4444FF">(</font><font color="#2040a0">nameSpaceName</font>, <font color="#2040a0">ESERVER_CLASSNAME_INDSUBSCRIPTION</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line134" href="#3_line134">134</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="3_line135" href="#3_line135">135</a>    <strong>catch</strong> <font color="4444FF">(</font><font color="#2040a0">CIMException</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
   <a name="3_line136" href="#3_line136">136</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="3_line137" href="#3_line137">137</a>       <font color="#444444">//</font>
   <a name="3_line138" href="#3_line138">138</a>       <font color="#444444">//  Some namespaces may not include the subscription class</font>
   <a name="3_line139" href="#3_line139">139</a>       <font color="#444444">//  In that case, just return no subscriptions</font>
   <a name="3_line140" href="#3_line140">140</a>       <font color="#444444">//  Any other exception is an error</font>
   <a name="3_line141" href="#3_line141">141</a>       <font color="#444444">//</font>
   <a name="3_line142" href="#3_line142">142</a>       <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">e</font>.<font color="#2040a0">getCode</font> <font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#2040a0">CIM_ERR_INVALID_CLASS</font><font color="4444FF">)</font>
   <a name="3_line143" href="#3_line143">143</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="3_line144" href="#3_line144">144</a>    <font color="#2040a0">_repository</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">read_unlock</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line145" href="#3_line145">145</a>    <font color="#2040a0">PEG_METHOD_EXIT</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line146" href="#3_line146">146</a>       <font color="4444FF"><strong>}</strong></font>
   <a name="3_line147" href="#3_line147">147</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="3_line148" href="#3_line148">148</a>
   <a name="3_line149" href="#3_line149">149</a>    <font color="#2040a0">_repository</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">read_unlock</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line150" href="#3_line150">150</a>
   <a name="3_line151" href="#3_line151">151</a>    <font color="#2040a0">PEG_METHOD_EXIT</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="3_line152" href="#3_line152">152</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
       </div>
   <a name="bug_4">
   <h4>Pegasus Array Template and Virtual Base Classes in Provider Heirarchy</h4></a>
       <p>
         I think this bug is pretty well understood among Pegasus
         developers. The problem is in the <code>Array</code> and the way
         it moves elements that are inserted or deleted from to or from
         an existing array. The problem only manifests itself when arrays
         store objects that have a virtual base class, such as
         <code>Provider</code>.
       </p>
       <div class="source">
         <h5><a href="#array_fix">Fix</a> - only store pointers to dynamically allocated objects
           in hashtables - when those objects have a virtual base. </h5>
         <div class="comment">
           <p>
           The source of the problem is in lines <a
           href="#4_line17">17</a> and <a href="#4_line47">47</a>.
           </p>
           <p>
             Classes like <code>Provider</code>, which has a virtual base
             class, stores a pointer to that virtual base class within
             its object. When the <code>Array</code> moves the memory
             upon an insert or delete, it moves the class object but does
             not reinitialize the object's pointer to its virtual
             base. The object is then corrupt because its vtable has a
             bad pointer to the object's virtual base class.
           </p>
           <p>
             The problem is related to indications because the
             <code>IndicationService</code> needs to load Indication
             providers when an indication is enabled. Typically this
             happens after Pegasus is up and running for a while and
             therefore the <code>memmove</code> is more likely to corrupt
             vtables as described above. The <a href="#array_fix">fix</a>
             is below.
           </p>
         </div>
         <!-- code2html add -lcc -N bug_4.h
         --><!-- code2html delete start --><pre><a name="4_line1" href="#4_line1"> 1</a> <font color="#444444">// -*-c++-*-</font>
   <a name="4_line2" href="#4_line2"> 2</a> <font color="0000ff"><strong>#ifndef PEGASUS_ARRAY_T</strong></font>
   <a name="4_line3" href="#4_line3"> 3</a> <strong>template</strong><font color="4444FF">&lt;</font><strong>class</strong> <font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">&gt;</font>
   <a name="4_line4" href="#4_line4"> 4</a> <font color="0000ff"><strong>#endif</strong></font>
   <a name="4_line5" href="#4_line5"> 5</a> <strong>void</strong> <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">&gt;</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">insert</font><font color="4444FF">(</font><font color="#2040a0">Uint32</font> <font color="#2040a0">pos</font>,
   <a name="4_line6" href="#4_line6"> 6</a>                                    <strong>const</strong> <font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">*</font> <font color="#2040a0">x</font>,
   <a name="4_line7" href="#4_line7"> 7</a>                                    <font color="#2040a0">Uint32</font> <font color="#2040a0">size</font><font color="4444FF">)</font>
   <a name="4_line8" href="#4_line8"> 8</a> <font color="4444FF"><strong>{</strong></font>
   <a name="4_line9" href="#4_line9"> 9</a>     <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">pos</font> <font color="4444FF">&gt;</font> <strong>this</strong><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="4_line10" href="#4_line10">10</a>         <font color="#2040a0">ThrowOutOfBounds</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line11" href="#4_line11">11</a>
   <a name="4_line12" href="#4_line12">12</a>     <font color="#2040a0">reserve</font><font color="4444FF">(</font><strong>this</strong><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">size</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line13" href="#4_line13">13</a>
   <a name="4_line14" href="#4_line14">14</a>     <font color="#2040a0">Uint32</font> <font color="#2040a0">n</font> <font color="4444FF">=</font> <strong>this</strong><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">-</font> <font color="#2040a0">pos</font><font color="4444FF">;</font>
   <a name="4_line15" href="#4_line15">15</a>
   <a name="4_line16" href="#4_line16">16</a>     <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">n</font><font color="4444FF">)</font>
   <a name="4_line17" href="#4_line17">17</a>         <font color="#2040a0">memmove</font><font color="4444FF">(</font>
   <a name="4_line18" href="#4_line18">18</a>             <font color="#2040a0">_data</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">pos</font> <font color="4444FF">+</font> <font color="#2040a0">size</font>,
   <a name="4_line19" href="#4_line19">19</a>          <font color="#2040a0">_data</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">pos</font>,
   <a name="4_line20" href="#4_line20">20</a>          <strong>sizeof</strong><font color="4444FF">(</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">)</font> <font color="4444FF">*</font> <font color="#2040a0">n</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line21" href="#4_line21">21</a>
   <a name="4_line22" href="#4_line22">22</a>     <font color="#2040a0">CopyToRaw</font><font color="4444FF">(</font><font color="#2040a0">_data</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">pos</font>, <font color="#2040a0">x</font>, <font color="#2040a0">size</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line23" href="#4_line23">23</a>     <strong>static_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">ArrayRep</font><font color="4444FF">&lt;</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">&gt;</font><font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">_rep</font><font color="4444FF">)</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">size</font> <font color="4444FF">+</font><font color="4444FF">=</font> <font color="#2040a0">size</font><font color="4444FF">;</font>
   <a name="4_line24" href="#4_line24">24</a> <font color="4444FF"><strong>}</strong></font>
   <a name="4_line25" href="#4_line25">25</a>
   <a name="4_line26" href="#4_line26">26</a> <font color="0000ff"><strong>#ifndef PEGASUS_ARRAY_T</strong></font>
   <a name="4_line27" href="#4_line27">27</a> <strong>template</strong><font color="4444FF">&lt;</font><strong>class</strong> <font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">&gt;</font>
   <a name="4_line28" href="#4_line28">28</a> <font color="0000ff"><strong>#endif</strong></font>
   <a name="4_line29" href="#4_line29">29</a> <strong>void</strong> <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">&gt;</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">remove</font><font color="4444FF">(</font><font color="#2040a0">Uint32</font> <font color="#2040a0">pos</font><font color="4444FF">)</font>
   <a name="4_line30" href="#4_line30">30</a> <font color="4444FF"><strong>{</strong></font>
   <a name="4_line31" href="#4_line31">31</a>     <font color="#2040a0">remove</font><font color="4444FF">(</font><font color="#2040a0">pos</font>, <font color="#FF0000">1</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line32" href="#4_line32">32</a> <font color="4444FF"><strong>}</strong></font>
   <a name="4_line33" href="#4_line33">33</a>
   <a name="4_line34" href="#4_line34">34</a> <font color="0000ff"><strong>#ifndef PEGASUS_ARRAY_T</strong></font>
   <a name="4_line35" href="#4_line35">35</a> <strong>template</strong><font color="4444FF">&lt;</font><strong>class</strong> <font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">&gt;</font>
   <a name="4_line36" href="#4_line36">36</a> <font color="0000ff"><strong>#endif</strong></font>
   <a name="4_line37" href="#4_line37">37</a> <strong>void</strong> <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">&gt;</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">remove</font><font color="4444FF">(</font><font color="#2040a0">Uint32</font> <font color="#2040a0">pos</font>, <font color="#2040a0">Uint32</font> <font color="#2040a0">size</font><font color="4444FF">)</font>
   <a name="4_line38" href="#4_line38">38</a> <font color="4444FF"><strong>{</strong></font>
   <a name="4_line39" href="#4_line39">39</a>     <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">pos</font> <font color="4444FF">+</font> <font color="#2040a0">size</font> <font color="4444FF">-</font> <font color="#FF0000">1</font> <font color="4444FF">&gt;</font> <strong>this</strong><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="4_line40" href="#4_line40">40</a>         <font color="#2040a0">ThrowOutOfBounds</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line41" href="#4_line41">41</a>
   <a name="4_line42" href="#4_line42">42</a>     <font color="#2040a0">Destroy</font><font color="4444FF">(</font><font color="#2040a0">_data</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">pos</font>, <font color="#2040a0">size</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line43" href="#4_line43">43</a>
   <a name="4_line44" href="#4_line44">44</a>     <font color="#2040a0">Uint32</font> <font color="#2040a0">rem</font> <font color="4444FF">=</font> <strong>this</strong><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">-</font> <font color="4444FF">(</font><font color="#2040a0">pos</font> <font color="4444FF">+</font> <font color="#2040a0">size</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line45" href="#4_line45">45</a>
   <a name="4_line46" href="#4_line46">46</a>     <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">rem</font><font color="4444FF">)</font>
   <a name="4_line47" href="#4_line47">47</a>         <font color="#2040a0">memmove</font><font color="4444FF">(</font>
   <a name="4_line48" href="#4_line48">48</a>             <font color="#2040a0">_data</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">pos</font>,
   <a name="4_line49" href="#4_line49">49</a>          <font color="#2040a0">_data</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">+</font> <font color="#2040a0">pos</font> <font color="4444FF">+</font> <font color="#2040a0">size</font>,
   <a name="4_line50" href="#4_line50">50</a>          <strong>sizeof</strong><font color="4444FF">(</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">)</font> <font color="4444FF">*</font> <font color="#2040a0">rem</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="4_line51" href="#4_line51">51</a>
   <a name="4_line52" href="#4_line52">52</a>     <strong>static_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">ArrayRep</font><font color="4444FF">&lt;</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">&gt;</font><font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">_rep</font><font color="4444FF">)</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">size</font> <font color="4444FF">-</font><font color="4444FF">=</font> <font color="#2040a0">size</font><font color="4444FF">;</font>
   <a name="4_line53" href="#4_line53">53</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
         <div class="comment">
           <p>
         <a name="array_fix">To fix</a> the problem with
         <code>Array</code> and classes having a virtual base, you must
         store a pointer to the object instead of a reference. An example
         of the fix in the <code>ProviderManager</code> is in <a
         href="#5_line10">lines 10-11</a>, and lines <a
         href="#5_line33">33</a> and <a href="#5_line45">45</a>.
           </p>
           <p>
             These lines cause pointer to <code>Provider</code> objects
             to be stored in the <code>ProviderManager</code>'s hash
             table, instead of the objects themselves. This avoids the
             problem with vtable corruption but requires management of
             dynamically allocated objects.
           </p>
         </div>
         <!-- code2html add -lcc -N bug_5.cpp
         --><!-- code2html delete start --><pre><a name="5_line1" href="#5_line1"> 1</a>
   <a name="5_line2" href="#5_line2"> 2</a> <font color="#2040a0">ProviderModule</font> <font color="4444FF">*</font><font color="#2040a0">module</font><font color="4444FF">;</font>
   <a name="5_line3" href="#5_line3"> 3</a> <strong>if</strong><font color="4444FF">(</font> <strong>false</strong>  <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">_modules</font>.<font color="#2040a0">lookup</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">fileName</font><font color="4444FF">)</font>, <font color="#2040a0">module</font><font color="4444FF">)</font> <font color="4444FF">)</font>
   <a name="5_line4" href="#5_line4"> 4</a> <font color="4444FF"><strong>{</strong></font>
   <a name="5_line5" href="#5_line5"> 5</a>    <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>,
   <a name="5_line6" href="#5_line6"> 6</a>                    <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="5_line7" href="#5_line7"> 7</a>                    <font color="#008000">&quot;Creating Provider Module &quot;</font> <font color="4444FF">+</font>
   <a name="5_line8" href="#5_line8"> 8</a>                    <font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">fileName</font><font color="4444FF">)</font> <font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line9" href="#5_line9"> 9</a>
   <a name="5_line10" href="#5_line10">10</a>    <font color="#2040a0">module</font> <font color="4444FF">=</font> <strong>new</strong> <font color="#2040a0">ProviderModule</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">fileName</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line11" href="#5_line11">11</a>    <font color="#2040a0">_modules</font>.<font color="#2040a0">insert</font><font color="4444FF">(</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">fileName</font><font color="4444FF">)</font>, <font color="#2040a0">module</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line12" href="#5_line12">12</a> <font color="4444FF"><strong>}</strong></font>
   <a name="5_line13" href="#5_line13">13</a> <strong>else</strong>
   <a name="5_line14" href="#5_line14">14</a> <font color="4444FF"><strong>{</strong></font>
   <a name="5_line15" href="#5_line15">15</a>    <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="5_line16" href="#5_line16">16</a>                  <font color="#008000">&quot;Using Cached  Provider Module &quot;</font> <font color="4444FF">+</font>
   <a name="5_line17" href="#5_line17">17</a>                  <font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">fileName</font><font color="4444FF">)</font> <font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line18" href="#5_line18">18</a> <font color="4444FF"><strong>}</strong></font>
   <a name="5_line19" href="#5_line19">19</a>
   <a name="5_line20" href="#5_line20">20</a> <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="5_line21" href="#5_line21">21</a>               <font color="#008000">&quot;Loading/Linking Provider Module &quot;</font> <font color="4444FF">+</font>
   <a name="5_line22" href="#5_line22">22</a>               <font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">fileName</font><font color="4444FF">)</font> <font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line23" href="#5_line23">23</a> <font color="#2040a0">CIMBaseProvider</font> <font color="4444FF">*</font><font color="#2040a0">base</font> <font color="4444FF">=</font> <font color="#2040a0">module</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">load</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">providerName</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line24" href="#5_line24">24</a>
   <a name="5_line25" href="#5_line25">25</a> <font color="#444444">// create provider module</font>
   <a name="5_line26" href="#5_line26">26</a>
   <a name="5_line27" href="#5_line27">27</a> <font color="#2040a0">MessageQueue</font> <font color="4444FF">*</font> <font color="#2040a0">queue</font> <font color="4444FF">=</font> <font color="#2040a0">MessageQueue</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">lookup</font><font color="4444FF">(</font>
   <a name="5_line28" href="#5_line28">28</a>    <font color="#2040a0">PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line29" href="#5_line29">29</a> <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">queue</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line30" href="#5_line30">30</a> <font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font> <font color="#2040a0">service</font> <font color="4444FF">=</font>
   <a name="5_line31" href="#5_line31">31</a>    <strong>dynamic_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">queue</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line32" href="#5_line32">32</a> <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">service</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line33" href="#5_line33">33</a> <font color="#2040a0">pr</font> <font color="4444FF">=</font> <strong>new</strong> <font color="#2040a0">Provider</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">providerName</font><font color="4444FF">)</font>, <font color="#2040a0">module</font>, <font color="#2040a0">base</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line34" href="#5_line34">34</a> <strong>if</strong><font color="4444FF">(</font><font color="#FF0000">0</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_cimom_handle</font> <font color="4444FF">=</font>  <strong>new</strong> <font color="#2040a0">CIMOMHandle</font><font color="4444FF">(</font><font color="#2040a0">service</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="5_line35" href="#5_line35">35</a>    <strong>throw</strong> <font color="#2040a0">NullPointer</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line36" href="#5_line36">36</a>
   <a name="5_line37" href="#5_line37">37</a> <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL2</font>,
   <a name="5_line38" href="#5_line38">38</a>               <font color="#008000">&quot;Loading Provider &quot;</font> <font color="4444FF">+</font>  <font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_name</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line39" href="#5_line39">39</a>
   <a name="5_line40" href="#5_line40">40</a> <font color="#2040a0">PEGASUS_STD</font><font color="4444FF">(</font><font color="#2040a0">cout</font><font color="4444FF">)</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;Loading Provider &quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font>
   <a name="5_line41" href="#5_line41">41</a>    <font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_name</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">PEGASUS_STD</font><font color="4444FF">(</font><font color="#2040a0">endl</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line42" href="#5_line42">42</a>
   <a name="5_line43" href="#5_line43">43</a> <font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">initialize</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_cimom_handle</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line44" href="#5_line44">44</a> <font color="#2040a0">gettimeofday</font><font color="4444FF">(</font><font color="4444FF">&amp;</font><font color="4444FF">(</font><font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_timeout</font><font color="4444FF">)</font>, <font color="#2040a0">NULL</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="5_line45" href="#5_line45">45</a> <font color="#2040a0">_providers</font>.<font color="#2040a0">insert</font><font color="4444FF">(</font><font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">parms</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">providerName</font><font color="4444FF">)</font>, <font color="#2040a0">pr</font><font color="4444FF">)</font><font color="4444FF">;</font>
   </pre><!-- code2html delete stop -->
       </div>
   <a name="bug_5">
   <h4>Double Deletes in Redirected Message Pathways</h4></a>
       <p>
         There were a couple of double deletes of
         <code>asyncOpNodes</code> in message paths that were two or
         three steps removed from the shortest path. These were in
         code that had never been exersized.
       </p>
   
   
       <h4>Untested code</h4>
       <p>
         The <code>IndicationService</code>, the
         <code>IndicationHandlerService</code>,
         and the <code>ProviderRegistrationManager</code> each contained
         code paths that were untested. Really, they were blocked from
         running successfully due to <i>elusive bugs</i> (see above).
       </p>
       <p>
         In the case of the <code>ProviderRegistrationManager</code>, most of
         that code was tested so I only needed to step through a few
         cases.
       </p>
       <p>
         Most of the <code>IndicationService</code> and <i>all</i> of
         the <code>IndicationHandler</code> were untested to my knowledge
         and they each comprise a lot of code.
       </p>
   
   
       <a name="indication_consumer">
         <h3>Indication Consumer Support Code</h3></a>
       <p>
         Chip Vincent defined the <code>CIMIndicationConsumer</code>
         interface during the definition of the original C++ provider
         manager. It is not used in the Open Group CVS right now, but I
         use it to support Indication handling.
       </p>
       <div class="source">
         <!-- code2html add -lcc -N src/Pegasus/Provider/CIMIndicationConsumer.h
         --><!-- code2html delete start --><pre><a name="6_line1" href="#6_line1"> 1</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////////////////</font>
   <a name="6_line2" href="#6_line2"> 2</a> <font color="#444444">//</font>
   <a name="6_line3" href="#6_line3"> 3</a> <font color="#444444">// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,</font>
   <a name="6_line4" href="#6_line4"> 4</a> <font color="#444444">// The Open Group, Tivoli Systems</font>
   <a name="6_line5" href="#6_line5"> 5</a> <font color="#444444">//</font>
   <a name="6_line6" href="#6_line6"> 6</a> <font color="#444444">// Permission is hereby granted, free of charge, to any person obtaining a copy</font>
   <a name="6_line7" href="#6_line7"> 7</a> <font color="#444444">// of this software and associated documentation files (the &quot;Software&quot;), to</font>
   <a name="6_line8" href="#6_line8"> 8</a> <font color="#444444">// deal in the Software without restriction, including without limitation the</font>
   <a name="6_line9" href="#6_line9"> 9</a> <font color="#444444">// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</font>
   <a name="6_line10" href="#6_line10">10</a> <font color="#444444">// sell copies of the Software, and to permit persons to whom the Software is</font>
   <a name="6_line11" href="#6_line11">11</a> <font color="#444444">// furnished to do so, subject to the following conditions:</font>
   <a name="6_line12" href="#6_line12">12</a> <font color="#444444">//</font>
   <a name="6_line13" href="#6_line13">13</a> <font color="#444444">// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN</font>
   <a name="6_line14" href="#6_line14">14</a> <font color="#444444">// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED</font>
   <a name="6_line15" href="#6_line15">15</a> <font color="#444444">// &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT</font>
   <a name="6_line16" href="#6_line16">16</a> <font color="#444444">// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR</font>
   <a name="6_line17" href="#6_line17">17</a> <font color="#444444">// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</font>
   <a name="6_line18" href="#6_line18">18</a> <font color="#444444">// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</font>
   <a name="6_line19" href="#6_line19">19</a> <font color="#444444">// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION</font>
   <a name="6_line20" href="#6_line20">20</a> <font color="#444444">// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</font>
   <a name="6_line21" href="#6_line21">21</a> <font color="#444444">//</font>
   <a name="6_line22" href="#6_line22">22</a> <font color="#444444">//==============================================================================</font>
   <a name="6_line23" href="#6_line23">23</a> <font color="#444444">//</font>
   <a name="6_line24" href="#6_line24">24</a> <font color="#444444">// Author: Chip Vincent (cvincent@us.ibm.com)</font>
   <a name="6_line25" href="#6_line25">25</a> <font color="#444444">//</font>
   <a name="6_line26" href="#6_line26">26</a> <font color="#444444">// Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)</font>
   <a name="6_line27" href="#6_line27">27</a> <font color="#444444">//</font>
   <a name="6_line28" href="#6_line28">28</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////////////////</font>
   <a name="6_line29" href="#6_line29">29</a>
   <a name="6_line30" href="#6_line30">30</a> <font color="0000ff"><strong>#ifndef Pegasus_CIMIndicationConsumer_h</strong></font>
   <a name="6_line31" href="#6_line31">31</a> <font color="0000ff"><strong>#define Pegasus_CIMIndicationConsumer_h</strong></font>
   <a name="6_line32" href="#6_line32">32</a>
   <a name="6_line33" href="#6_line33">33</a> <font color="0000ff"><strong>#include <font color="#008000">&lt;Pegasus/Common/Config.h&gt;</font></strong></font>
   <a name="6_line34" href="#6_line34">34</a> <font color="0000ff"><strong>#include <font color="#008000">&lt;Pegasus/Provider/CIMBaseProvider.h&gt;</font></strong></font>
   <a name="6_line35" href="#6_line35">35</a>
   <a name="6_line36" href="#6_line36">36</a> <font color="0000ff"><strong>#include <font color="#008000">&lt;Pegasus/Common/CIMInstance.h&gt;</font></strong></font>
   <a name="6_line37" href="#6_line37">37</a>
   <a name="6_line38" href="#6_line38">38</a> <font color="#2040a0">PEGASUS_NAMESPACE_BEGIN</font>
   <a name="6_line39" href="#6_line39">39</a>
   <a name="6_line40" href="#6_line40">40</a> <font color="#444444"><i>/**
   <a name="6_line41" href="#6_line41">41</a> This class defines the set of methods implemented by an indication consumer provider.
   <a name="6_line42" href="#6_line42">42</a> A providers that derives from this class must implement all methods. The minimal method
   <a name="6_line43" href="#6_line43">43</a> implementation simply throw the NotSupported exception.
   <a name="6_line44" href="#6_line44">44</a> */</i></font>
   <a name="6_line45" href="#6_line45">45</a> <strong>class</strong> <font color="#2040a0">PEGASUS_PROVIDER_LINKAGE</font> <font color="#2040a0">CIMIndicationConsumer</font> <font color="4444FF">:</font> <strong>public</strong> <strong>virtual</strong> <font color="#2040a0">CIMBaseProvider</font>
   <a name="6_line46" href="#6_line46">46</a> <font color="4444FF"><strong>{</strong></font>
   <a name="6_line47" href="#6_line47">47</a> <strong>public</strong><font color="4444FF">:</font>
   <a name="6_line48" href="#6_line48">48</a>     <font color="#2040a0">CIMIndicationConsumer</font><font color="4444FF">(</font><strong>void</strong><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="6_line49" href="#6_line49">49</a>     <strong>virtual</strong> ~<font color="#2040a0">CIMIndicationConsumer</font><font color="4444FF">(</font><strong>void</strong><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="6_line50" href="#6_line50">50</a>
   <a name="6_line51" href="#6_line51">51</a>     <font color="#444444"><i>/**
   <a name="6_line52" href="#6_line52">52</a>     @param contex contains security and locale information relevant for the lifetime
   <a name="6_line53" href="#6_line53">53</a>     of this operation.
   <a name="6_line54" href="#6_line54">54</a>
   <a name="6_line55" href="#6_line55">55</a>     @param indication
   <a name="6_line56" href="#6_line56">56</a>
   <a name="6_line57" href="#6_line57">57</a>     @param handler asynchronusly processes the results of this operation.
   <a name="6_line58" href="#6_line58">58</a>
   <a name="6_line59" href="#6_line59">59</a>     @exception NotSupported
   <a name="6_line60" href="#6_line60">60</a>     @exception InvalidParameter
   <a name="6_line61" href="#6_line61">61</a>     */</i></font>
   <a name="6_line62" href="#6_line62">62</a>     <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">handleIndication</font><font color="4444FF">(</font>
   <a name="6_line63" href="#6_line63">63</a>      <strong>const</strong> <font color="#2040a0">OperationContext</font> <font color="4444FF">&amp;</font> <font color="#2040a0">context</font>,
   <a name="6_line64" href="#6_line64">64</a>      <strong>const</strong> <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">indication</font>,
   <a name="6_line65" href="#6_line65">65</a>      <font color="#2040a0">ResponseHandler</font><font color="4444FF">&lt;</font><strong>void</strong><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">handler</font><font color="4444FF">)</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>
   <a name="6_line66" href="#6_line66">66</a>
   <a name="6_line67" href="#6_line67">67</a>     <font color="#444444">// ATTN: The following method is only for testing purposes.</font>
   <a name="6_line68" href="#6_line68">68</a>     <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">handleIndication</font><font color="4444FF">(</font>
   <a name="6_line69" href="#6_line69">69</a>      <strong>const</strong> <font color="#2040a0">OperationContext</font> <font color="4444FF">&amp;</font> <font color="#2040a0">context</font>,
   <a name="6_line70" href="#6_line70">70</a>      <strong>const</strong> <font color="#2040a0">String</font> <font color="4444FF">&amp;</font> <font color="#2040a0">url</font>,
   <a name="6_line71" href="#6_line71">71</a>      <strong>const</strong> <font color="#2040a0">CIMInstance</font><font color="4444FF">&amp;</font> <font color="#2040a0">indicationInstance</font><font color="4444FF">)</font>
   <a name="6_line72" href="#6_line72">72</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="6_line73" href="#6_line73">73</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="6_line74" href="#6_line74">74</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="6_line75" href="#6_line75">75</a>
   <a name="6_line76" href="#6_line76">76</a> <font color="#2040a0">PEGASUS_NAMESPACE_END</font>
   <a name="6_line77" href="#6_line77">77</a>
   <a name="6_line78" href="#6_line78">78</a> <font color="0000ff"><strong>#endif</strong></font>
   </pre><!-- code2html delete stop -->
       </div>
       <a name="provider_schema_mods">
       <h3>Provider Schema Modifications</h3></a>
       <p>
         I derived the <code>eServer_ProviderModule</code> schema from
         the <code>PG_ProviderModule</code> schema that we are using. I
         only made a three additions. I
         <a href="#7_line161">added the new provider type</a>; I added
         <a href="#7_line39"> some new provider interface types</a> (looking ahead);
         and I <a href="#7_line87">added the <code>OperationalStatus</code>
           attributes</a> to the provider. This last is important because providers
         are now handling indications.
       </p>
       <div class="source">
         <!-- code2html add -lcc -N Schemas/Pegasus/InterOp/VER20/eServer_ProviderModule20.mof
         --><!-- code2html delete start --><pre><a name="7_line1" href="#7_line1">  1</a> <font color="#444444">//=================================================================</font>
   <a name="7_line2" href="#7_line2">  2</a> <font color="#444444">// eServer_ProviderModule</font>
   <a name="7_line3" href="#7_line3">  3</a> <font color="#444444">//</font>
   <a name="7_line4" href="#7_line4">  4</a> <font color="#444444">// This schema is derived from PG_ProviderModule. It adds some </font>
   <a name="7_line5" href="#7_line5">  5</a> <font color="#444444">// qualifiers to support remote and out-of-proc providers.</font>
   <a name="7_line6" href="#7_line6">  6</a> <font color="#444444">// It also defines some new provider types. </font>
   <a name="7_line7" href="#7_line7">  7</a> <font color="#444444">//</font>
   <a name="7_line8" href="#7_line8">  8</a> <font color="#444444">//=================================================================</font>
   <a name="7_line9" href="#7_line9">  9</a>
   <a name="7_line10" href="#7_line10"> 10</a> <font color="#444444">// Named (meta) elements:</font>
   <a name="7_line11" href="#7_line11"> 11</a> <font color="#444444">// Class, Property, Method, Association, Reference, Property, Parameter, </font>
   <a name="7_line12" href="#7_line12"> 12</a> <font color="#444444">// Indication, Schema, Trigger</font>
   <a name="7_line13" href="#7_line13"> 13</a>
   <a name="7_line14" href="#7_line14"> 14</a> <font color="0000ff"><strong>#pragma local (<font color="#008000">&quot;en_US&quot;</font>)</strong></font>
   <a name="7_line15" href="#7_line15"> 15</a>
   <a name="7_line16" href="#7_line16"> 16</a> <font color="#2040a0">Qualifier</font> <font color="#2040a0">Remote</font> <font color="4444FF">:</font> <font color="#2040a0">boolean</font> <font color="4444FF">=</font> <strong>false</strong> , <font color="#2040a0">Scope</font><font color="4444FF">(</font><strong>class</strong>, <font color="#2040a0">reference</font>, <font color="#2040a0">property</font>, <font color="#2040a0">method</font><font color="4444FF">)</font> <font color="4444FF">;</font>
   <a name="7_line17" href="#7_line17"> 17</a> <font color="#2040a0">Qualifier</font> <font color="#2040a0">Out_of_Proc</font> <font color="4444FF">:</font> <font color="#2040a0">boolean</font> <font color="4444FF">=</font> <strong>false</strong>, <font color="#2040a0">Scope</font><font color="4444FF">(</font><strong>class</strong>, <font color="#2040a0">reference</font>, <font color="#2040a0">property</font>, <font color="#2040a0">method</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="7_line18" href="#7_line18"> 18</a> <font color="#2040a0">Qualifier</font> <font color="#2040a0">Trusted</font> <font color="4444FF">:</font> <font color="#2040a0">boolean</font> <font color="4444FF">=</font> <strong>false</strong>, <font color="#2040a0">Scope</font><font color="4444FF">(</font><strong>class</strong>, <font color="#2040a0">reference</font>, <font color="#2040a0">property</font>, <font color="#2040a0">method</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="7_line19" href="#7_line19"> 19</a> <font color="#2040a0">Qualifier</font> <font color="#2040a0">isURL</font> <font color="4444FF">:</font> <font color="#2040a0">boolean</font> <font color="4444FF">=</font> <strong>false</strong>, <font color="#2040a0">Scope</font><font color="4444FF">(</font><font color="#2040a0">reference</font>, <font color="#2040a0">property</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="7_line20" href="#7_line20"> 20</a>
   <a name="7_line21" href="#7_line21"> 21</a> <font color="#444444">//=================================================================</font>
   <a name="7_line22" href="#7_line22"> 22</a> <font color="#444444">// eServer_ProviderModule</font>
   <a name="7_line23" href="#7_line23"> 23</a> <font color="#444444">//=================================================================</font>
   <a name="7_line24" href="#7_line24"> 24</a>
   <a name="7_line25" href="#7_line25"> 25</a> <font color="4444FF">[</font><font color="#2040a0">Version</font><font color="4444FF">(</font><font color="#008000">&quot;2.0.0.&quot;</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;Derived from PG_ProviderModule &quot;</font>
   <a name="7_line26" href="#7_line26"> 26</a>     <font color="#008000">&quot;modified to support additional provider types and additional &quot;</font>
   <a name="7_line27" href="#7_line27"> 27</a>     <font color="#008000">&quot;provider qualifications. &quot;</font><font color="4444FF">)</font><font color="4444FF">]</font>
   <a name="7_line28" href="#7_line28"> 28</a> <strong>class</strong> <font color="#2040a0">eServer_ProviderModule</font> <font color="4444FF">:</font> <font color="#2040a0">PG_ProviderModule</font> <font color="4444FF"><strong>{</strong></font>
   <a name="7_line29" href="#7_line29"> 29</a>     <font color="4444FF">[</font><font color="#2040a0">Key</font>, <font color="#2040a0">Override</font><font color="4444FF">(</font><font color="#008000">&quot;Name&quot;</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;A human-readable name that uniquely &quot;</font>
   <a name="7_line30" href="#7_line30"> 30</a>             <font color="#008000">&quot;identifies the Provider Module, inherited from PG_ProviderModule.&quot;</font><font color="4444FF">)</font><font color="4444FF">]</font>
   <a name="7_line31" href="#7_line31"> 31</a>     <font color="#2040a0">string</font> <font color="#2040a0">Name</font><font color="4444FF">;</font>
   <a name="7_line32" href="#7_line32"> 32</a>
   <a name="7_line33" href="#7_line33"> 33</a>     <font color="4444FF">[</font> <font color="#2040a0">Override</font><font color="4444FF">(</font><font color="#008000">&quot;Location&quot;</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;The file path to the module. &quot;</font>
   <a name="7_line34" href="#7_line34"> 34</a>             <font color="#008000">&quot; If the usURL qualifier is present, indicates that the &quot;</font>
   <a name="7_line35" href="#7_line35"> 35</a>             <font color="#008000">&quot;path is a URL. Otherwise the path is a string that represents &quot;</font>
   <a name="7_line36" href="#7_line36"> 36</a>             <font color="#008000">&quot; the location of the module in the local host's file system.&quot;</font><font color="4444FF">)</font> <font color="4444FF">]</font>
   <a name="7_line37" href="#7_line37"> 37</a>     <font color="#2040a0">string</font> <font color="#2040a0">Location</font><font color="4444FF">;</font>
   <a name="7_line38" href="#7_line38"> 38</a>
   <a name="7_line39" href="#7_line39"> 39</a>     <font color="4444FF">[</font> <font color="#2040a0">Override</font><font color="4444FF">(</font><font color="#008000">&quot;InterfaceType&quot;</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font> <font color="4444FF">(</font><font color="#008000">&quot;The interface definition &quot;</font>
   <a name="7_line40" href="#7_line40"> 40</a>             <font color="#008000">&quot;supported by this module. Implies both a method signature and &quot;</font>
   <a name="7_line41" href="#7_line41"> 41</a>             <font color="#008000">&quot; a binary specification for linking to the module and executing its code. &quot;</font>
   <a name="7_line42" href="#7_line42"> 42</a>             <font color="#008000">&quot;In Pegasus 2.01 the InterfaceType also implies a specific &quot;</font>
   <a name="7_line43" href="#7_line43"> 43</a>             <font color="#008000">&quot;ProviderManagerService, although this link will be broken in the &quot;</font>
   <a name="7_line44" href="#7_line44"> 44</a>             <font color="#008000">&quot;future. &quot;</font><font color="4444FF">)</font>,
   <a name="7_line45" href="#7_line45"> 45</a>             <font color="#2040a0">Values</font> <font color="4444FF"><strong>{</strong></font><font color="#008000">&quot;C++Default&quot;</font>, <font color="#008000">&quot;CMPI&quot;</font>, <font color="#008000">&quot;Java_Default&quot;</font>, <font color="#008000">&quot;Java_SNIA&quot;</font>,
   <a name="7_line46" href="#7_line46"> 46</a>                     <font color="#008000">&quot;Java_Wbem_Services&quot;</font>, <font color="#008000">&quot;Perl&quot;</font>, <font color="#008000">&quot;Unix_Domain&quot;</font>,
   <a name="7_line47" href="#7_line47"> 47</a>                     <font color="#008000">&quot;Named_Pipe&quot;</font>, <font color="#008000">&quot;WSDL_SOAP&quot;</font><font color="4444FF"><strong>}</strong></font><font color="4444FF">]</font>
   <a name="7_line48" href="#7_line48"> 48</a>     <font color="#2040a0">string</font> <font color="#2040a0">InterfaceType</font><font color="4444FF">;</font>
   <a name="7_line49" href="#7_line49"> 49</a>
   <a name="7_line50" href="#7_line50"> 50</a>     <font color="4444FF">[</font> <font color="#2040a0">Description</font> <font color="4444FF">(</font><font color="#008000">&quot;The host of the computer upon which this module resides. &quot;</font>
   <a name="7_line51" href="#7_line51"> 51</a>             <font color="#008000">&quot;For local providers this will be <font color="#77dd77">\&quot;</font>localhost<font color="#77dd77">\&quot;</font>. For remote &quot;</font>
   <a name="7_line52" href="#7_line52"> 52</a>             <font color="#008000">&quot;providers this property should contain the DNS name of the &quot;</font>
   <a name="7_line53" href="#7_line53"> 53</a>             <font color="#008000">&quot;remote host. &quot;</font><font color="4444FF">)</font> <font color="4444FF">]</font>
   <a name="7_line54" href="#7_line54"> 54</a>     <font color="#2040a0">string</font> <font color="#2040a0">host</font><font color="4444FF">;</font>
   <a name="7_line55" href="#7_line55"> 55</a>
   <a name="7_line56" href="#7_line56"> 56</a>     <font color="4444FF">[</font> <font color="#2040a0">Description</font> <font color="4444FF">(</font><font color="#008000">&quot;The PGP Signature of the module's file. &quot;</font>
   <a name="7_line57" href="#7_line57"> 57</a>             <font color="#008000">&quot;The provider manager or any other module can use this &quot;</font>
   <a name="7_line58" href="#7_line58"> 58</a>             <font color="#008000">&quot; signature to determine the authenticity if the module &quot;</font>
   <a name="7_line59" href="#7_line59"> 59</a>             <font color="#008000">&quot; and the integrity of the module's image. &quot;</font><font color="4444FF">)</font><font color="4444FF">]</font>
   <a name="7_line60" href="#7_line60"> 60</a>     <font color="#2040a0">string</font> <font color="#2040a0">pgp_Signature</font><font color="4444FF">;</font>
   <a name="7_line61" href="#7_line61"> 61</a>
   <a name="7_line62" href="#7_line62"> 62</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="7_line63" href="#7_line63"> 63</a>
   <a name="7_line64" href="#7_line64"> 64</a>
   <a name="7_line65" href="#7_line65"> 65</a> <font color="#444444">//=================================================================</font>
   <a name="7_line66" href="#7_line66"> 66</a> <font color="#444444">// eServer_Provider</font>
   <a name="7_line67" href="#7_line67"> 67</a> <font color="#444444">// </font>
   <a name="7_line68" href="#7_line68"> 68</a> <font color="#444444">// Derived from the PG_Provider class. The operational status </font>
   <a name="7_line69" href="#7_line69"> 69</a> <font color="#444444">// properties from PG_ProviderModule are present in the eServer_Provider</font>
   <a name="7_line70" href="#7_line70"> 70</a> <font color="#444444">// class. This is to recognize that providers may have operational </font>
   <a name="7_line71" href="#7_line71"> 71</a> <font color="#444444">// states that are distinct from the states of their modules.</font>
   <a name="7_line72" href="#7_line72"> 72</a> <font color="#444444">//</font>
   <a name="7_line73" href="#7_line73"> 73</a> <font color="#444444">//=================================================================</font>
   <a name="7_line74" href="#7_line74"> 74</a>
   <a name="7_line75" href="#7_line75"> 75</a> <font color="4444FF">[</font> <font color="#2040a0">Version</font><font color="4444FF">(</font><font color="#008000">&quot;2.0.0&quot;</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;eServer_Provider is derived from &quot;</font>
   <a name="7_line76" href="#7_line76"> 76</a>     <font color="#008000">&quot;PG_Provider. &quot;</font><font color="4444FF">)</font> <font color="4444FF">]</font>
   <a name="7_line77" href="#7_line77"> 77</a>
   <a name="7_line78" href="#7_line78"> 78</a> <strong>class</strong> <font color="#2040a0">eServer_Provider</font> <font color="4444FF">:</font> <font color="#2040a0">PG_Provider</font> <font color="4444FF"><strong>{</strong></font>
   <a name="7_line79" href="#7_line79"> 79</a>     <font color="4444FF">[</font><font color="#2040a0">Key</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;The scoping eServer_ProviderModule name. &quot;</font>
   <a name="7_line80" href="#7_line80"> 80</a>             <font color="#008000">&quot;Inherited as a propagated key from PG_Provider, having &quot;</font>
   <a name="7_line81" href="#7_line81"> 81</a>             <font color="#008000">&quot;the syntax PG_ProviderModule.name&quot;</font><font color="4444FF">)</font><font color="4444FF">]</font>
   <a name="7_line82" href="#7_line82"> 82</a>     <font color="#2040a0">string</font> <font color="#2040a0">ProviderModuleName</font><font color="4444FF">;</font>
   <a name="7_line83" href="#7_line83"> 83</a>     <font color="4444FF">[</font><font color="#2040a0">Key</font>, <font color="#2040a0">Override</font><font color="4444FF">(</font><font color="#008000">&quot;Name&quot;</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;A human-readable name that:
   <a name="7_line84" href="#7_line84"> 84</a>             &quot;</font><font color="#2040a0">uniquely</font> <font color="#2040a0">identifies</font> <font color="#2040a0">the</font> <font color="#2040a0">provider</font> <font color="#2040a0">within</font> <font color="#2040a0">the</font> <font color="#2040a0">Provider</font> <font color="#2040a0">Module</font>.<font color="#008000">&quot;
   <a name="7_line85" href="#7_line85"> 85</a>             &quot;</font><font color="#2040a0">Inherited</font> <font color="#2040a0">from</font> <font color="#2040a0">PG_Provider</font>.<font color="#008000">&quot;)]
   <a name="7_line86" href="#7_line86"> 86</a>     string Name;
   <a name="7_line87" href="#7_line87"> 87</a>       [Description (
   <a name="7_line88" href="#7_line88"> 88</a>         &quot;</font>   <font color="#2040a0">Indicates</font> <font color="#2040a0">the</font> <font color="#2040a0">current</font> <font color="#2040a0">status</font><font color="4444FF">(</font><font color="#2040a0">es</font><font color="4444FF">)</font> <font color="#2040a0">of</font> <font color="#2040a0">the</font> <font color="#2040a0">element</font>. <font color="#008000">&quot;
   <a name="7_line89" href="#7_line89"> 89</a>         &quot;</font><font color="#2040a0">Various</font> <font color="#2040a0">health</font> <font color="#2040a0">and</font> <font color="#2040a0">operational</font> <font color="#2040a0">statuses</font> <font color="#2040a0">are</font> <font color="#008000">&quot;
   <a name="7_line90" href="#7_line90"> 90</a>         &quot;</font><font color="#2040a0">defined</font>. <font color="#2040a0">Many</font> <font color="#2040a0">of</font> <font color="#2040a0">the</font> <font color="#2040a0">enumeration</font>'<font color="#2040a0">s</font> <font color="#2040a0">values</font> <font color="#2040a0">are</font> <font color="#2040a0">self</font><font color="4444FF">-</font><font color="#008000">&quot;
   <a name="7_line91" href="#7_line91"> 91</a>         &quot;</font><font color="#2040a0">explanatory</font>.  <font color="#2040a0">However</font>, <font color="#2040a0">a</font> <font color="#2040a0">few</font> <font color="#2040a0">are</font> <font color="#2040a0">not</font> <font color="#2040a0">and</font> <font color="#2040a0">are</font> <font color="#2040a0">described</font> <font color="#008000">&quot;
   <a name="7_line92" href="#7_line92"> 92</a>         &quot;</font><font color="#2040a0">in</font> <font color="#2040a0">more</font> <font color="#2040a0">detail</font>. \<font color="#008000">&quot;Stressed<font color="#77dd77">\&quot;</font> indicates that the element &quot;</font>
   <a name="7_line93" href="#7_line93"> 93</a>         <font color="#008000">&quot;is functioning, but needs attention. Examples of &quot;</font>
   <a name="7_line94" href="#7_line94"> 94</a>         <font color="#008000">&quot;<font color="#77dd77">\&quot;</font>Stressed<font color="#77dd77">\&quot;</font> states are overload, overheated, etc. &quot;</font>
   <a name="7_line95" href="#7_line95"> 95</a>         <font color="#008000">&quot;<font color="#77dd77">\&quot;</font>Predictive Failure<font color="#77dd77">\&quot;</font> indicates that an element is &quot;</font>
   <a name="7_line96" href="#7_line96"> 96</a>         <font color="#008000">&quot;functioning nominally but predicting a failure in the &quot;</font>
   <a name="7_line97" href="#7_line97"> 97</a>         <font color="#008000">&quot;near future. <font color="#77dd77">\&quot;</font>In Service<font color="#77dd77">\&quot;</font> describes an element being &quot;</font>
   <a name="7_line98" href="#7_line98"> 98</a>         <font color="#008000">&quot;configured, maintained, cleaned, or otherwise administered. &quot;</font>
   <a name="7_line99" href="#7_line99"> 99</a>         <font color="#008000">&quot;<font color="#77dd77">\&quot;</font>No Contact<font color="#77dd77">\&quot;</font> indicates that the monitoring system &quot;</font>
   <a name="7_line100" href="#7_line100">100</a>         <font color="#008000">&quot;has knowledge of this element, but has never been able to &quot;</font>
   <a name="7_line101" href="#7_line101">101</a>         <font color="#008000">&quot;establish communications with it. <font color="#77dd77">\&quot;</font>Lost Communication<font color="#77dd77">\&quot;</font> &quot;</font>
   <a name="7_line102" href="#7_line102">102</a>         <font color="#008000">&quot;indicates that the ManagedSystemElement is known to exist &quot;</font>
   <a name="7_line103" href="#7_line103">103</a>         <font color="#008000">&quot;and has been contacted successfully in the past, but is &quot;</font>
   <a name="7_line104" href="#7_line104">104</a>         <font color="#008000">&quot;currently unreachable. <font color="#77dd77">\&quot;</font>Stopped<font color="#77dd77">\&quot;</font> indicates that the &quot;</font>
   <a name="7_line105" href="#7_line105">105</a>         <font color="#008000">&quot;element is known to exist, is not operational (e.g., it &quot;</font>
   <a name="7_line106" href="#7_line106">106</a>         <font color="#008000">&quot;is unable to provide service to users), but it has not &quot;</font>
   <a name="7_line107" href="#7_line107">107</a>         <font color="#008000">&quot;failed. It has purposely been made non-operational. <font color="#77dd77">\n</font>&quot;</font>
   <a name="7_line108" href="#7_line108">108</a>         <font color="#008000">&quot;  OperationalStatus replaces the Status property on &quot;</font>
   <a name="7_line109" href="#7_line109">109</a>         <font color="#008000">&quot;ManagedSystemElement to provide a consistent approach to &quot;</font>
   <a name="7_line110" href="#7_line110">110</a>         <font color="#008000">&quot;enumerations, to address implementation needs for an &quot;</font>
   <a name="7_line111" href="#7_line111">111</a>         <font color="#008000">&quot;array property, and to provide a migration path from today's &quot;</font>
   <a name="7_line112" href="#7_line112">112</a>         <font color="#008000">&quot;environment to the future. This change was not made earlier &quot;</font>
   <a name="7_line113" href="#7_line113">113</a>         <font color="#008000">&quot;since it required the DEPRECATED qualifier. Due to the &quot;</font>
   <a name="7_line114" href="#7_line114">114</a>         <font color="#008000">&quot;widespread use of the existing Status property in &quot;</font>
   <a name="7_line115" href="#7_line115">115</a>         <font color="#008000">&quot;management applications, it is strongly recommended that &quot;</font>
   <a name="7_line116" href="#7_line116">116</a>         <font color="#008000">&quot;providers/instrumentation provide BOTH the Status and &quot;</font>
   <a name="7_line117" href="#7_line117">117</a>         <font color="#008000">&quot;OperationalStatus properties. As always, Status (since it &quot;</font>
   <a name="7_line118" href="#7_line118">118</a>         <font color="#008000">&quot;is single-valued) provides the primary status of the &quot;</font>
   <a name="7_line119" href="#7_line119">119</a>         <font color="#008000">&quot;element.&quot;</font><font color="4444FF">)</font>,
   <a name="7_line120" href="#7_line120">120</a>        <font color="#2040a0">ValueMap</font> <font color="4444FF"><strong>{</strong></font><font color="#008000">&quot;0&quot;</font>, <font color="#008000">&quot;1&quot;</font>, <font color="#008000">&quot;2&quot;</font>, <font color="#008000">&quot;3&quot;</font>, <font color="#008000">&quot;4&quot;</font>, <font color="#008000">&quot;5&quot;</font>, <font color="#008000">&quot;6&quot;</font>, <font color="#008000">&quot;7&quot;</font>, <font color="#008000">&quot;8&quot;</font>,
   <a name="7_line121" href="#7_line121">121</a>              <font color="#008000">&quot;9&quot;</font>, <font color="#008000">&quot;10&quot;</font>, <font color="#008000">&quot;11&quot;</font>, <font color="#008000">&quot;12&quot;</font>, <font color="#008000">&quot;13&quot;</font><font color="4444FF"><strong>}</strong></font>,
   <a name="7_line122" href="#7_line122">122</a>        <font color="#2040a0">Values</font> <font color="4444FF"><strong>{</strong></font><font color="#008000">&quot;Unknown&quot;</font>, <font color="#008000">&quot;Other&quot;</font>, <font color="#008000">&quot;OK&quot;</font>, <font color="#008000">&quot;Degraded&quot;</font>, <font color="#008000">&quot;Stressed&quot;</font>,
   <a name="7_line123" href="#7_line123">123</a>              <font color="#008000">&quot;Predictive Failure&quot;</font>, <font color="#008000">&quot;Error&quot;</font>, <font color="#008000">&quot;Non-Recoverable Error&quot;</font>,
   <a name="7_line124" href="#7_line124">124</a>              <font color="#008000">&quot;Starting&quot;</font>, <font color="#008000">&quot;Stopping&quot;</font>, <font color="#008000">&quot;Stopped&quot;</font>, <font color="#008000">&quot;In Service&quot;</font>,
   <a name="7_line125" href="#7_line125">125</a>              <font color="#008000">&quot;No Contact&quot;</font>, <font color="#008000">&quot;Lost Communication&quot;</font><font color="4444FF"><strong>}</strong></font>,
   <a name="7_line126" href="#7_line126">126</a>        <font color="#2040a0">ModelCorrespondence</font> <font color="4444FF"><strong>{</strong></font>
   <a name="7_line127" href="#7_line127">127</a>         <font color="#008000">&quot;CIM_ManagedSystemElement.OtherStatusDescription&quot;</font><font color="4444FF"><strong>}</strong></font> <font color="4444FF">]</font>
   <a name="7_line128" href="#7_line128">128</a>     <font color="#2040a0">uint16</font> <font color="#2040a0">OperationalStatus</font><font color="4444FF">[</font><font color="4444FF">]</font><font color="4444FF">;</font>
   <a name="7_line129" href="#7_line129">129</a>       <font color="4444FF">[</font><font color="#2040a0">Description</font> <font color="4444FF">(</font>
   <a name="7_line130" href="#7_line130">130</a>         <font color="#008000">&quot;A string describing the status - used when the &quot;</font>
   <a name="7_line131" href="#7_line131">131</a>         <font color="#008000">&quot;OperationalStatus property is set to 1 (<font color="#77dd77">\&quot;</font>Other<font color="#77dd77">\&quot;</font>).&quot;</font><font color="4444FF">)</font>,
   <a name="7_line132" href="#7_line132">132</a>        <font color="#2040a0">ModelCorrespondence</font> <font color="4444FF"><strong>{</strong></font>
   <a name="7_line133" href="#7_line133">133</a>         <font color="#008000">&quot;CIM_ManagedSystemElement.OperationalStatus&quot;</font><font color="4444FF"><strong>}</strong></font> <font color="4444FF">]</font>
   <a name="7_line134" href="#7_line134">134</a>     <font color="#2040a0">string</font> <font color="#2040a0">OtherStatusDescription</font><font color="4444FF">;</font>
   <a name="7_line135" href="#7_line135">135</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="7_line136" href="#7_line136">136</a>
   <a name="7_line137" href="#7_line137">137</a>
   <a name="7_line138" href="#7_line138">138</a> <font color="#444444">//=================================================================</font>
   <a name="7_line139" href="#7_line139">139</a> <font color="#444444">// eServer_ProviderCapabilities</font>
   <a name="7_line140" href="#7_line140">140</a> <font color="#444444">// </font>
   <a name="7_line141" href="#7_line141">141</a> <font color="#444444">// Derived from the PG_ProviderCapabilities class</font>
   <a name="7_line142" href="#7_line142">142</a> <font color="#444444">//</font>
   <a name="7_line143" href="#7_line143">143</a> <font color="#444444">//=================================================================</font>
   <a name="7_line144" href="#7_line144">144</a>
   <a name="7_line145" href="#7_line145">145</a>   <font color="4444FF">[</font><font color="#2040a0">Version</font> <font color="4444FF">(</font><font color="#008000">&quot;2.0.0&quot;</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;An instance of ProviderCapabilities &quot;</font>
   <a name="7_line146" href="#7_line146">146</a>   <font color="#008000">&quot;describes a set of abilities for a specific provider.&quot;</font><font color="4444FF">)</font> <font color="4444FF">]</font>
   <a name="7_line147" href="#7_line147">147</a> <strong>class</strong> <font color="#2040a0">eServer_ProviderCapabilities</font> <font color="4444FF">:</font> <font color="#2040a0">PG_ProviderCapabilities</font> <font color="4444FF"><strong>{</strong></font>
   <a name="7_line148" href="#7_line148">148</a>   <font color="4444FF">[</font><font color="#2040a0">Key</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;The scoping eServer_ProviderModuleName. &quot;</font>
   <a name="7_line149" href="#7_line149">149</a>   <font color="#008000">&quot;Inherited as a Propagated key from PG_ProviderCapabilities, &quot;</font>
   <a name="7_line150" href="#7_line150">150</a>   <font color="#008000">&quot;having the syntax PG_Provider.ProviderModuleName&quot;</font><font color="4444FF">)</font> <font color="4444FF">]</font>
   <a name="7_line151" href="#7_line151">151</a>    <font color="#2040a0">string</font> <font color="#2040a0">ProviderModuleName</font><font color="4444FF">;</font>
   <a name="7_line152" href="#7_line152">152</a>   <font color="4444FF">[</font><font color="#2040a0">Key</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;The scoping eServer_Provider Name.&quot;</font>
   <a name="7_line153" href="#7_line153">153</a>   <font color="#008000">&quot;Inherited as a Propagated key from PG_ProviderCapabilities, &quot;</font>
   <a name="7_line154" href="#7_line154">154</a>   <font color="#008000">&quot;having the syntax PG_Provider.Name&quot;</font><font color="4444FF">)</font> <font color="4444FF">]</font>
   <a name="7_line155" href="#7_line155">155</a>    <font color="#2040a0">string</font> <font color="#2040a0">ProviderName</font><font color="4444FF">;</font>
   <a name="7_line156" href="#7_line156">156</a>
   <a name="7_line157" href="#7_line157">157</a>   <font color="4444FF">[</font><font color="#2040a0">Key</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;A value that uniquely identifies this &quot;</font>
   <a name="7_line158" href="#7_line158">158</a>           <font color="#008000">&quot; set of abilities for the designated Providers.&quot;</font><font color="4444FF">)</font> <font color="4444FF">]</font>
   <a name="7_line159" href="#7_line159">159</a>    <font color="#2040a0">string</font> <font color="#2040a0">CapabilityID</font><font color="4444FF">;</font>
   <a name="7_line160" href="#7_line160">160</a>
   <a name="7_line161" href="#7_line161">161</a>   <font color="4444FF">[</font><font color="#2040a0">Override</font><font color="4444FF">(</font><font color="#008000">&quot;ProviderType&quot;</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">&quot;ProviderType enumerates &quot;</font>
   <a name="7_line162" href="#7_line162">162</a>           <font color="#008000">&quot; the specific method types that the provider supports. &quot;</font><font color="4444FF">)</font>,
   <a name="7_line163" href="#7_line163">163</a>           <font color="#2040a0">ArrayType</font><font color="4444FF">(</font><font color="#008000">&quot;Indexed&quot;</font><font color="4444FF">)</font>,
   <a name="7_line164" href="#7_line164">164</a>           <font color="#2040a0">ValueMap</font> <font color="4444FF"><strong>{</strong></font> <font color="#008000">&quot;2&quot;</font>, <font color="#008000">&quot;3&quot;</font>, <font color="#008000">&quot;4&quot;</font>, <font color="#008000">&quot;5&quot;</font>, <font color="#008000">&quot;6&quot;</font> <font color="4444FF"><strong>}</strong></font>,
   <a name="7_line165" href="#7_line165">165</a>           <font color="#2040a0">Values</font><font color="4444FF"><strong>{</strong></font> <font color="#008000">&quot;Instance&quot;</font>, <font color="#008000">&quot;Association&quot;</font>, <font color="#008000">&quot;Indication&quot;</font>, <font color="#008000">&quot;Method&quot;</font>,
   <a name="7_line166" href="#7_line166">166</a>                   <font color="#008000">&quot;Indication_Consumer&quot;</font> <font color="4444FF"><strong>}</strong></font> <font color="4444FF">]</font>
   <a name="7_line167" href="#7_line167">167</a>      <font color="#2040a0">uint16</font> <font color="#2040a0">ProviderType</font><font color="4444FF">[</font><font color="4444FF">]</font><font color="4444FF">;</font>
   <a name="7_line168" href="#7_line168">168</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="7_line169" href="#7_line169">169</a>
   </pre><!-- code2html delete stop -->
       </div>
   <a name="provider_reg_mgr">
       <h3>Provider Registration Manager Modifications</h3></a>
   
       <p>
         After creating a new type of provider, I needed to modify the
         <code>ProviderRegistrationManager</code> to load, find, and
         dispatch the new provider type. This was pretty simple. I wrote
         some additional routines that are basically copies of what is
         already there.
       </p>
   
       <div class="source">
         <p class="comment">
           Here is one of the new routines I wrote for the <code>
             ProviderRegistrationManager</code>. There are several others.
         </p>
   
         <!-- code2html add -lcc -N consumer.cpp
         --><!-- code2html delete start --><pre><a name="8_line1" href="#8_line1">  1</a> <font color="#2040a0">Boolean</font> <font color="#2040a0">ProviderRegistrationManager</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">lookupConsumerProvider</font><font color="4444FF">(</font>
   <a name="8_line2" href="#8_line2">  2</a>     <strong>const</strong> <font color="#2040a0">String</font> <font color="4444FF">&amp;</font> <font color="#2040a0">nameSpace</font>,
   <a name="8_line3" href="#8_line3">  3</a>     <strong>const</strong> <font color="#2040a0">String</font> <font color="4444FF">&amp;</font> <font color="#2040a0">className</font>,
   <a name="8_line4" href="#8_line4">  4</a>     <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">provider</font>,
   <a name="8_line5" href="#8_line5">  5</a>     <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">providerModule</font><font color="4444FF">)</font>
   <a name="8_line6" href="#8_line6">  6</a> <font color="4444FF"><strong>{</strong></font>
   <a name="8_line7" href="#8_line7">  7</a>     <font color="#2040a0">String</font> <font color="#2040a0">providerName</font><font color="4444FF">;</font>
   <a name="8_line8" href="#8_line8">  8</a>     <font color="#2040a0">String</font> <font color="#2040a0">providerModuleName</font><font color="4444FF">;</font>
   <a name="8_line9" href="#8_line9">  9</a>
   <a name="8_line10" href="#8_line10"> 10</a>     <font color="#2040a0">PEG_METHOD_ENTER</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>,
   <a name="8_line11" href="#8_line11"> 11</a>                  <font color="#008000">&quot;ProviderRegistrationManager::lookupConsumerProvider&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line12" href="#8_line12"> 12</a>
   <a name="8_line13" href="#8_line13"> 13</a>     <font color="#2040a0">ProviderRegistrationTable</font><font color="4444FF">*</font> <font color="#2040a0">providerCapability</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>
   <a name="8_line14" href="#8_line14"> 14</a>     <font color="#2040a0">ProviderRegistrationTable</font><font color="4444FF">*</font> <font color="#2040a0">_provider</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>
   <a name="8_line15" href="#8_line15"> 15</a>     <font color="#2040a0">ProviderRegistrationTable</font><font color="4444FF">*</font> <font color="#2040a0">_providerModule</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>
   <a name="8_line16" href="#8_line16"> 16</a>
   <a name="8_line17" href="#8_line17"> 17</a>     <font color="#444444">//</font>
   <a name="8_line18" href="#8_line18"> 18</a>     <font color="#444444">// create the key by using nameSpace, className, and providerType</font>
   <a name="8_line19" href="#8_line19"> 19</a>     <font color="#444444">//</font>
   <a name="8_line20" href="#8_line20"> 20</a>     <font color="#2040a0">String</font> <font color="#2040a0">capabilityKey</font> <font color="4444FF">=</font> <font color="#2040a0">_generateKey</font><font color="4444FF">(</font><font color="#2040a0">nameSpace</font>, <font color="#2040a0">className</font>, <font color="#2040a0">CONSUMER_PROVIDER</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line21" href="#8_line21"> 21</a>     <font color="#2040a0">PEG_TRACE_STRING</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>,
   <a name="8_line22" href="#8_line22"> 22</a>                  <font color="#008000">&quot;<font color="#77dd77">\n</font>nameSpace = &quot;</font> <font color="4444FF">+</font> <font color="#2040a0">nameSpace</font> <font color="4444FF">+</font> <font color="#008000">&quot;; className = &quot;</font> <font color="4444FF">+</font>
   <a name="8_line23" href="#8_line23"> 23</a>                     <font color="#2040a0">className</font> <font color="4444FF">+</font>  <font color="#008000">&quot;; capabilityKey = &quot;</font> <font color="4444FF">+</font> <font color="#2040a0">capabilityKey</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line24" href="#8_line24"> 24</a>
   <a name="8_line25" href="#8_line25"> 25</a>     <font color="#2040a0">try</font>
   <a name="8_line26" href="#8_line26"> 26</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="8_line27" href="#8_line27"> 27</a>         <font color="#444444">// </font>
   <a name="8_line28" href="#8_line28"> 28</a>         <font color="#444444">// get provider capability instance from the table</font>
   <a name="8_line29" href="#8_line29"> 29</a>         <font color="#444444">//</font>
   <a name="8_line30" href="#8_line30"> 30</a>         <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">!</font><font color="#2040a0">_registrationTable</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">table</font>.<font color="#2040a0">lookup</font><font color="4444FF">(</font>
   <a name="8_line31" href="#8_line31"> 31</a>                   <font color="#2040a0">capabilityKey</font>, <font color="#2040a0">providerCapability</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="8_line32" href="#8_line32"> 32</a>         <font color="4444FF"><strong>{</strong></font>
   <a name="8_line33" href="#8_line33"> 33</a>             <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line34" href="#8_line34"> 34</a>             <strong>throw</strong> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>, <font color="#2040a0">CAPABILITY_NOT_REGISTERED</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line35" href="#8_line35"> 35</a>         <font color="4444FF"><strong>}</strong></font>
   <a name="8_line36" href="#8_line36"> 36</a>
   <a name="8_line37" href="#8_line37"> 37</a>         <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="#2040a0">instances</font> <font color="4444FF">=</font> <font color="#2040a0">providerCapability</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getInstances</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line38" href="#8_line38"> 38</a>
   <a name="8_line39" href="#8_line39"> 39</a>         <font color="#2040a0">Uint32</font> <font color="#2040a0">pos</font> <font color="4444FF">=</font> <font color="#2040a0">instances</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font>.<font color="#2040a0">findProperty</font><font color="4444FF">(</font><font color="#2040a0">_PROPERTY_PROVIDERNAME</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line40" href="#8_line40"> 40</a>
   <a name="8_line41" href="#8_line41"> 41</a>         <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">pos</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">PEG_NOT_FOUND</font><font color="4444FF">)</font>
   <a name="8_line42" href="#8_line42"> 42</a>         <font color="4444FF"><strong>{</strong></font>
   <a name="8_line43" href="#8_line43"> 43</a>             <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line44" href="#8_line44"> 44</a>                 <strong>throw</strong> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>,
   <a name="8_line45" href="#8_line45"> 45</a>             <font color="#008000">&quot;Missing ProviderName which is key in PG_ProviderCapabilities class.&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line46" href="#8_line46"> 46</a>         <font color="4444FF"><strong>}</strong></font>
   <a name="8_line47" href="#8_line47"> 47</a>
   <a name="8_line48" href="#8_line48"> 48</a>         <font color="#444444">//</font>
   <a name="8_line49" href="#8_line49"> 49</a>         <font color="#444444">// get provider name</font>
   <a name="8_line50" href="#8_line50"> 50</a>         <font color="#444444">//</font>
   <a name="8_line51" href="#8_line51"> 51</a>         <font color="#2040a0">instances</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font>.<font color="#2040a0">getProperty</font><font color="4444FF">(</font><font color="#2040a0">pos</font><font color="4444FF">)</font>.<font color="#2040a0">getValue</font><font color="4444FF">(</font><font color="4444FF">)</font>.<font color="#2040a0">get</font><font color="4444FF">(</font><font color="#2040a0">providerName</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line52" href="#8_line52"> 52</a>
   <a name="8_line53" href="#8_line53"> 53</a>         <font color="#444444">//</font>
   <a name="8_line54" href="#8_line54"> 54</a>         <font color="#444444">// get provider module name</font>
   <a name="8_line55" href="#8_line55"> 55</a>         <font color="#444444">//</font>
   <a name="8_line56" href="#8_line56"> 56</a>         <font color="#2040a0">Uint32</font> <font color="#2040a0">pos2</font> <font color="4444FF">=</font> <font color="#2040a0">instances</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font>.<font color="#2040a0">findProperty</font><font color="4444FF">(</font><font color="#2040a0">_PROPERTY_PROVIDERMODULENAME</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line57" href="#8_line57"> 57</a>         <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">pos2</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">PEG_NOT_FOUND</font><font color="4444FF">)</font>
   <a name="8_line58" href="#8_line58"> 58</a>         <font color="4444FF"><strong>{</strong></font>
   <a name="8_line59" href="#8_line59"> 59</a>
   <a name="8_line60" href="#8_line60"> 60</a>             <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line61" href="#8_line61"> 61</a>                 <strong>throw</strong> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>,
   <a name="8_line62" href="#8_line62"> 62</a>             <font color="#008000">&quot;Missing ProviderModuleName which is key in PG_ProviderCapabilities class.&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line63" href="#8_line63"> 63</a>         <font color="4444FF"><strong>}</strong></font>
   <a name="8_line64" href="#8_line64"> 64</a>
   <a name="8_line65" href="#8_line65"> 65</a>         <font color="#2040a0">instances</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font>.<font color="#2040a0">getProperty</font><font color="4444FF">(</font><font color="#2040a0">pos2</font><font color="4444FF">)</font>.<font color="#2040a0">getValue</font><font color="4444FF">(</font><font color="4444FF">)</font>.<font color="#2040a0">get</font><font color="4444FF">(</font><font color="#2040a0">providerModuleName</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line66" href="#8_line66"> 66</a>
   <a name="8_line67" href="#8_line67"> 67</a>     <font color="#444444">//</font>
   <a name="8_line68" href="#8_line68"> 68</a>     <font color="#444444">// create the key by using providerModuleName and providerName</font>
   <a name="8_line69" href="#8_line69"> 69</a>     <font color="#444444">//</font>
   <a name="8_line70" href="#8_line70"> 70</a>     <font color="#2040a0">String</font> <font color="#2040a0">_providerKey</font> <font color="4444FF">=</font> <font color="#2040a0">_generateKey</font><font color="4444FF">(</font><font color="#2040a0">providerModuleName</font>, <font color="#2040a0">providerName</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line71" href="#8_line71"> 71</a>
   <a name="8_line72" href="#8_line72"> 72</a>     <font color="#444444">//</font>
   <a name="8_line73" href="#8_line73"> 73</a>     <font color="#444444">// create the key by using providerModuleName and MODULE_KEY</font>
   <a name="8_line74" href="#8_line74"> 74</a>     <font color="#444444">//</font>
   <a name="8_line75" href="#8_line75"> 75</a>     <font color="#2040a0">String</font> <font color="#2040a0">_moduleKey</font> <font color="4444FF">=</font> <font color="#2040a0">_generateKey</font><font color="4444FF">(</font><font color="#2040a0">providerModuleName</font>, <font color="#2040a0">MODULE_KEY</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line76" href="#8_line76"> 76</a>
   <a name="8_line77" href="#8_line77"> 77</a>         <font color="#444444">// </font>
   <a name="8_line78" href="#8_line78"> 78</a>         <font color="#444444">// get provider instance from the table </font>
   <a name="8_line79" href="#8_line79"> 79</a>         <font color="#444444">//</font>
   <a name="8_line80" href="#8_line80"> 80</a>         <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">!</font><font color="#2040a0">_registrationTable</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">table</font>.<font color="#2040a0">lookup</font><font color="4444FF">(</font><font color="#2040a0">_providerKey</font>, <font color="#2040a0">_provider</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="8_line81" href="#8_line81"> 81</a>         <font color="4444FF"><strong>{</strong></font>
   <a name="8_line82" href="#8_line82"> 82</a>             <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line83" href="#8_line83"> 83</a>         <strong>throw</strong> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>, <font color="#2040a0">PROVIDER_NOT_FOUND</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line84" href="#8_line84"> 84</a>         <font color="4444FF"><strong>}</strong></font>
   <a name="8_line85" href="#8_line85"> 85</a>
   <a name="8_line86" href="#8_line86"> 86</a>         <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="#2040a0">providerInstances</font> <font color="4444FF">=</font> <font color="#2040a0">_provider</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getInstances</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line87" href="#8_line87"> 87</a>         <font color="#2040a0">provider</font> <font color="4444FF">=</font> <font color="#2040a0">providerInstances</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font><font color="4444FF">;</font>
   <a name="8_line88" href="#8_line88"> 88</a>
   <a name="8_line89" href="#8_line89"> 89</a>         <font color="#444444">// </font>
   <a name="8_line90" href="#8_line90"> 90</a>         <font color="#444444">// get provider module instance from the table </font>
   <a name="8_line91" href="#8_line91"> 91</a>         <font color="#444444">//</font>
   <a name="8_line92" href="#8_line92"> 92</a>         <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">!</font><font color="#2040a0">_registrationTable</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">table</font>.<font color="#2040a0">lookup</font><font color="4444FF">(</font><font color="#2040a0">_moduleKey</font>, <font color="#2040a0">_providerModule</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="8_line93" href="#8_line93"> 93</a>         <font color="4444FF"><strong>{</strong></font>
   <a name="8_line94" href="#8_line94"> 94</a>             <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line95" href="#8_line95"> 95</a>         <strong>throw</strong> <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>, <font color="#2040a0">MODULE_NOT_FOUND</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line96" href="#8_line96"> 96</a>         <font color="4444FF"><strong>}</strong></font>
   <a name="8_line97" href="#8_line97"> 97</a>
   <a name="8_line98" href="#8_line98"> 98</a>         <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="#2040a0">providerModuleInstances</font> <font color="4444FF">=</font> <font color="#2040a0">_providerModule</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getInstances</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line99" href="#8_line99"> 99</a>         <font color="#2040a0">providerModule</font> <font color="4444FF">=</font> <font color="#2040a0">providerModuleInstances</font><font color="4444FF">[</font><font color="#FF0000">0</font><font color="4444FF">]</font><font color="4444FF">;</font>
   <a name="8_line100" href="#8_line100">100</a>
   <a name="8_line101" href="#8_line101">101</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="8_line102" href="#8_line102">102</a>     <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">CIMException</font> <font color="4444FF">&amp;</font> <font color="#2040a0">exception</font><font color="4444FF">)</font>
   <a name="8_line103" href="#8_line103">103</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="8_line104" href="#8_line104">104</a>   <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">traceCIMException</font><font color="4444FF">(</font><font color="#2040a0">TRC_PROVIDERMANAGER</font>, <font color="#2040a0">Tracer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">LEVEL4</font>, <font color="#2040a0">exception</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line105" href="#8_line105">105</a>   <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line106" href="#8_line106">106</a>   <strong>return</strong> <font color="4444FF">(</font><strong>false</strong><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line107" href="#8_line107">107</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="8_line108" href="#8_line108">108</a>
   <a name="8_line109" href="#8_line109">109</a>     <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line110" href="#8_line110">110</a>     <strong>return</strong> <font color="4444FF">(</font><strong>true</strong><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="8_line111" href="#8_line111">111</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
       </div>
   
   <a name="instantiate_providers">
       <h3>Instantiating the Modified Schema and Providers</h3></a>
       <p>
         This was also pretty simple. I piggybacked off the compilation and
         installation scripts that are already part of the project.
       </p>
       <p>
         A couple of items to note in the MOF below. <a
         href="#9_line47">Line 47</a> shows a <code>Type 6</code>
         provider, which is an Indication Consumer provider. Also, the
         Indication provider and the Indication Consumer provider are both
         part of the same module.
       </p>
   
       <p>
         Here is the registration mof:
       </p>
       <div class="source">
         <div class="comment">
         <p >
           You can see that I simplified the <code>PG_Subscription</code> class
           in <a href="#9_line53">line 53</a> below. There are no policy attributes,
           no attribute list, and no filter.
         </p>
           <p>
             To get things working, I assumed that every subscription
             includes all attributes every time it is fired. I assumed that
             the subscription was created with valid class references and
             that providers were registered correctly.
           </p>
           <p>
             In the schema, however, I left the filter in the
             Subscription definition. I just didn't make it a required
             attribute. I think it is viable to want to test Indication
             delivery without having to have filters defined and working.
           </p>
         </div>
         <!-- code2html add -lcc -N Schemas/Pegasus/InterOp/VER20/eServer_Indication20R.mof
         --><!-- code2html delete start --><pre><a name="9_line1" href="#9_line1"> 1</a> <font color="#2040a0">instance</font> <font color="#2040a0">of</font> <font color="#2040a0">eServer_ProviderModule</font>
   <a name="9_line2" href="#9_line2"> 2</a> <font color="4444FF"><strong>{</strong></font>
   <a name="9_line3" href="#9_line3"> 3</a>        <font color="#2040a0">Name</font> <font color="4444FF">=</font> <font color="#008000">&quot;ProcessIndicationProvider&quot;</font><font color="4444FF">;</font>
   <a name="9_line4" href="#9_line4"> 4</a>        <font color="#2040a0">Location</font> <font color="4444FF">=</font> <font color="#008000">&quot;ProcessIndicationProvider&quot;</font><font color="4444FF">;</font>
   <a name="9_line5" href="#9_line5"> 5</a>        <font color="#2040a0">Vendor</font> <font color="4444FF">=</font> <font color="#008000">&quot;Pegasus Community&quot;</font><font color="4444FF">;</font>
   <a name="9_line6" href="#9_line6"> 6</a>        <font color="#2040a0">Version</font> <font color="4444FF">=</font> <font color="#008000">&quot;2.0.0&quot;</font><font color="4444FF">;</font>
   <a name="9_line7" href="#9_line7"> 7</a>        <font color="#2040a0">InterfaceType</font> <font color="4444FF">=</font> <font color="#008000">&quot;C++Default&quot;</font><font color="4444FF">;</font>
   <a name="9_line8" href="#9_line8"> 8</a>        <font color="#2040a0">InterfaceVersion</font> <font color="4444FF">=</font> <font color="#008000">&quot;2.0.0&quot;</font><font color="4444FF">;</font>
   <a name="9_line9" href="#9_line9"> 9</a>        <font color="#2040a0">host</font> <font color="4444FF">=</font> <font color="#008000">&quot;localhost&quot;</font><font color="4444FF">;</font>
   <a name="9_line10" href="#9_line10">10</a>      <font color="#2040a0">OperationalStatus</font> <font color="4444FF">=</font> <font color="4444FF"><strong>{</strong></font><font color="#FF0000">2</font><font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line11" href="#9_line11">11</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line12" href="#9_line12">12</a>
   <a name="9_line13" href="#9_line13">13</a> <font color="#2040a0">instance</font> <font color="#2040a0">of</font> <font color="#2040a0">eServer_Provider</font>
   <a name="9_line14" href="#9_line14">14</a> <font color="4444FF"><strong>{</strong></font>
   <a name="9_line15" href="#9_line15">15</a>      <font color="#2040a0">ProviderModuleName</font> <font color="4444FF">=</font> <font color="#008000">&quot;ProcessIndicationProvider&quot;</font><font color="4444FF">;</font>
   <a name="9_line16" href="#9_line16">16</a>      <font color="#2040a0">Name</font> <font color="4444FF">=</font> <font color="#008000">&quot;eServer_ProcessIndicationProvider&quot;</font><font color="4444FF">;</font>
   <a name="9_line17" href="#9_line17">17</a>      <font color="#2040a0">OperationalStatus</font> <font color="4444FF">=</font> <font color="4444FF"><strong>{</strong></font><font color="#FF0000">2</font><font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line18" href="#9_line18">18</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line19" href="#9_line19">19</a>
   <a name="9_line20" href="#9_line20">20</a> <font color="#2040a0">instance</font> <font color="#2040a0">of</font> <font color="#2040a0">eServer_ProviderCapabilities</font>
   <a name="9_line21" href="#9_line21">21</a> <font color="4444FF"><strong>{</strong></font>
   <a name="9_line22" href="#9_line22">22</a>      <font color="#2040a0">ProviderModuleName</font> <font color="4444FF">=</font> <font color="#008000">&quot;ProcessIndicationProvider&quot;</font><font color="4444FF">;</font>
   <a name="9_line23" href="#9_line23">23</a>      <font color="#2040a0">ProviderName</font> <font color="4444FF">=</font> <font color="#008000">&quot;eServer_ProcessIndicationProvider&quot;</font><font color="4444FF">;</font>
   <a name="9_line24" href="#9_line24">24</a>      <font color="#2040a0">CapabilityID</font> <font color="4444FF">=</font> <font color="#008000">&quot;1&quot;</font><font color="4444FF">;</font>
   <a name="9_line25" href="#9_line25">25</a>      <font color="#2040a0">ClassName</font> <font color="4444FF">=</font> <font color="#008000">&quot;CIM_ProcessIndication&quot;</font><font color="4444FF">;</font>
   <a name="9_line26" href="#9_line26">26</a>      <font color="#2040a0">Namespaces</font> <font color="4444FF">=</font> <font color="4444FF"><strong>{</strong></font><font color="#008000">&quot;root/PG_Interop&quot;</font><font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line27" href="#9_line27">27</a>      <font color="#2040a0">ProviderType</font> <font color="4444FF">=</font> <font color="4444FF"><strong>{</strong></font> <font color="#FF0000">4</font> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font> <font color="#444444">// indication</font>
   <a name="9_line28" href="#9_line28">28</a>      <font color="#2040a0">SupportedProperties</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font>
   <a name="9_line29" href="#9_line29">29</a>      <font color="#2040a0">SupportedMethods</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font>
   <a name="9_line30" href="#9_line30">30</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line31" href="#9_line31">31</a>
   <a name="9_line32" href="#9_line32">32</a>
   <a name="9_line33" href="#9_line33">33</a> <font color="#2040a0">instance</font> <font color="#2040a0">of</font> <font color="#2040a0">eServer_Provider</font>
   <a name="9_line34" href="#9_line34">34</a> <font color="4444FF"><strong>{</strong></font>
   <a name="9_line35" href="#9_line35">35</a>      <font color="#2040a0">ProviderModuleName</font> <font color="4444FF">=</font> <font color="#008000">&quot;ProcessIndicationProvider&quot;</font><font color="4444FF">;</font>
   <a name="9_line36" href="#9_line36">36</a>      <font color="#2040a0">Name</font> <font color="4444FF">=</font> <font color="#008000">&quot;eServer_ProcessIndicationConsumer&quot;</font><font color="4444FF">;</font>
   <a name="9_line37" href="#9_line37">37</a>      <font color="#2040a0">OperationalStatus</font> <font color="4444FF">=</font> <font color="4444FF"><strong>{</strong></font><font color="#FF0000">2</font><font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line38" href="#9_line38">38</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line39" href="#9_line39">39</a>
   <a name="9_line40" href="#9_line40">40</a> <font color="#2040a0">instance</font> <font color="#2040a0">of</font> <font color="#2040a0">eServer_ProviderCapabilities</font>
   <a name="9_line41" href="#9_line41">41</a> <font color="4444FF"><strong>{</strong></font>
   <a name="9_line42" href="#9_line42">42</a>      <font color="#2040a0">ProviderModuleName</font> <font color="4444FF">=</font> <font color="#008000">&quot;ProcessIndicationProvider&quot;</font><font color="4444FF">;</font>
   <a name="9_line43" href="#9_line43">43</a>      <font color="#2040a0">ProviderName</font> <font color="4444FF">=</font> <font color="#008000">&quot;eServer_ProcessIndicationConsumer&quot;</font><font color="4444FF">;</font>
   <a name="9_line44" href="#9_line44">44</a>      <font color="#2040a0">CapabilityID</font> <font color="4444FF">=</font> <font color="#008000">&quot;2&quot;</font><font color="4444FF">;</font>
   <a name="9_line45" href="#9_line45">45</a>      <font color="#2040a0">ClassName</font> <font color="4444FF">=</font> <font color="#008000">&quot;eServer_ProcessIndicationConsumer&quot;</font><font color="4444FF">;</font>
   <a name="9_line46" href="#9_line46">46</a>      <font color="#2040a0">Namespaces</font> <font color="4444FF">=</font> <font color="4444FF"><strong>{</strong></font><font color="#008000">&quot;root/PG_Interop&quot;</font><font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line47" href="#9_line47">47</a>      <font color="#2040a0">ProviderType</font> <font color="4444FF">=</font> <font color="4444FF"><strong>{</strong></font> <font color="#FF0000">6</font> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font> <font color="#444444">// consumer</font>
   <a name="9_line48" href="#9_line48">48</a>      <font color="#2040a0">SupportedProperties</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font>
   <a name="9_line49" href="#9_line49">49</a>      <font color="#2040a0">SupportedMethods</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font>
   <a name="9_line50" href="#9_line50">50</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   <a name="9_line51" href="#9_line51">51</a>
   <a name="9_line52" href="#9_line52">52</a>
   <a name="9_line53" href="#9_line53">53</a> <font color="#2040a0">instance</font> <font color="#2040a0">of</font> <font color="#2040a0">eServer_IndicationSubscription</font>
   <a name="9_line54" href="#9_line54">54</a> <font color="4444FF"><strong>{</strong></font>
   <a name="9_line55" href="#9_line55">55</a>      <font color="#2040a0">Indication_Class</font>  <font color="4444FF">=</font> <font color="#008000">&quot;CIM_ProcessIndication&quot;</font><font color="4444FF">;</font>
   <a name="9_line56" href="#9_line56">56</a>      <font color="#2040a0">Handler</font> <font color="4444FF">=</font> <font color="#008000">&quot;eServer_ProcessIndicationConsumer&quot;</font><font color="4444FF">;</font>
   <a name="9_line57" href="#9_line57">57</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
   </pre><!-- code2html delete stop -->
       </div>
   
       <a name="indication_provider">
       <h3>Indication Provider</h3></a>
       <p>
         To test Indications, I modified the provider in
         <code>$(PEGASUS_HOME)/src/Providers/sample/ProcessIndicationProvider</code>.
         The biggest mod is the <code>_monitor</code> routine, which runs
         as an independent thread.
       </p>
       <h4>Independent Indication Thread</h4>
       <p>
         Most providers that generate indications will need to have an
         independent thread. I chose to start and stop the thread in the
         <a href="#10_line17"><code>enableIndications</code></a> and
           <a href="#10_line36"><code>disableIndications</code></a>
         methods, respectively.
       </p>
   
   <div class="source">
         <!-- code2html add -lcc -N
   
   void ProcessIndicationProvider::enableIndications (
       ResponseHandler <CIMIndication> & handler)
   {
      cout << "eServer_ProcessIndicationProvider: enableIndications" << endl;
   
      _enable_disable.lock(pegasus_thread_self());
      if(_indications_enabled.value())
      {
         _enable_disable.unlock();
         return;
      }
      _response_handler = &handler;
      _response_handler->processing ();
      _indications_enabled = 1;
      _indication_thread.run();
      _enable_disable.unlock();
   
   }
   
   void ProcessIndicationProvider::disableIndications (void)
   {
      cout << "eServer_ProcessIndicationProvider: disableIndications" << endl;
      _enable_disable.lock(pegasus_thread_self());
   
      if(_indications_enabled.value() == 0 )
      {
         _enable_disable.unlock();
         return;
      }
   
      _indications_enabled = 0;
      _response_handler = 0;
      _indication_thread.join();
      _enable_disable.unlock();
   
   }
         --><!-- code2html delete start --><pre><a name="10_line1" href="#10_line1"> 1</a>
   <a name="10_line2" href="#10_line2"> 2</a>
   <a name="10_line3" href="#10_line3"> 3</a> <strong>void</strong> <font color="#2040a0">ProcessIndicationProvider</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">enableIndications</font> <font color="4444FF">(</font>
   <a name="10_line4" href="#10_line4"> 4</a>     <font color="#2040a0">ResponseHandler</font> <font color="4444FF">&lt;</font><font color="#2040a0">CIMIndication</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">handler</font><font color="4444FF">)</font>
   <a name="10_line5" href="#10_line5"> 5</a> <font color="4444FF"><strong>{</strong></font>
   <a name="10_line6" href="#10_line6"> 6</a>    <font color="#2040a0">cout</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;eServer_ProcessIndicationProvider: enableIndications&quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font><font color="4444FF">;</font>
   <a name="10_line7" href="#10_line7"> 7</a>
   <a name="10_line8" href="#10_line8"> 8</a>    <font color="#2040a0">_enable_disable</font>.<font color="#2040a0">lock</font><font color="4444FF">(</font><font color="#2040a0">pegasus_thread_self</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line9" href="#10_line9"> 9</a>    <strong>if</strong><font color="4444FF">(</font><font color="#2040a0">_indications_enabled</font>.<font color="#2040a0">value</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="10_line10" href="#10_line10">10</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="10_line11" href="#10_line11">11</a>       <font color="#2040a0">_enable_disable</font>.<font color="#2040a0">unlock</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line12" href="#10_line12">12</a>       <strong>return</strong><font color="4444FF">;</font>
   <a name="10_line13" href="#10_line13">13</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="10_line14" href="#10_line14">14</a>    <font color="#2040a0">_response_handler</font> <font color="4444FF">=</font> <font color="4444FF">&amp;</font><font color="#2040a0">handler</font><font color="4444FF">;</font>
   <a name="10_line15" href="#10_line15">15</a>    <font color="#2040a0">_response_handler</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">processing</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line16" href="#10_line16">16</a>    <font color="#2040a0">_indications_enabled</font> <font color="4444FF">=</font> <font color="#FF0000">1</font><font color="4444FF">;</font>
   <a name="10_line17" href="#10_line17">17</a>    <font color="#2040a0">_indication_thread</font>.<font color="#2040a0">run</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line18" href="#10_line18">18</a>    <font color="#2040a0">_enable_disable</font>.<font color="#2040a0">unlock</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line19" href="#10_line19">19</a>
   <a name="10_line20" href="#10_line20">20</a> <font color="4444FF"><strong>}</strong></font>
   <a name="10_line21" href="#10_line21">21</a>
   <a name="10_line22" href="#10_line22">22</a> <strong>void</strong> <font color="#2040a0">ProcessIndicationProvider</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">disableIndications</font> <font color="4444FF">(</font><strong>void</strong><font color="4444FF">)</font>
   <a name="10_line23" href="#10_line23">23</a> <font color="4444FF"><strong>{</strong></font>
   <a name="10_line24" href="#10_line24">24</a>    <font color="#2040a0">cout</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#008000">&quot;eServer_ProcessIndicationProvider: disableIndications&quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">endl</font><font color="4444FF">;</font>
   <a name="10_line25" href="#10_line25">25</a>    <font color="#2040a0">_enable_disable</font>.<font color="#2040a0">lock</font><font color="4444FF">(</font><font color="#2040a0">pegasus_thread_self</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line26" href="#10_line26">26</a>
   <a name="10_line27" href="#10_line27">27</a>    <strong>if</strong><font color="4444FF">(</font><font color="#2040a0">_indications_enabled</font>.<font color="#2040a0">value</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">)</font>
   <a name="10_line28" href="#10_line28">28</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="10_line29" href="#10_line29">29</a>       <font color="#2040a0">_enable_disable</font>.<font color="#2040a0">unlock</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line30" href="#10_line30">30</a>       <strong>return</strong><font color="4444FF">;</font>
   <a name="10_line31" href="#10_line31">31</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="10_line32" href="#10_line32">32</a>
   <a name="10_line33" href="#10_line33">33</a>    <font color="#2040a0">_indications_enabled</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>
   <a name="10_line34" href="#10_line34">34</a>    <font color="#2040a0">_response_handler</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font>
   <a name="10_line35" href="#10_line35">35</a>    <font color="#2040a0">_indication_thread</font>.<font color="#2040a0">join</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line36" href="#10_line36">36</a>    <font color="#2040a0">_enable_disable</font>.<font color="#2040a0">unlock</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="10_line37" href="#10_line37">37</a>
   <a name="10_line38" href="#10_line38">38</a> <font color="4444FF"><strong>}</strong></font>
   <a name="10_line39" href="#10_line39">39</a>
   </pre><!-- code2html delete stop -->
       </div>
       <h4>Delivering the Indication</h4>
       <p>
         To deliver the indication, the <code>_monitor</code> thread
         calls <a href="#11_line45"><code>deliver(CIMInstance)</code></a>
         using its response handler.
       </p>
       <p>
         The importance of allocating the response handler on the heap in
         the <code>ProviderManagerService</code> and preserving it for the
         life of the indication thread is demonstrated pretty clearly in the
         code below. It should be obvious that the response handler must
         not be destroyed after the subscription is enabled.
       </p>
   <div class="source">
         <!-- code2html add -lcc -N
   PEGASUS_THREAD_RETURN
   PEGASUS_THREAD_CDECL
   ProcessIndicationProvider::_monitor(void *parm)
   {
      PEGASUS_ASSERT(parm != 0);
   
      Thread *th = static_cast<Thread *>(parm);
      ProcessIndicationProvider *myself =
         static_cast<ProcessIndicationProvider *>(th->get_parm());
   
      while(true)
      {
         pegasus_sleep(1000);
         try
         {
            myself->_enable_disable.try_lock(pegasus_thread_self());
         }
         catch(...)
         {
            if(myself->_indications_enabled.value() == 0  ||
                myself->_response_handler == 0 )
               exit_thread((PEGASUS_THREAD_RETURN)0);
            else
               continue;
         }
         try
         {
   
            CIMInstance indicationInstance ("root/PG_Interop:CIM_ProcessIndication");
   
            indicationInstance.addProperty
               (CIMProperty ("IndicationTime", CIMValue (CIMDateTime ())));
   
            indicationInstance.addProperty
               (CIMProperty ("IndicationIdentifier", "ProcessIndication01"));
   
            Array <String> correlatedIndications;
            indicationInstance.addProperty (
                    CIMProperty ("CorrelatedIndications",
                    CIMValue (correlatedIndications)));
   
            CIMIndication cimIndication (indicationInstance);
   
            myself->_response_handler->deliver (cimIndication);
   
         }
         catch(...)
         {
   
         }
         myself->_enable_disable.unlock();
      }
      exit_thread((PEGASUS_THREAD_RETURN)0);
      return(PEGASUS_THREAD_RETURN)0;
   }
   
   --><!-- code2html delete start --><pre><a name="11_line1" href="#11_line1"> 1</a>
   <a name="11_line2" href="#11_line2"> 2</a> <font color="#2040a0">PEGASUS_THREAD_RETURN</font>
   <a name="11_line3" href="#11_line3"> 3</a> <font color="#2040a0">PEGASUS_THREAD_CDECL</font>
   <a name="11_line4" href="#11_line4"> 4</a> <font color="#2040a0">ProcessIndicationProvider</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">_monitor</font><font color="4444FF">(</font><strong>void</strong> <font color="4444FF">*</font><font color="#2040a0">parm</font><font color="4444FF">)</font>
   <a name="11_line5" href="#11_line5"> 5</a> <font color="4444FF"><strong>{</strong></font>
   <a name="11_line6" href="#11_line6"> 6</a>    <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">parm</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line7" href="#11_line7"> 7</a>
   <a name="11_line8" href="#11_line8"> 8</a>    <font color="#2040a0">Thread</font> <font color="4444FF">*</font><font color="#2040a0">th</font> <font color="4444FF">=</font> <strong>static_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">Thread</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">parm</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line9" href="#11_line9"> 9</a>    <font color="#2040a0">ProcessIndicationProvider</font> <font color="4444FF">*</font><font color="#2040a0">myself</font> <font color="4444FF">=</font>
   <a name="11_line10" href="#11_line10">10</a>       <strong>static_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">ProcessIndicationProvider</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">th</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">get_parm</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line11" href="#11_line11">11</a>
   <a name="11_line12" href="#11_line12">12</a>    <strong>while</strong><font color="4444FF">(</font><strong>true</strong><font color="4444FF">)</font>
   <a name="11_line13" href="#11_line13">13</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="11_line14" href="#11_line14">14</a>       <font color="#2040a0">pegasus_sleep</font><font color="4444FF">(</font><font color="#FF0000">1000</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line15" href="#11_line15">15</a>       <font color="#2040a0">try</font>
   <a name="11_line16" href="#11_line16">16</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="11_line17" href="#11_line17">17</a>     <font color="#2040a0">myself</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_enable_disable</font>.<font color="#2040a0">try_lock</font><font color="4444FF">(</font><font color="#2040a0">pegasus_thread_self</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line18" href="#11_line18">18</a>       <font color="4444FF"><strong>}</strong></font>
   <a name="11_line19" href="#11_line19">19</a>       <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
   <a name="11_line20" href="#11_line20">20</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="11_line21" href="#11_line21">21</a>     <strong>if</strong><font color="4444FF">(</font><font color="#2040a0">myself</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_indications_enabled</font>.<font color="#2040a0">value</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font>  <font color="4444FF">|</font><font color="4444FF">|</font>
   <a name="11_line22" href="#11_line22">22</a>              <font color="#2040a0">myself</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_response_handler</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">)</font>
   <a name="11_line23" href="#11_line23">23</a>        <font color="#2040a0">exit_thread</font><font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">PEGASUS_THREAD_RETURN</font><font color="4444FF">)</font><font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line24" href="#11_line24">24</a>     <strong>else</strong>
   <a name="11_line25" href="#11_line25">25</a>        <strong>continue</strong><font color="4444FF">;</font>
   <a name="11_line26" href="#11_line26">26</a>       <font color="4444FF"><strong>}</strong></font>
   <a name="11_line27" href="#11_line27">27</a>       <font color="#2040a0">try</font>
   <a name="11_line28" href="#11_line28">28</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="11_line29" href="#11_line29">29</a>
   <a name="11_line30" href="#11_line30">30</a>     <font color="#2040a0">CIMInstance</font> <font color="#2040a0">indicationInstance</font> <font color="4444FF">(</font><font color="#008000">&quot;root/PG_Interop:CIM_ProcessIndication&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line31" href="#11_line31">31</a>
   <a name="11_line32" href="#11_line32">32</a>     <font color="#2040a0">indicationInstance</font>.<font color="#2040a0">addProperty</font>
   <a name="11_line33" href="#11_line33">33</a>        <font color="4444FF">(</font><font color="#2040a0">CIMProperty</font> <font color="4444FF">(</font><font color="#008000">&quot;IndicationTime&quot;</font>, <font color="#2040a0">CIMValue</font> <font color="4444FF">(</font><font color="#2040a0">CIMDateTime</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line34" href="#11_line34">34</a>
   <a name="11_line35" href="#11_line35">35</a>     <font color="#2040a0">indicationInstance</font>.<font color="#2040a0">addProperty</font>
   <a name="11_line36" href="#11_line36">36</a>        <font color="4444FF">(</font><font color="#2040a0">CIMProperty</font> <font color="4444FF">(</font><font color="#008000">&quot;IndicationIdentifier&quot;</font>, <font color="#008000">&quot;ProcessIndication01&quot;</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line37" href="#11_line37">37</a>
   <a name="11_line38" href="#11_line38">38</a>     <font color="#2040a0">Array</font> <font color="4444FF">&lt;</font><font color="#2040a0">String</font><font color="4444FF">&gt;</font> <font color="#2040a0">correlatedIndications</font><font color="4444FF">;</font>
   <a name="11_line39" href="#11_line39">39</a>     <font color="#2040a0">indicationInstance</font>.<font color="#2040a0">addProperty</font> <font color="4444FF">(</font>
   <a name="11_line40" href="#11_line40">40</a>                  <font color="#2040a0">CIMProperty</font> <font color="4444FF">(</font><font color="#008000">&quot;CorrelatedIndications&quot;</font>,
   <a name="11_line41" href="#11_line41">41</a>             <font color="#2040a0">CIMValue</font> <font color="4444FF">(</font><font color="#2040a0">correlatedIndications</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line42" href="#11_line42">42</a>
   <a name="11_line43" href="#11_line43">43</a>     <font color="#2040a0">CIMIndication</font> <font color="#2040a0">cimIndication</font> <font color="4444FF">(</font><font color="#2040a0">indicationInstance</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line44" href="#11_line44">44</a>
   <a name="11_line45" href="#11_line45">45</a>     <font color="#2040a0">myself</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_response_handler</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">deliver</font> <font color="4444FF">(</font><font color="#2040a0">cimIndication</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line46" href="#11_line46">46</a>
   <a name="11_line47" href="#11_line47">47</a>       <font color="4444FF"><strong>}</strong></font>
   <a name="11_line48" href="#11_line48">48</a>       <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
   <a name="11_line49" href="#11_line49">49</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="11_line50" href="#11_line50">50</a>
   <a name="11_line51" href="#11_line51">51</a>       <font color="4444FF"><strong>}</strong></font>
   <a name="11_line52" href="#11_line52">52</a>       <font color="#2040a0">myself</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">_enable_disable</font>.<font color="#2040a0">unlock</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line53" href="#11_line53">53</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="11_line54" href="#11_line54">54</a>    <font color="#2040a0">exit_thread</font><font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">PEGASUS_THREAD_RETURN</font><font color="4444FF">)</font><font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="11_line55" href="#11_line55">55</a>    <strong>return</strong><font color="4444FF">(</font><font color="#2040a0">PEGASUS_THREAD_RETURN</font><font color="4444FF">)</font><font color="#FF0000">0</font><font color="4444FF">;</font>
   <a name="11_line56" href="#11_line56">56</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
   </div>
   <a name="indication_consumer_provider">
   <h3>Indication Consumer Provider</h3></a>
         <p>
           Toe receive Indications, I added an additional provider to the
           module at
           <code>$(PEGASUS_HOME)/src/Providers/sample/ProcessIndicationProvider</code>.
           The following code in the <code>PegasusCreateProvider</code> symbol
           shows how the module creates the different types of providers.
      </p>
   <div class="source">
         <!-- code2html add -lcc -N
   
   extern "C" PEGASUS_EXPORT CIMBaseProvider * PegasusCreateProvider
       (const String & providerName)
   {
   
       if ((String::equalNoCase (providerName, "ProcessIndicationProvider")) ||
           (String::equalNoCase (providerName, "ProcessIndicationProvider2")) ||
           (String::equalNoCase (providerName, "eServer_ProcessIndicationProvider")))
       {
           return (new ProcessIndicationProvider ());
       }
       if(String::equalNoCase(providerName, "eServer_ProcessIndicationConsumer"))
       {
          return new ProcessIndicationConsumer();
       }
   
       return (0);
   }
   --><!-- code2html delete start --><pre><a name="12_line1" href="#12_line1"> 1</a>
   <a name="12_line2" href="#12_line2"> 2</a>
   <a name="12_line3" href="#12_line3"> 3</a> <strong>extern</strong> <font color="#008000">&quot;C&quot;</font> <font color="#2040a0">PEGASUS_EXPORT</font> <font color="#2040a0">CIMBaseProvider</font> <font color="4444FF">*</font> <font color="#2040a0">PegasusCreateProvider</font>
   <a name="12_line4" href="#12_line4"> 4</a>     <font color="4444FF">(</font><strong>const</strong> <font color="#2040a0">String</font> <font color="4444FF">&amp;</font> <font color="#2040a0">providerName</font><font color="4444FF">)</font>
   <a name="12_line5" href="#12_line5"> 5</a> <font color="4444FF"><strong>{</strong></font>
   <a name="12_line6" href="#12_line6"> 6</a>
   <a name="12_line7" href="#12_line7"> 7</a>     <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">String</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">equalNoCase</font> <font color="4444FF">(</font><font color="#2040a0">providerName</font>, <font color="#008000">&quot;ProcessIndicationProvider&quot;</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">|</font><font color="4444FF">|</font>
   <a name="12_line8" href="#12_line8"> 8</a>         <font color="4444FF">(</font><font color="#2040a0">String</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">equalNoCase</font> <font color="4444FF">(</font><font color="#2040a0">providerName</font>, <font color="#008000">&quot;ProcessIndicationProvider2&quot;</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">|</font><font color="4444FF">|</font>
   <a name="12_line9" href="#12_line9"> 9</a>      <font color="4444FF">(</font><font color="#2040a0">String</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">equalNoCase</font> <font color="4444FF">(</font><font color="#2040a0">providerName</font>, <font color="#008000">&quot;eServer_ProcessIndicationProvider&quot;</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="12_line10" href="#12_line10">10</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="12_line11" href="#12_line11">11</a>    <strong>return</strong> <font color="4444FF">(</font><strong>new</strong> <font color="#2040a0">ProcessIndicationProvider</font> <font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="12_line12" href="#12_line12">12</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="12_line13" href="#12_line13">13</a>     <strong>if</strong><font color="4444FF">(</font><font color="#2040a0">String</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">equalNoCase</font><font color="4444FF">(</font><font color="#2040a0">providerName</font>, <font color="#008000">&quot;eServer_ProcessIndicationConsumer&quot;</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="12_line14" href="#12_line14">14</a>     <font color="4444FF"><strong>{</strong></font>
   <a name="12_line15" href="#12_line15">15</a>        <strong>return</strong> <strong>new</strong> <font color="#2040a0">ProcessIndicationConsumer</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="12_line16" href="#12_line16">16</a>     <font color="4444FF"><strong>}</strong></font>
   <a name="12_line17" href="#12_line17">17</a>
   <a name="12_line18" href="#12_line18">18</a>     <strong>return</strong> <font color="4444FF">(</font><font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="12_line19" href="#12_line19">19</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
   </div>
      <h4>Handling the Indication</h4>
       <p>
         The code to handle the Indication in the Consumer Provider is
         straightforward. Note that the consumer clones the indication immediately.
       </p>
   <div class="source">
         <!-- code2html add -lcc -N
   
   void ProcessIndicationConsumer::handleIndication(
         const OperationContext & context,
         const CIMInstance & indication,
         ResponseHandler<void> & handler)
   {
   
      CIMInstance indication_copy = indication.clone();
      PEGASUS_STD(cout) <<
         "Indication Consumer: recieved indication of class: " <<
         indication_copy.getClassName() << PEGASUS_STD(endl);
   
   }
   
   --><!-- code2html delete start --><pre><a name="13_line1" href="#13_line1"> 1</a>
   <a name="13_line2" href="#13_line2"> 2</a>
   <a name="13_line3" href="#13_line3"> 3</a> <strong>void</strong> <font color="#2040a0">ProcessIndicationConsumer</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">handleIndication</font><font color="4444FF">(</font>
   <a name="13_line4" href="#13_line4"> 4</a>       <strong>const</strong> <font color="#2040a0">OperationContext</font> <font color="4444FF">&amp;</font> <font color="#2040a0">context</font>,
   <a name="13_line5" href="#13_line5"> 5</a>       <strong>const</strong> <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">indication</font>,
   <a name="13_line6" href="#13_line6"> 6</a>       <font color="#2040a0">ResponseHandler</font><font color="4444FF">&lt;</font><strong>void</strong><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">handler</font><font color="4444FF">)</font>
   <a name="13_line7" href="#13_line7"> 7</a> <font color="4444FF"><strong>{</strong></font>
   <a name="13_line8" href="#13_line8"> 8</a>
   <a name="13_line9" href="#13_line9"> 9</a>    <font color="#2040a0">CIMInstance</font> <font color="#2040a0">indication_copy</font> <font color="4444FF">=</font> <font color="#2040a0">indication</font>.<font color="#2040a0">clone</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="13_line10" href="#13_line10">10</a>    <font color="#2040a0">PEGASUS_STD</font><font color="4444FF">(</font><font color="#2040a0">cout</font><font color="4444FF">)</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font>
   <a name="13_line11" href="#13_line11">11</a>       <font color="#008000">&quot;Indication Consumer: recieved indication of class: &quot;</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font>
   <a name="13_line12" href="#13_line12">12</a>       <font color="#2040a0">indication_copy</font>.<font color="#2040a0">getClassName</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">&lt;</font><font color="4444FF">&lt;</font> <font color="#2040a0">PEGASUS_STD</font><font color="4444FF">(</font><font color="#2040a0">endl</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="13_line13" href="#13_line13">13</a>
   <a name="13_line14" href="#13_line14">14</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
   </div>
   <a name="indication_processing">
   <h3>Indication Processing Pathway</h3></a>
       <p>
         Now we can show the entire pathway of an Indication as it is generated,
         moved through Pegasus, and handled.
       </p>
       <ol class="enumerated">
         <li>When a subscription is created, the
         <code>IndicationService</code> sends a
         <code>CIMEnableIndicationsRequestMessage</code> to the
         <code>ProviderManagerService</code>.<br><br></li>
   
         <li>The <code>ProviderManagerService</code> creates a
           response handler <a href="#1_line32">from the heap</a>
           and <a href="#1_line58">stores the handler in a hashtable</a>.
           It then calls the provider's <code>enableIndications</code> method.
            <br><br></li>
   
   
         <li>The <code>CIMIndicationProvider</code> handles the
           call to <code>enableIndications</code> by
           <a href="#10_line3">creating an independent monitor
             thread and storing the response handler.</a>
           <br><br></li>
   
         <li>The <a href="#11_line30">indication is
         created</a> by the CIMIndicationProvider and <a href="#11_line45">passed to the
         response handler</a>.<br><br></li>
   
         <li>The response handler <a href="#14_line2">sends a
         <code>CIMProcessIndicationRequestMessage</code></a>, which
         contains the indication, to the
         <code>IndicationService</code>.<br><br></li>
   
         <li>
           The <code>IndicationService</code> <a
           href="#15_line20">retrieves subscriptions that match the
           indication</a> and creates a list of consumers. <br><br></li>
   
           <li> For each consumer in the list the
           <code>IndicationService</code><a href="#16_line36"> creates a
           <code>CIMConsumeIndicationRequestMessage</code></a> and sends
           that message to the consumer.
           <br><br></li>
   
         <li>When the <code>CIMIndicationConsumer</code> <a
         href="#13_line2">recieves the
         <code>CIMConsumeIndicationRequestMessage</code> message</a> it
         clones the indication and processes it.
           <br><br></li>
       </ol>
   
   
   
   <div class="source">
   
   <!-- code2html add -lcc -N
   virtual void deliver(const OperationContext & context, const CIMIndication & cimIndication)
   {
        // ATTN: temporarily convert indication to instance
        CIMInstance cimInstance(cimIndication);
   
        // create message
        CIMProcessIndicationRequestMessage * request =
            new CIMProcessIndicationRequestMessage(
              _request_copy.messageId,
              cimInstance.getPath().getNameSpace(),
              cimInstance,
              QueueIdStack(_target->getQueueId(), _source->getQueueId()));
   
        AsyncLegacyOperationStart * asyncRequest =
            new AsyncLegacyOperationStart(
            _source->get_next_xid(),
            0,
            _target->getQueueId(),
            request,
            _target->getQueueId());
   
       PEGASUS_ASSERT(asyncRequest != 0);
   
        _source->SendForget(asyncRequest);
   }
   
   --><!-- code2html delete start --><pre><a name="14_line1" href="#14_line1"> 1</a>
   <a name="14_line2" href="#14_line2"> 2</a> <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">deliver</font><font color="4444FF">(</font><strong>const</strong> <font color="#2040a0">OperationContext</font> <font color="4444FF">&amp;</font> <font color="#2040a0">context</font>, <strong>const</strong> <font color="#2040a0">CIMIndication</font> <font color="4444FF">&amp;</font> <font color="#2040a0">cimIndication</font><font color="4444FF">)</font>
   <a name="14_line3" href="#14_line3"> 3</a> <font color="4444FF"><strong>{</strong></font>
   <a name="14_line4" href="#14_line4"> 4</a>      <font color="#444444">// ATTN: temporarily convert indication to instance</font>
   <a name="14_line5" href="#14_line5"> 5</a>      <font color="#2040a0">CIMInstance</font> <font color="#2040a0">cimInstance</font><font color="4444FF">(</font><font color="#2040a0">cimIndication</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="14_line6" href="#14_line6"> 6</a>
   <a name="14_line7" href="#14_line7"> 7</a>      <font color="#444444">// create message</font>
   <a name="14_line8" href="#14_line8"> 8</a>      <font color="#2040a0">CIMProcessIndicationRequestMessage</font> <font color="4444FF">*</font> <font color="#2040a0">request</font> <font color="4444FF">=</font>
   <a name="14_line9" href="#14_line9"> 9</a>          <strong>new</strong> <font color="#2040a0">CIMProcessIndicationRequestMessage</font><font color="4444FF">(</font>
   <a name="14_line10" href="#14_line10">10</a>            <font color="#2040a0">_request_copy</font>.<font color="#2040a0">messageId</font>,
   <a name="14_line11" href="#14_line11">11</a>            <font color="#2040a0">cimInstance</font>.<font color="#2040a0">getPath</font><font color="4444FF">(</font><font color="4444FF">)</font>.<font color="#2040a0">getNameSpace</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="14_line12" href="#14_line12">12</a>            <font color="#2040a0">cimInstance</font>,
   <a name="14_line13" href="#14_line13">13</a>            <font color="#2040a0">QueueIdStack</font><font color="4444FF">(</font><font color="#2040a0">_target</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getQueueId</font><font color="4444FF">(</font><font color="4444FF">)</font>, <font color="#2040a0">_source</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getQueueId</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="14_line14" href="#14_line14">14</a>
   <a name="14_line15" href="#14_line15">15</a>      <font color="#2040a0">AsyncLegacyOperationStart</font> <font color="4444FF">*</font> <font color="#2040a0">asyncRequest</font> <font color="4444FF">=</font>
   <a name="14_line16" href="#14_line16">16</a>          <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationStart</font><font color="4444FF">(</font>
   <a name="14_line17" href="#14_line17">17</a>          <font color="#2040a0">_source</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">get_next_xid</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="14_line18" href="#14_line18">18</a>          <font color="#FF0000">0</font>,
   <a name="14_line19" href="#14_line19">19</a>          <font color="#2040a0">_target</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getQueueId</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="14_line20" href="#14_line20">20</a>          <font color="#2040a0">request</font>,
   <a name="14_line21" href="#14_line21">21</a>          <font color="#2040a0">_target</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">getQueueId</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="14_line22" href="#14_line22">22</a>
   <a name="14_line23" href="#14_line23">23</a>     <font color="#2040a0">PEGASUS_ASSERT</font><font color="4444FF">(</font><font color="#2040a0">asyncRequest</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="14_line24" href="#14_line24">24</a>
   <a name="14_line25" href="#14_line25">25</a>      <font color="#2040a0">_source</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">SendForget</font><font color="4444FF">(</font><font color="#2040a0">asyncRequest</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="14_line26" href="#14_line26">26</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
   </div>
   
   
   <div class="source">
   
   <!-- code2html add -lcc -N
   void eServerIndicationService::_handleProcessIndicationRequest(
         const Message *message)
   {
      PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
                        "eServerIndicationService::_handleProcessIndicationRequest");
   
      CIMProcessIndicationRequestMessage* request =
         (CIMProcessIndicationRequestMessage*) message;
   
      CIMException cimException;
   
      CIMProcessIndicationResponseMessage* response =
         new CIMProcessIndicationResponseMessage(
            request->messageId,
            cimException,
            request->queueIds.copyAndPop());
      try
      {
         /* get each name space */
         Array<String> nameSpaceNames;
         _getNameSpaceNames(nameSpaceNames);
   
         Array<CIMInstance> subscriptions;
         CIMInstance indication = request->indicationInstance.clone();
   
         _getMatchingSubscriptions(indication, subscriptions);
   
         // keep this super simple
         // always deliver all properties of the indication class to the consumer
         // every subscription has one indication class and one consumer
         // the consumer is responsible for filtering and multiplexing
   
         Array<CIMObjectPath> absent_consumers;
   
         _deliverIndication(subscriptions,
                            indication,
                            absent_consumers);
   
      }
      catch(CIMException & e)
      {
         response->cimException = e;
      }
      catch(Exception & e)
      {
         response->cimException = PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,
                                                        e.getMessage());
      }
      catch(...)
      {
      response->cimException = PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,
                                                     "Internal Error");
      }
      _enqueueResponse(request, response);
   
      PEG_METHOD_EXIT();
   }
   
   --><!-- code2html delete start --><pre><a name="15_line1" href="#15_line1"> 1</a>
   <a name="15_line2" href="#15_line2"> 2</a> <strong>void</strong> <font color="#2040a0">eServerIndicationService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">_handleProcessIndicationRequest</font><font color="4444FF">(</font>
   <a name="15_line3" href="#15_line3"> 3</a>       <strong>const</strong> <font color="#2040a0">Message</font> <font color="4444FF">*</font><font color="#2040a0">message</font><font color="4444FF">)</font>
   <a name="15_line4" href="#15_line4"> 4</a> <font color="4444FF"><strong>{</strong></font>
   <a name="15_line5" href="#15_line5"> 5</a>    <font color="#2040a0">PEG_METHOD_ENTER</font> <font color="4444FF">(</font><font color="#2040a0">TRC_INDICATION_SERVICE</font>,
   <a name="15_line6" href="#15_line6"> 6</a>                   <font color="#008000">&quot;eServerIndicationService::_handleProcessIndicationRequest&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line7" href="#15_line7"> 7</a>
   <a name="15_line8" href="#15_line8"> 8</a>    <font color="#2040a0">CIMProcessIndicationRequestMessage</font><font color="4444FF">*</font> <font color="#2040a0">request</font> <font color="4444FF">=</font>
   <a name="15_line9" href="#15_line9"> 9</a>       <font color="4444FF">(</font><font color="#2040a0">CIMProcessIndicationRequestMessage</font><font color="4444FF">*</font><font color="4444FF">)</font> <font color="#2040a0">message</font><font color="4444FF">;</font>
   <a name="15_line10" href="#15_line10">10</a>
   <a name="15_line11" href="#15_line11">11</a>    <font color="#2040a0">CIMException</font> <font color="#2040a0">cimException</font><font color="4444FF">;</font>
   <a name="15_line12" href="#15_line12">12</a>
   <a name="15_line13" href="#15_line13">13</a>    <font color="#2040a0">CIMProcessIndicationResponseMessage</font><font color="4444FF">*</font> <font color="#2040a0">response</font> <font color="4444FF">=</font>
   <a name="15_line14" href="#15_line14">14</a>       <strong>new</strong> <font color="#2040a0">CIMProcessIndicationResponseMessage</font><font color="4444FF">(</font>
   <a name="15_line15" href="#15_line15">15</a>     <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">messageId</font>,
   <a name="15_line16" href="#15_line16">16</a>     <font color="#2040a0">cimException</font>,
   <a name="15_line17" href="#15_line17">17</a>     <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">queueIds</font>.<font color="#2040a0">copyAndPop</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line18" href="#15_line18">18</a>    <font color="#2040a0">try</font>
   <a name="15_line19" href="#15_line19">19</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="15_line20" href="#15_line20">20</a>       <font color="#444444">/* get each name space */</font>
   <a name="15_line21" href="#15_line21">21</a>       <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">String</font><font color="4444FF">&gt;</font> <font color="#2040a0">nameSpaceNames</font><font color="4444FF">;</font>
   <a name="15_line22" href="#15_line22">22</a>       <font color="#2040a0">_getNameSpaceNames</font><font color="4444FF">(</font><font color="#2040a0">nameSpaceNames</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line23" href="#15_line23">23</a>
   <a name="15_line24" href="#15_line24">24</a>       <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="#2040a0">subscriptions</font><font color="4444FF">;</font>
   <a name="15_line25" href="#15_line25">25</a>       <font color="#2040a0">CIMInstance</font> <font color="#2040a0">indication</font> <font color="4444FF">=</font> <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">indicationInstance</font>.<font color="#2040a0">clone</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line26" href="#15_line26">26</a>
   <a name="15_line27" href="#15_line27">27</a>       <font color="#2040a0">_getMatchingSubscriptions</font><font color="4444FF">(</font><font color="#2040a0">indication</font>, <font color="#2040a0">subscriptions</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line28" href="#15_line28">28</a>
   <a name="15_line29" href="#15_line29">29</a>       <font color="#444444">// keep this super simple</font>
   <a name="15_line30" href="#15_line30">30</a>       <font color="#444444">// always deliver all properties of the indication class to the consumer</font>
   <a name="15_line31" href="#15_line31">31</a>       <font color="#444444">// every subscription has one indication class and one consumer</font>
   <a name="15_line32" href="#15_line32">32</a>       <font color="#444444">// the consumer is responsible for filtering and multiplexing</font>
   <a name="15_line33" href="#15_line33">33</a>
   <a name="15_line34" href="#15_line34">34</a>       <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMObjectPath</font><font color="4444FF">&gt;</font> <font color="#2040a0">absent_consumers</font><font color="4444FF">;</font>
   <a name="15_line35" href="#15_line35">35</a>
   <a name="15_line36" href="#15_line36">36</a>       <font color="#2040a0">_deliverIndication</font><font color="4444FF">(</font><font color="#2040a0">subscriptions</font>,
   <a name="15_line37" href="#15_line37">37</a>                     <font color="#2040a0">indication</font>,
   <a name="15_line38" href="#15_line38">38</a>                     <font color="#2040a0">absent_consumers</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line39" href="#15_line39">39</a>
   <a name="15_line40" href="#15_line40">40</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="15_line41" href="#15_line41">41</a>    <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">CIMException</font> <font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
   <a name="15_line42" href="#15_line42">42</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="15_line43" href="#15_line43">43</a>       <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">e</font><font color="4444FF">;</font>
   <a name="15_line44" href="#15_line44">44</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="15_line45" href="#15_line45">45</a>    <strong>catch</strong><font color="4444FF">(</font><font color="#2040a0">Exception</font> <font color="4444FF">&amp;</font> <font color="#2040a0">e</font><font color="4444FF">)</font>
   <a name="15_line46" href="#15_line46">46</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="15_line47" href="#15_line47">47</a>       <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">PEGASUS_CIM_EXCEPTION</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>,
   <a name="15_line48" href="#15_line48">48</a>                                                 <font color="#2040a0">e</font>.<font color="#2040a0">getMessage</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line49" href="#15_line49">49</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="15_line50" href="#15_line50">50</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
   <a name="15_line51" href="#15_line51">51</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="15_line52" href="#15_line52">52</a>    <font color="#2040a0">response</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">cimException</font> <font color="4444FF">=</font> <font color="#2040a0">PEGASUS_CIM_EXCEPTION</font><font color="4444FF">(</font><font color="#2040a0">CIM_ERR_FAILED</font>,
   <a name="15_line53" href="#15_line53">53</a>                                              <font color="#008000">&quot;Internal Error&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line54" href="#15_line54">54</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="15_line55" href="#15_line55">55</a>    <font color="#2040a0">_enqueueResponse</font><font color="4444FF">(</font><font color="#2040a0">request</font>, <font color="#2040a0">response</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line56" href="#15_line56">56</a>
   <a name="15_line57" href="#15_line57">57</a>    <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="15_line58" href="#15_line58">58</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
   </div>
   
   
   <div class="source">
   
   <!-- code2html add -lcc -N
   // will return true if ONE subscription is successful.
   // e.g., if one out of three subscriptions results in a
   // successful delivery, will return true. if zero are
   // successful, returns false.
   // consumers that are absent; i.e., not found by the provider registration
   // manager are returned in the absent_consumer
   Boolean  eServerIndicationService::_deliverIndication(
      const Array<CIMInstance> & subscriptions,
      const CIMInstance & indication,
      Array<CIMObjectPath> & absent_consumers)
   {
   
      PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
         "eServerIndicationService::_deliverIndication");
      CIMObjectPath consumer;
      CIMInstance provider, providerModule;
      Boolean ccode = false;
      try
      {
         for(Uint8 i = 0 ; i < subscriptions.size(); ++i, consumer.clear())
         {
            if(true == _get_object_path_from_association("Handler",
                                                         subscriptions[i],
                                                         consumer))
            {
   
               // get the name space
               if(true == _providerRegManager->lookupConsumerProvider(
                     subscriptions[i].getPath().getNameSpace(),
                     consumer.getClassName(),
                     provider,
                     providerModule))
               {
   
                  CIMConsumeIndicationRequestMessage *request =
                     new CIMConsumeIndicationRequestMessage(
                        XmlWriter::getNextMessageId (),
                        indication.getPath().getNameSpace(),
                        indication,
                        provider,
                        providerModule,
                        QueueIdStack(_providerManager, _queueId));
   
                  AsyncOpNode *op = get_op();
   
                  AsyncLegacyOperationStart *async_req  =
                     new AsyncLegacyOperationStart(
                        get_next_xid(),
                        op,
                        _providerManager,
                        request,
                        _queueId);
                  try
                  {
                     if( false == SendForget(async_req) )
                     {
                        async_req = static_cast<AsyncLegacyOperationStart *>(op->get_request());
                        if(async_req)
                           delete async_req->get_action();
                        delete async_req;
                        delete op;
                        // the consumer may not truly be absent, but we couldn't get
                        // the message to him. Maybe the service can do something
                        // with this information.
                        absent_consumers.append(consumer);
                     }
                     else
                     {
                        ccode = true;
                     }
                  }
                  catch(...)
                  {
   
                     async_req = static_cast<AsyncLegacyOperationStart *>(op->get_request());
                     if(async_req)
                        delete async_req->get_action();
                     delete async_req;
                     delete op;
                     // the consumer may not truly be absent, but we couldn't get
                     // the message to him. Maybe the service can do something
                     // with this information.
                     absent_consumers.append(consumer);
                  }
               } // handler is registered as a consumer provider
               else
               {
                  absent_consumers.append(consumer);
               }
   
            } // found the handler path
         } // for each subscription
      } // try
      catch(...)
      {
         throw;
      }
   
      // each subscription contains a reference to a provider
      // that can handle the subscription. extract the handler
      // instance from the reference
      PEG_METHOD_EXIT();
      return ccode;
   }
   --><!-- code2html delete start --><pre><a name="16_line1" href="#16_line1">  1</a>
   <a name="16_line2" href="#16_line2">  2</a> <font color="#444444">// will return true if ONE subscription is successful. </font>
   <a name="16_line3" href="#16_line3">  3</a> <font color="#444444">// e.g., if one out of three subscriptions results in a </font>
   <a name="16_line4" href="#16_line4">  4</a> <font color="#444444">// successful delivery, will return true. if zero are </font>
   <a name="16_line5" href="#16_line5">  5</a> <font color="#444444">// successful, returns false. </font>
   <a name="16_line6" href="#16_line6">  6</a> <font color="#444444">// consumers that are absent; i.e., not found by the provider registration </font>
   <a name="16_line7" href="#16_line7">  7</a> <font color="#444444">// manager are returned in the absent_consumer</font>
   <a name="16_line8" href="#16_line8">  8</a> <font color="#2040a0">Boolean</font>  <font color="#2040a0">eServerIndicationService</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">_deliverIndication</font><font color="4444FF">(</font>
   <a name="16_line9" href="#16_line9">  9</a>    <strong>const</strong> <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMInstance</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">subscriptions</font>,
   <a name="16_line10" href="#16_line10"> 10</a>    <strong>const</strong> <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">indication</font>,
   <a name="16_line11" href="#16_line11"> 11</a>    <font color="#2040a0">Array</font><font color="4444FF">&lt;</font><font color="#2040a0">CIMObjectPath</font><font color="4444FF">&gt;</font> <font color="4444FF">&amp;</font> <font color="#2040a0">absent_consumers</font><font color="4444FF">)</font>
   <a name="16_line12" href="#16_line12"> 12</a> <font color="4444FF"><strong>{</strong></font>
   <a name="16_line13" href="#16_line13"> 13</a>
   <a name="16_line14" href="#16_line14"> 14</a>    <font color="#2040a0">PEG_METHOD_ENTER</font> <font color="4444FF">(</font><font color="#2040a0">TRC_INDICATION_SERVICE</font>,
   <a name="16_line15" href="#16_line15"> 15</a>       <font color="#008000">&quot;eServerIndicationService::_deliverIndication&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line16" href="#16_line16"> 16</a>    <font color="#2040a0">CIMObjectPath</font> <font color="#2040a0">consumer</font><font color="4444FF">;</font>
   <a name="16_line17" href="#16_line17"> 17</a>    <font color="#2040a0">CIMInstance</font> <font color="#2040a0">provider</font>, <font color="#2040a0">providerModule</font><font color="4444FF">;</font>
   <a name="16_line18" href="#16_line18"> 18</a>    <font color="#2040a0">Boolean</font> <font color="#2040a0">ccode</font> <font color="4444FF">=</font> <strong>false</strong><font color="4444FF">;</font>
   <a name="16_line19" href="#16_line19"> 19</a>    <font color="#2040a0">try</font>
   <a name="16_line20" href="#16_line20"> 20</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="16_line21" href="#16_line21"> 21</a>       <strong>for</strong><font color="4444FF">(</font><font color="#2040a0">Uint8</font> <font color="#2040a0">i</font> <font color="4444FF">=</font> <font color="#FF0000">0</font> <font color="4444FF">;</font> <font color="#2040a0">i</font> <font color="4444FF">&lt;</font> <font color="#2040a0">subscriptions</font>.<font color="#2040a0">size</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="4444FF">+</font><font color="4444FF">+</font><font color="#2040a0">i</font>, <font color="#2040a0">consumer</font>.<font color="#2040a0">clear</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="16_line22" href="#16_line22"> 22</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="16_line23" href="#16_line23"> 23</a>    <strong>if</strong><font color="4444FF">(</font><strong>true</strong> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">_get_object_path_from_association</font><font color="4444FF">(</font><font color="#008000">&quot;Handler&quot;</font>,
   <a name="16_line24" href="#16_line24"> 24</a>                                                 <font color="#2040a0">subscriptions</font><font color="4444FF">[</font><font color="#2040a0">i</font><font color="4444FF">]</font>,
   <a name="16_line25" href="#16_line25"> 25</a>                                                 <font color="#2040a0">consumer</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="16_line26" href="#16_line26"> 26</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="16_line27" href="#16_line27"> 27</a>
   <a name="16_line28" href="#16_line28"> 28</a>       <font color="#444444">// get the name space </font>
   <a name="16_line29" href="#16_line29"> 29</a>       <strong>if</strong><font color="4444FF">(</font><strong>true</strong> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">_providerRegManager</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">lookupConsumerProvider</font><font color="4444FF">(</font>
   <a name="16_line30" href="#16_line30"> 30</a>             <font color="#2040a0">subscriptions</font><font color="4444FF">[</font><font color="#2040a0">i</font><font color="4444FF">]</font>.<font color="#2040a0">getPath</font><font color="4444FF">(</font><font color="4444FF">)</font>.<font color="#2040a0">getNameSpace</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="16_line31" href="#16_line31"> 31</a>             <font color="#2040a0">consumer</font>.<font color="#2040a0">getClassName</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="16_line32" href="#16_line32"> 32</a>             <font color="#2040a0">provider</font>,
   <a name="16_line33" href="#16_line33"> 33</a>             <font color="#2040a0">providerModule</font><font color="4444FF">)</font><font color="4444FF">)</font>
   <a name="16_line34" href="#16_line34"> 34</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="16_line35" href="#16_line35"> 35</a>
   <a name="16_line36" href="#16_line36"> 36</a>          <font color="#2040a0">CIMConsumeIndicationRequestMessage</font> <font color="4444FF">*</font><font color="#2040a0">request</font> <font color="4444FF">=</font>
   <a name="16_line37" href="#16_line37"> 37</a>             <strong>new</strong> <font color="#2040a0">CIMConsumeIndicationRequestMessage</font><font color="4444FF">(</font>
   <a name="16_line38" href="#16_line38"> 38</a>                <font color="#2040a0">XmlWriter</font><font color="4444FF">:</font><font color="4444FF">:</font><font color="#2040a0">getNextMessageId</font> <font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="16_line39" href="#16_line39"> 39</a>                <font color="#2040a0">indication</font>.<font color="#2040a0">getPath</font><font color="4444FF">(</font><font color="4444FF">)</font>.<font color="#2040a0">getNameSpace</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="16_line40" href="#16_line40"> 40</a>                <font color="#2040a0">indication</font>,
   <a name="16_line41" href="#16_line41"> 41</a>                <font color="#2040a0">provider</font>,
   <a name="16_line42" href="#16_line42"> 42</a>                <font color="#2040a0">providerModule</font>,
   <a name="16_line43" href="#16_line43"> 43</a>                <font color="#2040a0">QueueIdStack</font><font color="4444FF">(</font><font color="#2040a0">_providerManager</font>, <font color="#2040a0">_queueId</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line44" href="#16_line44"> 44</a>
   <a name="16_line45" href="#16_line45"> 45</a>          <font color="#2040a0">AsyncOpNode</font> <font color="4444FF">*</font><font color="#2040a0">op</font> <font color="4444FF">=</font> <font color="#2040a0">get_op</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line46" href="#16_line46"> 46</a>
   <a name="16_line47" href="#16_line47"> 47</a>          <font color="#2040a0">AsyncLegacyOperationStart</font> <font color="4444FF">*</font><font color="#2040a0">async_req</font>  <font color="4444FF">=</font>
   <a name="16_line48" href="#16_line48"> 48</a>             <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationStart</font><font color="4444FF">(</font>
   <a name="16_line49" href="#16_line49"> 49</a>                <font color="#2040a0">get_next_xid</font><font color="4444FF">(</font><font color="4444FF">)</font>,
   <a name="16_line50" href="#16_line50"> 50</a>                <font color="#2040a0">op</font>,
   <a name="16_line51" href="#16_line51"> 51</a>                <font color="#2040a0">_providerManager</font>,
   <a name="16_line52" href="#16_line52"> 52</a>                <font color="#2040a0">request</font>,
   <a name="16_line53" href="#16_line53"> 53</a>                <font color="#2040a0">_queueId</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line54" href="#16_line54"> 54</a>          <font color="#2040a0">try</font>
   <a name="16_line55" href="#16_line55"> 55</a>          <font color="4444FF"><strong>{</strong></font>
   <a name="16_line56" href="#16_line56"> 56</a>             <strong>if</strong><font color="4444FF">(</font> <strong>false</strong> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">SendForget</font><font color="4444FF">(</font><font color="#2040a0">async_req</font><font color="4444FF">)</font> <font color="4444FF">)</font>
   <a name="16_line57" href="#16_line57"> 57</a>             <font color="4444FF"><strong>{</strong></font>
   <a name="16_line58" href="#16_line58"> 58</a>                <font color="#2040a0">async_req</font> <font color="4444FF">=</font> <strong>static_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">AsyncLegacyOperationStart</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">op</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">get_request</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line59" href="#16_line59"> 59</a>                <strong>if</strong><font color="4444FF">(</font><font color="#2040a0">async_req</font><font color="4444FF">)</font>
   <a name="16_line60" href="#16_line60"> 60</a>                   <strong>delete</strong> <font color="#2040a0">async_req</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">get_action</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line61" href="#16_line61"> 61</a>                <strong>delete</strong> <font color="#2040a0">async_req</font><font color="4444FF">;</font>
   <a name="16_line62" href="#16_line62"> 62</a>                <strong>delete</strong> <font color="#2040a0">op</font><font color="4444FF">;</font>
   <a name="16_line63" href="#16_line63"> 63</a>                <font color="#444444">// the consumer may not truly be absent, but we couldn't get </font>
   <a name="16_line64" href="#16_line64"> 64</a>                <font color="#444444">// the message to him. Maybe the service can do something </font>
   <a name="16_line65" href="#16_line65"> 65</a>                <font color="#444444">// with this information. </font>
   <a name="16_line66" href="#16_line66"> 66</a>                <font color="#2040a0">absent_consumers</font>.<font color="#2040a0">append</font><font color="4444FF">(</font><font color="#2040a0">consumer</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line67" href="#16_line67"> 67</a>             <font color="4444FF"><strong>}</strong></font>
   <a name="16_line68" href="#16_line68"> 68</a>             <strong>else</strong>
   <a name="16_line69" href="#16_line69"> 69</a>             <font color="4444FF"><strong>{</strong></font>
   <a name="16_line70" href="#16_line70"> 70</a>                <font color="#2040a0">ccode</font> <font color="4444FF">=</font> <strong>true</strong><font color="4444FF">;</font>
   <a name="16_line71" href="#16_line71"> 71</a>             <font color="4444FF"><strong>}</strong></font>
   <a name="16_line72" href="#16_line72"> 72</a>          <font color="4444FF"><strong>}</strong></font>
   <a name="16_line73" href="#16_line73"> 73</a>          <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
   <a name="16_line74" href="#16_line74"> 74</a>          <font color="4444FF"><strong>{</strong></font>
   <a name="16_line75" href="#16_line75"> 75</a>
   <a name="16_line76" href="#16_line76"> 76</a>             <font color="#2040a0">async_req</font> <font color="4444FF">=</font> <strong>static_cast</strong><font color="4444FF">&lt;</font><font color="#2040a0">AsyncLegacyOperationStart</font> <font color="4444FF">*</font><font color="4444FF">&gt;</font><font color="4444FF">(</font><font color="#2040a0">op</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">get_request</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line77" href="#16_line77"> 77</a>             <strong>if</strong><font color="4444FF">(</font><font color="#2040a0">async_req</font><font color="4444FF">)</font>
   <a name="16_line78" href="#16_line78"> 78</a>                <strong>delete</strong> <font color="#2040a0">async_req</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">get_action</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line79" href="#16_line79"> 79</a>             <strong>delete</strong> <font color="#2040a0">async_req</font><font color="4444FF">;</font>
   <a name="16_line80" href="#16_line80"> 80</a>             <strong>delete</strong> <font color="#2040a0">op</font><font color="4444FF">;</font>
   <a name="16_line81" href="#16_line81"> 81</a>             <font color="#444444">// the consumer may not truly be absent, but we couldn't get </font>
   <a name="16_line82" href="#16_line82"> 82</a>             <font color="#444444">// the message to him. Maybe the service can do something </font>
   <a name="16_line83" href="#16_line83"> 83</a>             <font color="#444444">// with this information. </font>
   <a name="16_line84" href="#16_line84"> 84</a>             <font color="#2040a0">absent_consumers</font>.<font color="#2040a0">append</font><font color="4444FF">(</font><font color="#2040a0">consumer</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line85" href="#16_line85"> 85</a>          <font color="4444FF"><strong>}</strong></font>
   <a name="16_line86" href="#16_line86"> 86</a>       <font color="4444FF"><strong>}</strong></font> <font color="#444444">// handler is registered as a consumer provider </font>
   <a name="16_line87" href="#16_line87"> 87</a>       <strong>else</strong>
   <a name="16_line88" href="#16_line88"> 88</a>       <font color="4444FF"><strong>{</strong></font>
   <a name="16_line89" href="#16_line89"> 89</a>          <font color="#2040a0">absent_consumers</font>.<font color="#2040a0">append</font><font color="4444FF">(</font><font color="#2040a0">consumer</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line90" href="#16_line90"> 90</a>       <font color="4444FF"><strong>}</strong></font>
   <a name="16_line91" href="#16_line91"> 91</a>
   <a name="16_line92" href="#16_line92"> 92</a>    <font color="4444FF"><strong>}</strong></font> <font color="#444444">// found the handler path </font>
   <a name="16_line93" href="#16_line93"> 93</a>       <font color="4444FF"><strong>}</strong></font> <font color="#444444">// for each subscription</font>
   <a name="16_line94" href="#16_line94"> 94</a>    <font color="4444FF"><strong>}</strong></font> <font color="#444444">// try </font>
   <a name="16_line95" href="#16_line95"> 95</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
   <a name="16_line96" href="#16_line96"> 96</a>    <font color="4444FF"><strong>{</strong></font>
   <a name="16_line97" href="#16_line97"> 97</a>       <strong>throw</strong><font color="4444FF">;</font>
   <a name="16_line98" href="#16_line98"> 98</a>    <font color="4444FF"><strong>}</strong></font>
   <a name="16_line99" href="#16_line99"> 99</a>
   <a name="16_line100" href="#16_line100">100</a>    <font color="#444444">// each subscription contains a reference to a provider </font>
   <a name="16_line101" href="#16_line101">101</a>    <font color="#444444">// that can handle the subscription. extract the handler</font>
   <a name="16_line102" href="#16_line102">102</a>    <font color="#444444">// instance from the reference </font>
   <a name="16_line103" href="#16_line103">103</a>    <font color="#2040a0">PEG_METHOD_EXIT</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
   <a name="16_line104" href="#16_line104">104</a>    <strong>return</strong> <font color="#2040a0">ccode</font><font color="4444FF">;</font>
   <a name="16_line105" href="#16_line105">105</a> <font color="4444FF"><strong>}</strong></font>
   </pre><!-- code2html delete stop -->
   </div>
       <hr>
       <address><a href="mailto:mdday@us.ibm.com">Michael Day (work)</a></address>
       <address><a href="mailto:md@soft-hackle.net">Michael Day (home)</a></address>
       <!-- Created: Fri Dec 27 16:05:58 EST 2002 -->
   
   <!-- hhmts start -->
   Last modified: Thu Feb 13 11:46:43 EST 2003
   <!-- hhmts end -->
     </body>
   </html>


Legend:
Removed from v.1.1  
changed lines
  Added in v.1.1.2.1

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2