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">"ProviderManagerService:: handleEnableIndicationsRequest"</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"><</font><font color="#2040a0">CIMEnableIndicationsRequestMessage</font> <font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font>
321 <a name="1_line8" href="#1_line8"> 8</a> <font color="#2040a0">const_cast</font><font color="4444FF"><</font><font color="#2040a0">Message</font> <font color="4444FF">*</font><font color="4444FF">></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"><</font><font color="#2040a0">AsyncRequest</font> <font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font><font color="#2040a0">op</font><font color="4444FF">-</font><font color="4444FF">></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">&</font><font color="4444FF">&</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">></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">></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">></font><font color="#2040a0">setKey</font><font color="4444FF">(</font><font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">></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">></font><font color="#2040a0">dest</font> <font color="4444FF">=</font> <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">></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"><</font><font color="#2040a0">String</font>, <font color="#2040a0">String</font>, <font color="#2040a0">String</font><font color="4444FF">></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">></font><font color="#2040a0">provider</font>, <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">></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">"Calling provider.enableIndications: "</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">"Storing indication handler for "</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">&</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">"Exception: "</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">></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">&</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">"Exception: "</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">></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">"Internal Error"</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">"Exception: Unknown"</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">></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">"Unknown Error"</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">></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">></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">"ProviderManagerService::handleDisableIndicationsRequest"</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"><</font><font color="#2040a0">CIMDisableIndicationsRequestMessage</font> <font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font>
410 <a name="1_line97" href="#1_line97"> 97</a> <font color="#2040a0">const_cast</font><font color="4444FF"><</font><font color="#2040a0">Message</font> <font color="4444FF">*</font><font color="4444FF">></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"><</font><font color="#2040a0">AsyncRequest</font> <font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font><font color="#2040a0">op</font><font color="4444FF">-</font><font color="4444FF">></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">&</font><font color="4444FF">&</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">></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">></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">></font><font color="#2040a0">setKey</font><font color="4444FF">(</font><font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">></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"><</font><font color="#2040a0">CIMIndication</font><font color="4444FF">></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"><</font><font color="#2040a0">String</font>, <font color="#2040a0">String</font>, <font color="#2040a0">String</font><font color="4444FF">></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">></font><font color="#2040a0">provider</font>, <font color="#2040a0">request</font><font color="4444FF">-</font><font color="4444FF">></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">"Calling provider.disableIndications: "</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">"Removing and Destroying indication handler for "</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">&</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">"Exception: "</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">></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">&</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">"Exception: "</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">></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">"Internal Error"</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">"Exception: Unknown"</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">></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">"Unknown Error"</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">></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">></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"><</font><font color="#2040a0">CIMIndication</font><font color="4444FF">></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"><</font><font color="#2040a0">CIMIndication</font><font color="4444FF">></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"><</font><font color="#2040a0">Uint32</font><font color="4444FF">></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">></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">&</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"><</font><font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font><font color="4444FF">></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">&</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">&</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">&</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">></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">></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">// <<< Wed Apr 10 21:04:00 2002 mdd >>></font>
570 <a name="2_line60" href="#2_line60"> 60</a> <font color="#444444">// AsyncOpNode * op = _source->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">></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">></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">></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->SendWait(asyncRequest);</font>
583 <a name="2_line73" href="#2_line73"> 73</a> <font color="#444444">// <<< Wed Apr 10 21:04:50 2002 mdd >>></font>
584 <a name="2_line74" href="#2_line74"> 74</a> <font color="#2040a0">_source</font><font color="4444FF">-</font><font color="4444FF">></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">// <<< Wed Apr 10 21:05:10 2002 mdd >>></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"><</font><font color="#2040a0">CIMIndication</font><font color="4444FF">></font> <font color="4444FF">&</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">&</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"><</font><font color="#2040a0">CIMIndication</font><font color="4444FF">></font> <font color="4444FF">&</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"><</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">&</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">&</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">&</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"><</font><font color="#2040a0">String</font><font color="4444FF">></font> <font color="4444FF">&</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">"eServerIndicationService::__getNameSpaceNames"</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">></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">></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">&</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">></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">></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">&</font> <font color="#2040a0">indication</font>,
728 <a name="3_line65" href="#3_line65"> 65</a> <font color="#2040a0">Array</font><font color="4444FF"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></font> <font color="4444FF">&</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"><</font><font color="#2040a0">String</font><font color="4444FF">></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"><</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">&</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">&</font> <font color="#2040a0">indication</font>,
749 <a name="3_line86" href="#3_line86"> 86</a> <font color="#2040a0">Array</font><font color="4444FF"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></font> <font color="4444FF">&</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"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></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"><</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">"Indication_Class"</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">&</font> <font color="#2040a0">nameSpaceName</font>,
781 <a name="3_line118" href="#3_line118">118</a> <font color="#2040a0">Array</font> <font color="4444FF"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></font> <font color="4444FF">&</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">"eServerIndicationService::_getSubscriptions"</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">></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">></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">></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">></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"><</font><strong>class</strong> <font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">></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"><</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">></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">></font> <strong>this</strong><font color="4444FF">-</font><font color="4444FF">></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">></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">></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"><</font><font color="#2040a0">ArrayRep</font><font color="4444FF"><</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">></font><font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font><font color="#2040a0">_rep</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> <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"><</font><strong>class</strong> <font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">></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"><</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">></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"><</font><strong>class</strong> <font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">></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"><</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">></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">></font> <strong>this</strong><font color="4444FF">-</font><font color="4444FF">></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">></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"><</font><font color="#2040a0">ArrayRep</font><font color="4444FF"><</font><font color="#2040a0">PEGASUS_ARRAY_T</font><font color="4444FF">></font><font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font><font color="#2040a0">_rep</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> <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">></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">"Creating Provider Module "</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">></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">></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">></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">"Using Cached Provider Module "</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">></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">"Loading/Linking Provider Module "</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">></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">></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">></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"><</font><font color="#2040a0">MessageQueueService</font> <font color="4444FF">*</font><font color="4444FF">></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">></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">></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">"Loading Provider "</font> <font color="4444FF">+</font> <font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">></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"><</font><font color="4444FF"><</font> <font color="#008000">"Loading Provider "</font> <font color="4444FF"><</font><font color="4444FF"><</font>
968 <a name="5_line41" href="#5_line41">41</a> <font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">></font><font color="#2040a0">_name</font> <font color="4444FF"><</font><font color="4444FF"><</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">></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">></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">&</font><font color="4444FF">(</font><font color="#2040a0">pr</font><font color="4444FF">-</font><font color="4444FF">></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">></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 "Software"), 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">// "AS IS", 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"><Pegasus/Common/Config.h></font></strong></font>
1048 <a name="6_line34" href="#6_line34">34</a> <font color="0000ff"><strong>#include <font color="#008000"><Pegasus/Provider/CIMBaseProvider.h></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"><Pegasus/Common/CIMInstance.h></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">&</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">&</font> <font color="#2040a0">indication</font>,
1079 <a name="6_line65" href="#6_line65">65</a> <font color="#2040a0">ResponseHandler</font><font color="4444FF"><</font><strong>void</strong><font color="4444FF">></font> <font color="4444FF">&</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">&</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">&</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">&</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">"en_US"</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">"2.0.0."</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">"Derived from PG_ProviderModule "</font>
1134 <a name="7_line26" href="#7_line26"> 26</a> <font color="#008000">"modified to support additional provider types and additional "</font>
1135 mday 1.1.2.1 <a name="7_line27" href="#7_line27"> 27</a> <font color="#008000">"provider qualifications. "</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">"Name"</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">"A human-readable name that uniquely "</font>
1138 <a name="7_line30" href="#7_line30"> 30</a> <font color="#008000">"identifies the Provider Module, inherited from PG_ProviderModule."</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">"Location"</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">"The file path to the module. "</font>
1142 <a name="7_line34" href="#7_line34"> 34</a> <font color="#008000">" If the usURL qualifier is present, indicates that the "</font>
1143 <a name="7_line35" href="#7_line35"> 35</a> <font color="#008000">"path is a URL. Otherwise the path is a string that represents "</font>
1144 <a name="7_line36" href="#7_line36"> 36</a> <font color="#008000">" the location of the module in the local host's file system."</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">"InterfaceType"</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font> <font color="4444FF">(</font><font color="#008000">"The interface definition "</font>
1148 <a name="7_line40" href="#7_line40"> 40</a> <font color="#008000">"supported by this module. Implies both a method signature and "</font>
1149 <a name="7_line41" href="#7_line41"> 41</a> <font color="#008000">" a binary specification for linking to the module and executing its code. "</font>
1150 <a name="7_line42" href="#7_line42"> 42</a> <font color="#008000">"In Pegasus 2.01 the InterfaceType also implies a specific "</font>
1151 <a name="7_line43" href="#7_line43"> 43</a> <font color="#008000">"ProviderManagerService, although this link will be broken in the "</font>
1152 <a name="7_line44" href="#7_line44"> 44</a> <font color="#008000">"future. "</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">"C++Default"</font>, <font color="#008000">"CMPI"</font>, <font color="#008000">"Java_Default"</font>, <font color="#008000">"Java_SNIA"</font>,
1154 <a name="7_line46" href="#7_line46"> 46</a> <font color="#008000">"Java_Wbem_Services"</font>, <font color="#008000">"Perl"</font>, <font color="#008000">"Unix_Domain"</font>,
1155 <a name="7_line47" href="#7_line47"> 47</a> <font color="#008000">"Named_Pipe"</font>, <font color="#008000">"WSDL_SOAP"</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">"The host of the computer upon which this module resides. "</font>
1159 <a name="7_line51" href="#7_line51"> 51</a> <font color="#008000">"For local providers this will be <font color="#77dd77">\"</font>localhost<font color="#77dd77">\"</font>. For remote "</font>
1160 <a name="7_line52" href="#7_line52"> 52</a> <font color="#008000">"providers this property should contain the DNS name of the "</font>
1161 <a name="7_line53" href="#7_line53"> 53</a> <font color="#008000">"remote host. "</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">"The PGP Signature of the module's file. "</font>
1165 <a name="7_line57" href="#7_line57"> 57</a> <font color="#008000">"The provider manager or any other module can use this "</font>
1166 <a name="7_line58" href="#7_line58"> 58</a> <font color="#008000">" signature to determine the authenticity if the module "</font>
1167 <a name="7_line59" href="#7_line59"> 59</a> <font color="#008000">" and the integrity of the module's image. "</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">"2.0.0"</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">"eServer_Provider is derived from "</font>
1184 <a name="7_line76" href="#7_line76"> 76</a> <font color="#008000">"PG_Provider. "</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">"The scoping eServer_ProviderModule name. "</font>
1188 <a name="7_line80" href="#7_line80"> 80</a> <font color="#008000">"Inherited as a propagated key from PG_Provider, having "</font>
1189 <a name="7_line81" href="#7_line81"> 81</a> <font color="#008000">"the syntax PG_ProviderModule.name"</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">"Name"</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">"A human-readable name that:
1192 <a name="7_line84" href="#7_line84"> 84</a> "</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">"
1193 <a name="7_line85" href="#7_line85"> 85</a> "</font><font color="#2040a0">Inherited</font> <font color="#2040a0">from</font> <font color="#2040a0">PG_Provider</font>.<font color="#008000">")]
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> "</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">"
1197 <a name="7_line89" href="#7_line89"> 89</a> "</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">"
1198 mday 1.1.2.1 <a name="7_line90" href="#7_line90"> 90</a> "</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">"
1199 <a name="7_line91" href="#7_line91"> 91</a> "</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">"
1200 <a name="7_line92" href="#7_line92"> 92</a> "</font><font color="#2040a0">in</font> <font color="#2040a0">more</font> <font color="#2040a0">detail</font>. \<font color="#008000">"Stressed<font color="#77dd77">\"</font> indicates that the element "</font>
1201 <a name="7_line93" href="#7_line93"> 93</a> <font color="#008000">"is functioning, but needs attention. Examples of "</font>
1202 <a name="7_line94" href="#7_line94"> 94</a> <font color="#008000">"<font color="#77dd77">\"</font>Stressed<font color="#77dd77">\"</font> states are overload, overheated, etc. "</font>
1203 <a name="7_line95" href="#7_line95"> 95</a> <font color="#008000">"<font color="#77dd77">\"</font>Predictive Failure<font color="#77dd77">\"</font> indicates that an element is "</font>
1204 <a name="7_line96" href="#7_line96"> 96</a> <font color="#008000">"functioning nominally but predicting a failure in the "</font>
1205 <a name="7_line97" href="#7_line97"> 97</a> <font color="#008000">"near future. <font color="#77dd77">\"</font>In Service<font color="#77dd77">\"</font> describes an element being "</font>
1206 <a name="7_line98" href="#7_line98"> 98</a> <font color="#008000">"configured, maintained, cleaned, or otherwise administered. "</font>
1207 <a name="7_line99" href="#7_line99"> 99</a> <font color="#008000">"<font color="#77dd77">\"</font>No Contact<font color="#77dd77">\"</font> indicates that the monitoring system "</font>
1208 <a name="7_line100" href="#7_line100">100</a> <font color="#008000">"has knowledge of this element, but has never been able to "</font>
1209 <a name="7_line101" href="#7_line101">101</a> <font color="#008000">"establish communications with it. <font color="#77dd77">\"</font>Lost Communication<font color="#77dd77">\"</font> "</font>
1210 <a name="7_line102" href="#7_line102">102</a> <font color="#008000">"indicates that the ManagedSystemElement is known to exist "</font>
1211 <a name="7_line103" href="#7_line103">103</a> <font color="#008000">"and has been contacted successfully in the past, but is "</font>
1212 <a name="7_line104" href="#7_line104">104</a> <font color="#008000">"currently unreachable. <font color="#77dd77">\"</font>Stopped<font color="#77dd77">\"</font> indicates that the "</font>
1213 <a name="7_line105" href="#7_line105">105</a> <font color="#008000">"element is known to exist, is not operational (e.g., it "</font>
1214 <a name="7_line106" href="#7_line106">106</a> <font color="#008000">"is unable to provide service to users), but it has not "</font>
1215 <a name="7_line107" href="#7_line107">107</a> <font color="#008000">"failed. It has purposely been made non-operational. <font color="#77dd77">\n</font>"</font>
1216 <a name="7_line108" href="#7_line108">108</a> <font color="#008000">" OperationalStatus replaces the Status property on "</font>
1217 <a name="7_line109" href="#7_line109">109</a> <font color="#008000">"ManagedSystemElement to provide a consistent approach to "</font>
1218 <a name="7_line110" href="#7_line110">110</a> <font color="#008000">"enumerations, to address implementation needs for an "</font>
1219 mday 1.1.2.1 <a name="7_line111" href="#7_line111">111</a> <font color="#008000">"array property, and to provide a migration path from today's "</font>
1220 <a name="7_line112" href="#7_line112">112</a> <font color="#008000">"environment to the future. This change was not made earlier "</font>
1221 <a name="7_line113" href="#7_line113">113</a> <font color="#008000">"since it required the DEPRECATED qualifier. Due to the "</font>
1222 <a name="7_line114" href="#7_line114">114</a> <font color="#008000">"widespread use of the existing Status property in "</font>
1223 <a name="7_line115" href="#7_line115">115</a> <font color="#008000">"management applications, it is strongly recommended that "</font>
1224 <a name="7_line116" href="#7_line116">116</a> <font color="#008000">"providers/instrumentation provide BOTH the Status and "</font>
1225 <a name="7_line117" href="#7_line117">117</a> <font color="#008000">"OperationalStatus properties. As always, Status (since it "</font>
1226 <a name="7_line118" href="#7_line118">118</a> <font color="#008000">"is single-valued) provides the primary status of the "</font>
1227 <a name="7_line119" href="#7_line119">119</a> <font color="#008000">"element."</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">"0"</font>, <font color="#008000">"1"</font>, <font color="#008000">"2"</font>, <font color="#008000">"3"</font>, <font color="#008000">"4"</font>, <font color="#008000">"5"</font>, <font color="#008000">"6"</font>, <font color="#008000">"7"</font>, <font color="#008000">"8"</font>,
1229 <a name="7_line121" href="#7_line121">121</a> <font color="#008000">"9"</font>, <font color="#008000">"10"</font>, <font color="#008000">"11"</font>, <font color="#008000">"12"</font>, <font color="#008000">"13"</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">"Unknown"</font>, <font color="#008000">"Other"</font>, <font color="#008000">"OK"</font>, <font color="#008000">"Degraded"</font>, <font color="#008000">"Stressed"</font>,
1231 <a name="7_line123" href="#7_line123">123</a> <font color="#008000">"Predictive Failure"</font>, <font color="#008000">"Error"</font>, <font color="#008000">"Non-Recoverable Error"</font>,
1232 <a name="7_line124" href="#7_line124">124</a> <font color="#008000">"Starting"</font>, <font color="#008000">"Stopping"</font>, <font color="#008000">"Stopped"</font>, <font color="#008000">"In Service"</font>,
1233 <a name="7_line125" href="#7_line125">125</a> <font color="#008000">"No Contact"</font>, <font color="#008000">"Lost Communication"</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">"CIM_ManagedSystemElement.OtherStatusDescription"</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">"A string describing the status - used when the "</font>
1239 <a name="7_line131" href="#7_line131">131</a> <font color="#008000">"OperationalStatus property is set to 1 (<font color="#77dd77">\"</font>Other<font color="#77dd77">\"</font>)."</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">"CIM_ManagedSystemElement.OperationalStatus"</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">"2.0.0"</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">"An instance of ProviderCapabilities "</font>
1254 <a name="7_line146" href="#7_line146">146</a> <font color="#008000">"describes a set of abilities for a specific provider."</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">"The scoping eServer_ProviderModuleName. "</font>
1257 <a name="7_line149" href="#7_line149">149</a> <font color="#008000">"Inherited as a Propagated key from PG_ProviderCapabilities, "</font>
1258 <a name="7_line150" href="#7_line150">150</a> <font color="#008000">"having the syntax PG_Provider.ProviderModuleName"</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">"The scoping eServer_Provider Name."</font>
1261 mday 1.1.2.1 <a name="7_line153" href="#7_line153">153</a> <font color="#008000">"Inherited as a Propagated key from PG_ProviderCapabilities, "</font>
1262 <a name="7_line154" href="#7_line154">154</a> <font color="#008000">"having the syntax PG_Provider.Name"</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">"A value that uniquely identifies this "</font>
1266 <a name="7_line158" href="#7_line158">158</a> <font color="#008000">" set of abilities for the designated Providers."</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">"ProviderType"</font><font color="4444FF">)</font>, <font color="#2040a0">Description</font><font color="4444FF">(</font><font color="#008000">"ProviderType enumerates "</font>
1270 <a name="7_line162" href="#7_line162">162</a> <font color="#008000">" the specific method types that the provider supports. "</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">"Indexed"</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">"2"</font>, <font color="#008000">"3"</font>, <font color="#008000">"4"</font>, <font color="#008000">"5"</font>, <font color="#008000">"6"</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">"Instance"</font>, <font color="#008000">"Association"</font>, <font color="#008000">"Indication"</font>, <font color="#008000">"Method"</font>,
1274 <a name="7_line166" href="#7_line166">166</a> <font color="#008000">"Indication_Consumer"</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">&</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">&</font> <font color="#2040a0">className</font>,
1301 <a name="8_line4" href="#8_line4"> 4</a> <font color="#2040a0">CIMInstance</font> <font color="4444FF">&</font> <font color="#2040a0">provider</font>,
1302 <a name="8_line5" href="#8_line5"> 5</a> <font color="#2040a0">CIMInstance</font> <font color="4444FF">&</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">"ProviderRegistrationManager::lookupConsumerProvider"</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">"<font color="#77dd77">\n</font>nameSpace = "</font> <font color="4444FF">+</font> <font color="#2040a0">nameSpace</font> <font color="4444FF">+</font> <font color="#008000">"; className = "</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">"; capabilityKey = "</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">></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"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></font> <font color="#2040a0">instances</font> <font color="4444FF">=</font> <font color="#2040a0">providerCapability</font><font color="4444FF">-</font><font color="4444FF">></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">"Missing ProviderName which is key in PG_ProviderCapabilities class."</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">"Missing ProviderModuleName which is key in PG_ProviderCapabilities class."</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">></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"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></font> <font color="#2040a0">providerInstances</font> <font color="4444FF">=</font> <font color="#2040a0">_provider</font><font color="4444FF">-</font><font color="4444FF">></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">></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"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></font> <font color="#2040a0">providerModuleInstances</font> <font color="4444FF">=</font> <font color="#2040a0">_providerModule</font><font color="4444FF">-</font><font color="4444FF">></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">&</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">"ProcessIndicationProvider"</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">"ProcessIndicationProvider"</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">"Pegasus Community"</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">"2.0.0"</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">"C++Default"</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">"2.0.0"</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">"localhost"</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">"ProcessIndicationProvider"</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">"eServer_ProcessIndicationProvider"</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">"ProcessIndicationProvider"</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">"eServer_ProcessIndicationProvider"</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">"1"</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">"CIM_ProcessIndication"</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">"root/PG_Interop"</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">"ProcessIndicationProvider"</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">"eServer_ProcessIndicationConsumer"</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">"ProcessIndicationProvider"</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">"eServer_ProcessIndicationConsumer"</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">"2"</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">"eServer_ProcessIndicationConsumer"</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">"root/PG_Interop"</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">"CIM_ProcessIndication"</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">"eServer_ProcessIndicationConsumer"</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"><</font><font color="#2040a0">CIMIndication</font><font color="4444FF">></font> <font color="4444FF">&</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"><</font><font color="4444FF"><</font> <font color="#008000">"eServer_ProcessIndicationProvider: enableIndications"</font> <font color="4444FF"><</font><font color="4444FF"><</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">&</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">></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"><</font><font color="4444FF"><</font> <font color="#008000">"eServer_ProcessIndicationProvider: disableIndications"</font> <font color="4444FF"><</font><font color="4444FF"><</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"><</font><font color="#2040a0">Thread</font> <font color="4444FF">*</font><font color="4444FF">></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"><</font><font color="#2040a0">ProcessIndicationProvider</font> <font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font><font color="#2040a0">th</font><font color="4444FF">-</font><font color="4444FF">></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">></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">></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">></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">"root/PG_Interop:CIM_ProcessIndication"</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">"IndicationTime"</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">"IndicationIdentifier"</font>, <font color="#008000">"ProcessIndication01"</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"><</font><font color="#2040a0">String</font><font color="4444FF">></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">"CorrelatedIndications"</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">></font><font color="#2040a0">_response_handler</font><font color="4444FF">-</font><font color="4444FF">></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">></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">"C"</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">&</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">"ProcessIndicationProvider"</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">"ProcessIndicationProvider2"</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">"eServer_ProcessIndicationProvider"</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">"eServer_ProcessIndicationConsumer"</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">&</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">&</font> <font color="#2040a0">indication</font>,
1812 <a name="13_line6" href="#13_line6"> 6</a> <font color="#2040a0">ResponseHandler</font><font color="4444FF"><</font><strong>void</strong><font color="4444FF">></font> <font color="4444FF">&</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"><</font><font color="4444FF"><</font>
1817 <a name="13_line11" href="#13_line11">11</a> <font color="#008000">"Indication Consumer: recieved indication of class: "</font> <font color="4444FF"><</font><font color="4444FF"><</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"><</font><font color="4444FF"><</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">&</font> <font color="#2040a0">context</font>, <strong>const</strong> <font color="#2040a0">CIMIndication</font> <font color="4444FF">&</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">></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">></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">></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">></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">></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">></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">"eServerIndicationService::_handleProcessIndicationRequest"</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">></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">></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"><</font><font color="#2040a0">String</font><font color="4444FF">></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"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></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">></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"><</font><font color="#2040a0">CIMObjectPath</font><font color="4444FF">></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">&</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">></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">&</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">></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">></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">"Internal Error"</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"><</font><font color="#2040a0">CIMInstance</font><font color="4444FF">></font> <font color="4444FF">&</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">&</font> <font color="#2040a0">indication</font>,
2176 <a name="16_line11" href="#16_line11"> 11</a> <font color="#2040a0">Array</font><font color="4444FF"><</font><font color="#2040a0">CIMObjectPath</font><font color="4444FF">></font> <font color="4444FF">&</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">"eServerIndicationService::_deliverIndication"</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"><</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">"Handler"</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">></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"><</font><font color="#2040a0">AsyncLegacyOperationStart</font> <font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font><font color="#2040a0">op</font><font color="4444FF">-</font><font color="4444FF">></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">></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"><</font><font color="#2040a0">AsyncLegacyOperationStart</font> <font color="4444FF">*</font><font color="4444FF">></font><font color="4444FF">(</font><font color="#2040a0">op</font><font color="4444FF">-</font><font color="4444FF">></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">></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>
|