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

   1 mday  1.1.2.1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   2               <html>
   3                 <head>
   4                   <title>PEP # 5: Proposal to Fix Indications in Pegasus</title>
   5                   <link rel="stylesheet" type="text/css" href="http://www.soft-hackle.net/md.css">
   6                 </head>
   7                 <body>
   8                 <table>
   9                   <tr>
  10               
  11                     <td>
  12               	<img height="70" src="http://www.opengroup.org/images/pegicon2.gif" width="70" border="0">
  13                     </td>
  14                     <td>
  15               	<h1>PEP #: 5</h1>
  16                     </td>
  17                   </tr>
  18                   <tr>
  19                     <td colspan="2"><h1>TITLE: Proposal to Fix Indications in Pegasus</h1></td>
  20                   </tr>
  21                 </table>
  22 mday  1.1.2.1   <div class="comment">
  23                   Version: $Revision: $<br>
  24                     Author: Mike Day<br>
  25               	State: Draft<br>
  26               	  Type: Architecture<br>
  27               	    Vote: <br>
  28               	      Created: 6 January 2003<br>
  29               		Version 1.0 Mon Jan  6 17:39:09 2003
  30                 </div>
  31                 <hr>
  32                   <h2>Summary</h2>
  33                   <p>
  34                     This document details my experiences getting CIM Indications to
  35                     work with the Pegasus CIMOM. It explains the changes I had to
  36                     make, the bugs I had to fix, and then makes some design
  37                     recommendations for integrating Indication support into the Open
  38                     Group CVS tree. 
  39                   </p>
  40                   <h3>What Works? </h3>
  41                   <p>
  42                     I have Pegasus supporting Indications, subscriptions, and
  43 mday  1.1.2.1       handlers. It works really well. All the CIM operations related
  44                     to indications and subscriptions work. I have tests and test
  45                     providers. 
  46                   </p>
  47               
  48                   <h2>Proposal</h2>
  49                   <p>
  50                     Commit the changes outlined in this document to the 
  51                     development (main) branch of the TOG CVS for Pegasus 
  52                     for inclusion in Pegasus release 2.2
  53                   </p>
  54               
  55                   <h2>Terminology</h2>
  56                   <p>
  57                     Early feedback on this document has requested clarification of some 
  58                     terms I use later. 
  59                   </p>
  60               
  61                   <dl class="enumerated">
  62                     <dt>Response Handler</dt>
  63                     <dd>Callback class that receives operation results from Providers. 
  64 mday  1.1.2.1 	This object heirarchy was designed specifically to support 
  65               	asynchronous result delivery from providers, such as Indications.
  66                     Examples include <code>OperationResponseHandler</code> and 
  67                     <code>EnableIndicationsResponseHandler</code></dd>
  68               
  69                     <dt>Indication Consumer Provider</dt>
  70                     <dd>The C++ object that receives the <code>CIMIndication</code> for 
  71               	handling. This proposal defines a new type of provider that
  72                     supports the <code>CIMIndicationConsumer</code> interface 
  73                     as defined by Chip Vincent. The <code>CIMIndicationConsumer</code>
  74                     replaces the <code>IndicationHandler</code> that is currently
  75                     in the source tree. However, the <code>IndicationHandler</code> can be 
  76                     adjacent (post) to the <code>CIMIndicationConsumer</code> in the 
  77                     indication processing path if required for compatibilty.</dd>
  78               
  79                     <dt>Indication Handler</dt>
  80                     <dd>Existing service in Pegasus for receiving indications and 
  81               	dispatching them to applications. This service has never been 
  82               	supported, and I propose to replace it with the Indication Consumer
  83               	Provider (above). It can be optionally layered upon the Indication Consumer 
  84               	Provider if required.</dd>
  85 mday  1.1.2.1 
  86                     <dt>Export Server</dt>
  87                     <dd>Pegasus Service that exports <code>CIMIndication</code> instances
  88               	to other Pegasus instances. I do not refer to the Export Server in this 
  89               	proposal. Its use is compatible with this proposal but optional.</dd> 
  90               
  91                     <dt>Export Client</dt> <dd>Pegasus Service that listens for and
  92                     receives <code>CIMIndication</code> instances exported by other
  93                     Pegasus instances. I do not refer to the Export Client in this
  94                     proposal. Its use is compatible with this proposal but
  95                     optional.</dd>
  96               
  97                   </dl>
  98               
  99               
 100                   <h2>Table of Contents</h2>
 101                   <ol class="enumerated">
 102                     <li><a href="#plan_of_attack">My Plan of Attack</a></li>
 103                     <li><a href="#what_did_I_do">What did I have to Do?</a></li>
 104                     <li><a href="#where_is_code">Where is the Source Code?</a></li>
 105                     <li><a href="#cvs">What is the Status of Indication Support in the CVS?</a></li>
 106 mday  1.1.2.1       <li><a href="#consumer_provider">Indication Consumer Provider</a></li>
 107                     <li><a href="#elusive_bugs">Elusive Bugs I Fixed</a></li>
 108                     <li><a href="#indication_consumer">Indication Consumer Support Code</a></li>
 109                     <li><a href="#provider_schema_mods">Provider Schema Modifications</a></li>
 110                     <li><a href="#provider_reg_mgr">Provider Registration Manager Modifications</a></li>
 111                     <li><a href="#instantiate_providers">Instantiating the Modified Schema and Providers</a></li>
 112                     <li><a href="#indication_provider">Indication Provider</a></li>
 113                     <li><a href="#indication_consumer_provider">Indication Consumer Provider</a></li>
 114                     <li><a href="#indication_processing">Indication Processing Pathway</a></li>
 115                     </ol>
 116               
 117               <a name="plan_of_attack"><h3>My Plan of Attack</h3></a>
 118                   <p>
 119                     There is a ton of rich functionality in the existing Pegasus
 120                     code base for handling Indications and Subscriptions. The
 121                     problem is, none of it has been tested due to gating bugs in the
 122                     Pegasus core.
 123                   </p> 
 124                   <p>
 125                     All of the subscription options, policies, and error handling is
 126                     fantastic code but causes real problems when all you want to do
 127 mday  1.1.2.1       is get the underlying mechanisms to work. In fact, the
 128                     "commercial grade" features of the
 129                     <code>IndicationService</code> tend to obfuscate the underlying
 130                     breaks in the Pegasus core that are gating Indication
 131                     support. So I embarked on a simplification strategy. 
 132                   </p>
 133                   <div class="notice">
 134                     <p>
 135               	Basic Indication Handling should be easy, and robust
 136               	Indication Handling should be possible. (Yes, I stole this
 137               	quote from Larry Wall.)  To this end I removed some of the
 138               	functionality from the <code>IndicationService</code>, such as
 139               	enforcing the schema and implementing policy.
 140                     </p>
 141                     <p>
 142               	I wrote a basic <code>IndicationService</code> and
 143               	<code>ConsumerProvider</code> that stresses the core of
 144               	Pegasus and assures the functionality of Indications and
 145               	Subscriptions.</p>
 146                     <p>
 147               	If I need error handling policy and schema enforcement, I
 148 mday  1.1.2.1 	should be able to create or reactivate the more robust HP
 149               	Indication Service and substitute it for the simple one. Or I
 150               	can graft features from the HP service to the simple one. But
 151               	I shouldn't have to use the untested complex features to debug
 152               	the inner workings of Pegasus.
 153                     </p>
 154                   </div>
 155               
 156               <a name="what_did_I_do">
 157                   <h3>What Did I Have to Do to get Indications Working?</h3></a>
 158                   <p>
 159                     A little bit of everything. This is an area of Pegasus that has
 160                     never been completed nore tested. The table below shows the
 161                     steps I had to take, in order, to get this work completed. 
 162                   </p>
 163                   <ol class="enumerated">
 164                     <caption><div class="caption">Tasks I Completed to Get 
 165               	  Indications working in Pegasus<br><br>
 166               	</div></caption>
 167                     <li>Fix some elusive bugs.</li>
 168                     <li>Successfully run the existing <code>wbem-exec</code> tests
 169 mday  1.1.2.1 	in the <code>test/wetest/cimv2/subscription</code> directory.</li>
 170                     <li>Subclass the PG_Provider and PG_Indication Schemata to allow
 171               	Providers to be Indication Handlers.</li>
 172                     <li>Modify the <code>ProviderRegistrationManager</code> to allow
 173               	for the new "type 6" provider (see above).</li>
 174                     <li>Create a new <code>CIMConsumeIndication</code> Message (see
 175               	item 3 above).
 176                     <li>Rewrite the <code>IndicationService</code> to redirect
 177               	Indications to the <code>ProviderManager</code> (see items 3-5
 178               	and above).
 179                     <li>Modify the <code>ProviderManager</code> to treat
 180               	<code>CIMConsumerProvider</code> modules differently because
 181               	they are asynchronous by definition.</li>
 182                     <li>Instantiate the new Providers in a compiled Schema. (I
 183               	piggy-backed on the existing repository build scripts.)</li>
 184                     <li>Write a <code>CIMIndicationProvider</code> and a
 185               	<code>CIMIndicationConsumer</code> and start testing.</li>
 186                   </ol>
 187               <a name="where_is_code">
 188                   <h3>Where is the source code?</h3></a>
 189                   <p>
 190 mday  1.1.2.1       IBM has, out of necessity, maintained a version of Pegasus that
 191                     has the original C++ provider interfaces. We did this to support
 192                     existing providers that we shipped prior to the interface
 193                     changes this past fall. 
 194               
 195                     I did the work necessary to support indications on IBM's
 196                     "classic" snapshot of the source repository. That's where the
 197                     source code is. Most of the changes were not related to provider
 198                     interfaces so merging indication support into the Open Group CVS
 199                     is feasible. 
 200                   </p>
 201                   <p>
 202                     Consider this document as a design proposal for indication
 203                     support; and also as a proposal for checking the source code
 204                     into the Open Group CVS.
 205                   </p>
 206                   <p>
 207                     I also anticipate making this available as a snapshot on an ftp
 208                     server.
 209                   </p>
 210               
 211 mday  1.1.2.1     <a name="cvs">
 212                   <h3>What is the status of Indication Support in the Open Group
 213                     CVS?</h3></a>
 214                   <p>
 215                     Indications in the Open Group Pegasus 2.x do not work and are
 216                     not close to working. There are bugs that need to be fixed and
 217                     design changes that need to be made. They are fairly completely
 218                     discussed in this document.
 219                   </p>
 220                   
 221                   <a name="consumer_provider">
 222                   <h3>Indication Consumer Provider</h3></a>
 223                   <p>
 224                     Chip Vincent and I have long preferred to use Pegasus providers
 225                     to handle indications. Doing so removes the need for a separate
 226                     <code>IndicationHandler</code> service. Instead, the handler can
 227                     reuse all the infrastructure that exists for Providers. 
 228                   </p>
 229                   <p>
 230                     Another benefit of using Pegasus providers to handle indications
 231                     is that developers do not need to learn another service
 232 mday  1.1.2.1       interface. The provider interface is sufficient. Also, this
 233                     means that we (Pegasus developers) do not need to provide
 234                     separate developer support for handling indications and
 235                     generating indications. 
 236                   </p>
 237                   <p>
 238                     Once a <code>CIMIndicationProvider</code> routine generates a
 239                     <code>CIMIndication</code>, the modified
 240                     <code>OperationResponseHandler</code> creates a
 241                     <code>CIMConsumeIndication</code> message and passes the
 242                     indication to the <code>ProviderManagerService</code>; the
 243                     provider manager then finds the "handler," which is really a
 244                     provider, and calls <code>provider.handleIndication()</code>.
 245                   </p>
 246                   <p>
 247                     There is no need for a separate handler service, which makes
 248                     error handling and debugging simpler.
 249                   </p>
 250               
 251               
 252                   <h4>Tasks to Support Indication Consumer Providers</h4>
 253 mday  1.1.2.1     <p>
 254                     This was not as simple as activiating the
 255                     <code>CIMIndicationConsumer</code> code that has been in the
 256                     source tree for quite some time. I had to ensure that this new
 257                     type of provider was supported throughout Pegasus. 
 258                   </p>
 259                   <ol class="enumerated">
 260               	<a href="#indication_consumer"><li>Indication Consumer Support Code</a><br></li>
 261                       <a href="#provider_schema_mods"><li>Provider Schema Modifications</a><br></li>
 262                       <a href="#provider_reg_mgr"><li>Provider Registration Manager Modifications</a><br></li>
 263                   <a href="#instantiate_providers"><li>Instantiating the Modified Schema and Providers</a><br></li>
 264               
 265                 </ol>
 266                   
 267               <a name="elusive_bugs">
 268                   <h3>Elusive Bugs I Fixed</h3></a>
 269                     <ol class="enumerated">
 270                     <li>
 271               	<a href="#bug_1">Indication Response Handler Allocated on
 272               	  Stack</a><br><br></li>
 273                     <li><a href="#bug_2">
 274 mday  1.1.2.1 	Response Handler Created with Reference to Transient Messages
 275               	</a><br><br></li>
 276                     <li>
 277               	<a href="#bug_3">
 278               	Converting References to CIMInstances
 279               	</a><br><br></li>
 280                     <li><a href="#bug_4">
 281               	Pegasus Array Template and Virtual Base Classes in Provider 
 282               	Heirarchy	
 283                     </a><br><br></li>
 284                     <li><a href="#bug_5">
 285               	  Double Deletes in Redirected Message Pathways
 286               	</a><br><br></li>
 287                     </ol>
 288                   <a name="bug_1">
 289                   <h4>Indication Response Handler allocated on stack</h4></a>
 290                   <p>
 291                     The <code>ProviderManagerService</code> was creating an indication
 292               	response handler within a local code block and passing that to
 293               	the Indication Provider with an <code>EnableIndication</code>
 294               	message. After the ProviderManagerService returned from enabling
 295 mday  1.1.2.1 	the indication, response handler went out of scope and was
 296               	destroyed. When the Indication Provider called
 297               	<code>handler.deliver(indication)</code>, it was using a
 298               	reference to an object that was destroyed. The result was a
 299               	core dump.
 300                   </p>
 301                   <div class="source">
 302                   <h5>The fix - allocate response handler from heap and store for
 303                   the life of the indication enablement</h5>
 304                     <p>
 305               	The important lines for enabling a new subscription are 
 306               	<a href="#1_line32">32</a> and
 307               	<a href="#1_line58">58</a>.<br>
 308               	<br>
 309               	The important line for disabling an existing subscription is 
 310               	<a href="#1_line136">136</a>.
 311               	
 312                     </p>
 313                     <!-- code2html add -lcc -N bug_1.cpp
 314                     --><!-- 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>
 315               <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>
 316 mday  1.1.2.1 <a name="1_line3" href="#1_line3">  3</a> <font color="4444FF"><strong>{</strong></font>
 317               <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>, 
 318               <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>
 319               <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>
 320               <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>
 321               <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>
 322               <a name="1_line9" href="#1_line9">  9</a> 
 323               <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> 
 324               <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>
 325               <a name="1_line12" href="#1_line12"> 12</a> 
 326               <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>
 327               <a name="1_line14" href="#1_line14"> 14</a> 
 328               <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>
 329               <a name="1_line16" href="#1_line16"> 16</a>       <strong>new</strong> <font color="#2040a0">CIMEnableIndicationsResponseMessage</font><font color="4444FF">(</font>
 330               <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>,
 331               <a name="1_line18" href="#1_line18"> 18</a> 	 <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="4444FF">)</font>,
 332               <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>
 333               <a name="1_line20" href="#1_line20"> 20</a> 
 334               <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>
 335               <a name="1_line22" href="#1_line22"> 22</a> 
 336               <a name="1_line23" href="#1_line23"> 23</a>    <font color="#444444">// preserve message key</font>
 337 mday  1.1.2.1 <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>
 338               <a name="1_line25" href="#1_line25"> 25</a> 
 339               <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>
 340               <a name="1_line27" href="#1_line27"> 27</a> 
 341               <a name="1_line28" href="#1_line28"> 28</a>    <font color="#444444">// Allocate the response handler from the heap using new (). </font>
 342               <a name="1_line29" href="#1_line29"> 29</a>    <font color="#444444">// Otherwise it will go out of scope and the indication, which </font>
 343               <a name="1_line30" href="#1_line30"> 30</a>    <font color="#444444">// happens later, will go off into outer space...</font>
 344               <a name="1_line31" href="#1_line31"> 31</a> 
 345               <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> 
 346               <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>
 347               <a name="1_line34" href="#1_line34"> 34</a> 
 348               <a name="1_line35" href="#1_line35"> 35</a>    <font color="#2040a0">try</font>
 349               <a name="1_line36" href="#1_line36"> 36</a>    <font color="4444FF"><strong>{</strong></font>
 350               <a name="1_line37" href="#1_line37"> 37</a>       <font color="#444444">// get the provider file name and logical name</font>
 351               <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>
 352               <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>
 353               <a name="1_line40" href="#1_line40"> 40</a> 
 354               <a name="1_line41" href="#1_line41"> 41</a>       <font color="#444444">// get cached or load new provider module</font>
 355               <a name="1_line42" href="#1_line42"> 42</a>       <font color="#2040a0">Provider</font> <font color="#2040a0">provider</font> <font color="4444FF">=</font>
 356               <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>
 357               <a name="1_line44" href="#1_line44"> 44</a> 
 358 mday  1.1.2.1 <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>, 
 359               <a name="1_line46" href="#1_line46"> 46</a> 		       <font color="#008000">&quot;Calling provider.enableIndications: &quot;</font> <font color="4444FF">+</font> 
 360               <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>
 361               <a name="1_line48" href="#1_line48"> 48</a>        
 362               <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>
 363               <a name="1_line50" href="#1_line50"> 50</a> 
 364               <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>
 365               <a name="1_line52" href="#1_line52"> 52</a>       <font color="#444444">// long as the provider has indications enabled. </font>
 366               <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>, 
 367               <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>
 368               <a name="1_line55" href="#1_line55"> 55</a>        
 369               <a name="1_line56" href="#1_line56"> 56</a> 
 370               <a name="1_line57" href="#1_line57"> 57</a>       <font color="#444444">// keep indication handlers in a hash table keyed by the provider. </font>
 371               <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>
 372               <a name="1_line59" href="#1_line59"> 59</a>    <font color="4444FF"><strong>}</strong></font>
 373               <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>
 374               <a name="1_line61" href="#1_line61"> 61</a>    <font color="4444FF"><strong>{</strong></font>
 375               <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>, 
 376               <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>
 377               <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>
 378               <a name="1_line65" href="#1_line65"> 65</a>    <font color="4444FF"><strong>}</strong></font>
 379 mday  1.1.2.1 <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>
 380               <a name="1_line67" href="#1_line67"> 67</a>    <font color="4444FF"><strong>{</strong></font>
 381               <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>, 
 382               <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>
 383               <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>
 384               <a name="1_line71" href="#1_line71"> 71</a>    <font color="4444FF"><strong>}</strong></font>
 385               <a name="1_line72" href="#1_line72"> 72</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
 386               <a name="1_line73" href="#1_line73"> 73</a>    <font color="4444FF"><strong>{</strong></font>
 387               <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>, 
 388               <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>
 389               <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>
 390               <a name="1_line77" href="#1_line77"> 77</a>    <font color="4444FF"><strong>}</strong></font>
 391               <a name="1_line78" href="#1_line78"> 78</a>        
 392               <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>
 393               <a name="1_line80" href="#1_line80"> 80</a>       <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationResult</font><font color="4444FF">(</font>
 394               <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>,
 395               <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>,
 396               <a name="1_line83" href="#1_line83"> 83</a> 	 <font color="#2040a0">op</font>,
 397               <a name="1_line84" href="#1_line84"> 84</a> 	 <font color="#2040a0">response</font><font color="4444FF">)</font><font color="4444FF">;</font>
 398               <a name="1_line85" href="#1_line85"> 85</a> 
 399               <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>
 400 mday  1.1.2.1 <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>
 401               <a name="1_line88" href="#1_line88"> 88</a> <font color="4444FF"><strong>}</strong></font>
 402               <a name="1_line89" href="#1_line89"> 89</a> 
 403               <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>
 404               <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>
 405               <a name="1_line92" href="#1_line92"> 92</a> <font color="4444FF"><strong>{</strong></font>
 406               <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>, 
 407               <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>
 408               <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>
 409               <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>
 410               <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>
 411               <a name="1_line98" href="#1_line98"> 98</a> 
 412               <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>
 413               <a name="1_line100" href="#1_line100">100</a> 
 414               <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>
 415               <a name="1_line102" href="#1_line102">102</a> 
 416               <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>
 417               <a name="1_line104" href="#1_line104">104</a>       <strong>new</strong> <font color="#2040a0">CIMDisableIndicationsResponseMessage</font><font color="4444FF">(</font>
 418               <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>,
 419               <a name="1_line106" href="#1_line106">106</a> 	 <font color="#2040a0">CIMException</font><font color="4444FF">(</font><font color="4444FF">)</font>,
 420               <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>
 421 mday  1.1.2.1 <a name="1_line108" href="#1_line108">108</a> 
 422               <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>
 423               <a name="1_line110" href="#1_line110">110</a> 
 424               <a name="1_line111" href="#1_line111">111</a>    <font color="#444444">// preserve message key</font>
 425               <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>
 426               <a name="1_line113" href="#1_line113">113</a> 
 427               <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>
 428               <a name="1_line115" href="#1_line115">115</a>    <font color="#2040a0">try</font>
 429               <a name="1_line116" href="#1_line116">116</a>    <font color="4444FF"><strong>{</strong></font>
 430               <a name="1_line117" href="#1_line117">117</a>       <font color="#444444">// get the provider file name and logical name</font>
 431               <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>
 432               <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>
 433               <a name="1_line120" href="#1_line120">120</a> 
 434               <a name="1_line121" href="#1_line121">121</a>       <font color="#444444">// get cached or load new provider module</font>
 435               <a name="1_line122" href="#1_line122">122</a>       <font color="#2040a0">Provider</font> <font color="#2040a0">provider</font> <font color="4444FF">=</font>
 436               <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>
 437               <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>, 
 438               <a name="1_line125" href="#1_line125">125</a> 		       <font color="#008000">&quot;Calling provider.disableIndications: &quot;</font> <font color="4444FF">+</font> 
 439               <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>
 440               <a name="1_line127" href="#1_line127">127</a> 	
 441               <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>
 442 mday  1.1.2.1 <a name="1_line129" href="#1_line129">129</a> 
 443               <a name="1_line130" href="#1_line130">130</a>       <font color="#444444">// Now that indications are disabled we can extract and remove the </font>
 444               <a name="1_line131" href="#1_line131">131</a>       <font color="#444444">// indication response handler </font>
 445               <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>, 
 446               <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> 
 447               <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>
 448               <a name="1_line135" href="#1_line135">135</a> 	
 449               <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>
 450               <a name="1_line137" href="#1_line137">137</a>    <font color="4444FF"><strong>}</strong></font>
 451               <a name="1_line138" href="#1_line138">138</a> 
 452               <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>
 453               <a name="1_line140" href="#1_line140">140</a>    <font color="4444FF"><strong>{</strong></font>
 454               <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>, 
 455               <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>
 456               <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>
 457               <a name="1_line144" href="#1_line144">144</a>    <font color="4444FF"><strong>}</strong></font>
 458               <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>
 459               <a name="1_line146" href="#1_line146">146</a>    <font color="4444FF"><strong>{</strong></font>
 460               <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>, 
 461               <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>
 462               <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>
 463 mday  1.1.2.1 <a name="1_line150" href="#1_line150">150</a>    <font color="4444FF"><strong>}</strong></font>
 464               <a name="1_line151" href="#1_line151">151</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
 465               <a name="1_line152" href="#1_line152">152</a>    <font color="4444FF"><strong>{</strong></font>
 466               <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>, 
 467               <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>
 468               <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>
 469               <a name="1_line156" href="#1_line156">156</a>    <font color="4444FF"><strong>}</strong></font>
 470               <a name="1_line157" href="#1_line157">157</a> 
 471               <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>
 472               <a name="1_line159" href="#1_line159">159</a>       <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationResult</font><font color="4444FF">(</font>
 473               <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>,
 474               <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>,
 475               <a name="1_line162" href="#1_line162">162</a> 	 <font color="#2040a0">op</font>,
 476               <a name="1_line163" href="#1_line163">163</a> 	 <font color="#2040a0">response</font><font color="4444FF">)</font><font color="4444FF">;</font>
 477               <a name="1_line164" href="#1_line164">164</a> 
 478               <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>
 479               <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>
 480               <a name="1_line167" href="#1_line167">167</a> <font color="4444FF"><strong>}</strong></font>
 481               </pre><!-- code2html delete stop -->
 482                   </div>
 483                   <a name="bug_2">
 484 mday  1.1.2.1     <h4>Response Handler Created with Reference to Transient Messages</h4></a>
 485                   <p>
 486                     The <code>OperationResponseHandler</code> and derivative classes
 487                     are constructed with a reference to <code>CIMRequest</code> and
 488                     <code>CIMResponse</code> messages (i.e., the request/response
 489                     pair related to the operation). These references were stored and
 490                     used during the processing of responses. These references
 491                     pointed to message that were deleted when the thread of
 492                     execution left the dispatcher. For most CIM operations this is
 493                     not a problem. However, in the case of indications the responses
 494                     occur asynchronously. This caused the message references to
 495                     point to deleted memory. Even this did not manifest a problem until the
 496                     response handler was destroyed, which occured when the 
 497                     <code>DisableIndications</code> message made its way to the 
 498                     <code>ProviderManagerService</code>.
 499                   </p>
 500                   <div class="source">
 501                     <h5>The fix - copy the messages passed to the response handler.</h5>
 502                     <p>
 503               	The lines that implement the fix are <a href="#2_line14">14 and 15</a>
 504               	and <a href="#2_line102">102 and 103</a>.
 505 mday  1.1.2.1       </p>
 506                     <p>
 507               	This is a fix that, in my opinion, should be generally applied
 508               	to all response handlers.
 509                     </p>
 510                     <!-- code2html add -lcc -N bug_2.h
 511                     --><!-- code2html delete start --><pre><a name="2_line1" href="#2_line1">  1</a> <font color="#444444">////////////////////-*-c++-*-///////////////////////////////////////////</font>
 512               <a name="2_line2" href="#2_line2">  2</a> <strong>class</strong> <font color="#2040a0">EnableIndicationsResponseHandler</font> <font color="4444FF">:</font> 
 513               <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>
 514               <a name="2_line4" href="#2_line4">  4</a> <font color="4444FF"><strong>{</strong></font>
 515               <a name="2_line5" href="#2_line5">  5</a>    <strong>public</strong><font color="4444FF">:</font>
 516               <a name="2_line6" href="#2_line6">  6</a>       <font color="#2040a0">EnableIndicationsResponseHandler</font><font color="4444FF">(</font>
 517               <a name="2_line7" href="#2_line7">  7</a> 	 <font color="#2040a0">CIMEnableIndicationsRequestMessage</font> <font color="4444FF">*</font> <font color="#2040a0">request</font>,
 518               <a name="2_line8" href="#2_line8">  8</a> 	 <font color="#2040a0">CIMEnableIndicationsResponseMessage</font> <font color="4444FF">*</font> <font color="#2040a0">response</font>,
 519               <a name="2_line9" href="#2_line9">  9</a> 	 <font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font> <font color="#2040a0">source</font>,
 520               <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>
 521               <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>,
 522               <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>,
 523               <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>,
 524               <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>,
 525               <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>
 526 mday  1.1.2.1 <a name="2_line16" href="#2_line16"> 16</a>       <font color="4444FF"><strong>{</strong></font>
 527               <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>
 528               <a name="2_line18" href="#2_line18"> 18</a> 
 529               <a name="2_line19" href="#2_line19"> 19</a>         <font color="#444444">// get indication service</font>
 530               <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>
 531               <a name="2_line21" href="#2_line21"> 21</a>         <font color="4444FF"><strong>{</strong></font>
 532               <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>
 533               <a name="2_line23" href="#2_line23"> 23</a> 
 534               <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>
 535               <a name="2_line25" href="#2_line25"> 25</a> 	       <font color="#2040a0">PEGASUS_QUEUENAME_ESERVER_INDICATIONSERVICE</font>, 
 536               <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>
 537               <a name="2_line27" href="#2_line27"> 27</a> 
 538               <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>
 539               <a name="2_line29" href="#2_line29"> 29</a> 
 540               <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>
 541               <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>
 542               <a name="2_line32" href="#2_line32"> 32</a> 
 543               <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>
 544               <a name="2_line34" href="#2_line34"> 34</a>         <font color="4444FF"><strong>}</strong></font>
 545               <a name="2_line35" href="#2_line35"> 35</a>     <font color="4444FF"><strong>}</strong></font>
 546               <a name="2_line36" href="#2_line36"> 36</a> 
 547 mday  1.1.2.1 <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>
 548               <a name="2_line38" href="#2_line38"> 38</a>     <font color="4444FF"><strong>{</strong></font>
 549               <a name="2_line39" href="#2_line39"> 39</a>         <font color="#2040a0">OperationContext</font> <font color="#2040a0">context</font><font color="4444FF">;</font>
 550               <a name="2_line40" href="#2_line40"> 40</a> 
 551               <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>
 552               <a name="2_line42" href="#2_line42"> 42</a>     <font color="4444FF"><strong>}</strong></font>
 553               <a name="2_line43" href="#2_line43"> 43</a> 
 554               <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>, 
 555               <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>
 556               <a name="2_line46" href="#2_line46"> 46</a>     <font color="4444FF"><strong>{</strong></font>
 557               <a name="2_line47" href="#2_line47"> 47</a>         <font color="#444444">// ATTN: temporarily convert indication to instance</font>
 558               <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>
 559               <a name="2_line49" href="#2_line49"> 49</a> 
 560               <a name="2_line50" href="#2_line50"> 50</a>         <font color="#444444">// create message</font>
 561               <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>
 562               <a name="2_line52" href="#2_line52"> 52</a>             <strong>new</strong> <font color="#2040a0">CIMProcessIndicationRequestMessage</font><font color="4444FF">(</font>
 563               <a name="2_line53" href="#2_line53"> 53</a> 	       <font color="#2040a0">_request_copy</font>.<font color="#2040a0">messageId</font>,
 564               <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>,
 565               <a name="2_line55" href="#2_line55"> 55</a>             <font color="#2040a0">cimInstance</font>,
 566               <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>
 567               <a name="2_line57" href="#2_line57"> 57</a> 
 568 mday  1.1.2.1 <a name="2_line58" href="#2_line58"> 58</a>         <font color="#444444">// send message</font>
 569               <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>
 570               <a name="2_line60" href="#2_line60"> 60</a>         <font color="#444444">// AsyncOpNode * op = _source-&gt;get_op();</font>
 571               <a name="2_line61" href="#2_line61"> 61</a> 
 572               <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>
 573               <a name="2_line63" href="#2_line63"> 63</a>             <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationStart</font><font color="4444FF">(</font>
 574               <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>,
 575               <a name="2_line65" href="#2_line65"> 65</a>             <font color="#FF0000">0</font>,
 576               <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>,
 577               <a name="2_line67" href="#2_line67"> 67</a>             <font color="#2040a0">request</font>,
 578               <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>
 579               <a name="2_line69" href="#2_line69"> 69</a> 
 580               <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>
 581               <a name="2_line71" href="#2_line71"> 71</a> 
 582               <a name="2_line72" href="#2_line72"> 72</a>         <font color="#444444">//AsyncReply * asyncReply = _source-&gt;SendWait(asyncRequest);</font>
 583               <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>
 584               <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>
 585               <a name="2_line75" href="#2_line75"> 75</a>         <font color="#444444">//PEGASUS_ASSERT(asyncReply != 0);</font>
 586               <a name="2_line76" href="#2_line76"> 76</a> 
 587               <a name="2_line77" href="#2_line77"> 77</a>         <font color="#444444">//  Chip - receiver of the request should delete it</font>
 588               <a name="2_line78" href="#2_line78"> 78</a>         <font color="#444444">//delete asyncRequest;</font>
 589 mday  1.1.2.1 <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>
 590               <a name="2_line80" href="#2_line80"> 80</a>     <font color="4444FF"><strong>}</strong></font>
 591               <a name="2_line81" href="#2_line81"> 81</a> 
 592               <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>
 593               <a name="2_line83" href="#2_line83"> 83</a>     <font color="4444FF"><strong>{</strong></font>
 594               <a name="2_line84" href="#2_line84"> 84</a>         <font color="#2040a0">OperationContext</font> <font color="#2040a0">context</font><font color="4444FF">;</font>
 595               <a name="2_line85" href="#2_line85"> 85</a> 
 596               <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>
 597               <a name="2_line87" href="#2_line87"> 87</a>     <font color="4444FF"><strong>}</strong></font>
 598               <a name="2_line88" href="#2_line88"> 88</a> 
 599               <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>, 
 600               <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>
 601               <a name="2_line91" href="#2_line91"> 91</a>     <font color="4444FF"><strong>{</strong></font>
 602               <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>
 603               <a name="2_line93" href="#2_line93"> 93</a>         <font color="4444FF"><strong>{</strong></font>
 604               <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>
 605               <a name="2_line95" href="#2_line95"> 95</a>         <font color="4444FF"><strong>}</strong></font>
 606               <a name="2_line96" href="#2_line96"> 96</a>     <font color="4444FF"><strong>}</strong></font>
 607               <a name="2_line97" href="#2_line97"> 97</a> 
 608               <a name="2_line98" href="#2_line98"> 98</a>    <strong>protected</strong><font color="4444FF">:</font>
 609               <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>
 610 mday  1.1.2.1 <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>
 611               <a name="2_line101" href="#2_line101">101</a>    <strong>private</strong><font color="4444FF">:</font>
 612               <a name="2_line102" href="#2_line102">102</a>       <font color="#2040a0">CIMEnableIndicationsRequestMessage</font> <font color="#2040a0">_request_copy</font><font color="4444FF">;</font>
 613               <a name="2_line103" href="#2_line103">103</a>       <font color="#2040a0">CIMEnableIndicationsResponseMessage</font> <font color="#2040a0">_response_copy</font><font color="4444FF">;</font>
 614               <a name="2_line104" href="#2_line104">104</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
 615               </pre><!-- code2html delete stop -->
 616                   </div>
 617               <a name="bug_3">
 618               <h4>Converting References to CIMInstances</h4></a>
 619                   <p>
 620                     References stored in subscriptions and providers were sometimes
 621                     being handled incorrectly in the <code>IndicationService</code>
 622                     and the <code>ProviderRegistrationManager</code>, at least when
 623                     the relationship between class names, class properties, and
 624                     reference properties was concerned. Reference handling in
 625                     general could use a library of helper routines. It is too error
 626                     prone right now to extract a reference and turn it into a
 627                     <code>CIMInstance</code>.</p>
 628                   <p>
 629                     As I was reviewing the <code>IndicationService</code> I noticed
 630                     that a lot of the "dereferencing" of references was done in
 631 mday  1.1.2.1       fairly long code segments that repeated themselves several times
 632                     with only slight differences. I decided to distill that code
 633                     into some more compact helper routines. I started on this but
 634                     haven't finished yet. 
 635                   </p>
 636               
 637                   <div class="source">
 638                     <h5>Partial Fix: helper routines</h5>
 639                     <div class= "comment">
 640                     <p>
 641               	I started working on some helper routines in my re-written
 642               	<code>IndicationService</code>. Distilling a few routines into
 643               	lower-level helpers allowed my to jettison a lot of code. As
 644               	far as I could tell the code in the original Indication
 645               	Service that I replaced should work just fine but I couldn't
 646               	get it to. I felt that distilling the code would give me an
 647               	edge in fixing underlying Pegasus bugs. I still think the bugs
 648               	  were elsewhere (not in the <code>IndicationService</code>)
 649               	  but I can't prove it. 
 650                     </p>
 651               
 652 mday  1.1.2.1       <p>
 653               	In general I think that Pegasus could benefit greatly from a
 654               	library of similar, more general, static helper routines to deal
 655               	with name spaces and the conversion between references and the
 656               	instances they refer to.
 657                     </p>
 658                     <p>
 659               	I also did some similar rewrites in the
 660               	<code>ProviderRegistrationManager</code>.
 661                     </p>
 662                     </div>
 663                     <!-- code2html add -lcc -N bug_3.cpp
 664                     --><!-- code2html delete start --><pre><a name="3_line1" href="#3_line1">  1</a> 
 665               <a name="3_line2" href="#3_line2">  2</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
 666               <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>
 667               <a name="3_line4" href="#3_line4">  4</a> <font color="#444444">// Return a CIMObjectPath that contains the instance of the referred </font>
 668               <a name="3_line5" href="#3_line5">  5</a> <font color="#444444">// to object. </font>
 669               <a name="3_line6" href="#3_line6">  6</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
 670               <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>
 671               <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>,
 672               <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>, 
 673 mday  1.1.2.1 <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> 
 674               <a name="3_line11" href="#3_line11"> 11</a> <font color="4444FF"><strong>{</strong></font>
 675               <a name="3_line12" href="#3_line12"> 12</a>    
 676               <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>
 677               <a name="3_line14" href="#3_line14"> 14</a>    <font color="#2040a0">try</font>
 678               <a name="3_line15" href="#3_line15"> 15</a>    <font color="4444FF"><strong>{</strong></font>
 679               <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>
 680               <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>
 681               <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>
 682               <a name="3_line19" href="#3_line19"> 19</a>    <font color="4444FF"><strong>}</strong></font>
 683               <a name="3_line20" href="#3_line20"> 20</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
 684               <a name="3_line21" href="#3_line21"> 21</a>    <font color="4444FF"><strong>{</strong></font>
 685               <a name="3_line22" href="#3_line22"> 22</a>       <strong>return</strong> <strong>false</strong><font color="4444FF">;</font>
 686               <a name="3_line23" href="#3_line23"> 23</a>    <font color="4444FF"><strong>}</strong></font>
 687               <a name="3_line24" href="#3_line24"> 24</a>    
 688               <a name="3_line25" href="#3_line25"> 25</a>    <strong>return</strong> <strong>true</strong><font color="4444FF">;</font>
 689               <a name="3_line26" href="#3_line26"> 26</a> <font color="4444FF"><strong>}</strong></font>
 690               <a name="3_line27" href="#3_line27"> 27</a> 
 691               <a name="3_line28" href="#3_line28"> 28</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
 692               <a name="3_line29" href="#3_line29"> 29</a> <font color="#444444">// Get all the name spaces in the repository. </font>
 693               <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>
 694 mday  1.1.2.1 <a name="3_line31" href="#3_line31"> 31</a> <font color="#444444">// able to call</font>
 695               <a name="3_line32" href="#3_line32"> 32</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
 696               <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>
 697               <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>
 698               <a name="3_line35" href="#3_line35"> 35</a> <font color="4444FF"><strong>{</strong></font>
 699               <a name="3_line36" href="#3_line36"> 36</a>    
 700               <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>,
 701               <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>
 702               <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>
 703               <a name="3_line40" href="#3_line40"> 40</a>    
 704               <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>
 705               <a name="3_line42" href="#3_line42"> 42</a>    
 706               <a name="3_line43" href="#3_line43"> 43</a>    <font color="#2040a0">try</font>
 707               <a name="3_line44" href="#3_line44"> 44</a>    <font color="4444FF"><strong>{</strong></font>
 708               <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>
 709               <a name="3_line46" href="#3_line46"> 46</a>    <font color="4444FF"><strong>}</strong></font>
 710               <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>
 711               <a name="3_line48" href="#3_line48"> 48</a>    <font color="4444FF"><strong>{</strong></font>
 712               <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>
 713               <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>
 714               <a name="3_line51" href="#3_line51"> 51</a>    <font color="4444FF"><strong>}</strong></font>
 715 mday  1.1.2.1 <a name="3_line52" href="#3_line52"> 52</a>    
 716               <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>
 717               <a name="3_line54" href="#3_line54"> 54</a>    
 718               <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>
 719               <a name="3_line56" href="#3_line56"> 56</a> <font color="4444FF"><strong>}</strong></font>
 720               <a name="3_line57" href="#3_line57"> 57</a> 
 721               <a name="3_line58" href="#3_line58"> 58</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
 722               <a name="3_line59" href="#3_line59"> 59</a> <font color="#444444">// Get all subscriptions that refer to a specific indication class</font>
 723               <a name="3_line60" href="#3_line60"> 60</a> <font color="#444444">// returns subscriptions in all name spaces. Calls lower-level</font>
 724               <a name="3_line61" href="#3_line61"> 61</a> <font color="#444444">// _getMatchingSubscriptions. </font>
 725               <a name="3_line62" href="#3_line62"> 62</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
 726               <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>
 727               <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>,
 728               <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> 
 729               <a name="3_line66" href="#3_line66"> 66</a> <font color="4444FF"><strong>{</strong></font>
 730               <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>
 731               <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>
 732               <a name="3_line69" href="#3_line69"> 69</a>    
 733               <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>
 734               <a name="3_line71" href="#3_line71"> 71</a>    <font color="4444FF"><strong>{</strong></font>
 735               <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>,
 736 mday  1.1.2.1 <a name="3_line73" href="#3_line73"> 73</a> 				 <font color="#2040a0">indication</font>, 
 737               <a name="3_line74" href="#3_line74"> 74</a> 				 <font color="#2040a0">subscriptions</font><font color="4444FF">)</font><font color="4444FF">;</font>
 738               <a name="3_line75" href="#3_line75"> 75</a>    <font color="4444FF"><strong>}</strong></font>
 739               <a name="3_line76" href="#3_line76"> 76</a> <font color="4444FF"><strong>}</strong></font>
 740               <a name="3_line77" href="#3_line77"> 77</a> 
 741               <a name="3_line78" href="#3_line78"> 78</a> 
 742               <a name="3_line79" href="#3_line79"> 79</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
 743               <a name="3_line80" href="#3_line80"> 80</a> <font color="#444444">// Get all subscriptions that refer to a specific indication class</font>
 744               <a name="3_line81" href="#3_line81"> 81</a> <font color="#444444">// for a specific name space. </font>
 745               <a name="3_line82" href="#3_line82"> 82</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
 746               <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>
 747               <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>, 
 748               <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>,
 749               <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>
 750               <a name="3_line87" href="#3_line87"> 87</a> <font color="4444FF"><strong>{</strong></font>
 751               <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>
 752               <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>
 753               <a name="3_line90" href="#3_line90"> 90</a>    
 754               <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>
 755               <a name="3_line92" href="#3_line92"> 92</a>    <font color="#2040a0">CIMObjectPath</font> <font color="#2040a0">compare_path</font><font color="4444FF">;</font>
 756               <a name="3_line93" href="#3_line93"> 93</a>    
 757 mday  1.1.2.1 <a name="3_line94" href="#3_line94"> 94</a> 
 758               <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> 
 759               <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> 
 760               <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>
 761               <a name="3_line98" href="#3_line98"> 98</a>    <font color="4444FF"><strong>{</strong></font>
 762               <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>, 
 763               <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>,
 764               <a name="3_line101" href="#3_line101">101</a> 					<font color="#2040a0">compare_path</font><font color="4444FF">)</font><font color="4444FF">;</font>
 765               <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>
 766               <a name="3_line103" href="#3_line103">103</a>       <font color="4444FF"><strong>{</strong></font>
 767               <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>
 768               <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>
 769               <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>
 770               <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>
 771               <a name="3_line108" href="#3_line108">108</a>       <font color="4444FF"><strong>}</strong></font>
 772               <a name="3_line109" href="#3_line109">109</a>     <font color="4444FF"><strong>}</strong></font>
 773               <a name="3_line110" href="#3_line110">110</a>    <strong>return</strong><font color="4444FF">;</font>
 774               <a name="3_line111" href="#3_line111">111</a> <font color="4444FF"><strong>}</strong></font>
 775               <a name="3_line112" href="#3_line112">112</a> 
 776               <a name="3_line113" href="#3_line113">113</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////</font>
 777               <a name="3_line114" href="#3_line114">114</a> <font color="#444444">// Get all subscriptions in the repository for a specific name space</font>
 778 mday  1.1.2.1 <a name="3_line115" href="#3_line115">115</a> <font color="#444444">///////////////////////////////////////////////////////////////////</font>
 779               <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>
 780               <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>, 
 781               <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>
 782               <a name="3_line119" href="#3_line119">119</a> <font color="4444FF"><strong>{</strong></font>
 783               <a name="3_line120" href="#3_line120">120</a>    
 784               <a name="3_line121" href="#3_line121">121</a> 
 785               <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>,
 786               <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>
 787               <a name="3_line124" href="#3_line124">124</a>    
 788               <a name="3_line125" href="#3_line125">125</a>    <font color="#444444">//</font>
 789               <a name="3_line126" href="#3_line126">126</a>    <font color="#444444">//  Get existing subscriptions in current namespace</font>
 790               <a name="3_line127" href="#3_line127">127</a>    <font color="#444444">//</font>
 791               <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>
 792               <a name="3_line129" href="#3_line129">129</a> 
 793               <a name="3_line130" href="#3_line130">130</a>    <font color="#2040a0">try</font>
 794               <a name="3_line131" href="#3_line131">131</a>    <font color="4444FF"><strong>{</strong></font>
 795               <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>
 796               <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>
 797               <a name="3_line134" href="#3_line134">134</a>    <font color="4444FF"><strong>}</strong></font>
 798               <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>
 799 mday  1.1.2.1 <a name="3_line136" href="#3_line136">136</a>    <font color="4444FF"><strong>{</strong></font>
 800               <a name="3_line137" href="#3_line137">137</a>       <font color="#444444">//</font>
 801               <a name="3_line138" href="#3_line138">138</a>       <font color="#444444">//  Some namespaces may not include the subscription class</font>
 802               <a name="3_line139" href="#3_line139">139</a>       <font color="#444444">//  In that case, just return no subscriptions</font>
 803               <a name="3_line140" href="#3_line140">140</a>       <font color="#444444">//  Any other exception is an error</font>
 804               <a name="3_line141" href="#3_line141">141</a>       <font color="#444444">//</font>
 805               <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>
 806               <a name="3_line143" href="#3_line143">143</a>       <font color="4444FF"><strong>{</strong></font>
 807               <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>
 808               <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>
 809               <a name="3_line146" href="#3_line146">146</a>       <font color="4444FF"><strong>}</strong></font>
 810               <a name="3_line147" href="#3_line147">147</a>    <font color="4444FF"><strong>}</strong></font>
 811               <a name="3_line148" href="#3_line148">148</a> 
 812               <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>
 813               <a name="3_line150" href="#3_line150">150</a> 
 814               <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>
 815               <a name="3_line152" href="#3_line152">152</a> <font color="4444FF"><strong>}</strong></font>
 816               </pre><!-- code2html delete stop -->
 817                   </div>
 818               <a name="bug_4">
 819               <h4>Pegasus Array Template and Virtual Base Classes in Provider Heirarchy</h4></a>
 820 mday  1.1.2.1     <p>
 821                     I think this bug is pretty well understood among Pegasus
 822                     developers. The problem is in the <code>Array</code> and the way
 823                     it moves elements that are inserted or deleted from to or from
 824                     an existing array. The problem only manifests itself when arrays
 825                     store objects that have a virtual base class, such as
 826                     <code>Provider</code>.
 827                   </p>
 828                   <div class="source">
 829                     <h5><a href="#array_fix">Fix</a> - only store pointers to dynamically allocated objects
 830               	in hashtables - when those objects have a virtual base. </h5>
 831                     <div class="comment">
 832               	<p>
 833               	The source of the problem is in lines <a
 834               	href="#4_line17">17</a> and <a href="#4_line47">47</a>.
 835               	</p>
 836               	<p>
 837               	  Classes like <code>Provider</code>, which has a virtual base
 838               	  class, stores a pointer to that virtual base class within
 839               	  its object. When the <code>Array</code> moves the memory
 840               	  upon an insert or delete, it moves the class object but does
 841 mday  1.1.2.1 	  not reinitialize the object's pointer to its virtual
 842               	  base. The object is then corrupt because its vtable has a
 843               	  bad pointer to the object's virtual base class. 
 844               	</p>
 845               	<p>
 846               	  The problem is related to indications because the
 847               	  <code>IndicationService</code> needs to load Indication
 848               	  providers when an indication is enabled. Typically this
 849               	  happens after Pegasus is up and running for a while and
 850               	  therefore the <code>memmove</code> is more likely to corrupt
 851               	  vtables as described above. The <a href="#array_fix">fix</a>
 852               	  is below.
 853               	</p>
 854                     </div>
 855                     <!-- code2html add -lcc -N bug_4.h
 856                     --><!-- code2html delete start --><pre><a name="4_line1" href="#4_line1"> 1</a> <font color="#444444">// -*-c++-*-</font>
 857               <a name="4_line2" href="#4_line2"> 2</a> <font color="0000ff"><strong>#ifndef PEGASUS_ARRAY_T</strong></font>
 858               <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>
 859               <a name="4_line4" href="#4_line4"> 4</a> <font color="0000ff"><strong>#endif</strong></font>
 860               <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>, 
 861               <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>, 
 862 mday  1.1.2.1 <a name="4_line7" href="#4_line7"> 7</a> 				    <font color="#2040a0">Uint32</font> <font color="#2040a0">size</font><font color="4444FF">)</font>
 863               <a name="4_line8" href="#4_line8"> 8</a> <font color="4444FF"><strong>{</strong></font>
 864               <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>
 865               <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>
 866               <a name="4_line11" href="#4_line11">11</a> 
 867               <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>
 868               <a name="4_line13" href="#4_line13">13</a> 
 869               <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>
 870               <a name="4_line15" href="#4_line15">15</a> 
 871               <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>
 872               <a name="4_line17" href="#4_line17">17</a>         <font color="#2040a0">memmove</font><font color="4444FF">(</font>
 873               <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>, 
 874               <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>, 
 875               <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>
 876               <a name="4_line21" href="#4_line21">21</a> 
 877               <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>
 878               <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>
 879               <a name="4_line24" href="#4_line24">24</a> <font color="4444FF"><strong>}</strong></font>
 880               <a name="4_line25" href="#4_line25">25</a> 
 881               <a name="4_line26" href="#4_line26">26</a> <font color="0000ff"><strong>#ifndef PEGASUS_ARRAY_T</strong></font>
 882               <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>
 883 mday  1.1.2.1 <a name="4_line28" href="#4_line28">28</a> <font color="0000ff"><strong>#endif</strong></font>
 884               <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>
 885               <a name="4_line30" href="#4_line30">30</a> <font color="4444FF"><strong>{</strong></font>
 886               <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>
 887               <a name="4_line32" href="#4_line32">32</a> <font color="4444FF"><strong>}</strong></font>
 888               <a name="4_line33" href="#4_line33">33</a> 
 889               <a name="4_line34" href="#4_line34">34</a> <font color="0000ff"><strong>#ifndef PEGASUS_ARRAY_T</strong></font>
 890               <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>
 891               <a name="4_line36" href="#4_line36">36</a> <font color="0000ff"><strong>#endif</strong></font>
 892               <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>
 893               <a name="4_line38" href="#4_line38">38</a> <font color="4444FF"><strong>{</strong></font>
 894               <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>
 895               <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>
 896               <a name="4_line41" href="#4_line41">41</a> 
 897               <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>
 898               <a name="4_line43" href="#4_line43">43</a> 
 899               <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>
 900               <a name="4_line45" href="#4_line45">45</a> 
 901               <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>
 902               <a name="4_line47" href="#4_line47">47</a>         <font color="#2040a0">memmove</font><font color="4444FF">(</font>
 903               <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>, 
 904 mday  1.1.2.1 <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>, 
 905               <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>
 906               <a name="4_line51" href="#4_line51">51</a> 
 907               <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>
 908               <a name="4_line53" href="#4_line53">53</a> <font color="4444FF"><strong>}</strong></font>
 909               </pre><!-- code2html delete stop -->
 910                     <div class="comment">
 911               	<p>
 912                     <a name="array_fix">To fix</a> the problem with
 913                     <code>Array</code> and classes having a virtual base, you must
 914                     store a pointer to the object instead of a reference. An example
 915                     of the fix in the <code>ProviderManager</code> is in <a
 916                     href="#5_line10">lines 10-11</a>, and lines <a
 917                     href="#5_line33">33</a> and <a href="#5_line45">45</a>.
 918               	</p>
 919               	<p>
 920               	  These lines cause pointer to <code>Provider</code> objects
 921               	  to be stored in the <code>ProviderManager</code>'s hash
 922               	  table, instead of the objects themselves. This avoids the
 923               	  problem with vtable corruption but requires management of
 924               	  dynamically allocated objects. 
 925 mday  1.1.2.1 	</p>
 926                     </div>      
 927                     <!-- code2html add -lcc -N bug_5.cpp
 928                     --><!-- code2html delete start --><pre><a name="5_line1" href="#5_line1"> 1</a> 
 929               <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>
 930               <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>
 931               <a name="5_line4" href="#5_line4"> 4</a> <font color="4444FF"><strong>{</strong></font>
 932               <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>, 
 933               <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>,
 934               <a name="5_line7" href="#5_line7"> 7</a> 		    <font color="#008000">&quot;Creating Provider Module &quot;</font> <font color="4444FF">+</font> 
 935               <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>
 936               <a name="5_line9" href="#5_line9"> 9</a> 	    
 937               <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>
 938               <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>
 939               <a name="5_line12" href="#5_line12">12</a> <font color="4444FF"><strong>}</strong></font>
 940               <a name="5_line13" href="#5_line13">13</a> <strong>else</strong> 
 941               <a name="5_line14" href="#5_line14">14</a> <font color="4444FF"><strong>{</strong></font>
 942               <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>,
 943               <a name="5_line16" href="#5_line16">16</a> 		    <font color="#008000">&quot;Using Cached  Provider Module &quot;</font> <font color="4444FF">+</font> 
 944               <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>
 945               <a name="5_line18" href="#5_line18">18</a> <font color="4444FF"><strong>}</strong></font>
 946 mday  1.1.2.1 <a name="5_line19" href="#5_line19">19</a> 	 
 947               <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>,
 948               <a name="5_line21" href="#5_line21">21</a> 		 <font color="#008000">&quot;Loading/Linking Provider Module &quot;</font> <font color="4444FF">+</font> 
 949               <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>
 950               <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>
 951               <a name="5_line24" href="#5_line24">24</a> 	    
 952               <a name="5_line25" href="#5_line25">25</a> <font color="#444444">// create provider module</font>
 953               <a name="5_line26" href="#5_line26">26</a>    
 954               <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>
 955               <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>
 956               <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>
 957               <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> 
 958               <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>
 959               <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>
 960               <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>
 961               <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>
 962               <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>
 963               <a name="5_line36" href="#5_line36">36</a> 
 964               <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>, 
 965               <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>
 966               <a name="5_line39" href="#5_line39">39</a> 	 
 967 mday  1.1.2.1 <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> 
 968               <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>
 969               <a name="5_line42" href="#5_line42">42</a> 	 
 970               <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>
 971               <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>
 972               <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>
 973               </pre><!-- code2html delete stop -->
 974                   </div>
 975               <a name="bug_5">    
 976               <h4>Double Deletes in Redirected Message Pathways</h4></a>
 977                   <p>
 978                     There were a couple of double deletes of
 979                     <code>asyncOpNodes</code> in message paths that were two or
 980                     three steps removed from the shortest path. These were in 
 981                     code that had never been exersized. 
 982                   </p>
 983                   
 984               
 985                   <h4>Untested code</h4>
 986                   <p>
 987                     The <code>IndicationService</code>, the
 988 mday  1.1.2.1       <code>IndicationHandlerService</code>,
 989                     and the <code>ProviderRegistrationManager</code> each contained
 990                     code paths that were untested. Really, they were blocked from
 991                     running successfully due to <i>elusive bugs</i> (see above). 
 992                   </p>
 993                   <p>
 994                     In the case of the <code>ProviderRegistrationManager</code>, most of
 995                     that code was tested so I only needed to step through a few
 996                     cases. 
 997                   </p>
 998                   <p>
 999                     Most of the <code>IndicationService</code> and <i>all</i> of
1000                     the <code>IndicationHandler</code> were untested to my knowledge
1001                     and they each comprise a lot of code. 
1002                   </p>
1003               
1004               
1005                   <a name="indication_consumer">
1006                     <h3>Indication Consumer Support Code</h3></a>
1007                   <p>
1008                     Chip Vincent defined the <code>CIMIndicationConsumer</code>
1009 mday  1.1.2.1       interface during the definition of the original C++ provider
1010                     manager. It is not used in the Open Group CVS right now, but I
1011                     use it to support Indication handling. 
1012                   </p>
1013                   <div class="source">
1014                     <!-- code2html add -lcc -N src/Pegasus/Provider/CIMIndicationConsumer.h
1015                     --><!-- code2html delete start --><pre><a name="6_line1" href="#6_line1"> 1</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////////////////</font>
1016               <a name="6_line2" href="#6_line2"> 2</a> <font color="#444444">//</font>
1017               <a name="6_line3" href="#6_line3"> 3</a> <font color="#444444">// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,</font>
1018               <a name="6_line4" href="#6_line4"> 4</a> <font color="#444444">// The Open Group, Tivoli Systems</font>
1019               <a name="6_line5" href="#6_line5"> 5</a> <font color="#444444">//</font>
1020               <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>
1021               <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>
1022               <a name="6_line8" href="#6_line8"> 8</a> <font color="#444444">// deal in the Software without restriction, including without limitation the</font>
1023               <a name="6_line9" href="#6_line9"> 9</a> <font color="#444444">// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or</font>
1024               <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>
1025               <a name="6_line11" href="#6_line11">11</a> <font color="#444444">// furnished to do so, subject to the following conditions:</font>
1026               <a name="6_line12" href="#6_line12">12</a> <font color="#444444">//</font>
1027               <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>
1028               <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>
1029               <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>
1030 mday  1.1.2.1 <a name="6_line16" href="#6_line16">16</a> <font color="#444444">// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR</font>
1031               <a name="6_line17" href="#6_line17">17</a> <font color="#444444">// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</font>
1032               <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>
1033               <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>
1034               <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>
1035               <a name="6_line21" href="#6_line21">21</a> <font color="#444444">//</font>
1036               <a name="6_line22" href="#6_line22">22</a> <font color="#444444">//==============================================================================</font>
1037               <a name="6_line23" href="#6_line23">23</a> <font color="#444444">//</font>
1038               <a name="6_line24" href="#6_line24">24</a> <font color="#444444">// Author: Chip Vincent (cvincent@us.ibm.com)</font>
1039               <a name="6_line25" href="#6_line25">25</a> <font color="#444444">//</font>
1040               <a name="6_line26" href="#6_line26">26</a> <font color="#444444">// Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)</font>
1041               <a name="6_line27" href="#6_line27">27</a> <font color="#444444">//</font>
1042               <a name="6_line28" href="#6_line28">28</a> <font color="#444444">//%/////////////////////////////////////////////////////////////////////////////</font>
1043               <a name="6_line29" href="#6_line29">29</a> 
1044               <a name="6_line30" href="#6_line30">30</a> <font color="0000ff"><strong>#ifndef Pegasus_CIMIndicationConsumer_h</strong></font>
1045               <a name="6_line31" href="#6_line31">31</a> <font color="0000ff"><strong>#define Pegasus_CIMIndicationConsumer_h</strong></font>
1046               <a name="6_line32" href="#6_line32">32</a> 
1047               <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>
1048               <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>
1049               <a name="6_line35" href="#6_line35">35</a> 
1050               <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>
1051 mday  1.1.2.1 <a name="6_line37" href="#6_line37">37</a> 
1052               <a name="6_line38" href="#6_line38">38</a> <font color="#2040a0">PEGASUS_NAMESPACE_BEGIN</font>
1053               <a name="6_line39" href="#6_line39">39</a> 
1054               <a name="6_line40" href="#6_line40">40</a> <font color="#444444"><i>/**
1055               <a name="6_line41" href="#6_line41">41</a> This class defines the set of methods implemented by an indication consumer provider.
1056               <a name="6_line42" href="#6_line42">42</a> A providers that derives from this class must implement all methods. The minimal method
1057               <a name="6_line43" href="#6_line43">43</a> implementation simply throw the NotSupported exception.
1058               <a name="6_line44" href="#6_line44">44</a> */</i></font>
1059               <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>
1060               <a name="6_line46" href="#6_line46">46</a> <font color="4444FF"><strong>{</strong></font>
1061               <a name="6_line47" href="#6_line47">47</a> <strong>public</strong><font color="4444FF">:</font>
1062               <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>
1063               <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>
1064               <a name="6_line50" href="#6_line50">50</a> 
1065               <a name="6_line51" href="#6_line51">51</a>     <font color="#444444"><i>/**
1066               <a name="6_line52" href="#6_line52">52</a>     @param contex contains security and locale information relevant for the lifetime
1067               <a name="6_line53" href="#6_line53">53</a>     of this operation.
1068               <a name="6_line54" href="#6_line54">54</a> 
1069               <a name="6_line55" href="#6_line55">55</a>     @param indication
1070               <a name="6_line56" href="#6_line56">56</a> 
1071               <a name="6_line57" href="#6_line57">57</a>     @param handler asynchronusly processes the results of this operation.
1072 mday  1.1.2.1 <a name="6_line58" href="#6_line58">58</a> 
1073               <a name="6_line59" href="#6_line59">59</a>     @exception NotSupported
1074               <a name="6_line60" href="#6_line60">60</a>     @exception InvalidParameter
1075               <a name="6_line61" href="#6_line61">61</a>     */</i></font>
1076               <a name="6_line62" href="#6_line62">62</a>     <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">handleIndication</font><font color="4444FF">(</font>
1077               <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>,
1078               <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>,
1079               <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>
1080               <a name="6_line66" href="#6_line66">66</a> 
1081               <a name="6_line67" href="#6_line67">67</a>     <font color="#444444">// ATTN: The following method is only for testing purposes.</font>
1082               <a name="6_line68" href="#6_line68">68</a>     <strong>virtual</strong> <strong>void</strong> <font color="#2040a0">handleIndication</font><font color="4444FF">(</font>
1083               <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>,
1084               <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>,
1085               <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>
1086               <a name="6_line72" href="#6_line72">72</a>     <font color="4444FF"><strong>{</strong></font>
1087               <a name="6_line73" href="#6_line73">73</a>     <font color="4444FF"><strong>}</strong></font>
1088               <a name="6_line74" href="#6_line74">74</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1089               <a name="6_line75" href="#6_line75">75</a> 
1090               <a name="6_line76" href="#6_line76">76</a> <font color="#2040a0">PEGASUS_NAMESPACE_END</font>
1091               <a name="6_line77" href="#6_line77">77</a> 
1092               <a name="6_line78" href="#6_line78">78</a> <font color="0000ff"><strong>#endif</strong></font>
1093 mday  1.1.2.1 </pre><!-- code2html delete stop -->
1094                   </div>
1095                   <a name="provider_schema_mods">
1096                   <h3>Provider Schema Modifications</h3></a>
1097                   <p>
1098                     I derived the <code>eServer_ProviderModule</code> schema from
1099                     the <code>PG_ProviderModule</code> schema that we are using. I
1100                     only made a three additions. I 
1101                     <a href="#7_line161">added the new provider type</a>; I added
1102                     <a href="#7_line39"> some new provider interface types</a> (looking ahead); 
1103                     and I <a href="#7_line87">added the <code>OperationalStatus</code> 
1104               	attributes</a> to the provider. This last is important because providers
1105                     are now handling indications. 
1106                   </p>
1107                   <div class="source">
1108                     <!-- code2html add -lcc -N Schemas/Pegasus/InterOp/VER20/eServer_ProviderModule20.mof
1109                     --><!-- code2html delete start --><pre><a name="7_line1" href="#7_line1">  1</a> <font color="#444444">//=================================================================</font>
1110               <a name="7_line2" href="#7_line2">  2</a> <font color="#444444">// eServer_ProviderModule</font>
1111               <a name="7_line3" href="#7_line3">  3</a> <font color="#444444">//</font>
1112               <a name="7_line4" href="#7_line4">  4</a> <font color="#444444">// This schema is derived from PG_ProviderModule. It adds some </font>
1113               <a name="7_line5" href="#7_line5">  5</a> <font color="#444444">// qualifiers to support remote and out-of-proc providers.</font>
1114 mday  1.1.2.1 <a name="7_line6" href="#7_line6">  6</a> <font color="#444444">// It also defines some new provider types. </font>
1115               <a name="7_line7" href="#7_line7">  7</a> <font color="#444444">//</font>
1116               <a name="7_line8" href="#7_line8">  8</a> <font color="#444444">//=================================================================</font>
1117               <a name="7_line9" href="#7_line9">  9</a> 
1118               <a name="7_line10" href="#7_line10"> 10</a> <font color="#444444">// Named (meta) elements:</font>
1119               <a name="7_line11" href="#7_line11"> 11</a> <font color="#444444">// Class, Property, Method, Association, Reference, Property, Parameter, </font>
1120               <a name="7_line12" href="#7_line12"> 12</a> <font color="#444444">// Indication, Schema, Trigger</font>
1121               <a name="7_line13" href="#7_line13"> 13</a> 
1122               <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>
1123               <a name="7_line15" href="#7_line15"> 15</a> 
1124               <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>
1125               <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>
1126               <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>
1127               <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>
1128               <a name="7_line20" href="#7_line20"> 20</a> 
1129               <a name="7_line21" href="#7_line21"> 21</a> <font color="#444444">//=================================================================</font>
1130               <a name="7_line22" href="#7_line22"> 22</a> <font color="#444444">// eServer_ProviderModule</font>
1131               <a name="7_line23" href="#7_line23"> 23</a> <font color="#444444">//=================================================================</font>
1132               <a name="7_line24" href="#7_line24"> 24</a> 
1133               <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>
1134               <a name="7_line26" href="#7_line26"> 26</a> 	<font color="#008000">&quot;modified to support additional provider types and additional &quot;</font>
1135 mday  1.1.2.1 <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>
1136               <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>
1137               <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>
1138               <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>	
1139               <a name="7_line31" href="#7_line31"> 31</a> 	<font color="#2040a0">string</font> <font color="#2040a0">Name</font><font color="4444FF">;</font>
1140               <a name="7_line32" href="#7_line32"> 32</a> 
1141               <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> 
1142               <a name="7_line34" href="#7_line34"> 34</a> 		<font color="#008000">&quot; If the usURL qualifier is present, indicates that the &quot;</font>
1143               <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>
1144               <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>
1145               <a name="7_line37" href="#7_line37"> 37</a> 	<font color="#2040a0">string</font> <font color="#2040a0">Location</font><font color="4444FF">;</font>
1146               <a name="7_line38" href="#7_line38"> 38</a> 
1147               <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>
1148               <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>
1149               <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>
1150               <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>
1151               <a name="7_line43" href="#7_line43"> 43</a> 		<font color="#008000">&quot;ProviderManagerService, although this link will be broken in the &quot;</font>
1152               <a name="7_line44" href="#7_line44"> 44</a> 		<font color="#008000">&quot;future. &quot;</font><font color="4444FF">)</font>,
1153               <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>, 
1154               <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>, 
1155               <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>
1156 mday  1.1.2.1 <a name="7_line48" href="#7_line48"> 48</a> 	<font color="#2040a0">string</font> <font color="#2040a0">InterfaceType</font><font color="4444FF">;</font>
1157               <a name="7_line49" href="#7_line49"> 49</a> 	
1158               <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>
1159               <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>
1160               <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>
1161               <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>
1162               <a name="7_line54" href="#7_line54"> 54</a> 	<font color="#2040a0">string</font> <font color="#2040a0">host</font><font color="4444FF">;</font>
1163               <a name="7_line55" href="#7_line55"> 55</a> 
1164               <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>
1165               <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>
1166               <a name="7_line58" href="#7_line58"> 58</a> 		<font color="#008000">&quot; signature to determine the authenticity if the module &quot;</font> 
1167               <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>
1168               <a name="7_line60" href="#7_line60"> 60</a> 	<font color="#2040a0">string</font> <font color="#2040a0">pgp_Signature</font><font color="4444FF">;</font>
1169               <a name="7_line61" href="#7_line61"> 61</a> 
1170               <a name="7_line62" href="#7_line62"> 62</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1171               <a name="7_line63" href="#7_line63"> 63</a> 
1172               <a name="7_line64" href="#7_line64"> 64</a> 
1173               <a name="7_line65" href="#7_line65"> 65</a> <font color="#444444">//=================================================================</font>
1174               <a name="7_line66" href="#7_line66"> 66</a> <font color="#444444">// eServer_Provider</font>
1175               <a name="7_line67" href="#7_line67"> 67</a> <font color="#444444">// </font>
1176               <a name="7_line68" href="#7_line68"> 68</a> <font color="#444444">// Derived from the PG_Provider class. The operational status </font>
1177 mday  1.1.2.1 <a name="7_line69" href="#7_line69"> 69</a> <font color="#444444">// properties from PG_ProviderModule are present in the eServer_Provider</font>
1178               <a name="7_line70" href="#7_line70"> 70</a> <font color="#444444">// class. This is to recognize that providers may have operational </font>
1179               <a name="7_line71" href="#7_line71"> 71</a> <font color="#444444">// states that are distinct from the states of their modules.</font>
1180               <a name="7_line72" href="#7_line72"> 72</a> <font color="#444444">//</font>
1181               <a name="7_line73" href="#7_line73"> 73</a> <font color="#444444">//=================================================================</font>
1182               <a name="7_line74" href="#7_line74"> 74</a> 
1183               <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>
1184               <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>
1185               <a name="7_line77" href="#7_line77"> 77</a> 
1186               <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>
1187               <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>
1188               <a name="7_line80" href="#7_line80"> 80</a>  		<font color="#008000">&quot;Inherited as a propagated key from PG_Provider, having &quot;</font>
1189               <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>
1190               <a name="7_line82" href="#7_line82"> 82</a> 	<font color="#2040a0">string</font> <font color="#2040a0">ProviderModuleName</font><font color="4444FF">;</font>
1191               <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:
1192               <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; 
1193               <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;)]
1194               <a name="7_line86" href="#7_line86"> 86</a> 	string Name;
1195               <a name="7_line87" href="#7_line87"> 87</a>       [Description ( 
1196               <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;
1197               <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;
1198 mday  1.1.2.1 <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;
1199               <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;
1200               <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>
1201               <a name="7_line93" href="#7_line93"> 93</a>         <font color="#008000">&quot;is functioning, but needs attention. Examples of &quot;</font>
1202               <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>
1203               <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>
1204               <a name="7_line96" href="#7_line96"> 96</a>         <font color="#008000">&quot;functioning nominally but predicting a failure in the &quot;</font>
1205               <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>
1206               <a name="7_line98" href="#7_line98"> 98</a>         <font color="#008000">&quot;configured, maintained, cleaned, or otherwise administered. &quot;</font>
1207               <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>
1208               <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>
1209               <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>
1210               <a name="7_line102" href="#7_line102">102</a>         <font color="#008000">&quot;indicates that the ManagedSystemElement is known to exist &quot;</font>
1211               <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>
1212               <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>	
1213               <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>
1214               <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>
1215               <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>
1216               <a name="7_line108" href="#7_line108">108</a>         <font color="#008000">&quot;  OperationalStatus replaces the Status property on &quot;</font>
1217               <a name="7_line109" href="#7_line109">109</a>         <font color="#008000">&quot;ManagedSystemElement to provide a consistent approach to &quot;</font>
1218               <a name="7_line110" href="#7_line110">110</a>         <font color="#008000">&quot;enumerations, to address implementation needs for an &quot;</font>
1219 mday  1.1.2.1 <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>
1220               <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>
1221               <a name="7_line113" href="#7_line113">113</a>         <font color="#008000">&quot;since it required the DEPRECATED qualifier. Due to the &quot;</font>
1222               <a name="7_line114" href="#7_line114">114</a>         <font color="#008000">&quot;widespread use of the existing Status property in &quot;</font>
1223               <a name="7_line115" href="#7_line115">115</a>         <font color="#008000">&quot;management applications, it is strongly recommended that &quot;</font>
1224               <a name="7_line116" href="#7_line116">116</a>         <font color="#008000">&quot;providers/instrumentation provide BOTH the Status and &quot;</font>
1225               <a name="7_line117" href="#7_line117">117</a>         <font color="#008000">&quot;OperationalStatus properties. As always, Status (since it &quot;</font>
1226               <a name="7_line118" href="#7_line118">118</a>         <font color="#008000">&quot;is single-valued) provides the primary status of the &quot;</font>
1227               <a name="7_line119" href="#7_line119">119</a>         <font color="#008000">&quot;element.&quot;</font><font color="4444FF">)</font>,
1228               <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>, 
1229               <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>, 
1230               <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>,
1231               <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>, 
1232               <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>, 
1233               <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>, 
1234               <a name="7_line126" href="#7_line126">126</a>        <font color="#2040a0">ModelCorrespondence</font> <font color="4444FF"><strong>{</strong></font>
1235               <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> 
1236               <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>
1237               <a name="7_line129" href="#7_line129">129</a>       <font color="4444FF">[</font><font color="#2040a0">Description</font> <font color="4444FF">(</font>
1238               <a name="7_line130" href="#7_line130">130</a>         <font color="#008000">&quot;A string describing the status - used when the &quot;</font>
1239               <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>, 
1240 mday  1.1.2.1 <a name="7_line132" href="#7_line132">132</a>        <font color="#2040a0">ModelCorrespondence</font> <font color="4444FF"><strong>{</strong></font>
1241               <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>
1242               <a name="7_line134" href="#7_line134">134</a>     <font color="#2040a0">string</font> <font color="#2040a0">OtherStatusDescription</font><font color="4444FF">;</font>
1243               <a name="7_line135" href="#7_line135">135</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1244               <a name="7_line136" href="#7_line136">136</a> 
1245               <a name="7_line137" href="#7_line137">137</a> 
1246               <a name="7_line138" href="#7_line138">138</a> <font color="#444444">//=================================================================</font>
1247               <a name="7_line139" href="#7_line139">139</a> <font color="#444444">// eServer_ProviderCapabilities</font>
1248               <a name="7_line140" href="#7_line140">140</a> <font color="#444444">// </font>
1249               <a name="7_line141" href="#7_line141">141</a> <font color="#444444">// Derived from the PG_ProviderCapabilities class</font>
1250               <a name="7_line142" href="#7_line142">142</a> <font color="#444444">//</font>
1251               <a name="7_line143" href="#7_line143">143</a> <font color="#444444">//=================================================================</font>
1252               <a name="7_line144" href="#7_line144">144</a> 
1253               <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>
1254               <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>
1255               <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>
1256               <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>
1257               <a name="7_line149" href="#7_line149">149</a> 	<font color="#008000">&quot;Inherited as a Propagated key from PG_ProviderCapabilities, &quot;</font>
1258               <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>
1259               <a name="7_line151" href="#7_line151">151</a>    <font color="#2040a0">string</font> <font color="#2040a0">ProviderModuleName</font><font color="4444FF">;</font>
1260               <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>
1261 mday  1.1.2.1 <a name="7_line153" href="#7_line153">153</a> 	<font color="#008000">&quot;Inherited as a Propagated key from PG_ProviderCapabilities, &quot;</font>
1262               <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>
1263               <a name="7_line155" href="#7_line155">155</a>    <font color="#2040a0">string</font> <font color="#2040a0">ProviderName</font><font color="4444FF">;</font>
1264               <a name="7_line156" href="#7_line156">156</a> 
1265               <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>
1266               <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>
1267               <a name="7_line159" href="#7_line159">159</a>    <font color="#2040a0">string</font> <font color="#2040a0">CapabilityID</font><font color="4444FF">;</font>
1268               <a name="7_line160" href="#7_line160">160</a> 
1269               <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> 
1270               <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>,
1271               <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>, 
1272               <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>,
1273               <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>, 
1274               <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>
1275               <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>
1276               <a name="7_line168" href="#7_line168">168</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1277               <a name="7_line169" href="#7_line169">169</a> 	
1278               </pre><!-- code2html delete stop -->
1279                   </div>
1280               <a name="provider_reg_mgr">
1281                   <h3>Provider Registration Manager Modifications</h3></a>
1282 mday  1.1.2.1 
1283                   <p>
1284                     After creating a new type of provider, I needed to modify the
1285                     <code>ProviderRegistrationManager</code> to load, find, and
1286                     dispatch the new provider type. This was pretty simple. I wrote 
1287                     some additional routines that are basically copies of what is 
1288                     already there. 
1289                   </p>
1290               
1291                   <div class="source">
1292                     <p class="comment">
1293               	Here is one of the new routines I wrote for the <code>
1294               	  ProviderRegistrationManager</code>. There are several others. 
1295                     </p>
1296               
1297                     <!-- code2html add -lcc -N consumer.cpp
1298                     --><!-- 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>
1299               <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>, 
1300               <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>,
1301               <a name="8_line4" href="#8_line4">  4</a>     <font color="#2040a0">CIMInstance</font> <font color="4444FF">&amp;</font> <font color="#2040a0">provider</font>,
1302               <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>
1303 mday  1.1.2.1 <a name="8_line6" href="#8_line6">  6</a> <font color="4444FF"><strong>{</strong></font>
1304               <a name="8_line7" href="#8_line7">  7</a>     <font color="#2040a0">String</font> <font color="#2040a0">providerName</font><font color="4444FF">;</font>
1305               <a name="8_line8" href="#8_line8">  8</a>     <font color="#2040a0">String</font> <font color="#2040a0">providerModuleName</font><font color="4444FF">;</font>
1306               <a name="8_line9" href="#8_line9">  9</a> 
1307               <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>,
1308               <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>
1309               <a name="8_line12" href="#8_line12"> 12</a>     
1310               <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>
1311               <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>
1312               <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>
1313               <a name="8_line16" href="#8_line16"> 16</a>     
1314               <a name="8_line17" href="#8_line17"> 17</a>     <font color="#444444">//</font>
1315               <a name="8_line18" href="#8_line18"> 18</a>     <font color="#444444">// create the key by using nameSpace, className, and providerType</font>
1316               <a name="8_line19" href="#8_line19"> 19</a>     <font color="#444444">//</font>
1317               <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>
1318               <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>,
1319               <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>
1320               <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>
1321               <a name="8_line24" href="#8_line24"> 24</a> 
1322               <a name="8_line25" href="#8_line25"> 25</a>     <font color="#2040a0">try</font>
1323               <a name="8_line26" href="#8_line26"> 26</a>     <font color="4444FF"><strong>{</strong></font>
1324 mday  1.1.2.1 <a name="8_line27" href="#8_line27"> 27</a>         <font color="#444444">// </font>
1325               <a name="8_line28" href="#8_line28"> 28</a>         <font color="#444444">// get provider capability instance from the table</font>
1326               <a name="8_line29" href="#8_line29"> 29</a>         <font color="#444444">//</font>
1327               <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>
1328               <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>
1329               <a name="8_line32" href="#8_line32"> 32</a>         <font color="4444FF"><strong>{</strong></font>
1330               <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>
1331               <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>
1332               <a name="8_line35" href="#8_line35"> 35</a>         <font color="4444FF"><strong>}</strong></font>
1333               <a name="8_line36" href="#8_line36"> 36</a> 
1334               <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>
1335               <a name="8_line38" href="#8_line38"> 38</a> 
1336               <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>
1337               <a name="8_line40" href="#8_line40"> 40</a> 
1338               <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>
1339               <a name="8_line42" href="#8_line42"> 42</a>         <font color="4444FF"><strong>{</strong></font>
1340               <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>
1341               <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>, 
1342               <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>
1343               <a name="8_line46" href="#8_line46"> 46</a>         <font color="4444FF"><strong>}</strong></font>
1344               <a name="8_line47" href="#8_line47"> 47</a> 
1345 mday  1.1.2.1 <a name="8_line48" href="#8_line48"> 48</a>         <font color="#444444">//</font>
1346               <a name="8_line49" href="#8_line49"> 49</a>         <font color="#444444">// get provider name</font>
1347               <a name="8_line50" href="#8_line50"> 50</a>         <font color="#444444">//</font>
1348               <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>
1349               <a name="8_line52" href="#8_line52"> 52</a> 
1350               <a name="8_line53" href="#8_line53"> 53</a>         <font color="#444444">//</font>
1351               <a name="8_line54" href="#8_line54"> 54</a>         <font color="#444444">// get provider module name</font>
1352               <a name="8_line55" href="#8_line55"> 55</a>         <font color="#444444">//</font>
1353               <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>
1354               <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>
1355               <a name="8_line58" href="#8_line58"> 58</a>         <font color="4444FF"><strong>{</strong></font>
1356               <a name="8_line59" href="#8_line59"> 59</a> 	   
1357               <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>
1358               <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>, 
1359               <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>
1360               <a name="8_line63" href="#8_line63"> 63</a>         <font color="4444FF"><strong>}</strong></font>
1361               <a name="8_line64" href="#8_line64"> 64</a> 
1362               <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>
1363               <a name="8_line66" href="#8_line66"> 66</a> 
1364               <a name="8_line67" href="#8_line67"> 67</a> 	<font color="#444444">//</font>
1365               <a name="8_line68" href="#8_line68"> 68</a> 	<font color="#444444">// create the key by using providerModuleName and providerName</font>
1366 mday  1.1.2.1 <a name="8_line69" href="#8_line69"> 69</a> 	<font color="#444444">//</font>
1367               <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>
1368               <a name="8_line71" href="#8_line71"> 71</a> 
1369               <a name="8_line72" href="#8_line72"> 72</a> 	<font color="#444444">//</font>
1370               <a name="8_line73" href="#8_line73"> 73</a> 	<font color="#444444">// create the key by using providerModuleName and MODULE_KEY</font>
1371               <a name="8_line74" href="#8_line74"> 74</a> 	<font color="#444444">//</font>
1372               <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>
1373               <a name="8_line76" href="#8_line76"> 76</a> 
1374               <a name="8_line77" href="#8_line77"> 77</a>         <font color="#444444">// </font>
1375               <a name="8_line78" href="#8_line78"> 78</a>         <font color="#444444">// get provider instance from the table </font>
1376               <a name="8_line79" href="#8_line79"> 79</a>         <font color="#444444">//</font>
1377               <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>
1378               <a name="8_line81" href="#8_line81"> 81</a>         <font color="4444FF"><strong>{</strong></font>
1379               <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>
1380               <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>
1381               <a name="8_line84" href="#8_line84"> 84</a>         <font color="4444FF"><strong>}</strong></font>
1382               <a name="8_line85" href="#8_line85"> 85</a> 
1383               <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>
1384               <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>
1385               <a name="8_line88" href="#8_line88"> 88</a> 
1386               <a name="8_line89" href="#8_line89"> 89</a>         <font color="#444444">// </font>
1387 mday  1.1.2.1 <a name="8_line90" href="#8_line90"> 90</a>         <font color="#444444">// get provider module instance from the table </font>
1388               <a name="8_line91" href="#8_line91"> 91</a>         <font color="#444444">//</font>
1389               <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>
1390               <a name="8_line93" href="#8_line93"> 93</a>         <font color="4444FF"><strong>{</strong></font>
1391               <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>
1392               <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>
1393               <a name="8_line96" href="#8_line96"> 96</a>         <font color="4444FF"><strong>}</strong></font>
1394               <a name="8_line97" href="#8_line97"> 97</a> 
1395               <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>
1396               <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>
1397               <a name="8_line100" href="#8_line100">100</a>     
1398               <a name="8_line101" href="#8_line101">101</a>     <font color="4444FF"><strong>}</strong></font>
1399               <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>
1400               <a name="8_line103" href="#8_line103">103</a>     <font color="4444FF"><strong>{</strong></font>
1401               <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>
1402               <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>
1403               <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>
1404               <a name="8_line107" href="#8_line107">107</a>     <font color="4444FF"><strong>}</strong></font>
1405               <a name="8_line108" href="#8_line108">108</a> 
1406               <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>
1407               <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>
1408 mday  1.1.2.1 <a name="8_line111" href="#8_line111">111</a> <font color="4444FF"><strong>}</strong></font>
1409               </pre><!-- code2html delete stop -->
1410                   </div>
1411               
1412               <a name="instantiate_providers">
1413                   <h3>Instantiating the Modified Schema and Providers</h3></a>
1414                   <p>
1415                     This was also pretty simple. I piggybacked off the compilation and 
1416                     installation scripts that are already part of the project. 
1417                   </p>
1418                   <p>
1419                     A couple of items to note in the MOF below. <a
1420                     href="#9_line47">Line 47</a> shows a <code>Type 6</code>
1421                     provider, which is an Indication Consumer provider. Also, the
1422                     Indication provider and the Indication Consumer provider are both
1423                     part of the same module. 
1424                   </p>
1425               
1426                   <p>
1427                     Here is the registration mof: 
1428                   </p>
1429 mday  1.1.2.1     <div class="source">
1430                     <div class="comment">
1431                     <p >
1432               	You can see that I simplified the <code>PG_Subscription</code> class
1433               	in <a href="#9_line53">line 53</a> below. There are no policy attributes, 
1434               	no attribute list, and no filter.
1435                     </p>
1436               	<p>
1437               	  To get things working, I assumed that every subscription
1438               	  includes all attributes every time it is fired. I assumed that 
1439               	  the subscription was created with valid class references and 
1440               	  that providers were registered correctly. 
1441               	</p>
1442               	<p>
1443               	  In the schema, however, I left the filter in the
1444               	  Subscription definition. I just didn't make it a required
1445               	  attribute. I think it is viable to want to test Indication
1446               	  delivery without having to have filters defined and working. 
1447               	</p>
1448                     </div>
1449                     <!-- code2html add -lcc -N Schemas/Pegasus/InterOp/VER20/eServer_Indication20R.mof
1450 mday  1.1.2.1       --><!-- 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>
1451               <a name="9_line2" href="#9_line2"> 2</a> <font color="4444FF"><strong>{</strong></font>
1452               <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>
1453               <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>
1454               <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>
1455               <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>
1456               <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>
1457               <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>
1458               <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>
1459               <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>
1460               <a name="9_line11" href="#9_line11">11</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1461               <a name="9_line12" href="#9_line12">12</a> 	
1462               <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>
1463               <a name="9_line14" href="#9_line14">14</a> <font color="4444FF"><strong>{</strong></font>
1464               <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>
1465               <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>
1466               <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>
1467               <a name="9_line18" href="#9_line18">18</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1468               <a name="9_line19" href="#9_line19">19</a> 
1469               <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>
1470               <a name="9_line21" href="#9_line21">21</a> <font color="4444FF"><strong>{</strong></font>
1471 mday  1.1.2.1 <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>
1472               <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>
1473               <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>
1474               <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>
1475               <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>
1476               <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>
1477               <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>
1478               <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>
1479               <a name="9_line30" href="#9_line30">30</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1480               <a name="9_line31" href="#9_line31">31</a> 
1481               <a name="9_line32" href="#9_line32">32</a> 
1482               <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>
1483               <a name="9_line34" href="#9_line34">34</a> <font color="4444FF"><strong>{</strong></font>
1484               <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>
1485               <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>
1486               <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>
1487               <a name="9_line38" href="#9_line38">38</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1488               <a name="9_line39" href="#9_line39">39</a> 
1489               <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>
1490               <a name="9_line41" href="#9_line41">41</a> <font color="4444FF"><strong>{</strong></font>
1491               <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>
1492 mday  1.1.2.1 <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>
1493               <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>
1494               <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>
1495               <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>
1496               <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>
1497               <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>
1498               <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>
1499               <a name="9_line50" href="#9_line50">50</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1500               <a name="9_line51" href="#9_line51">51</a> 
1501               <a name="9_line52" href="#9_line52">52</a> 
1502               <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>
1503               <a name="9_line54" href="#9_line54">54</a> <font color="4444FF"><strong>{</strong></font>
1504               <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>
1505               <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>
1506               <a name="9_line57" href="#9_line57">57</a> <font color="4444FF"><strong>}</strong></font><font color="4444FF">;</font>
1507               </pre><!-- code2html delete stop -->      
1508                   </div>
1509               
1510                   <a name="indication_provider">
1511                   <h3>Indication Provider</h3></a>
1512                   <p>
1513 mday  1.1.2.1       To test Indications, I modified the provider in
1514                     <code>$(PEGASUS_HOME)/src/Providers/sample/ProcessIndicationProvider</code>.
1515                     The biggest mod is the <code>_monitor</code> routine, which runs
1516                     as an independent thread.
1517                   </p>
1518                   <h4>Independent Indication Thread</h4>
1519                   <p>
1520                     Most providers that generate indications will need to have an
1521                     independent thread. I chose to start and stop the thread in the
1522                     <a href="#10_line17"><code>enableIndications</code></a> and 
1523               	<a href="#10_line36"><code>disableIndications</code></a> 
1524                     methods, respectively. 
1525                   </p>
1526               
1527               <div class="source">
1528                     <!-- code2html add -lcc -N
1529               
1530               void ProcessIndicationProvider::enableIndications (
1531                   ResponseHandler <CIMIndication> & handler)
1532               {
1533                  cout << "eServer_ProcessIndicationProvider: enableIndications" << endl;
1534 mday  1.1.2.1 
1535                  _enable_disable.lock(pegasus_thread_self());
1536                  if(_indications_enabled.value())
1537                  {
1538                     _enable_disable.unlock();
1539                     return;
1540                  }
1541                  _response_handler = &handler;
1542                  _response_handler->processing ();   
1543                  _indications_enabled = 1;
1544                  _indication_thread.run();
1545                  _enable_disable.unlock();
1546                  
1547               }
1548               
1549               void ProcessIndicationProvider::disableIndications (void)
1550               {
1551                  cout << "eServer_ProcessIndicationProvider: disableIndications" << endl;
1552                  _enable_disable.lock(pegasus_thread_self());
1553                  
1554                  if(_indications_enabled.value() == 0 )
1555 mday  1.1.2.1    {
1556                     _enable_disable.unlock();
1557                     return;
1558                  }
1559               
1560                  _indications_enabled = 0;
1561                  _response_handler = 0;
1562                  _indication_thread.join();
1563                  _enable_disable.unlock();
1564               
1565               }
1566                     --><!-- code2html delete start --><pre><a name="10_line1" href="#10_line1"> 1</a> 
1567               <a name="10_line2" href="#10_line2"> 2</a> 
1568               <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>
1569               <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>
1570               <a name="10_line5" href="#10_line5"> 5</a> <font color="4444FF"><strong>{</strong></font>
1571               <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>
1572               <a name="10_line7" href="#10_line7"> 7</a> 
1573               <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>
1574               <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>
1575               <a name="10_line10" href="#10_line10">10</a>    <font color="4444FF"><strong>{</strong></font>
1576 mday  1.1.2.1 <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>
1577               <a name="10_line12" href="#10_line12">12</a>       <strong>return</strong><font color="4444FF">;</font>
1578               <a name="10_line13" href="#10_line13">13</a>    <font color="4444FF"><strong>}</strong></font>
1579               <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>
1580               <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>   
1581               <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>
1582               <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>
1583               <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>
1584               <a name="10_line19" href="#10_line19">19</a>    
1585               <a name="10_line20" href="#10_line20">20</a> <font color="4444FF"><strong>}</strong></font>
1586               <a name="10_line21" href="#10_line21">21</a> 
1587               <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>
1588               <a name="10_line23" href="#10_line23">23</a> <font color="4444FF"><strong>{</strong></font>
1589               <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>
1590               <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>
1591               <a name="10_line26" href="#10_line26">26</a>    
1592               <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>
1593               <a name="10_line28" href="#10_line28">28</a>    <font color="4444FF"><strong>{</strong></font>
1594               <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>
1595               <a name="10_line30" href="#10_line30">30</a>       <strong>return</strong><font color="4444FF">;</font>
1596               <a name="10_line31" href="#10_line31">31</a>    <font color="4444FF"><strong>}</strong></font>
1597 mday  1.1.2.1 <a name="10_line32" href="#10_line32">32</a> 
1598               <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>
1599               <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>
1600               <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>
1601               <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>
1602               <a name="10_line37" href="#10_line37">37</a> 
1603               <a name="10_line38" href="#10_line38">38</a> <font color="4444FF"><strong>}</strong></font>
1604               <a name="10_line39" href="#10_line39">39</a>       
1605               </pre><!-- code2html delete stop -->
1606                   </div>
1607                   <h4>Delivering the Indication</h4>
1608                   <p>
1609                     To deliver the indication, the <code>_monitor</code> thread
1610                     calls <a href="#11_line45"><code>deliver(CIMInstance)</code></a>
1611                     using its response handler.
1612                   </p>
1613                   <p>
1614                     The importance of allocating the response handler on the heap in 
1615                     the <code>ProviderManagerService</code> and preserving it for the 
1616                     life of the indication thread is demonstrated pretty clearly in the 
1617                     code below. It should be obvious that the response handler must 
1618 mday  1.1.2.1       not be destroyed after the subscription is enabled. 
1619                   </p>
1620               <div class="source">
1621                     <!-- code2html add -lcc -N
1622               PEGASUS_THREAD_RETURN 
1623               PEGASUS_THREAD_CDECL 
1624               ProcessIndicationProvider::_monitor(void *parm)
1625               {
1626                  PEGASUS_ASSERT(parm != 0);
1627                  
1628                  Thread *th = static_cast<Thread *>(parm);
1629                  ProcessIndicationProvider *myself = 
1630                     static_cast<ProcessIndicationProvider *>(th->get_parm());
1631               
1632                  while(true)
1633                  {
1634                     pegasus_sleep(1000);
1635                     try
1636                     {
1637               	 myself->_enable_disable.try_lock(pegasus_thread_self());
1638                     }
1639 mday  1.1.2.1       catch(...)
1640                     {
1641               	 if(myself->_indications_enabled.value() == 0  || 
1642                            myself->_response_handler == 0 )
1643               	    exit_thread((PEGASUS_THREAD_RETURN)0);
1644               	 else
1645               	    continue;
1646                     }
1647                     try
1648                     {
1649               	 
1650               	 CIMInstance indicationInstance ("root/PG_Interop:CIM_ProcessIndication");
1651               	 
1652               	 indicationInstance.addProperty
1653               	    (CIMProperty ("IndicationTime", CIMValue (CIMDateTime ())));
1654               	 
1655               	 indicationInstance.addProperty
1656               	    (CIMProperty ("IndicationIdentifier", "ProcessIndication01"));
1657               	 
1658               	 Array <String> correlatedIndications;
1659               	 indicationInstance.addProperty (
1660 mday  1.1.2.1                  CIMProperty ("CorrelatedIndications", 
1661               		 CIMValue (correlatedIndications)));
1662               	 
1663               	 CIMIndication cimIndication (indicationInstance);
1664               	 
1665               	 myself->_response_handler->deliver (cimIndication);
1666               	 
1667                     }
1668                     catch(...)
1669                     {
1670               	
1671                     }
1672                     myself->_enable_disable.unlock();
1673                  }
1674                  exit_thread((PEGASUS_THREAD_RETURN)0);
1675                  return(PEGASUS_THREAD_RETURN)0;
1676               }
1677               
1678               --><!-- code2html delete start --><pre><a name="11_line1" href="#11_line1"> 1</a> 
1679               <a name="11_line2" href="#11_line2"> 2</a> <font color="#2040a0">PEGASUS_THREAD_RETURN</font> 
1680               <a name="11_line3" href="#11_line3"> 3</a> <font color="#2040a0">PEGASUS_THREAD_CDECL</font> 
1681 mday  1.1.2.1 <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>
1682               <a name="11_line5" href="#11_line5"> 5</a> <font color="4444FF"><strong>{</strong></font>
1683               <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>
1684               <a name="11_line7" href="#11_line7"> 7</a>    
1685               <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>
1686               <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> 
1687               <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>
1688               <a name="11_line11" href="#11_line11">11</a> 
1689               <a name="11_line12" href="#11_line12">12</a>    <strong>while</strong><font color="4444FF">(</font><strong>true</strong><font color="4444FF">)</font>
1690               <a name="11_line13" href="#11_line13">13</a>    <font color="4444FF"><strong>{</strong></font>
1691               <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>
1692               <a name="11_line15" href="#11_line15">15</a>       <font color="#2040a0">try</font>
1693               <a name="11_line16" href="#11_line16">16</a>       <font color="4444FF"><strong>{</strong></font>
1694               <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>
1695               <a name="11_line18" href="#11_line18">18</a>       <font color="4444FF"><strong>}</strong></font>
1696               <a name="11_line19" href="#11_line19">19</a>       <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
1697               <a name="11_line20" href="#11_line20">20</a>       <font color="4444FF"><strong>{</strong></font>
1698               <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> 
1699               <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>
1700               <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>
1701               <a name="11_line24" href="#11_line24">24</a> 	 <strong>else</strong>
1702 mday  1.1.2.1 <a name="11_line25" href="#11_line25">25</a> 	    <strong>continue</strong><font color="4444FF">;</font>
1703               <a name="11_line26" href="#11_line26">26</a>       <font color="4444FF"><strong>}</strong></font>
1704               <a name="11_line27" href="#11_line27">27</a>       <font color="#2040a0">try</font>
1705               <a name="11_line28" href="#11_line28">28</a>       <font color="4444FF"><strong>{</strong></font>
1706               <a name="11_line29" href="#11_line29">29</a> 	 
1707               <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>
1708               <a name="11_line31" href="#11_line31">31</a> 	 
1709               <a name="11_line32" href="#11_line32">32</a> 	 <font color="#2040a0">indicationInstance</font>.<font color="#2040a0">addProperty</font>
1710               <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>
1711               <a name="11_line34" href="#11_line34">34</a> 	 
1712               <a name="11_line35" href="#11_line35">35</a> 	 <font color="#2040a0">indicationInstance</font>.<font color="#2040a0">addProperty</font>
1713               <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>
1714               <a name="11_line37" href="#11_line37">37</a> 	 
1715               <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>
1716               <a name="11_line39" href="#11_line39">39</a> 	 <font color="#2040a0">indicationInstance</font>.<font color="#2040a0">addProperty</font> <font color="4444FF">(</font>
1717               <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>, 
1718               <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>
1719               <a name="11_line42" href="#11_line42">42</a> 	 
1720               <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>
1721               <a name="11_line44" href="#11_line44">44</a> 	 
1722               <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>
1723 mday  1.1.2.1 <a name="11_line46" href="#11_line46">46</a> 	 
1724               <a name="11_line47" href="#11_line47">47</a>       <font color="4444FF"><strong>}</strong></font>
1725               <a name="11_line48" href="#11_line48">48</a>       <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
1726               <a name="11_line49" href="#11_line49">49</a>       <font color="4444FF"><strong>{</strong></font>
1727               <a name="11_line50" href="#11_line50">50</a> 	
1728               <a name="11_line51" href="#11_line51">51</a>       <font color="4444FF"><strong>}</strong></font>
1729               <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>
1730               <a name="11_line53" href="#11_line53">53</a>    <font color="4444FF"><strong>}</strong></font>
1731               <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>
1732               <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>
1733               <a name="11_line56" href="#11_line56">56</a> <font color="4444FF"><strong>}</strong></font>
1734               </pre><!-- code2html delete stop -->
1735               </div>
1736               <a name="indication_consumer_provider">
1737               <h3>Indication Consumer Provider</h3></a>
1738                     <p>
1739               	Toe receive Indications, I added an additional provider to the
1740               	module at
1741               	<code>$(PEGASUS_HOME)/src/Providers/sample/ProcessIndicationProvider</code>.
1742               	The following code in the <code>PegasusCreateProvider</code> symbol
1743               	shows how the module creates the different types of providers. 
1744 mday  1.1.2.1    </p>
1745               <div class="source">
1746                     <!-- code2html add -lcc -N
1747               
1748               extern "C" PEGASUS_EXPORT CIMBaseProvider * PegasusCreateProvider
1749                   (const String & providerName)
1750               {
1751                  
1752                   if ((String::equalNoCase (providerName, "ProcessIndicationProvider")) ||
1753                       (String::equalNoCase (providerName, "ProcessIndicationProvider2")) || 
1754               	(String::equalNoCase (providerName, "eServer_ProcessIndicationProvider")))
1755                   {
1756               	return (new ProcessIndicationProvider ());
1757                   }
1758                   if(String::equalNoCase(providerName, "eServer_ProcessIndicationConsumer"))
1759                   {
1760                      return new ProcessIndicationConsumer();
1761                   }
1762               
1763                   return (0);
1764               }
1765 mday  1.1.2.1 --><!-- code2html delete start --><pre><a name="12_line1" href="#12_line1"> 1</a> 
1766               <a name="12_line2" href="#12_line2"> 2</a> 
1767               <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>
1768               <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>
1769               <a name="12_line5" href="#12_line5"> 5</a> <font color="4444FF"><strong>{</strong></font>
1770               <a name="12_line6" href="#12_line6"> 6</a>    
1771               <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>
1772               <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> 
1773               <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>
1774               <a name="12_line10" href="#12_line10">10</a>     <font color="4444FF"><strong>{</strong></font>
1775               <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>
1776               <a name="12_line12" href="#12_line12">12</a>     <font color="4444FF"><strong>}</strong></font>
1777               <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>
1778               <a name="12_line14" href="#12_line14">14</a>     <font color="4444FF"><strong>{</strong></font>
1779               <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>
1780               <a name="12_line16" href="#12_line16">16</a>     <font color="4444FF"><strong>}</strong></font>
1781               <a name="12_line17" href="#12_line17">17</a> 
1782               <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>
1783               <a name="12_line19" href="#12_line19">19</a> <font color="4444FF"><strong>}</strong></font>
1784               </pre><!-- code2html delete stop -->
1785               </div>
1786 mday  1.1.2.1    <h4>Handling the Indication</h4>
1787                   <p>
1788                     The code to handle the Indication in the Consumer Provider is 
1789                     straightforward. Note that the consumer clones the indication immediately. 
1790                   </p>
1791               <div class="source">
1792                     <!-- code2html add -lcc -N
1793               
1794               void ProcessIndicationConsumer::handleIndication(
1795                     const OperationContext & context, 
1796                     const CIMInstance & indication,
1797                     ResponseHandler<void> & handler)
1798               {
1799                  
1800                  CIMInstance indication_copy = indication.clone();
1801                  PEGASUS_STD(cout) << 
1802                     "Indication Consumer: recieved indication of class: " << 
1803                     indication_copy.getClassName() << PEGASUS_STD(endl);
1804                   
1805               }
1806               
1807 mday  1.1.2.1 --><!-- code2html delete start --><pre><a name="13_line1" href="#13_line1"> 1</a> 
1808               <a name="13_line2" href="#13_line2"> 2</a> 
1809               <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>
1810               <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>, 
1811               <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>,
1812               <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>
1813               <a name="13_line7" href="#13_line7"> 7</a> <font color="4444FF"><strong>{</strong></font>
1814               <a name="13_line8" href="#13_line8"> 8</a>    
1815               <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>
1816               <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> 
1817               <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> 
1818               <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>
1819               <a name="13_line13" href="#13_line13">13</a>     
1820               <a name="13_line14" href="#13_line14">14</a> <font color="4444FF"><strong>}</strong></font>
1821               </pre><!-- code2html delete stop -->
1822               </div>
1823               <a name="indication_processing">
1824               <h3>Indication Processing Pathway</h3></a>
1825                   <p>
1826                     Now we can show the entire pathway of an Indication as it is generated,
1827                     moved through Pegasus, and handled. 
1828 mday  1.1.2.1     </p>
1829                   <ol class="enumerated">
1830                     <li>When a subscription is created, the
1831                     <code>IndicationService</code> sends a
1832                     <code>CIMEnableIndicationsRequestMessage</code> to the
1833                     <code>ProviderManagerService</code>.<br><br></li> 
1834               
1835                     <li>The <code>ProviderManagerService</code> creates a 
1836               	response handler <a href="#1_line32">from the heap</a> 
1837               	and <a href="#1_line58">stores the handler in a hashtable</a>. 
1838               	It then calls the provider's <code>enableIndications</code> method. 
1839               	 <br><br></li>
1840                    
1841               
1842                     <li>The <code>CIMIndicationProvider</code> handles the 
1843               	call to <code>enableIndications</code> by 
1844               	<a href="#10_line3">creating an independent monitor 
1845               	  thread and storing the response handler.</a>
1846               	<br><br></li>
1847               
1848                     <li>The <a href="#11_line30">indication is
1849 mday  1.1.2.1       created</a> by the CIMIndicationProvider and <a href="#11_line45">passed to the
1850                     response handler</a>.<br><br></li>
1851               
1852                     <li>The response handler <a href="#14_line2">sends a
1853                     <code>CIMProcessIndicationRequestMessage</code></a>, which
1854                     contains the indication, to the
1855                     <code>IndicationService</code>.<br><br></li>
1856               
1857                     <li>
1858               	The <code>IndicationService</code> <a
1859               	href="#15_line20">retrieves subscriptions that match the
1860               	indication</a> and creates a list of consumers. <br><br></li>
1861               
1862               	<li> For each consumer in the list the
1863               	<code>IndicationService</code><a href="#16_line36"> creates a
1864               	<code>CIMConsumeIndicationRequestMessage</code></a> and sends 
1865               	that message to the consumer. 
1866               	<br><br></li>
1867               
1868                     <li>When the <code>CIMIndicationConsumer</code> <a
1869                     href="#13_line2">recieves the
1870 mday  1.1.2.1       <code>CIMConsumeIndicationRequestMessage</code> message</a> it
1871                     clones the indication and processes it.
1872               	<br><br></li>
1873                   </ol>
1874               
1875               
1876               
1877               <div class="source">
1878                     
1879               <!-- code2html add -lcc -N 
1880               virtual void deliver(const OperationContext & context, const CIMIndication & cimIndication)
1881               {
1882                    // ATTN: temporarily convert indication to instance
1883                    CIMInstance cimInstance(cimIndication);
1884               
1885                    // create message
1886                    CIMProcessIndicationRequestMessage * request =
1887                        new CIMProcessIndicationRequestMessage(
1888                          _request_copy.messageId,
1889                          cimInstance.getPath().getNameSpace(),
1890                          cimInstance,
1891 mday  1.1.2.1            QueueIdStack(_target->getQueueId(), _source->getQueueId()));
1892               
1893                    AsyncLegacyOperationStart * asyncRequest =
1894                        new AsyncLegacyOperationStart(
1895                        _source->get_next_xid(),
1896                        0,
1897                        _target->getQueueId(),
1898                        request,
1899                        _target->getQueueId());
1900               
1901                   PEGASUS_ASSERT(asyncRequest != 0);
1902               
1903                    _source->SendForget(asyncRequest);
1904               }
1905               
1906               --><!-- code2html delete start --><pre><a name="14_line1" href="#14_line1"> 1</a> 
1907               <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>
1908               <a name="14_line3" href="#14_line3"> 3</a> <font color="4444FF"><strong>{</strong></font>
1909               <a name="14_line4" href="#14_line4"> 4</a>      <font color="#444444">// ATTN: temporarily convert indication to instance</font>
1910               <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>
1911               <a name="14_line6" href="#14_line6"> 6</a> 
1912 mday  1.1.2.1 <a name="14_line7" href="#14_line7"> 7</a>      <font color="#444444">// create message</font>
1913               <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>
1914               <a name="14_line9" href="#14_line9"> 9</a>          <strong>new</strong> <font color="#2040a0">CIMProcessIndicationRequestMessage</font><font color="4444FF">(</font>
1915               <a name="14_line10" href="#14_line10">10</a>            <font color="#2040a0">_request_copy</font>.<font color="#2040a0">messageId</font>,
1916               <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>,
1917               <a name="14_line12" href="#14_line12">12</a>            <font color="#2040a0">cimInstance</font>,
1918               <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>
1919               <a name="14_line14" href="#14_line14">14</a> 
1920               <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>
1921               <a name="14_line16" href="#14_line16">16</a>          <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationStart</font><font color="4444FF">(</font>
1922               <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>,
1923               <a name="14_line18" href="#14_line18">18</a>          <font color="#FF0000">0</font>,
1924               <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>,
1925               <a name="14_line20" href="#14_line20">20</a>          <font color="#2040a0">request</font>,
1926               <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>
1927               <a name="14_line22" href="#14_line22">22</a> 
1928               <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>
1929               <a name="14_line24" href="#14_line24">24</a> 
1930               <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>
1931               <a name="14_line26" href="#14_line26">26</a> <font color="4444FF"><strong>}</strong></font>
1932               </pre><!-- code2html delete stop -->
1933 mday  1.1.2.1 </div>
1934               
1935               
1936               <div class="source">
1937                     
1938               <!-- code2html add -lcc -N 
1939               void eServerIndicationService::_handleProcessIndicationRequest(
1940                     const Message *message)
1941               {
1942                  PEG_METHOD_ENTER (TRC_INDICATION_SERVICE,
1943               		     "eServerIndicationService::_handleProcessIndicationRequest");
1944               
1945                  CIMProcessIndicationRequestMessage* request =
1946                     (CIMProcessIndicationRequestMessage*) message;
1947                  
1948                  CIMException cimException;
1949               
1950                  CIMProcessIndicationResponseMessage* response =
1951                     new CIMProcessIndicationResponseMessage(
1952               	 request->messageId,
1953               	 cimException,
1954 mday  1.1.2.1 	 request->queueIds.copyAndPop());
1955                  try 
1956                  {
1957                     /* get each name space */
1958                     Array<String> nameSpaceNames;
1959                     _getNameSpaceNames(nameSpaceNames);
1960               
1961                     Array<CIMInstance> subscriptions;
1962                     CIMInstance indication = request->indicationInstance.clone();
1963               
1964                     _getMatchingSubscriptions(indication, subscriptions);
1965               
1966                     // keep this super simple
1967                     // always deliver all properties of the indication class to the consumer
1968                     // every subscription has one indication class and one consumer
1969                     // the consumer is responsible for filtering and multiplexing
1970               
1971                     Array<CIMObjectPath> absent_consumers;
1972               
1973                     _deliverIndication(subscriptions, 
1974               			 indication,
1975 mday  1.1.2.1 			 absent_consumers);
1976                  
1977                  }
1978                  catch(CIMException & e)
1979                  {
1980                     response->cimException = e;
1981                  }
1982                  catch(Exception & e)
1983                  {
1984                     response->cimException = PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, 
1985               						     e.getMessage());
1986                  }
1987                  catch(...)
1988                  {
1989                  response->cimException = PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, 
1990               						  "Internal Error");
1991                  }
1992                  _enqueueResponse(request, response);
1993               
1994                  PEG_METHOD_EXIT();
1995               }
1996 mday  1.1.2.1 
1997               --><!-- code2html delete start --><pre><a name="15_line1" href="#15_line1"> 1</a> 
1998               <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>
1999               <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>
2000               <a name="15_line4" href="#15_line4"> 4</a> <font color="4444FF"><strong>{</strong></font>
2001               <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>,
2002               <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>
2003               <a name="15_line7" href="#15_line7"> 7</a> 
2004               <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>
2005               <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>
2006               <a name="15_line10" href="#15_line10">10</a>    
2007               <a name="15_line11" href="#15_line11">11</a>    <font color="#2040a0">CIMException</font> <font color="#2040a0">cimException</font><font color="4444FF">;</font>
2008               <a name="15_line12" href="#15_line12">12</a> 
2009               <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>
2010               <a name="15_line14" href="#15_line14">14</a>       <strong>new</strong> <font color="#2040a0">CIMProcessIndicationResponseMessage</font><font color="4444FF">(</font>
2011               <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>,
2012               <a name="15_line16" href="#15_line16">16</a> 	 <font color="#2040a0">cimException</font>,
2013               <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>
2014               <a name="15_line18" href="#15_line18">18</a>    <font color="#2040a0">try</font> 
2015               <a name="15_line19" href="#15_line19">19</a>    <font color="4444FF"><strong>{</strong></font>
2016               <a name="15_line20" href="#15_line20">20</a>       <font color="#444444">/* get each name space */</font>
2017 mday  1.1.2.1 <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>
2018               <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>
2019               <a name="15_line23" href="#15_line23">23</a> 
2020               <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>
2021               <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>
2022               <a name="15_line26" href="#15_line26">26</a> 
2023               <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>
2024               <a name="15_line28" href="#15_line28">28</a> 
2025               <a name="15_line29" href="#15_line29">29</a>       <font color="#444444">// keep this super simple</font>
2026               <a name="15_line30" href="#15_line30">30</a>       <font color="#444444">// always deliver all properties of the indication class to the consumer</font>
2027               <a name="15_line31" href="#15_line31">31</a>       <font color="#444444">// every subscription has one indication class and one consumer</font>
2028               <a name="15_line32" href="#15_line32">32</a>       <font color="#444444">// the consumer is responsible for filtering and multiplexing</font>
2029               <a name="15_line33" href="#15_line33">33</a> 
2030               <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>
2031               <a name="15_line35" href="#15_line35">35</a> 
2032               <a name="15_line36" href="#15_line36">36</a>       <font color="#2040a0">_deliverIndication</font><font color="4444FF">(</font><font color="#2040a0">subscriptions</font>, 
2033               <a name="15_line37" href="#15_line37">37</a> 			 <font color="#2040a0">indication</font>,
2034               <a name="15_line38" href="#15_line38">38</a> 			 <font color="#2040a0">absent_consumers</font><font color="4444FF">)</font><font color="4444FF">;</font>
2035               <a name="15_line39" href="#15_line39">39</a>    
2036               <a name="15_line40" href="#15_line40">40</a>    <font color="4444FF"><strong>}</strong></font>
2037               <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>
2038 mday  1.1.2.1 <a name="15_line42" href="#15_line42">42</a>    <font color="4444FF"><strong>{</strong></font>
2039               <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>
2040               <a name="15_line44" href="#15_line44">44</a>    <font color="4444FF"><strong>}</strong></font>
2041               <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>
2042               <a name="15_line46" href="#15_line46">46</a>    <font color="4444FF"><strong>{</strong></font>
2043               <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>, 
2044               <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>
2045               <a name="15_line49" href="#15_line49">49</a>    <font color="4444FF"><strong>}</strong></font>
2046               <a name="15_line50" href="#15_line50">50</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
2047               <a name="15_line51" href="#15_line51">51</a>    <font color="4444FF"><strong>{</strong></font>
2048               <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>, 
2049               <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>
2050               <a name="15_line54" href="#15_line54">54</a>    <font color="4444FF"><strong>}</strong></font>
2051               <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>
2052               <a name="15_line56" href="#15_line56">56</a> 
2053               <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>
2054               <a name="15_line58" href="#15_line58">58</a> <font color="4444FF"><strong>}</strong></font>
2055               </pre><!-- code2html delete stop -->
2056               </div>
2057               
2058               
2059 mday  1.1.2.1 <div class="source">
2060                     
2061               <!-- code2html add -lcc -N 
2062               // will return true if ONE subscription is successful. 
2063               // e.g., if one out of three subscriptions results in a 
2064               // successful delivery, will return true. if zero are 
2065               // successful, returns false. 
2066               // consumers that are absent; i.e., not found by the provider registration 
2067               // manager are returned in the absent_consumer
2068               Boolean  eServerIndicationService::_deliverIndication(
2069                  const Array<CIMInstance> & subscriptions, 
2070                  const CIMInstance & indication,
2071                  Array<CIMObjectPath> & absent_consumers)
2072               {
2073                  
2074                  PEG_METHOD_ENTER (TRC_INDICATION_SERVICE, 
2075                     "eServerIndicationService::_deliverIndication");
2076                  CIMObjectPath consumer;
2077                  CIMInstance provider, providerModule;   
2078                  Boolean ccode = false;
2079                  try 
2080 mday  1.1.2.1    {
2081                     for(Uint8 i = 0 ; i < subscriptions.size(); ++i, consumer.clear())
2082                     {
2083               	 if(true == _get_object_path_from_association("Handler", 
2084               						      subscriptions[i],
2085               						      consumer))
2086               	 {
2087               
2088               	    // get the name space 
2089               	    if(true == _providerRegManager->lookupConsumerProvider(
2090               		  subscriptions[i].getPath().getNameSpace(),
2091               		  consumer.getClassName(),
2092               		  provider, 
2093               		  providerModule))
2094               	    {
2095               	       
2096               	       CIMConsumeIndicationRequestMessage *request = 
2097               		  new CIMConsumeIndicationRequestMessage(
2098               		     XmlWriter::getNextMessageId (),
2099               		     indication.getPath().getNameSpace(), 
2100               		     indication, 
2101 mday  1.1.2.1 		     provider, 
2102               		     providerModule, 
2103               		     QueueIdStack(_providerManager, _queueId));
2104               	    
2105               	       AsyncOpNode *op = get_op();
2106               	    
2107               	       AsyncLegacyOperationStart *async_req  = 
2108               		  new AsyncLegacyOperationStart(
2109               		     get_next_xid(), 
2110               		     op, 
2111               		     _providerManager, 
2112               		     request, 
2113               		     _queueId);
2114               	       try 
2115               	       {
2116               		  if( false == SendForget(async_req) )
2117               		  {
2118               		     async_req = static_cast<AsyncLegacyOperationStart *>(op->get_request());
2119               		     if(async_req)
2120               			delete async_req->get_action();
2121               		     delete async_req;
2122 mday  1.1.2.1 		     delete op;
2123               		     // the consumer may not truly be absent, but we couldn't get 
2124               		     // the message to him. Maybe the service can do something 
2125               		     // with this information. 
2126               		     absent_consumers.append(consumer);
2127               		  }
2128               		  else 
2129               		  {
2130               		     ccode = true;
2131               		  }
2132               	       }
2133               	       catch(...)
2134               	       {
2135               
2136               		  async_req = static_cast<AsyncLegacyOperationStart *>(op->get_request());
2137               		  if(async_req)
2138               		     delete async_req->get_action();
2139               		  delete async_req;
2140               		  delete op;
2141               		  // the consumer may not truly be absent, but we couldn't get 
2142               		  // the message to him. Maybe the service can do something 
2143 mday  1.1.2.1 		  // with this information. 
2144               		  absent_consumers.append(consumer);
2145               	       }
2146               	    } // handler is registered as a consumer provider 
2147               	    else 
2148               	    {
2149               	       absent_consumers.append(consumer);
2150               	    }
2151               	 
2152               	 } // found the handler path 
2153                     } // for each subscription
2154                  } // try 
2155                  catch(...)
2156                  {
2157                     throw;
2158                  }
2159                  
2160                  // each subscription contains a reference to a provider 
2161                  // that can handle the subscription. extract the handler
2162                  // instance from the reference 
2163                  PEG_METHOD_EXIT();
2164 mday  1.1.2.1    return ccode;
2165               }
2166               --><!-- code2html delete start --><pre><a name="16_line1" href="#16_line1">  1</a> 
2167               <a name="16_line2" href="#16_line2">  2</a> <font color="#444444">// will return true if ONE subscription is successful. </font>
2168               <a name="16_line3" href="#16_line3">  3</a> <font color="#444444">// e.g., if one out of three subscriptions results in a </font>
2169               <a name="16_line4" href="#16_line4">  4</a> <font color="#444444">// successful delivery, will return true. if zero are </font>
2170               <a name="16_line5" href="#16_line5">  5</a> <font color="#444444">// successful, returns false. </font>
2171               <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>
2172               <a name="16_line7" href="#16_line7">  7</a> <font color="#444444">// manager are returned in the absent_consumer</font>
2173               <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>
2174               <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>, 
2175               <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>,
2176               <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>
2177               <a name="16_line12" href="#16_line12"> 12</a> <font color="4444FF"><strong>{</strong></font>
2178               <a name="16_line13" href="#16_line13"> 13</a>    
2179               <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>, 
2180               <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>
2181               <a name="16_line16" href="#16_line16"> 16</a>    <font color="#2040a0">CIMObjectPath</font> <font color="#2040a0">consumer</font><font color="4444FF">;</font>
2182               <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>   
2183               <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>
2184               <a name="16_line19" href="#16_line19"> 19</a>    <font color="#2040a0">try</font> 
2185 mday  1.1.2.1 <a name="16_line20" href="#16_line20"> 20</a>    <font color="4444FF"><strong>{</strong></font>
2186               <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>
2187               <a name="16_line22" href="#16_line22"> 22</a>       <font color="4444FF"><strong>{</strong></font>
2188               <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>, 
2189               <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>,
2190               <a name="16_line25" href="#16_line25"> 25</a> 						      <font color="#2040a0">consumer</font><font color="4444FF">)</font><font color="4444FF">)</font>
2191               <a name="16_line26" href="#16_line26"> 26</a> 	 <font color="4444FF"><strong>{</strong></font>
2192               <a name="16_line27" href="#16_line27"> 27</a> 
2193               <a name="16_line28" href="#16_line28"> 28</a> 	    <font color="#444444">// get the name space </font>
2194               <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>
2195               <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>,
2196               <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>,
2197               <a name="16_line32" href="#16_line32"> 32</a> 		  <font color="#2040a0">provider</font>, 
2198               <a name="16_line33" href="#16_line33"> 33</a> 		  <font color="#2040a0">providerModule</font><font color="4444FF">)</font><font color="4444FF">)</font>
2199               <a name="16_line34" href="#16_line34"> 34</a> 	    <font color="4444FF"><strong>{</strong></font>
2200               <a name="16_line35" href="#16_line35"> 35</a> 	       
2201               <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> 
2202               <a name="16_line37" href="#16_line37"> 37</a> 		  <strong>new</strong> <font color="#2040a0">CIMConsumeIndicationRequestMessage</font><font color="4444FF">(</font>
2203               <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>,
2204               <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>, 
2205               <a name="16_line40" href="#16_line40"> 40</a> 		     <font color="#2040a0">indication</font>, 
2206 mday  1.1.2.1 <a name="16_line41" href="#16_line41"> 41</a> 		     <font color="#2040a0">provider</font>, 
2207               <a name="16_line42" href="#16_line42"> 42</a> 		     <font color="#2040a0">providerModule</font>, 
2208               <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>
2209               <a name="16_line44" href="#16_line44"> 44</a> 	    
2210               <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>
2211               <a name="16_line46" href="#16_line46"> 46</a> 	    
2212               <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> 
2213               <a name="16_line48" href="#16_line48"> 48</a> 		  <strong>new</strong> <font color="#2040a0">AsyncLegacyOperationStart</font><font color="4444FF">(</font>
2214               <a name="16_line49" href="#16_line49"> 49</a> 		     <font color="#2040a0">get_next_xid</font><font color="4444FF">(</font><font color="4444FF">)</font>, 
2215               <a name="16_line50" href="#16_line50"> 50</a> 		     <font color="#2040a0">op</font>, 
2216               <a name="16_line51" href="#16_line51"> 51</a> 		     <font color="#2040a0">_providerManager</font>, 
2217               <a name="16_line52" href="#16_line52"> 52</a> 		     <font color="#2040a0">request</font>, 
2218               <a name="16_line53" href="#16_line53"> 53</a> 		     <font color="#2040a0">_queueId</font><font color="4444FF">)</font><font color="4444FF">;</font>
2219               <a name="16_line54" href="#16_line54"> 54</a> 	       <font color="#2040a0">try</font> 
2220               <a name="16_line55" href="#16_line55"> 55</a> 	       <font color="4444FF"><strong>{</strong></font>
2221               <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>
2222               <a name="16_line57" href="#16_line57"> 57</a> 		  <font color="4444FF"><strong>{</strong></font>
2223               <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>
2224               <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>
2225               <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>
2226               <a name="16_line61" href="#16_line61"> 61</a> 		     <strong>delete</strong> <font color="#2040a0">async_req</font><font color="4444FF">;</font>
2227 mday  1.1.2.1 <a name="16_line62" href="#16_line62"> 62</a> 		     <strong>delete</strong> <font color="#2040a0">op</font><font color="4444FF">;</font>
2228               <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>
2229               <a name="16_line64" href="#16_line64"> 64</a> 		     <font color="#444444">// the message to him. Maybe the service can do something </font>
2230               <a name="16_line65" href="#16_line65"> 65</a> 		     <font color="#444444">// with this information. </font>
2231               <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>
2232               <a name="16_line67" href="#16_line67"> 67</a> 		  <font color="4444FF"><strong>}</strong></font>
2233               <a name="16_line68" href="#16_line68"> 68</a> 		  <strong>else</strong> 
2234               <a name="16_line69" href="#16_line69"> 69</a> 		  <font color="4444FF"><strong>{</strong></font>
2235               <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>
2236               <a name="16_line71" href="#16_line71"> 71</a> 		  <font color="4444FF"><strong>}</strong></font>
2237               <a name="16_line72" href="#16_line72"> 72</a> 	       <font color="4444FF"><strong>}</strong></font>
2238               <a name="16_line73" href="#16_line73"> 73</a> 	       <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
2239               <a name="16_line74" href="#16_line74"> 74</a> 	       <font color="4444FF"><strong>{</strong></font>
2240               <a name="16_line75" href="#16_line75"> 75</a> 
2241               <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>
2242               <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>
2243               <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>
2244               <a name="16_line79" href="#16_line79"> 79</a> 		  <strong>delete</strong> <font color="#2040a0">async_req</font><font color="4444FF">;</font>
2245               <a name="16_line80" href="#16_line80"> 80</a> 		  <strong>delete</strong> <font color="#2040a0">op</font><font color="4444FF">;</font>
2246               <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>
2247               <a name="16_line82" href="#16_line82"> 82</a> 		  <font color="#444444">// the message to him. Maybe the service can do something </font>
2248 mday  1.1.2.1 <a name="16_line83" href="#16_line83"> 83</a> 		  <font color="#444444">// with this information. </font>
2249               <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>
2250               <a name="16_line85" href="#16_line85"> 85</a> 	       <font color="4444FF"><strong>}</strong></font>
2251               <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>
2252               <a name="16_line87" href="#16_line87"> 87</a> 	    <strong>else</strong> 
2253               <a name="16_line88" href="#16_line88"> 88</a> 	    <font color="4444FF"><strong>{</strong></font>
2254               <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>
2255               <a name="16_line90" href="#16_line90"> 90</a> 	    <font color="4444FF"><strong>}</strong></font>
2256               <a name="16_line91" href="#16_line91"> 91</a> 	 
2257               <a name="16_line92" href="#16_line92"> 92</a> 	 <font color="4444FF"><strong>}</strong></font> <font color="#444444">// found the handler path </font>
2258               <a name="16_line93" href="#16_line93"> 93</a>       <font color="4444FF"><strong>}</strong></font> <font color="#444444">// for each subscription</font>
2259               <a name="16_line94" href="#16_line94"> 94</a>    <font color="4444FF"><strong>}</strong></font> <font color="#444444">// try </font>
2260               <a name="16_line95" href="#16_line95"> 95</a>    <strong>catch</strong><font color="4444FF">(</font>...<font color="4444FF">)</font>
2261               <a name="16_line96" href="#16_line96"> 96</a>    <font color="4444FF"><strong>{</strong></font>
2262               <a name="16_line97" href="#16_line97"> 97</a>       <strong>throw</strong><font color="4444FF">;</font>
2263               <a name="16_line98" href="#16_line98"> 98</a>    <font color="4444FF"><strong>}</strong></font>
2264               <a name="16_line99" href="#16_line99"> 99</a>    
2265               <a name="16_line100" href="#16_line100">100</a>    <font color="#444444">// each subscription contains a reference to a provider </font>
2266               <a name="16_line101" href="#16_line101">101</a>    <font color="#444444">// that can handle the subscription. extract the handler</font>
2267               <a name="16_line102" href="#16_line102">102</a>    <font color="#444444">// instance from the reference </font>
2268               <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>
2269 mday  1.1.2.1 <a name="16_line104" href="#16_line104">104</a>    <strong>return</strong> <font color="#2040a0">ccode</font><font color="4444FF">;</font>
2270               <a name="16_line105" href="#16_line105">105</a> <font color="4444FF"><strong>}</strong></font>
2271               </pre><!-- code2html delete stop -->
2272               </div>
2273                   <hr>
2274                   <address><a href="mailto:mdday@us.ibm.com">Michael Day (work)</a></address>
2275                   <address><a href="mailto:md@soft-hackle.net">Michael Day (home)</a></address>
2276                   <!-- Created: Fri Dec 27 16:05:58 EST 2002 -->
2277               
2278               <!-- hhmts start -->
2279               Last modified: Thu Feb 13 11:46:43 EST 2003
2280               <!-- hhmts end -->
2281                 </body>
2282               </html>

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2