1 mday 1.3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html lang="en"><head>
|
3 mday 1.4 <META http-equiv="Content-Type" content="text/html;
4 charset=ISO-8859-1"><meta http-equiv="Content-Type"
5 content="text/html;
6 charset=ISO-8859-1"><title>Pegasus
7 Meta Dispatcher </title><style type="text/css">
|
8 mday 1.3
9 body {
10 margin: 2em 1em 2em;
11 font-family: sans-serif;
12 color: black;
13 background: white;
14 background-position: top left;
15 background-attachment: fixed;
16 background-repeat: no-repeat;
17 }
18 :link { color: #00C; background: transparent }
19 :visited { color: #609; background: transparent }
20 :active { color: #C00; background: transparent }
21
22 th, td { /* ns 4 */
23 font-family: sans-serif;
24 }
25
26 h1, h2, h3, h4, h5, h6 { text-align: left }
27 /* background should be transparent, but WebTV has a bug */
28 h1, h2, h3 { color: #005A9C; background: white }
29 mday 1.3 h1 { font: 170% sans-serif }
30 h2 { font: 140% sans-serif }
31 h3 { font: 120% sans-serif }
32 h4 { font: bold 100% sans-serif }
33 h5 { font: italic 100% sans-serif }
34 h6 { font: small-caps 100% sans-serif }
35
36 .hide { display: none }
37
38 div.head { margin-bottom: 1em }
39 div.head h1 { margin-top: 2em; clear: both }
40 div.head table { margin-left: 2em; margin-top: 2em }
41 div.head img { color: white; border: none } /* remove border from top image */
42
43 p.copyright { font-size: small }
44 p.copyright small { font-size: small }
45
46 pre { margin-left: 2em }
|
47 mday 1.4
|
48 mday 1.3 p {
49 margin-top: 0.6em;
50 margin-bottom: 0.6em;
51 }
|
52 mday 1.4
|
53 mday 1.3 dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */
54 dt { font-weight: bold }
55
56 pre, code { font-family: monospace } /* navigator 4 requires this */
57
58 ul.toc {
59 list-style: disc; /* Mac NS has problem with 'none' */
60 list-style: none;
61 }
62
|
63 mday 1.4 code { font-family: monospace; }
64 var {font-family: monospace; font-style: normal; font-weight: bold;}
|
65 mday 1.3 div.constraint,
66 div.issue,
67 div.note,
68 div.notice { margin-left: 2em; }
69
|
70 mday 1.4 li p { margin-top: 0.8em;
71 margin-bottom: 0.8em; }
|
72 kumpf 1.7
|
73 mday 1.4 li {margin-top: 0.4em; margin-bottom: 0.4em;}
74
|
75 mday 1.3 div.exampleInner pre { margin-left: 1em;
76 margin-top: 0em; margin-bottom: 0em}
77 div.exampleOuter {border: 4px double gray;
78 margin: 0em; padding: 0em}
79 div.exampleInner { background-color: #d5dee3;
80 border-top-width: 4px;
81 border-top-style: double;
82 border-top-color: #d3d3d3;
83 border-bottom-width: 4px;
84 border-bottom-style: double;
85 border-bottom-color: #d3d3d3;
86 padding: 4px; margin: 0em }
87 div.exampleWrapper { margin: 4px }
88 div.exampleHeader { font-weight: bold;
89 margin: 4px}
90
91 table { background-color: #d5dee3;
92 width: 85% ;
93 border-style: double;
94 border-width: 4px;
95 border-color: #d3d3d3;
96 mday 1.3 }
97 </style>
|
98 kumpf 1.7
|
99 mday 1.1 <html>
100 <head>
101 <title>Pegasus Meta Dispatcher</title>
102 </head>
103
104 <body>
|
105 mday 1.3
|
106 mday 1.1 <h1>Pegasus Meta Dispatcher</h1>
107 <p>
108 The Pegasus Meta Dispatcher is a set of classes that extend the
109 existing MessageQueue messaging system to be dynamic,
110 asynchronous, and multithreaded. The primary classes consist of the
111 folowing:
112 </p>
|
113 kumpf 1.7 <table>
|
114 mday 1.3 <tr align="left"><th>Class</th><th>Derived from</th><th>Source file</th></tr>
115 <tr><td><div class="exampleInner">cimom</div></td><td>MessageQueue</td><td>Pegasus/Common/Cimom.h</td></tr>
116 <tr><td>MessageQueueService</td><td>MessageQueue</td><td>Pegasus/Common/MessageQueueServices.h</td></tr>
117 <tr><td>CimomMessage</td><td>Message</td><td>Pegasus/Common/CimomMessage.h</td></tr>
|
118 mday 1.1 <tr><td>AsyncOpNode</td><td>n/a</td><td>Pegasus/Common/AsyncOpNode.h</td></tr>
|
119 mday 1.3 <tr><td>AsyncDQueue</td><td>unlocked_dq</td><td>Pegasus/Common/DQueue.h</td></tr>
120 <tr><td>IPC classes</td><td>n/a</td><td>Pegasus/Common/IPC.h</td></tr>
121 <tr><td>Threading classes</td><td>n/a</td><td>Pegasus/Common/Thread.h</td></tr>
122
123 </table>
124
125 <br>
126 <br>
|
127 mday 1.1
|
128 mday 1.4 <a href = "#non-blocking">Jump to the non-blocking message interface.</a>
129
|
130 mday 1.1 <h2>Purposes of Meta Dispatcher</h2>
131 <p>
|
132 mday 1.4 The Meta Dispatcher has three primary goals:
|
133 mday 1.1 <ol>
134 <li>Provide for orderly asynchronous message-based communication
135 among a dynamic set of Pegasus Services.</li>
136 <li>Preserve the existing message-passing architecture of
137 Pegasus.</li>
138 <li>Allow Pluggable Services such as repositories, provider
139 managers, and others.</li>
140 </ol>
141 <br>
142 <br>
143 Most of the purposes listed above revolve around maintaining the
144 integrity of data and control flow in an asynchronous
|
145 kumpf 1.7 multithreaded environment.
|
146 mday 1.1 </p>
147
148 <h2>Terms</h2>
149 <p>
150 <dl>
151 <dt><b>Meta Dispatcher</b></dt><dd>The central message broker, or
152 router, that provides the asynchronous communications within
153 Pegasus. Derived from the <b>MessageQueue</b> class. <br>
154 </dd>
155 <dt><b>Service</b></dt><dd>A Pegasus module that sends and
156 receives messages to other modules through the meta
157 dispatcher; A module that has enhanced privileges within
158 Pegasus and which provides one or more functions necessary to
159 the operation of Pegasus. Derived from the
160 <b>MessageQueue</b>class.<dt>
161 <dt><b>Asynchronous Message</b></dt><dd>A <b>pair</b> of
162 messages, consisting of a <b>request</b> and a <b>response</b>
163 that are treated as a single operation by Services. An
164 asynchronous message may be fronted by a synchronous
165 programming interface. Derived from the <b>Message</b> class.</dd>
166 <dt><b>AsyncOpNode</b></dt><dd>A control object that manages the
167 mday 1.1 lifetime of an <b>Asynchronous Message</b>.The AsyncOpNode uses
168 many of the IPC object classes. A Service manages the lifetime
169 of an AsyncOpNode during the processing of the
170 message. However, it necessarily cedes control of the
171 AsyncOpNode to the <b>Meta Dispatcher</b> while the
172 Asynchronous Message is being processed.</dd>
173 </dl>
|
174 kumpf 1.7
|
175 mday 1.1 </p>
176
177 <h2>Meta Dispatcher Design</h2>
178 <p>
179 Three points are necessary to avoid deadlocks and to
180 provide pluggable services in Pegaus. The first thing is
181 <b>independent execution paths</b> of service modules. i.e.,
182 each service must have its own thread(s), which must not intersect
183 with the thread(s) of other services. Intersection of execution
184 paths can occur indirectly through IPC objects such as mutexes,
185 conditions, and semaphores.
186 </p>
187 <p>
188 The second point that is necessary is <b>interface
189 abstraction</b>, which the Meta Dispatcher provides through
190 C++ polymorphism. This allows pluggable services. i.e., one
191 service can replace another and the system will continue to
|
192 kumpf 1.7 function (hopefully in an improved manner).
|
193 mday 1.1 </p>
194 <p>
195 The third point that is neccesary is a <b>central
196 message broker</b> that isolates services from each other,
197 thereby preventing deadlocks. The central message broker also
198 provides message responses for services that are paused,
|
199 kumpf 1.7 stopped, or not present (plugged in).
|
200 mday 1.1 </p>
201
202
203 <h3>Central Hub</h3>
204 <p>
205 The Meta Dispatcher therefore acts as a central message
206 hub. Services communicate with each other <i>via</i> the Meta
207 Dispatcher.
|
208 mday 1.3 <div class="exampleOuter"><div class="exampleInner">
|
209 martin 1.5 <pre> Service A--Message----1----> (block on semaphore)
|
210 mday 1.1 |
211 |
|
212 kumpf 1.7 Meta Dispatcher|
|
213 mday 1.1 |
214 Message----2->Service B
215 |
216 |
217 (Signal Semaphore) <---Response---3-- +
218 |
219 Service A <--Response--4---+
220
221 </pre>
222
|
223 mday 1.3 </div></div>
|
224 mday 1.1 The numbered steps above are as follows:
225 <ol>
226 <li><b>Service A</b> creates a new <code>AsyncMessage</code> and
227 <code>AsyncOpNode</code>and sends that message to <b>Service
228 B</b> by calling
229 <code>MessageQueueService::SendWait</code>. The calling thread
230 blocks on the <b>client emaphore</b> until the response is ready.</li><br>
231
232 <li>The Meta Dispatcher's routing thread picks up the message
233 and inserts it into <b>Service B's</b> incoming message
234 queue. The routing thread returns to the Meta Dispatcher to
235 route the next message in the system.</li><br>
236
237 <li><b>Service B's</b>incoming thread picks up the message and
238 calls the its message handler. Message handlers are virtual,
239 so a class derived from <b>MessageQueueService</b>can define
240 its own message handlers to override the default
241 handlers. When the message handler has constructed an
242 <b>AsyncReply</b> that reply gets linked to the
243 <b>AsyncOpNode</b>. The MessageQueueService then signals the
244 <b>client semaphore</b> within the op node.</li><br>
245 mday 1.1
246 <li><b>Service A</b> awakens when the <b>client semaphore</b> is
247 signalled. It pulls the <b>AsyncResponse</b> message from the
248 <b>AsyncOpNode</b> and processes the result. Service A is
249 responsible for discarding the request, response, and
250 AsyncOpNode objects. The existing classes have mechanisms for
251 caching these objects to avoid too frequent
|
252 kumpf 1.7 construction/destruction of them.
|
253 mday 1.1 </ol>
254 </p>
255
256 <h2>Test Program</h2>
257 <p>
258 The concepts explained below are all contained in the test
|
259 kumpf 1.7 program for the Meta Dispatcher, which is located in
|
260 mday 1.1 <code>$PEGASUS_HOME/src/Pegasus/Common/tests/MessageQueueService/</code>
261
262 </p>
263
264 <h2>Service Registration and Deregistration</h2>
265 <p>
266 Services (classes derived from
267 <code>MessageQueueService</code>must register their presence
268 with the Meta Dispatcher. This is done as follows (taken from
269 the test program):
270
271 <ol>
272 <li><b>Define the Service Class</b></li>
|
273 kumpf 1.7 <pre>// Define our service class
|
274 mday 1.1
275 class MessageQueueClient : public MessageQueueService
276 {
|
277 kumpf 1.7
|
278 mday 1.1 public:
279 typedef MessageQueueService Base;
|
280 kumpf 1.7
|
281 mday 1.1 MessageQueueClient(char *name)
|
282 kumpf 1.7 : Base(name, MessageQueue::getNextQueueId(), 0,
283 message_mask::type_cimom |
284 message_mask::type_service |
285 message_mask::ha_request |
286 message_mask::ha_reply |
|
287 mday 1.1 message_mask::ha_async ),
288 client_xid(1)
|
289 kumpf 1.7 {
|
290 mday 1.1 _client_capabilities = Base::_capabilities;
291 _client_mask = Base::_mask;
292 }
|
293 kumpf 1.7
294 virtual ~MessageQueueClient(void)
|
295 mday 1.1 {
296 }
|
297 kumpf 1.7
298 // method to indicate acceptance of message to
|
299 mday 1.1 // Meta Dispatcher
300 virtual Boolean messageOK(const Message *msg);
301
302 // function to send a request to another service
303 void send_test_request(char *greeting, Uint32 qid);
304 Uint32 get_qid(void);
|
305 kumpf 1.7
|
306 mday 1.1 Uint32 _client_capabilities;
307 Uint32 _client_mask;
|
308 kumpf 1.7
|
309 mday 1.1 // method to receive messages from the Meta Dispatcher,
310 // MUST be defined
311 virtual void _handle_async_request(AsyncRequest *req);
312
313 AtomicInt client_xid;
314 };
315
316 </pre>
317 <li><b>Construct the Service</b></li>
|
318 martin 1.5 <pre>// Create our Service
|
319 kumpf 1.7 MessageQueueClient *q_client =
|
320 mday 1.1 new MessageQueueClient("test client");
321
322 </pre>
323 <li><b>Register the Service</b></li>
|
324 martin 1.5 <pre>// Register our service with the Meta Dispatcher
|
325 kumpf 1.7 q_client->register_service("test client",
326 q_client->_client_capabilities,
|
327 mday 1.1 q_client->_client_mask);
328 cout << " client registered " << endl;
329 </pre>
330
331 </ol>
332
333 The example above hides many of the details which are handled by
334 the MessageQueueService's constructor, such as creating the
335 background thread, finding the Meta Dispatcher, and constructing
336 the queues. But a derived class as the example shows does not
|
337 kumpf 1.7 need to worry about those details.
|
338 mday 1.1 </p>
339
340 <h2>Finding Other Services</h2>
341 <p>
342 The MessageQueueService class has an api for finding other
343 services. This api is built using messages that are defined in
344 <code>CimomMessage.h</code>. Here is an example from the test
345 program:
346
347 <pre>
|
348 kumpf 1.7 Array<Uint32>; services;
|
349 mday 1.1
350 while( services.size() == 0 )
351 {
|
352 kumpf 1.7 q_client->find_services(String("test server"), 0, 0, &services);
353 pegasus_yield();
|
354 mday 1.1 }
|
355 kumpf 1.7
|
356 mday 1.2 cout << "found server at " << services[0] << endl;
|
357 mday 1.1
358
359 </pre>
360
361 The code sample above shows how to find services by their
362 name. The api also allows finding services by their capabilities
363 or the messages they support. Note that the return is an array
364 of Queue IDs. It is possible, for example, to find multiple
|
365 kumpf 1.7 services.
|
366 mday 1.1 </p>
367
368 <h2>Sending an Asynchronous Message to Another Service</h2>
369 <p>
370 The "handle" for a services is its Queue ID. Once you have the
371 Queue ID you can send a message to that service. The example
372 above shows one way to get a service's Queue ID. Here is an
|
373 kumpf 1.7 example that shows how to send that service a message.
|
374 mday 1.1
375 <ol>
376 <li><b>Define the Request and Response Message Pair by Inheriting from AsyncMessage.</b></li>
377 <pre>
378 class test_request : public AsyncRequest
379 {
|
380 kumpf 1.7
|
381 mday 1.1 public:
382 typedef AsyncRequest Base;
|
383 kumpf 1.7
384 test_request(Uint32 routing,
385 AsyncOpNode *op,
386 Uint32 destination,
|
387 mday 1.1 Uint32 response,
388 char *message)
389 : Base(0x04100000,
|
390 kumpf 1.7 Message::getNextKey(),
|
391 mday 1.1 routing,
|
392 kumpf 1.7 0,
393 op,
394 destination,
395 response,
|
396 mday 1.1 true),
|
397 kumpf 1.7 greeting(message)
398 {
399
|
400 mday 1.1 }
|
401 kumpf 1.7
402 virtual ~test_request(void)
|
403 mday 1.1 {
404
405
406 }
|
407 kumpf 1.7
|
408 mday 1.1 String greeting;
409 };
410
411
412 class test_response : public AsyncReply
413 {
414 public:
415 typedef AsyncReply Base;
416
|
417 kumpf 1.7
418 test_response(Uint32 key,
|
419 mday 1.1 Uint32 routing,
|
420 kumpf 1.7 AsyncOpNode *op,
|
421 mday 1.1 Uint32 result,
|
422 kumpf 1.7 Uint32 destination,
|
423 mday 1.1 char *message)
424 : Base(0x04200000,
|
425 kumpf 1.7 key,
426 routing,
427 0,
428 op,
429 result,
|
430 mday 1.1 destination,
|
431 kumpf 1.7 true),
432 greeting(message)
433 {
434
|
435 mday 1.1 }
|
436 kumpf 1.7
|
437 mday 1.1 virtual ~test_response(void)
438 {
|
439 kumpf 1.7
|
440 mday 1.1 }
|
441 kumpf 1.7
|
442 mday 1.1 String greeting;
443 };
444
445 </pre>
446
447 The function <code>send_test_request</code> shows everything
448 that is necessary to send a message to another service and
|
449 kumpf 1.7 process the reply.
|
450 mday 1.1
451 <pre>
452 void MessageQueueClient::send_test_request(char *greeting, Uint32 qid)
453 {
454
455 </pre>
456 <li><b>Construct the Request</b></li>
457
|
458 kumpf 1.7 <pre> test_request *req =
|
459 mday 1.1 new test_request(Base::get_next_xid(),
460 0,
461 qid, // destination queue ID
|
462 kumpf 1.7 _queueId, // my own queue ID
|
463 mday 1.1 greeting); // message parameter
464
465 </pre>
466
467 <li><b>Send the message using <code>MessageQueueService::SendWait</code></b></li>
468
|
469 martin 1.5 <pre> AsyncMessage *response = SendWait(req);
|
470 mday 1.1
471 </pre>
472
473 <li><b>Process the Response.</b></i>
|
474 martin 1.5 <pre> if( response != 0 )
|
475 mday 1.1 {
|
476 kumpf 1.7 msg_count++;
477 delete response;
|
478 mday 1.1 cout << " test message " << msg_count.value() << endl;
|
479 kumpf 1.7
|
480 mday 1.1 }
481 delete req;
482 }
483
484 </pre>
485
486 <li><b>Delete the Request and the Response. The
487 <code>SendWait</code> interface creates and disposes of
|
488 kumpf 1.7 everything else.</b></li>
|
489 mday 1.1
490 </ol>
491 </p>
492
493
494 <h2>Handling an Incoming Message </h2>
495
496 <p>
497 To handle messages the service needs to implement the
|
498 kumpf 1.7 following methods.
|
499 mday 1.1
500 <ol>
501
502 <li><b><code>virtual Boolean MessageOK(const Message
503 *)</code></b></li>
504
505 This method allows the Service to accept or reject the
506 message. The Meta Dispatcher will always call this method
|
507 kumpf 1.7 before inserting the request on the Service's queue.
|
508 mday 1.1
509 <pre>
510 Boolean MessageQueueServer::messageOK(const Message *msg)
511 {
512 if(msg->getMask() & message_mask::ha_async)
513 {
514 if( msg->getType() == 0x04100000 ||
|
515 kumpf 1.7 msg->getType() == async_messages::CIMSERVICE_STOP ||
516 msg->getType() == async_messages::CIMSERVICE_PAUSE ||
|
517 mday 1.1 msg->getType() == async_messages::CIMSERVICE_RESUME )
518 return true;
519 }
520 return false;
521 }
522
523 </pre>
524
525 <li><b><code>virtual Boolean accept_async(AsyncOpNode
526 *operation)</code> (optional) </b></li>
527
528 This method executes on the Meta Dispatcher's thread and links
529 the incoming message to the Service's queue. <br><br>
530
531
532
533 <li><b><code>virtual void _handle_incoming_operation(AsyncOpNode
534 *)</code></b></li><br>
535
536
537 This method is called by the Service's background thread. Here is an
538 mday 1.1 example implementation that just does some sanity checking on
539 the message.
540
541 <pre>
542 void MessageQueueServer::_handle_incoming_operation(AsyncOpNode *op)
543 {
544 if ( operation != 0 )
545 {
546 Message *rq = operation->get_request();
547 PEGASUS_ASSERT(rq != 0 );
548 PEGASUS_ASSERT(rq->getMask() & message_mask::ha_async );
549 PEGASUS_ASSERT(rq->getMask() & message_mask::ha_request);
550 _handle_async_request(static_cast<AsyncRequest *>(rq));
551 }
|
552 kumpf 1.7
|
553 mday 1.1 return;
|
554 kumpf 1.7
|
555 mday 1.1 }
556
557
558 </pre>
559
560 <li><b><code>virtual void _handle_async_request(AsyncRequest *)</code></b></li><br>
561 <br>
562
563 This method handles the request. The Service must implement
564 this method. <b>If the Service does not handle the Request it
565 must pass the Request to the Base class by calling <code>Base::_handle_async_request(req)</code></b>
566
|
567 martin 1.5 <pre>void MessageQueueServer::_handle_async_request(AsyncRequest *req)
|
568 mday 1.1 {
569 if (req->getType() == 0x04100000 )
570 {
571 req->op->processing();
|
572 kumpf 1.7 handle_test_request(req); // Message Handler
|
573 mday 1.1 }
574 else if ( req->getType() == async_messages::CIMSERVICE_STOP )
575 {
576 req->op->processing();
577 handle_CimServiceStop(static_cast<CimServiceStop *>(req));
578 }
|
579 kumpf 1.7
|
580 mday 1.1 else
581 Base::_handle_async_request(req); // Give it to the Base !!
582 }
583
584 </pre>
585
586 <li><b>Specific Message Handlers</b>
587
588 Each Message handler will be defined by the format of the
589 Request/Response pair. Here is an example from the test
|
590 kumpf 1.7 program.
|
591 mday 1.1
|
592 kumpf 1.7 <pre>
|
593 mday 1.1 if( msg->getType() == 0x04100000 )
594 {
595
596 </pre>
597 <ol>
598 <li><b>Construct the Reply</b></li>
599 <pre>
|
600 kumpf 1.7 test_response *resp =
|
601 mday 1.1 new test_response(msg->getKey(),
602 msg->getRouting(),
|
603 kumpf 1.7 msg->op,
|
604 mday 1.1 async_results::OK,
|
605 kumpf 1.7 msg->dest,
|
606 mday 1.1 "i am a test response");
607
608
609 </pre>
610 <li><b>Complete the Reply</b> by calling the following
611 helper routine in the Base class</li>
612
|
613 martin 1.5 <pre> _completeAsyncResponse(msg, resp, ASYNC_OPSTATE_COMPLETE, 0);
|
614 mday 1.1
615 }
616 </pre>
617
618 </ol>
619 </p>
620
|
621 mday 1.2 <h2>Handling CIMMessage and Other Pre-existing Message Classes</h2>
622 <p>
623 Existing Messages, including all of the <code>CIMMessage</code>
624 derivitives, are not configured to be asynchronous
625 request/reply pairs. They are designed to travel through
626 Pegasus as events that trigger other processing events,
627 which is the end of their lifetime. This is not an optimal
628 use model for asynchronous operation because the
629 originator of the event does not require nor receive any
630 completion notification. Further, there is not a
|
631 kumpf 1.7 one-to-one correspondence of "event messages" to replies.
|
632 mday 1.2 </p>
|
633 kumpf 1.7
|
634 mday 1.2 <h3>AsyncLegacyOperationStart Message</h3>
635 <p>
636 The AsyncLegacyOperationStart message is an envelope that
637 allows a <code>MessageQueueService</code>-based service to
638 send, receive, and process pre-existing "legacy"
|
639 kumpf 1.7 messages.
|
640 mday 1.2 </p>
641 <p>
642 The <code>AsyncLegacyOperationStart</code> Message allows
643 an asynchronous service to create, package, and send a
644 "legacy" message to another service or, indirectly,
645 enqueue it to a non-asynchronous message queue. The code
646 example below shows how this works:
647 </p>
648
649 <pre>
650 cout << " sending LEGACY to test server" << endl;
|
651 kumpf 1.7
652 Message *legacy = new Message(0x11100011,
|
653 mday 1.2 Message::getNextKey());
|
654 kumpf 1.7
655 AsyncLegacyOperationStart *req =
656 new AsyncLegacyOperationStart(q_client->get_next_xid(),
657 0,
|
658 mday 1.2 services[0],
|
659 kumpf 1.7 legacy,
|
660 mday 1.2 q_client->getQueueId());
661 reply = q_client->SendWait(req);
662 delete req;
663 delete reply;
|
664 kumpf 1.7
|
665 mday 1.2 </pre>
666 <p>
667 The code sample above shows a <code>Message</code> object
668 being embedded inside an
669 <code>AsyncLegacyOperationStart</code> message and sent
|
670 kumpf 1.7 using the <code>SendWait</code>API.
|
671 mday 1.2 </p>
672
673 <h3>Default Handler for Legacy Messages</h3>
674 <p>
675 The <code>MessageQueueService</code> class has a default
676 handler for legacy messages that extracts the
677 <code>Message</code> out of its asynchronous "envelope"
678 and dispatches it using the pre-existing synchronous
|
679 kumpf 1.7 interface, as shown below.
|
680 mday 1.2 </p>
681
682 <pre>
683 void MessageQueueService::handle_AsyncLegacyOperationStart(
684 AsyncLegacyOperationStart *req)
685 {
686 // remove the legacy message from the request and enqueue it to its destination
687 Uint32 result = async_results::CIM_NAK;
|
688 kumpf 1.7
|
689 mday 1.2 Message *legacy = req->act;
690 if ( legacy != 0 )
691 {
692 MessageQueue* queue = MessageQueue::lookup(req->legacy_destination);
693 if( queue != 0 )
694 {
695 // Enqueue the response:
696 queue->enqueue(legacy);
697 result = async_results::OK;
698 }
699 }
700 _make_response(req, result);
701 }
702
703 </pre>
704
705 <p>
706 The default handler shown above extracts the legacy
707 message and attempts to <code>enqueue</code> that message
708 syncrhonously using the pre-existing interface.
709 </p>
710 mday 1.2
711 <h3>Example of Custom Handler for Legacy Messages</h3>
712 <p>
713 By implementing the virtual
|
714 kumpf 1.7 <code>_handle_async_request</code> method,
|
715 mday 1.2 a service can choose to implement its own handler for
716 Legacy messages, as the code below shows:
717 </p>
718
719 <ol>
720
721 <li><b>Implement the virtual <code>_handle_async_request</code> method.</b></li>
722 <pre>
723 void MessageQueueServer::_handle_async_request(AsyncRequest *req)
724 {
725 if (req->getType() == 0x04100000 )
726 {
727 req->op->processing();
728 handle_test_request(req);
729 }
730 else if ( req->getType() == async_messages::CIMSERVICE_STOP )
731 {
732 req->op->processing();
733 handle_CimServiceStop(static_cast<CimServiceStop *>(req));
734 }
735 </pre>
736 mday 1.2 <li><b>Implement a dispatcher for <code>ASYNC_LEGACY_OP_START</code></b></li>
|
737 martin 1.5 <pre> else if ( req->getType() == async_messages::ASYNC_LEGACY_OP_START )
|
738 mday 1.2 {
739 req->op->processing();
740 handle_LegacyOpStart(static_cast<AsyncLegacyOperationStart *>(req));
741 }
|
742 kumpf 1.7
|
743 mday 1.2 else
744 Base::_handle_async_request(req);
745 }
746
747 </pre>
748 <li><b>Implement a dispatcher for <code>ASYNC_LEGACY_OP_START</code></b></li>
749 <pre>
750 void MessageQueueServer::handle_LegacyOpStart(AsyncLegacyOperationStart *req)
751 {
752
753 Message *legacy = req->act;
754 cout << " ### handling legacy messages " << endl;
755
|
756 kumpf 1.7
757 AsyncReply *resp =
758 new AsyncReply(async_messages::REPLY,
759 req->getKey(),
760 req->getRouting(),
761 0,
762 req->op,
763 async_results::OK,
764 req->resp,
|
765 mday 1.2 req->block);
766 _completeAsyncResponse(req, resp, ASYNC_OPSTATE_COMPLETE, 0 );
767
768 if (legacy != 0 )
769 cout << " legacy msg type: " << legacy->getType() << endl;
|
770 kumpf 1.7
|
771 mday 1.2 }
772
773 </pre>
774
775
776 </ol>
|
777 mday 1.1
778 <hr>
|
779 mday 1.3
780
|
781 mday 1.4 <a name="non-blocking"><h2>Sending Messages without Blocking (Async with Callback)</h2></a>
|
782 mday 1.3
783 <p>
784 Whenever there is a possibility that the processing of
785 one message may generate a nested message (message
786 generated within the handler of a message) it is
787 necessary to send messages without blocking, and to
788 receive responses via callback routines. The diagram
789 below shows the (more complicated) flow of
|
790 kumpf 1.7 non-blocking messages.
|
791 mday 1.3 </p>
792 <br>
793 <div class="exampleOuter"><div class="exampleInner">
|
794 kumpf 1.7 <pre> Service A--Message----1---->
|
795 mday 1.3 |
796 . <-----------(return)-+----->-(loop)--->-+
|
797 kumpf 1.7 . | Meta Dispatcher |
|
798 mday 1.3 . +----<-----<---<---+
799 . Message---2-->Service B
800 . |
801 . <--Response--3------+
|
802 kumpf 1.7 . |
|
803 mday 1.3 . +--<--<-----<-----+--(return)---->
|
804 kumpf 1.7 . | Meta Dispatcher |
|
805 mday 1.3 Service A <--Callback--4---+--->-(loop)-->---+
806 | ^
807 +-------+
808 </pre>
809 </div></div>
810
811 <h3>Test Program</h3>
|
812 kumpf 1.7
|
813 mday 1.3 <p>
814 There is a test program that sends and receives
|
815 kumpf 1.7 non-blocking messages in
|
816 mday 1.3 <code>$(PEGASUS_ROOT)/src/Pegasus/Common/tests/async_callback/</code>
817 </p>
818
819 <h3>SendAsync method</h3>
820
821 <p>
822 The <code>MessageQueueService</code> class sends
823 non-blocking messages using the <code>SendAsync</code>
824 method from <code>MessageQueueService.h</code>.
|
825 mday 1.4 </p><br>
|
826 mday 1.3
|
827 mday 1.1
|
828 mday 1.4 <div class="exampleOuter"><div class="exampleInner">
|
829 mday 1.1 <pre>
|
830 kumpf 1.7 Boolean <b><font color=#000000>SendAsync</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>op<font color=#990000>,</font>
|
831 mday 1.4 Uint32 destination<font color=#990000>,</font>
832 <font color=#009900>void</font> <font color=#990000>(</font><font color=#990000>*</font>callback<font color=#990000>)</font><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font><font color=#990000>,</font> MessageQueue <font color=#990000>*</font><font color=#990000>,</font> <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>,</font>
833 MessageQueue <font color=#990000>*</font>callback_q<font color=#990000>,</font>
834 <font color=#009900>void</font> <font
835 color=#990000>*</font>callback_ptr<font color=#990000>)</font><font color=#990000>;</font>
836 </pre>
837 <br>
838 <div class="note">
839 <var>AsyncOpNode *op (In)</var> is the shared data
840 structure that controls the message flow and
841 consolidates the response data. This data structure is
842 also passed to the callback function as the first
843 parameter. The caller must
844 allocate and free this data structure. <br>
845 <br>
846 <var>Uint32 destination (In)</var> is the queue ID of
847 the service which will receive the asynchronous
848 request message.</var><br>
849 <br>
850 <var>void (*callback)(AsyncOpNode *, MessageQueue *,
851 void *) (In)</var> is the static class method that
852 mday 1.4 will be called when the request/response pair is complete.<br>
853 <br>
854 The callback is always passed <var>op</var> as the
855 first parameter. The second parameter is the
856 <var>MessageQueue *</var> object instance that is
857 executing the callback function. Because callback
858 functions must be static class methods, the callback
859 can use the <var>MessageQueue *</var> parameter as a
860 pseudo <var>this</var> pointer. <br>
861 <br>
862 <var>MessageQueue *callback_q (In)</var> is the
863 queue pointer that will be passed to the callback
864 routine as the second parameter. It also controls
865 which queue instance receives the callback.
866 <br>
867 <br>
868 <var>void *callback_ptr (In)</var> is a pointer that will
|
869 kumpf 1.7 be passed to the callback function.
|
870 mday 1.4
871 </div>
872 </div></div>
|
873 mday 1.1
|
874 mday 1.4 <br>
|
875 mday 1.1
|
876 mday 1.4 <h3>How the Meta Dispatcher Processes Non-Blocking Messages</h3>
877 <p>
878 The focus of processing non-blocking messages is to
879 remove the possibility of deadlock. Therefore, all
880 message processing is performed by background
881 threads. All access by services to shared data
882 structures is discrete in the sense that one service
883 never calls into another service. For example,
884 callback routines are executed by the background
885 thread of the receiving service. (As opposed to the
886 sending service making a callback <i>into</i> the
|
887 kumpf 1.7 receiving service.)
|
888 mday 1.4 </p>
|
889 mday 1.1
|
890 mday 1.4 <ol>
891 <li>The requesting service creates a request, an
892 <code>AsyncOpNode</code> and calls
893 <code>MessageQueueService::SendAsync(...)</code>.</li>
894 <li><code>SendAsync</code> marks the
895 <code>AsyncOpNode</code> as
896 <code>ASYNC_OPFLAGS_CALLBACK</code> with the
897 <code>ASYNC_OPSTATE_COMPLETE</code> bit
898 <i>clear</i>.</li> <li>The Meta Dispatcher routes
899 the <code>AsyncOpNode</code> to the responding
900 service.</li> <li>The responding service's
901 background thread pulls the message off its
902 internal queue and processes the request. This
903 will frequently entail creating and inserting a
904 response message into the <code>AsyncOpNode</code>
905 by calling
906 <code>AsyncOpNode::put_response(AsyncMessage
907 *)</code>.</li> <li>The responding service
908 completes the response by calling
909 <code>MessageQueueService::_complete_op_node(AsyncOpNode
910 *, Uint32, Uint32, Uint32)</code>.</li>
911 mday 1.4 <li><code>_complete_op_node</code> passes the
912 operation back to the Meta Dispatcher, which
913 routes it <i>back</i> to the requesting
914 service.</li> <li>The requesting service's
915 background thread pulls the
916 <code>AsyncOpNode</code> off its internal queue
917 and calls
918 <code>AsyncOpNode::_async_callback</code>, which
919 is a function pointer that holds the address of the
920 requesting service's static callback method..</li>
921 <li>The requesting service deallocates the op
922 node, the request message, and the response message.</li>
923 </ol>
|
924 mday 1.1
|
925 mday 1.4 <h3>Virtual Methods for Non-Blocking Messages</h3>
926 <p>
927 To use non-blocking messages, a service should
928 implement the following virtual method from
929 <code>MessageQueueService</code>, plus a static class
930 callback function.
931 </p>
932 <div class="exampleOuter"><div class="exampleInner">
|
933 martin 1.5 <pre><b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>_handle_async_request</font></b><font color=#990000>(</font>AsyncRequest <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
|
934 mday 1.4 </pre>
935 <div class="note">
936 <var>AsyncRequest *req (In)</var> is the incoming
937 request. <code>req->op</code> is the
938 <code>AsyncOpNode</code> that is controlling this
|
939 kumpf 1.7 operation.
|
940 mday 1.4 <br><br>
941 This method is called by the service's background
942 thread whenever an <code>AsyncRequest</code>
943 message is sent to the service. <i>This includes
944 both blocking and non-blocking request messages.</i><p>
945 <p>
946 Within <code>_handle_async_request</code> you
947 can determine whether the message is blocking or
948 non-blocking by using the following code
|
949 kumpf 1.7 segment:
|
950 mday 1.4 <pre><code>
951
952 if(req->op->read_flags() & ASYNC_OPFLAGS_CALLBACK )
953 {
954
955 // let everyone know you are working on the request
956 req->op->processing();
957
|
958 kumpf 1.7 // this request is part of a callback (non-blocking) operation
|
959 mday 1.4 AsyncResponse *response = new AsyncResponse(...);
960
961 // initialize the response message however is appropriate
|
962 mday 1.1
|
963 mday 1.4 // put the response to the op node
964 req->op->put_response(response);
|
965 mday 1.1
|
966 kumpf 1.7 // complete the operation
|
967 mday 1.4 _complete_op_node(req->op, 0, 0, async_results::OK);
|
968 mday 1.1
|
969 mday 1.4 return;
970 }
971 </code></pre>
972 </div>
973 </div>
974 </div>
975 <br>
976
977
978 <div class="exampleOuter"><div class = "exampleInner">
979
980 <pre>
981 <b><font color=#0000FF>static</font></b> <font color=#009900>void</font> <b><font color=#000000>async_callback_function</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>op<font color=#990000>,</font> MessageQueue <font color=#990000>*</font><font color=#990000>,</font> <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
982
983 </pre>
984 <div class="note">
985 <var>AsyncOpNode *op (In)</var> is the
986 incoming shared object that is controlling this
987 completing operation.<br>
988 <br>
989 <var>MessageQueue *q (In)</var> is a pointer to
990 mday 1.4 the class that has received the complete
991 <var>op</var>. This parameter is meant to be used
992 as a <code>this</code> pointer because the
|
993 kumpf 1.7 callback is a static class method.
|
994 mday 1.4 <br>
995 <br>
996 <var>void *parm (In)</var> is a pointer that the
997 class passed to <code>SendAsync</code>. It can be
998 used as a convenience for the class.<br>
999 <br>
1000
1001 This method is <i>only</i> called when a
1002 non-blocking operation is complete, meaning that
1003 the responding service has added a response
1004 message to the <var>op</var> and set the
1005 <code>ASYNC_OPSTATE_COMPLETE</code> bit. <br><br>
1006 <pre>
1007 void my_class::async_callback_function(AsyncOpNode *op,
1008 MessageQueue *q,
1009 void *parm)
1010 {
1011
1012 my_class *myself = static_cast<my_class *>(q);
1013 AsyncRequest *request = op->get_request();
1014 AsyncResponse *response = op->get_response();
1015 mday 1.4
1016 // process response
1017
1018 delete request;
1019 delete response;
1020 myself->put_op(op);
1021 return;
|
1022 kumpf 1.7 }
|
1023 mday 1.1
|
1024 mday 1.4 </div>
1025 </div>
1026 </div>
|
1027 mday 1.1
|
1028 mday 1.4 <h3>Strategies for Handling Non-Blocking Responses</h3>
1029 <p>
|
1030 martin 1.5 All of the legacy message handling code in Pegasus is syncrhonous, meaning that a service can send a request
|
1031 mday 1.4 and receive the response in two adjacent lines of
1032 code. Non-blocking messages are different because the
1033 timing and existence of a response message is
|
1034 martin 1.5 undetermined. </p>
|
1035 mday 1.4 <p>
1036 There are couple of possible strategies for handing
|
1037 martin 1.5 non-blocking response messages. <ol>
|
1038 mday 1.4 <li>Seperate the request creation and sending code
1039 from the response handling code into distinct methods.</li>
1040 <li>Handle request creation and sending and response
1041 handling in the same method using different code blocks.
1042 </ol>
1043 </p>
|
1044 mday 1.1
|
1045 mday 1.4 <h4>Separate Request and Response Handling Methods</h4>
1046 <div class="exampleOuter">
1047 <div class="exampleInner">
1048 <ol>
1049 <li>Write the request generation method.
1050 <pre>
1051 void my_class::generate_request(Uint32 destination)
1052 {
1053 AsyncOpNode *op = get_op();
1054 my_request *req = new my_request(...);
1055 op->put_request(req);
|
1056 kumpf 1.7
|
1057 mday 1.4 SendAsync(op, destination, my_callback, this, (void *)0);
1058 return;
1059 }
1060 </pre>
1061 </li>
1062 <li> Write the request handling method.
1063 <pre>
1064 void my_class::handle_response(AsyncOpNode *op)
|
1065 mday 1.1 {
|
1066 mday 1.4 my_response *res = op->get_response();
1067 if(res != 0 )
1068 {
1069 // handle response
1070 delete response;
1071 }
1072 put_op(op);
1073 return;
1074 }
1075 </pre>
1076 </li>
1077 <li> Have your callback method call your response
1078 method.
1079 <pre>
|
1080 kumpf 1.7 void my_class:my_callback(AsyncOpNode *op, MessageQueue *queue, void *parm)
|
1081 mday 1.4 {
1082 my_class *myself = static_cast<queue>
|
1083 mday 1.1
|
1084 mday 1.4 myself->handle_response(op);
1085 return;
1086 }
1087 </pre>
1088 </li>
1089 </ol>
1090 </div>
1091 </div>
|
1092 mday 1.1
|
1093 kumpf 1.7
|
1094 mday 1.4 <h4>Singe Request and Response Handling Method</h4>
1095 <p>
1096 This strategy requires two separate code blocks within
1097 the request/response method, and conditional execution
|
1098 martin 1.5 depending on the status of the operation. </p>
|
1099 mday 1.4 <p>
1100 I think the advantage of this strategy is that it
1101 matches more closely the current<br>
1102 <code>handleEnqueue(Message *msg)</code> code
|
1103 martin 1.5 convention that is in Pegasus. </p>
|
1104 mday 1.1
|
1105 mday 1.4 <div class="exampleOuter">
1106 <div class="exampleInner">
1107 <ol>
1108 <li>Write the request generation block.
1109 <pre>
1110 void my_class::handle_operation(AsyncOpNode *op)
|
1111 mday 1.1 {
|
1112 mday 1.4 if(op == NULL)
1113 {
1114 AsyncOpNode *op = get_op();
1115 my_request *req = new my_request(...);
1116 op->put_request(req);
|
1117 kumpf 1.7
|
1118 mday 1.4 SendAsync(op, destination, my_callback, this, (void *)0);
|
1119 kumpf 1.7
|
1120 mday 1.4 }
|
1121 kumpf 1.7 else
|
1122 mday 1.4 {
|
1123 mday 1.1
|
1124 mday 1.4 }
1125 return;
1126 }
1127 </pre>
1128 </li>
1129 <li> Write the request handling block.
1130 <pre>
1131 void my_class::handle_operation(AsyncOpNode *op)
|
1132 mday 1.1 {
|
1133 mday 1.4 if(op == NULL)
1134 {
1135 AsyncOpNode *op = get_op();
1136 my_request *req = new my_request(...);
1137 op->put_request(req);
|
1138 kumpf 1.7
|
1139 mday 1.4 SendAsync(op, destination, my_callback, this, (void *)0);
|
1140 kumpf 1.7
|
1141 mday 1.4 }
|
1142 kumpf 1.7 else
|
1143 mday 1.4 {
1144 my_response *res = op->get_response();
1145 if(res != 0 )
|
1146 mday 1.1 {
|
1147 mday 1.4 // handle response
1148 delete response;
|
1149 mday 1.1 }
|
1150 mday 1.4 put_op(op);
1151 }
1152 return;
1153 }
|
1154 mday 1.1
|
1155 mday 1.4 </pre>
1156 </li>
1157 <li> Have your callback method call your handler
1158 method.
1159 <pre>
|
1160 kumpf 1.7 void my_class:my_callback(AsyncOpNode *op, MessageQueue *queue, void *parm)
|
1161 mday 1.1 {
|
1162 mday 1.4 my_class *myself = static_cast<queue>
|
1163 mday 1.1
|
1164 mday 1.4 myself->handle_operation(op);
1165 return;
|
1166 mday 1.1 }
|
1167 mday 1.4 </pre>
1168 </li>
1169 </ol>
1170 </div>
1171 </div>
|
1172 mday 1.1
|
1173 mday 1.4 <hr><hr>
|
1174 mday 1.1
|
1175 mday 1.4 <h2>Class Definitions</h2>
|
1176 mday 1.1
|
1177 mday 1.4 <h3>cimom (Meta Dispatcher)</h3>
|
1178 mday 1.1
|
1179 martin 1.5 <pre><tt>
|
1180 martin 1.6 <i><font color=#9A1900>//%LICENSE////////////////////////////////////////////////////////////////</font></i>
|
1181 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1182 martin 1.6 <i><font color=#9A1900>// Licensed to The Open Group (TOG) under one or more contributor license</font></i>
1183 <i><font color=#9A1900>// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with</font></i>
1184 <i><font color=#9A1900>// this work for additional information regarding copyright ownership.</font></i>
1185 <i><font color=#9A1900>// Each contributor licenses this file to you under the OpenPegasus Open</font></i>
1186 <i><font color=#9A1900>// Source License; you may not use this file except in compliance with the</font></i>
1187 <i><font color=#9A1900>// License.</font></i>
1188 <i><font color=#9A1900>//</font></i>
1189 <i><font color=#9A1900>// Permission is hereby granted, free of charge, to any person obtaining a</font></i>
1190 <i><font color=#9A1900>// copy of this software and associated documentation files (the "Software"),</font></i>
1191 <i><font color=#9A1900>// to deal in the Software without restriction, including without limitation</font></i>
1192 <i><font color=#9A1900>// the rights to use, copy, modify, merge, publish, distribute, sublicense,</font></i>
1193 <i><font color=#9A1900>// and/or sell copies of the Software, and to permit persons to whom the</font></i>
1194 <i><font color=#9A1900>// Software is furnished to do so, subject to the following conditions:</font></i>
1195 <i><font color=#9A1900>//</font></i>
1196 <i><font color=#9A1900>// The above copyright notice and this permission notice shall be included</font></i>
1197 <i><font color=#9A1900>// in all copies or substantial portions of the Software.</font></i>
1198 <i><font color=#9A1900>//</font></i>
1199 <i><font color=#9A1900>// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS</font></i>
1200 <i><font color=#9A1900>// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</font></i>
1201 <i><font color=#9A1900>// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</font></i>
1202 <i><font color=#9A1900>// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY</font></i>
1203 martin 1.6 <i><font color=#9A1900>// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,</font></i>
1204 <i><font color=#9A1900>// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE</font></i>
1205 <i><font color=#9A1900>// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</font></i>
|
1206 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1207 martin 1.6 <i><font color=#9A1900>//////////////////////////////////////////////////////////////////////////</font></i>
|
1208 mday 1.4 <i><font color=#9A1900>//</font></i>
1209 <i><font color=#9A1900>// Author: Mike Day (mdday@us.ibm.com</font></i>
1210 <i><font color=#9A1900>//</font></i>
1211 <i><font color=#9A1900>// Modified By: </font></i>
1212 <i><font color=#9A1900>//</font></i>
|
1213 martin 1.6 <i><font color=#9A1900>//////////////////////////////////////////////////////////////////////////</font></i>
|
1214 mday 1.4
1215 <b><font color=#000080>#ifndef</font></b> CIMOM_include
1216 <b><font color=#000080>#define</font></b> CIMOM_include
1217
1218 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Config.h></font>
1219 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Exception.h></font>
1220 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/MessageQueue.h></font>
1221 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/DQueue.h></font>
1222 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Thread.h></font>
1223 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Array.h></font>
1224 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/AsyncOpNode.h></font>
1225 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/CimomMessage.h></font>
1226 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/MessageQueueService.h></font>
1227
1228 PEGASUS_NAMESPACE_BEGIN
1229
1230 <b><font color=#0000FF>extern</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIMOM_Q_ID<font color=#990000>;</font>
1231
|
1232 kumpf 1.7 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE module_capabilities
|
1233 mday 1.4 <font color=#FF0000>{</font>
1234 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
1235 <b><font color=#0000FF>static</font></b> Uint32 async<font color=#990000>;</font>
1236 <b><font color=#0000FF>static</font></b> Uint32 remote<font color=#990000>;</font>
1237 <b><font color=#0000FF>static</font></b> Uint32 trusted<font color=#990000>;</font>
1238 <b><font color=#0000FF>static</font></b> Uint32 paused<font color=#990000>;</font>
1239 <b><font color=#0000FF>static</font></b> Uint32 stopped<font color=#990000>;</font>
1240 <font color=#FF0000>}</font> <font color=#990000>;</font>
1241
1242 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE cimom<font color=#990000>;</font>
1243
1244 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE message_module
1245 <font color=#FF0000>{</font>
1246 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1247 kumpf 1.7 <b><font color=#000000>message_module</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1248 <font color=#990000>:</font> <b><font color=#000000>_name</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>,</font> <b><font color=#000000>_capabilities</font></b><font color=#990000>(</font><font color=#993399>0</font><font color=#990000>)</font><font color=#990000>,</font>
|
1249 mday 1.4 <b><font color=#000000>_mask</font></b><font color=#990000>(</font><font color=#993399>0</font><font color=#990000>)</font><font color=#990000>,</font> <b><font color=#000000>_q_id</font></b><font color=#990000>(</font><font color=#993399>0</font><font color=#990000>)</font> <font color=#FF0000>{</font> <font color=#FF0000>}</font>
|
1250 kumpf 1.7
|
1251 mday 1.4 <b><font color=#000000>message_module</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> String <font color=#990000>&</font> name<font color=#990000>,</font>
1252 Uint32 capabilities<font color=#990000>,</font>
1253 Uint32 mask<font color=#990000>,</font>
1254 Uint32 queue<font color=#990000>)</font>
1255 <font color=#990000>:</font> <b><font color=#000000>_name</font></b><font color=#990000>(</font>name<font color=#990000>)</font><font color=#990000>,</font> <b><font color=#000000>_capabilities</font></b><font color=#990000>(</font>capabilities<font color=#990000>)</font><font color=#990000>,</font>
1256 <b><font color=#000000>_mask</font></b><font color=#990000>(</font>mask<font color=#990000>)</font><font color=#990000>,</font> <b><font color=#000000>_q_id</font></b><font color=#990000>(</font>queue<font color=#990000>)</font> <font color=#FF0000>{</font> <font color=#FF0000>}</font>
|
1257 kumpf 1.7
|
1258 mday 1.4 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><b><font color=#0000FF>const</font></b> message_module <font color=#990000>*</font>mm<font color=#990000>)</font> <b><font color=#0000FF>const</font></b><font color=#990000>;</font>
1259 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><b><font color=#0000FF>const</font></b> String <font color=#990000>&</font> name <font color=#990000>)</font> <b><font color=#0000FF>const</font></b> <font color=#990000>;</font>
1260 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><b><font color=#0000FF>const</font></b> message_module <font color=#990000>&</font> mm <font color=#990000>)</font> <b><font color=#0000FF>const</font></b> <font color=#990000>;</font>
1261 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><b><font color=#0000FF>const</font></b> <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font> <b><font color=#0000FF>const</font></b><font color=#990000>;</font>
1262 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font>Uint32<font color=#990000>)</font> <b><font color=#0000FF>const</font></b><font color=#990000>;</font>
|
1263 kumpf 1.7
|
1264 mday 1.4 <b><font color=#0000FF>const</font></b> String <font color=#990000>&</font> <b><font color=#000000>get_name</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>const</font></b> <font color=#990000>;</font>
|
1265 kumpf 1.7 Uint32 <b><font color=#000000>get_capabilities</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>const</font></b> <font color=#990000>;</font>
1266 Uint32 <b><font color=#000000>get_mask</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>const</font></b> <font color=#990000>;</font>
1267 Uint32 <b><font color=#000000>get_queue</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>const</font></b> <font color=#990000>;</font>
|
1268 mday 1.4
1269 <font color=#009900>void</font> <b><font color=#000000>put_name</font></b><font color=#990000>(</font>String <font color=#990000>&</font> name<font color=#990000>)</font><font color=#990000>;</font>
1270 <font color=#009900>void</font> <b><font color=#000000>put_capabilities</font></b><font color=#990000>(</font>Uint32 capabilities<font color=#990000>)</font><font color=#990000>;</font>
1271 <font color=#009900>void</font> <b><font color=#000000>put_mask</font></b><font color=#990000>(</font>Uint32 mask<font color=#990000>)</font><font color=#990000>;</font>
1272 <font color=#009900>void</font> <b><font color=#000000>put_queue</font></b><font color=#990000>(</font>Uint32 queue<font color=#990000>)</font> <font color=#990000>;</font>
1273
1274 <b><font color=#0000FF>private</font></b><font color=#990000>:</font>
1275 String _name<font color=#990000>;</font>
1276 Uint32 _capabilities<font color=#990000>;</font>
1277 Uint32 _mask<font color=#990000>;</font>
1278 <b><font color=#0000FF>struct</font></b> timeval _heartbeat<font color=#990000>;</font>
|
1279 kumpf 1.7
|
1280 mday 1.4
1281 Uint32 _q_id<font color=#990000>;</font>
1282 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> cimom<font color=#990000>;</font>
1283 <font color=#FF0000>}</font><font color=#990000>;</font>
1284
1285 <b><font color=#0000FF>class</font></b> MessageQueueService<font color=#990000>;</font>
1286
1287
1288 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE cimom <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> MessageQueue
1289 <font color=#FF0000>{</font>
|
1290 kumpf 1.7 <b><font color=#0000FF>public</font></b> <font color=#990000>:</font>
|
1291 mday 1.4 <b><font color=#000000>cimom</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
|
1292 kumpf 1.7
|
1293 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>cimom</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
|
1294 kumpf 1.7
|
1295 mday 1.4 Boolean <b><font color=#000000>moduleChange</font></b><font color=#990000>(</font><b><font color=#0000FF>struct</font></b> timeval last<font color=#990000>)</font><font color=#990000>;</font>
|
1296 kumpf 1.7
|
1297 mday 1.4 Uint32 <b><font color=#000000>getModuleCount</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
1298 Uint32 <b><font color=#000000>getModuleIDs</font></b><font color=#990000>(</font>Uint32 <font color=#990000>*</font>ids<font color=#990000>,</font> Uint32 count<font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
|
1299 mday 1.1
|
1300 mday 1.4 AsyncOpNode <font color=#990000>*</font><b><font color=#000000>get_cached_op</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
1301 <font color=#009900>void</font> <b><font color=#000000>cache_op</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>op<font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
|
1302 kumpf 1.7
|
1303 mday 1.4 <font color=#009900>void</font> <b><font color=#000000>set_default_op_timeout</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> <b><font color=#0000FF>struct</font></b> timeval <font color=#990000>*</font>buffer<font color=#990000>)</font><font color=#990000>;</font>
1304 <font color=#009900>void</font> <b><font color=#000000>get_default_op_timeout</font></b><font color=#990000>(</font><b><font color=#0000FF>struct</font></b> timeval <font color=#990000>*</font>timeout<font color=#990000>)</font> <b><font color=#0000FF>const</font></b> <font color=#990000>;</font>
|
1305 mday 1.1
|
1306 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handleEnqueue</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
1307 <font color=#009900>void</font> <b><font color=#000000>register_module</font></b><font color=#990000>(</font>RegisterCimService <font color=#990000>*</font>msg<font color=#990000>)</font><font color=#990000>;</font>
1308 <font color=#009900>void</font> <b><font color=#000000>deregister_module</font></b><font color=#990000>(</font>Uint32 quid<font color=#990000>)</font><font color=#990000>;</font>
1309 <font color=#009900>void</font> <b><font color=#000000>update_module</font></b><font color=#990000>(</font>UpdateCimService <font color=#990000>*</font>msg <font color=#990000>)</font><font color=#990000>;</font>
1310 <font color=#009900>void</font> <b><font color=#000000>ioctl</font></b><font color=#990000>(</font>AsyncIoctl <font color=#990000>*</font>msg <font color=#990000>)</font><font color=#990000>;</font>
1311
1312 <font color=#009900>void</font> <b><font color=#000000>find_service_q</font></b><font color=#990000>(</font>FindServiceQueue <font color=#990000>*</font>msg <font color=#990000>)</font><font color=#990000>;</font>
1313 <font color=#009900>void</font> <b><font color=#000000>enumerate_service</font></b><font color=#990000>(</font>EnumerateService <font color=#990000>*</font>msg <font color=#990000>)</font><font color=#990000>;</font>
1314 Boolean <b><font color=#000000>route_async</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>)</font><font color=#990000>;</font>
1315 <font color=#009900>void</font> <b><font color=#000000>_shutdown_routed_queue</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
|
1316 kumpf 1.7
1317
|
1318 mday 1.4 <b><font color=#0000FF>protected</font></b><font color=#990000>:</font>
1319 Uint32 <b><font color=#000000>get_module_q</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> String <font color=#990000>&</font> name<font color=#990000>)</font><font color=#990000>;</font>
1320 <b><font color=#0000FF>static</font></b> <font color=#009900>void</font> <b><font color=#000000>_make_response</font></b><font color=#990000>(</font>Message <font color=#990000>*</font>req<font color=#990000>,</font> Uint32 code<font color=#990000>)</font><font color=#990000>;</font>
|
1321 kumpf 1.7 <b><font color=#0000FF>static</font></b> <font color=#009900>void</font> <b><font color=#000000>_completeAsyncResponse</font></b><font color=#990000>(</font>AsyncRequest <font color=#990000>*</font>request<font color=#990000>,</font>
1322 AsyncReply <font color=#990000>*</font>reply<font color=#990000>,</font>
1323 Uint32 state<font color=#990000>,</font>
|
1324 mday 1.4 Uint32 flag<font color=#990000>)</font><font color=#990000>;</font>
1325 <b><font color=#0000FF>static</font></b> <font color=#009900>void</font> <b><font color=#000000>_complete_op_node</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>op<font color=#990000>,</font> Uint32 state<font color=#990000>,</font> Uint32 flag<font color=#990000>,</font> Uint32 code<font color=#990000>)</font><font color=#990000>;</font>
1326 <b><font color=#0000FF>static</font></b> <font color=#009900>void</font> <b><font color=#000000>_default_callback</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font><font color=#990000>,</font> MessageQueue <font color=#990000>*</font><font color=#990000>,</font> <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
|
1327 kumpf 1.7
|
1328 mday 1.4 <b><font color=#0000FF>private</font></b><font color=#990000>:</font>
1329 <b><font color=#0000FF>struct</font></b> timeval _default_op_timeout<font color=#990000>;</font>
1330 <b><font color=#0000FF>struct</font></b> timeval _last_module_change<font color=#990000>;</font>
1331 DQueue<font color=#FF0000><message_module></font> _modules<font color=#990000>;</font>
|
1332 mday 1.1
|
1333 mday 1.4 DQueue<font color=#FF0000><AsyncOpNode></font> _recycle<font color=#990000>;</font>
|
1334 kumpf 1.7
|
1335 mday 1.4 AsyncDQueue<font color=#FF0000><AsyncOpNode></font> _routed_ops<font color=#990000>;</font>
1336 DQueue<font color=#FF0000><AsyncOpNode></font> _internal_ops<font color=#990000>;</font>
|
1337 kumpf 1.7
|
1338 mday 1.4 <b><font color=#0000FF>static</font></b> PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL <b><font color=#000000>_routing_proc</font></b><font color=#990000>(</font><font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
|
1339 mday 1.1
|
1340 mday 1.4 Thread _routing_thread<font color=#990000>;</font>
|
1341 mday 1.1
|
1342 mday 1.4 <b><font color=#0000FF>static</font></b> Uint32 <b><font color=#000000>get_xid</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
1343 <font color=#009900>void</font> <b><font color=#000000>_handle_cimom_op</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>op<font color=#990000>,</font> Thread <font color=#990000>*</font>thread<font color=#990000>,</font> MessageQueue <font color=#990000>*</font>queue<font color=#990000>)</font><font color=#990000>;</font>
1344 Uint32 <b><font color=#000000>_ioctl</font></b><font color=#990000>(</font>Uint32<font color=#990000>,</font> Uint32<font color=#990000>,</font> <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
|
1345 mday 1.1
1346
|
1347 mday 1.4 AtomicInt _die<font color=#990000>;</font>
1348 AtomicInt _routed_queue_shutdown<font color=#990000>;</font>
|
1349 kumpf 1.7
|
1350 mday 1.4 <b><font color=#0000FF>static</font></b> AtomicInt _xid<font color=#990000>;</font>
1351 <b><font color=#0000FF>static</font></b> cimom <font color=#990000>*</font>_global_this<font color=#990000>;</font>
|
1352 kumpf 1.7
|
1353 mday 1.4 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> MessageQueueService<font color=#990000>;</font>
|
1354 kumpf 1.7
|
1355 mday 1.4 <font color=#FF0000>}</font><font color=#990000>;</font>
1356
1357 PEGASUS_NAMESPACE_END
|
1358 mday 1.1
|
1359 mday 1.4 <b><font color=#000080>#endif</font></b> <i><font color=#9A1900>// CIMOM_include</font></i>
1360 </tt>
1361 </pre>
|
1362 mday 1.1
|
1363 mday 1.4 <h3>MessageQueueService</h3>
|
1364 mday 1.1
|
1365 martin 1.5 <pre><tt>
|
1366 martin 1.6 <i><font color=#9A1900>//%LICENSE////////////////////////////////////////////////////////////////</font></i>
|
1367 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1368 martin 1.6 <i><font color=#9A1900>// Licensed to The Open Group (TOG) under one or more contributor license</font></i>
1369 <i><font color=#9A1900>// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with</font></i>
1370 <i><font color=#9A1900>// this work for additional information regarding copyright ownership.</font></i>
1371 <i><font color=#9A1900>// Each contributor licenses this file to you under the OpenPegasus Open</font></i>
1372 <i><font color=#9A1900>// Source License; you may not use this file except in compliance with the</font></i>
1373 <i><font color=#9A1900>// License.</font></i>
1374 <i><font color=#9A1900>//</font></i>
1375 <i><font color=#9A1900>// Permission is hereby granted, free of charge, to any person obtaining a</font></i>
1376 <i><font color=#9A1900>// copy of this software and associated documentation files (the "Software"),</font></i>
1377 <i><font color=#9A1900>// to deal in the Software without restriction, including without limitation</font></i>
1378 <i><font color=#9A1900>// the rights to use, copy, modify, merge, publish, distribute, sublicense,</font></i>
1379 <i><font color=#9A1900>// and/or sell copies of the Software, and to permit persons to whom the</font></i>
1380 <i><font color=#9A1900>// Software is furnished to do so, subject to the following conditions:</font></i>
1381 <i><font color=#9A1900>//</font></i>
1382 <i><font color=#9A1900>// The above copyright notice and this permission notice shall be included</font></i>
1383 <i><font color=#9A1900>// in all copies or substantial portions of the Software.</font></i>
1384 <i><font color=#9A1900>//</font></i>
1385 <i><font color=#9A1900>// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS</font></i>
1386 <i><font color=#9A1900>// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</font></i>
1387 <i><font color=#9A1900>// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</font></i>
1388 <i><font color=#9A1900>// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY</font></i>
1389 martin 1.6 <i><font color=#9A1900>// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,</font></i>
1390 <i><font color=#9A1900>// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE</font></i>
1391 <i><font color=#9A1900>// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</font></i>
|
1392 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1393 martin 1.6 <i><font color=#9A1900>//////////////////////////////////////////////////////////////////////////</font></i>
|
1394 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1395 martin 1.6 <i><font color=#9A1900>// Author: Mike Day (mdday@us.ibm.com</font></i>
|
1396 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1397 martin 1.6 <i><font color=#9A1900>// Modified By: </font></i>
|
1398 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1399 martin 1.6 <i><font color=#9A1900>//////////////////////////////////////////////////////////////////////////</font></i>
|
1400 mday 1.4
1401 <b><font color=#000080>#ifndef</font></b> Pegasus_MessageQueue_Service_h
1402 <b><font color=#000080>#define</font></b> Pegasus_MessageQueue_Service_h
1403
1404 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Config.h></font>
1405 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Message.h></font>
1406 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Exception.h></font>
1407 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/IPC.h></font>
1408 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Thread.h></font>
1409 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/AsyncOpNode.h></font>
1410 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Cimom.h></font>
1411 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/CimomMessage.h></font>
1412
1413 PEGASUS_NAMESPACE_BEGIN
1414
1415 <b><font color=#0000FF>extern</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIMOM_Q_ID<font color=#990000>;</font>
1416
1417 <b><font color=#0000FF>class</font></b> message_module<font color=#990000>;</font>
1418
1419 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE MessageQueueService <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> MessageQueue
1420 <font color=#FF0000>{</font>
1421 mday 1.4 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
1422
1423 <b><font color=#0000FF>typedef</font></b> MessageQueue Base<font color=#990000>;</font>
|
1424 kumpf 1.7
1425 <b><font color=#000000>MessageQueueService</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> <font color=#009900>char</font> <font color=#990000>*</font>name<font color=#990000>,</font> Uint32 queueID<font color=#990000>,</font>
1426 Uint32 capabilities <font color=#990000>=</font> <font color=#993399>0</font><font color=#990000>,</font>
1427 Uint32 mask <font color=#990000>=</font> message_mask<font color=#990000>:</font><font color=#990000>:</font>type_cimom <font color=#990000>|</font>
1428 message_mask<font color=#990000>:</font><font color=#990000>:</font>type_service <font color=#990000>|</font>
1429 message_mask<font color=#990000>:</font><font color=#990000>:</font>ha_request <font color=#990000>|</font>
1430 message_mask<font color=#990000>:</font><font color=#990000>:</font>ha_reply <font color=#990000>|</font>
|
1431 mday 1.4 message_mask<font color=#990000>:</font><font color=#990000>:</font>ha_async <font color=#990000>)</font> <font color=#990000>;</font>
|
1432 kumpf 1.7
|
1433 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>MessageQueueService</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
|
1434 kumpf 1.7
|
1435 mday 1.4 <b><font color=#0000FF>virtual</font></b> Boolean <b><font color=#000000>isAsync</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#FF0000>{</font> <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>true</font></b><font color=#990000>;</font> <font color=#FF0000>}</font>
|
1436 kumpf 1.7
|
1437 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>enqueue</font></b><font color=#990000>(</font>Message <font color=#990000>*</font><font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
|
1438 kumpf 1.7
|
1439 mday 1.4 AsyncReply <font color=#990000>*</font><b><font color=#000000>SendWait</font></b><font color=#990000>(</font>AsyncRequest <font color=#990000>*</font>request<font color=#990000>)</font><font color=#990000>;</font>
|
1440 kumpf 1.7 Boolean <b><font color=#000000>SendAsync</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>op<font color=#990000>,</font>
|
1441 mday 1.4 Uint32 destination<font color=#990000>,</font>
1442 <font color=#009900>void</font> <font color=#990000>(</font><font color=#990000>*</font>callback<font color=#990000>)</font><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font><font color=#990000>,</font> MessageQueue <font color=#990000>*</font><font color=#990000>,</font> <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>,</font>
1443 MessageQueue <font color=#990000>*</font>callback_q<font color=#990000>,</font>
1444 <font color=#009900>void</font> <font color=#990000>*</font>callback_ptr<font color=#990000>)</font><font color=#990000>;</font>
1445 Boolean <b><font color=#000000>SendForget</font></b><font color=#990000>(</font>Message <font color=#990000>*</font>msg<font color=#990000>)</font><font color=#990000>;</font>
1446 Boolean <b><font color=#000000>ForwardOp</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font><font color=#990000>,</font> Uint32 destination<font color=#990000>)</font><font color=#990000>;</font>
|
1447 kumpf 1.7
|
1448 mday 1.4
1449 Boolean <b><font color=#000000>register_service</font></b><font color=#990000>(</font>String name<font color=#990000>,</font> Uint32 capabilities<font color=#990000>,</font> Uint32 mask<font color=#990000>)</font><font color=#990000>;</font>
1450 Boolean <b><font color=#000000>update_service</font></b><font color=#990000>(</font>Uint32 capabilities<font color=#990000>,</font> Uint32 mask<font color=#990000>)</font><font color=#990000>;</font>
1451 Boolean <b><font color=#000000>deregister_service</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
1452 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>_shutdown_incoming_queue</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
|
1453 kumpf 1.7
|
1454 mday 1.4 <font color=#009900>void</font> <b><font color=#000000>find_services</font></b><font color=#990000>(</font>String name<font color=#990000>,</font>
|
1455 kumpf 1.7 Uint32 capabilities<font color=#990000>,</font>
1456 Uint32 mask<font color=#990000>,</font>
|
1457 mday 1.4 Array<font color=#FF0000><Uint32></font> <font color=#990000>*</font>results<font color=#990000>)</font><font color=#990000>;</font>
1458 <font color=#009900>void</font> <b><font color=#000000>enumerate_service</font></b><font color=#990000>(</font>Uint32 queue<font color=#990000>,</font> message_module <font color=#990000>*</font>result<font color=#990000>)</font><font color=#990000>;</font>
1459 Uint32 <b><font color=#000000>get_next_xid</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
1460 AsyncOpNode <font color=#990000>*</font><b><font color=#000000>get_op</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
1461 <font color=#009900>void</font> <b><font color=#000000>return_op</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>op<font color=#990000>)</font><font color=#990000>;</font>
1462
1463 Uint32 _mask<font color=#990000>;</font>
1464 AtomicInt _die<font color=#990000>;</font>
1465 <b><font color=#0000FF>protected</font></b><font color=#990000>:</font>
1466 <b><font color=#0000FF>virtual</font></b> Boolean <b><font color=#000000>accept_async</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>op<font color=#990000>)</font><font color=#990000>;</font>
1467 <b><font color=#0000FF>virtual</font></b> Boolean <b><font color=#000000>messageOK</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Message <font color=#990000>*</font>msg<font color=#990000>)</font> <font color=#990000>;</font>
1468 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handleEnqueue</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>=</font> <font color=#993399>0</font><font color=#990000>;</font>
1469 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handleEnqueue</font></b><font color=#990000>(</font>Message <font color=#990000>*</font><font color=#990000>)</font> <font color=#990000>=</font> <font color=#993399>0</font><font color=#990000>;</font>
1470 Boolean <b><font color=#000000>_enqueueResponse</font></b><font color=#990000>(</font>Message <font color=#990000>*</font><font color=#990000>,</font> Message <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
1471 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>_handle_incoming_operation</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
|
1472 kumpf 1.7
|
1473 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>_handle_async_request</font></b><font color=#990000>(</font>AsyncRequest <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
|
1474 kumpf 1.7 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>_handle_async_callback</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>)</font><font color=#990000>;</font>
|
1475 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>_make_response</font></b><font color=#990000>(</font>Message <font color=#990000>*</font>req<font color=#990000>,</font> Uint32 code<font color=#990000>)</font><font color=#990000>;</font>
|
1476 kumpf 1.7
|
1477 mday 1.4
1478 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_heartbeat_request</font></b><font color=#990000>(</font>AsyncRequest <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
1479 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_heartbeat_reply</font></b><font color=#990000>(</font>AsyncReply <font color=#990000>*</font>rep<font color=#990000>)</font><font color=#990000>;</font>
|
1480 kumpf 1.7
|
1481 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_AsyncIoctl</font></b><font color=#990000>(</font>AsyncIoctl <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
1482 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_CimServiceStart</font></b><font color=#990000>(</font>CimServiceStart <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
1483 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_CimServiceStop</font></b><font color=#990000>(</font>CimServiceStop <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
1484 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_CimServicePause</font></b><font color=#990000>(</font>CimServicePause <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
1485 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_CimServiceResume</font></b><font color=#990000>(</font>CimServiceResume <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
|
1486 kumpf 1.7
|
1487 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_AsyncOperationStart</font></b><font color=#990000>(</font>AsyncOperationStart <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
1488 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_AsyncOperationResult</font></b><font color=#990000>(</font>AsyncOperationResult <font color=#990000>*</font>rep<font color=#990000>)</font><font color=#990000>;</font>
1489 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_AsyncLegacyOperationStart</font></b><font color=#990000>(</font>AsyncLegacyOperationStart <font color=#990000>*</font>req<font color=#990000>)</font><font color=#990000>;</font>
1490 <b><font color=#0000FF>virtual</font></b> <font color=#009900>void</font> <b><font color=#000000>handle_AsyncLegacyOperationResult</font></b><font color=#990000>(</font>AsyncLegacyOperationResult <font color=#990000>*</font>rep<font color=#990000>)</font><font color=#990000>;</font>
1491
|
1492 kumpf 1.7 <font color=#009900>void</font> <b><font color=#000000>_completeAsyncResponse</font></b><font color=#990000>(</font>AsyncRequest <font color=#990000>*</font>request<font color=#990000>,</font>
1493 AsyncReply <font color=#990000>*</font>reply<font color=#990000>,</font>
1494 Uint32 state<font color=#990000>,</font>
|
1495 mday 1.4 Uint32 flag<font color=#990000>)</font><font color=#990000>;</font>
1496 <font color=#009900>void</font> <b><font color=#000000>_complete_op_node</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font><font color=#990000>,</font> Uint32<font color=#990000>,</font> Uint32<font color=#990000>,</font> Uint32<font color=#990000>)</font><font color=#990000>;</font>
|
1497 kumpf 1.7
|
1498 mday 1.4
1499 <b><font color=#0000FF>static</font></b> cimom <font color=#990000>*</font>_meta_dispatcher<font color=#990000>;</font>
1500 <b><font color=#0000FF>static</font></b> AtomicInt _service_count<font color=#990000>;</font>
1501 <b><font color=#0000FF>static</font></b> Mutex _meta_dispatcher_mutex<font color=#990000>;</font>
|
1502 kumpf 1.7
1503 <b><font color=#0000FF>private</font></b><font color=#990000>:</font>
1504
|
1505 mday 1.4 DQueue<font color=#FF0000><AsyncOpNode></font> _pending<font color=#990000>;</font>
1506 AsyncDQueue<font color=#FF0000><AsyncOpNode></font> _incoming<font color=#990000>;</font>
1507 AsyncDQueue<font color=#FF0000><AsyncOpNode></font> _callback<font color=#990000>;</font>
|
1508 kumpf 1.7
|
1509 mday 1.4 <b><font color=#0000FF>static</font></b> PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL <b><font color=#000000>_req_proc</font></b><font color=#990000>(</font><font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
1510 <b><font color=#0000FF>static</font></b> <font color=#009900>void</font> <b><font color=#000000>_sendwait_callback</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font><font color=#990000>,</font> MessageQueue <font color=#990000>*</font><font color=#990000>,</font> <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
1511 AtomicInt _incoming_queue_shutdown<font color=#990000>;</font>
1512 Thread _req_thread<font color=#990000>;</font>
1513 <b><font color=#0000FF>struct</font></b> timeval _default_op_timeout<font color=#990000>;</font>
1514 <b><font color=#0000FF>static</font></b> AtomicInt _xid<font color=#990000>;</font>
1515 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> cimom<font color=#990000>;</font>
1516 <font color=#FF0000>}</font><font color=#990000>;</font>
|
1517 mday 1.1
|
1518 mday 1.4 PEGASUS_NAMESPACE_END
|
1519 mday 1.1
|
1520 mday 1.4 <b><font color=#000080>#endif</font></b> <i><font color=#9A1900>/* Pegasus_MessageQueue_Service_h */</font></i>
1521 </tt>
1522 </pre>
|
1523 mday 1.1
|
1524 mday 1.4 <h3>Asynchronous Messages</h3>
|
1525 mday 1.1
|
1526 martin 1.5 <pre><tt>
|
1527 martin 1.6 <i><font color=#9A1900>//%LICENSE////////////////////////////////////////////////////////////////</font></i>
1528 <i><font color=#9A1900>//</font></i>
1529 <i><font color=#9A1900>// Licensed to The Open Group (TOG) under one or more contributor license</font></i>
1530 <i><font color=#9A1900>// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with</font></i>
1531 <i><font color=#9A1900>// this work for additional information regarding copyright ownership.</font></i>
1532 <i><font color=#9A1900>// Each contributor licenses this file to you under the OpenPegasus Open</font></i>
1533 <i><font color=#9A1900>// Source License; you may not use this file except in compliance with the</font></i>
1534 <i><font color=#9A1900>// License.</font></i>
1535 <i><font color=#9A1900>//</font></i>
1536 <i><font color=#9A1900>// Permission is hereby granted, free of charge, to any person obtaining a</font></i>
1537 <i><font color=#9A1900>// copy of this software and associated documentation files (the "Software"),</font></i>
1538 <i><font color=#9A1900>// to deal in the Software without restriction, including without limitation</font></i>
1539 <i><font color=#9A1900>// the rights to use, copy, modify, merge, publish, distribute, sublicense,</font></i>
1540 <i><font color=#9A1900>// and/or sell copies of the Software, and to permit persons to whom the</font></i>
1541 <i><font color=#9A1900>// Software is furnished to do so, subject to the following conditions:</font></i>
1542 <i><font color=#9A1900>//</font></i>
1543 <i><font color=#9A1900>// The above copyright notice and this permission notice shall be included</font></i>
1544 <i><font color=#9A1900>// in all copies or substantial portions of the Software.</font></i>
1545 <i><font color=#9A1900>//</font></i>
1546 <i><font color=#9A1900>// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS</font></i>
1547 <i><font color=#9A1900>// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</font></i>
1548 martin 1.6 <i><font color=#9A1900>// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</font></i>
1549 <i><font color=#9A1900>// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY</font></i>
1550 <i><font color=#9A1900>// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,</font></i>
1551 <i><font color=#9A1900>// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE</font></i>
1552 <i><font color=#9A1900>// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</font></i>
|
1553 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1554 martin 1.6 <i><font color=#9A1900>//////////////////////////////////////////////////////////////////////////</font></i>
|
1555 mday 1.4 <i><font color=#9A1900>//</font></i>
|
1556 martin 1.6 <i><font color=#9A1900>// Author: Mike Day (mdday@us.ibm.com</font></i>
1557 <i><font color=#9A1900>//</font></i>
1558 <i><font color=#9A1900>// Modified By: </font></i>
1559 <i><font color=#9A1900>//</font></i>
1560 <i><font color=#9A1900>//////////////////////////////////////////////////////////////////////////</font></i>
|
1561 mday 1.4
1562 <b><font color=#000080>#ifndef</font></b> Pegasus_CimomMessage_h
1563 <b><font color=#000080>#define</font></b> Pegasus_CimomMessage_h
1564
1565 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Config.h></font>
1566 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Exception.h></font>
1567 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/MessageQueue.h></font>
1568 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/AsyncOpNode.h></font>
1569
1570 PEGASUS_NAMESPACE_BEGIN
1571 <i><font color=#9A1900>//</font></i>
1572 <i><font color=#9A1900>// This identifier is the queue id for CIMOM queue. It is initialized in</font></i>
1573 <i><font color=#9A1900>// CimomMessage.cpp by calling MessageQueue::getNextQueueId(). Note that</font></i>
1574 <i><font color=#9A1900>// this value is passed in the constructor for the CIMOM queue.</font></i>
1575 <i><font color=#9A1900>//</font></i>
1576 <b><font color=#0000FF>extern</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIMOM_Q_ID<font color=#990000>;</font>
1577
1578 <b><font color=#0000FF>class</font></b> AsyncOpNode<font color=#990000>;</font>
1579
1580 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE async_results
1581 <font color=#FF0000>{</font>
1582 mday 1.4 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
1583 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 OK<font color=#990000>;</font>
1584 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 PARAMETER_ERROR<font color=#990000>;</font>
1585 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 MODULE_ALREADY_REGISTERED<font color=#990000>;</font>
1586 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 MODULE_NOT_FOUND<font color=#990000>;</font>
1587 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 INTERNAL_ERROR<font color=#990000>;</font>
1588
1589 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_STARTED<font color=#990000>;</font>
1590 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_PROCESSING<font color=#990000>;</font>
1591 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_COMPLETE<font color=#990000>;</font>
1592 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_CANCELLED<font color=#990000>;</font>
1593 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_PAUSED<font color=#990000>;</font>
1594 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_RESUMED<font color=#990000>;</font>
1595
1596 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIM_SERVICE_STARTED<font color=#990000>;</font>
1597 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIM_SERVICE_STOPPED<font color=#990000>;</font>
1598 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIM_SERVICE_PAUSED<font color=#990000>;</font>
1599
1600 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIM_SERVICE_RESUMED<font color=#990000>;</font>
1601 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIM_NAK<font color=#990000>;</font>
1602
1603 mday 1.4 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_PHASE_COMPLETE<font color=#990000>;</font>
1604 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_CHILD_COMPLETE<font color=#990000>;</font>
1605 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_PHASE_STARTED<font color=#990000>;</font>
1606 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_CHILD_STARTED<font color=#990000>;</font>
1607 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIM_PAUSED<font color=#990000>;</font>
1608 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIM_STOPPED<font color=#990000>;</font>
|
1609 kumpf 1.7
|
1610 mday 1.4 <font color=#FF0000>}</font><font color=#990000>;</font>
1611
1612
1613 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE async_messages
1614 <font color=#FF0000>{</font>
1615 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
1616 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 HEARTBEAT<font color=#990000>;</font>
1617 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 REPLY<font color=#990000>;</font>
1618 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 REGISTER_CIM_SERVICE<font color=#990000>;</font>
1619 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 DEREGISTER_CIM_SERVICE<font color=#990000>;</font>
1620 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 UPDATE_CIM_SERVICE<font color=#990000>;</font>
1621 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 IOCTL<font color=#990000>;</font>
1622 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIMSERVICE_START<font color=#990000>;</font>
1623 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIMSERVICE_STOP<font color=#990000>;</font>
1624 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIMSERVICE_PAUSE<font color=#990000>;</font>
1625 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 CIMSERVICE_RESUME<font color=#990000>;</font>
1626
1627 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_OP_START<font color=#990000>;</font>
1628 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_OP_RESULT<font color=#990000>;</font>
1629 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_LEGACY_OP_START<font color=#990000>;</font>
1630 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ASYNC_LEGACY_OP_RESULT<font color=#990000>;</font>
1631 mday 1.4
1632 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 FIND_SERVICE_Q<font color=#990000>;</font>
1633 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 FIND_SERVICE_Q_RESULT<font color=#990000>;</font>
1634 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ENUMERATE_SERVICE<font color=#990000>;</font>
1635 <b><font color=#0000FF>static</font></b> <b><font color=#0000FF>const</font></b> Uint32 ENUMERATE_SERVICE_RESULT<font color=#990000>;</font>
1636 <font color=#FF0000>}</font><font color=#990000>;</font>
1637
1638
1639 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncMessage <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> Message
1640 <font color=#FF0000>{</font>
1641 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1642 kumpf 1.7 <b><font color=#000000>AsyncMessage</font></b><font color=#990000>(</font>Uint32 type<font color=#990000>,</font>
|
1643 mday 1.4 Uint32 destination<font color=#990000>,</font>
|
1644 kumpf 1.7 Uint32 key<font color=#990000>,</font>
|
1645 mday 1.4 Uint32 routing<font color=#990000>,</font>
1646 Uint32 mask<font color=#990000>,</font>
1647 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>)</font><font color=#990000>;</font>
|
1648 kumpf 1.7
1649 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>AsyncMessage</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
1650 mday 1.4 <font color=#FF0000>{</font>
|
1651 kumpf 1.7
|
1652 mday 1.4 <font color=#FF0000>}</font>
|
1653 kumpf 1.7
|
1654 mday 1.4 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font><font color=#990000>(</font><b><font color=#0000FF>const</font></b> <font color=#009900>void</font> <font color=#990000>*</font>key<font color=#990000>)</font><font color=#990000>;</font>
1655 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font><font color=#990000>(</font><b><font color=#0000FF>const</font></b> AsyncMessage<font color=#990000>&</font> msg<font color=#990000>)</font><font color=#990000>;</font>
|
1656 kumpf 1.7
|
1657 mday 1.4 AsyncOpNode <font color=#990000>*</font>op<font color=#990000>;</font>
1658 <font color=#FF0000>}</font><font color=#990000>;</font>
|
1659 mday 1.1
1660
|
1661 mday 1.4 <b><font color=#0000FF>inline</font></b> Boolean AsyncMessage<font color=#990000>:</font><font color=#990000>:</font><b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font><font color=#990000>(</font><b><font color=#0000FF>const</font></b> <font color=#009900>void</font> <font color=#990000>*</font>key<font color=#990000>)</font>
1662 <font color=#FF0000>{</font>
1663 <b><font color=#0000FF>if</font></b><font color=#990000>(</font> key <font color=#990000>=</font><font color=#990000>=</font> <b><font color=#0000FF>reinterpret_cast</font></b><font color=#990000><</font><font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font><b><font color=#0000FF>this</font></b><font color=#990000>)</font><font color=#990000>)</font>
1664 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>true</font></b><font color=#990000>;</font>
1665 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>false</font></b><font color=#990000>;</font>
1666 <font color=#FF0000>}</font>
|
1667 mday 1.1
|
1668 mday 1.4 <b><font color=#0000FF>inline</font></b> Boolean AsyncMessage<font color=#990000>:</font><font color=#990000>:</font><b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font><font color=#990000>(</font><b><font color=#0000FF>const</font></b> AsyncMessage<font color=#990000>&</font> msg<font color=#990000>)</font>
1669 <font color=#FF0000>{</font>
1670 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>this</font></b><font color=#990000>-</font><font color=#990000>></font><b><font color=#0000FF>operator</font></b><font color=#990000>=</font><font color=#990000>=</font><font color=#990000>(</font><b><font color=#0000FF>reinterpret_cast</font></b><font color=#990000><</font><font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font><b><font color=#0000FF>const_cast</font></b><font color=#990000><</font>AsyncMessage <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font><font color=#990000>&</font>msg<font color=#990000>)</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
1671 <font color=#FF0000>}</font>
|
1672 mday 1.1
1673
|
1674 mday 1.4 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncRequest <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncMessage
1675 <font color=#FF0000>{</font>
1676 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1677 kumpf 1.7 <b><font color=#000000>AsyncRequest</font></b><font color=#990000>(</font>Uint32 type<font color=#990000>,</font>
1678 Uint32 key<font color=#990000>,</font>
|
1679 mday 1.4 Uint32 routing<font color=#990000>,</font>
1680 Uint32 mask<font color=#990000>,</font>
1681 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1682 Uint32 destination<font color=#990000>,</font>
1683 Uint32 response<font color=#990000>,</font>
1684 Boolean blocking<font color=#990000>)</font><font color=#990000>;</font>
|
1685 kumpf 1.7
1686
1687 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>AsyncRequest</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
1688 mday 1.4 <font color=#FF0000>{</font>
|
1689 mday 1.1
|
1690 mday 1.4 <font color=#FF0000>}</font>
|
1691 kumpf 1.7
|
1692 mday 1.4 Uint32 resp<font color=#990000>;</font>
1693 Boolean block<font color=#990000>;</font>
1694 <font color=#FF0000>}</font><font color=#990000>;</font>
1695
1696 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncReply <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncMessage
1697 <font color=#FF0000>{</font>
1698 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1699 kumpf 1.7 <b><font color=#000000>AsyncReply</font></b><font color=#990000>(</font>Uint32 type<font color=#990000>,</font>
1700 Uint32 key<font color=#990000>,</font>
1701 Uint32 routing<font color=#990000>,</font>
|
1702 mday 1.4 Uint32 mask<font color=#990000>,</font>
1703 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1704 Uint32 result_code<font color=#990000>,</font>
1705 Uint32 destination<font color=#990000>,</font>
1706 Boolean blocking<font color=#990000>)</font><font color=#990000>;</font>
|
1707 kumpf 1.7
1708
|
1709 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>AsyncReply</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1710 <font color=#FF0000>{</font>
|
1711 kumpf 1.7
|
1712 mday 1.4 <font color=#FF0000>}</font>
|
1713 kumpf 1.7
|
1714 mday 1.4 Uint32 result<font color=#990000>;</font>
1715 Boolean block<font color=#990000>;</font>
1716 <font color=#FF0000>}</font><font color=#990000>;</font>
1717
1718
1719
1720 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE RegisterCimService <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1721 <font color=#FF0000>{</font>
|
1722 kumpf 1.7 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
1723 <b><font color=#000000>RegisterCimService</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
|
1724 mday 1.4 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1725 Boolean blocking<font color=#990000>,</font>
1726 String service_name<font color=#990000>,</font>
|
1727 kumpf 1.7 Uint32 service_capabilities<font color=#990000>,</font>
|
1728 mday 1.4 Uint32 service_mask<font color=#990000>,</font>
1729 Uint32 service_queue<font color=#990000>)</font><font color=#990000>;</font>
|
1730 kumpf 1.7
1731 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>RegisterCimService</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
1732 mday 1.4 <font color=#FF0000>{</font>
1733
1734 <font color=#FF0000>}</font>
|
1735 kumpf 1.7
|
1736 mday 1.4 String name<font color=#990000>;</font>
1737 Uint32 capabilities<font color=#990000>;</font>
1738 Uint32 mask<font color=#990000>;</font>
1739 Uint32 queue<font color=#990000>;</font>
1740 <font color=#FF0000>}</font><font color=#990000>;</font>
1741
1742 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE DeRegisterCimService <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1743 <font color=#FF0000>{</font>
1744 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1745 kumpf 1.7 <b><font color=#000000>DeRegisterCimService</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
|
1746 mday 1.4 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
|
1747 kumpf 1.7 Boolean blocking<font color=#990000>,</font>
|
1748 mday 1.4 Uint32 service_queue<font color=#990000>)</font><font color=#990000>;</font>
|
1749 kumpf 1.7
1750
|
1751 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>DeRegisterCimService</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1752 <font color=#FF0000>{</font>
1753
1754 <font color=#FF0000>}</font>
|
1755 kumpf 1.7
|
1756 mday 1.4 Uint32 queue<font color=#990000>;</font>
1757 <font color=#FF0000>}</font> <font color=#990000>;</font>
1758
1759 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE UpdateCimService <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1760 <font color=#FF0000>{</font>
1761 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1762 kumpf 1.7 <b><font color=#000000>UpdateCimService</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
|
1763 mday 1.4 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
|
1764 kumpf 1.7 Boolean blocking<font color=#990000>,</font>
1765 Uint32 service_queue<font color=#990000>,</font>
1766 Uint32 service_capabilities<font color=#990000>,</font>
|
1767 mday 1.4 Uint32 service_mask<font color=#990000>)</font><font color=#990000>;</font>
1768
|
1769 kumpf 1.7 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>UpdateCimService</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
1770 mday 1.4 <font color=#FF0000>{</font>
1771
1772 <font color=#FF0000>}</font>
|
1773 kumpf 1.7
|
1774 mday 1.4 Uint32 queue<font color=#990000>;</font>
1775 Uint32 capabilities<font color=#990000>;</font>
1776 Uint32 mask<font color=#990000>;</font>
1777 <font color=#FF0000>}</font><font color=#990000>;</font>
1778
1779
1780 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncIoctl <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1781 <font color=#FF0000>{</font>
1782 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1783 kumpf 1.7 <b><font color=#000000>AsyncIoctl</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
1784 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1785 Uint32 destination<font color=#990000>,</font>
|
1786 mday 1.4 Uint32 response<font color=#990000>,</font>
1787 Boolean blocking<font color=#990000>,</font>
|
1788 kumpf 1.7 Uint32 code<font color=#990000>,</font>
|
1789 mday 1.4 Uint32 int_param<font color=#990000>,</font>
1790 <font color=#009900>void</font> <font color=#990000>*</font>p_param<font color=#990000>)</font><font color=#990000>;</font>
1791
1792 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>AsyncIoctl</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1793 <font color=#FF0000>{</font>
1794
1795 <font color=#FF0000>}</font>
|
1796 kumpf 1.7
1797 <b><font color=#0000FF>enum</font></b>
|
1798 mday 1.4 <font color=#FF0000>{</font>
1799 IO_CLOSE<font color=#990000>,</font>
1800 IO_OPEN<font color=#990000>,</font>
1801 IO_SOURCE_QUENCH<font color=#990000>,</font>
1802 IO_SERVICE_DEFINED
1803 <font color=#FF0000>}</font><font color=#990000>;</font>
|
1804 kumpf 1.7
1805
|
1806 mday 1.1
|
1807 mday 1.4 Uint32 ctl<font color=#990000>;</font>
1808 Uint32 intp<font color=#990000>;</font>
1809 <font color=#009900>void</font> <font color=#990000>*</font>voidp<font color=#990000>;</font>
|
1810 mday 1.1
|
1811 mday 1.4 <font color=#FF0000>}</font><font color=#990000>;</font>
|
1812 mday 1.1
|
1813 mday 1.4 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE CimServiceStart <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1814 <font color=#FF0000>{</font>
1815 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1816 kumpf 1.7 <b><font color=#000000>CimServiceStart</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
1817 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1818 Uint32 destination<font color=#990000>,</font>
1819 Uint32 response<font color=#990000>,</font>
|
1820 mday 1.4 Boolean blocking<font color=#990000>)</font><font color=#990000>;</font>
|
1821 kumpf 1.7
1822 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>CimServiceStart</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
1823 mday 1.4 <font color=#FF0000>{</font>
|
1824 kumpf 1.7
|
1825 mday 1.4 <font color=#FF0000>}</font>
1826 <font color=#FF0000>}</font><font color=#990000>;</font>
|
1827 mday 1.1
1828
|
1829 mday 1.4 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE CimServiceStop <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1830 <font color=#FF0000>{</font>
1831 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1832 kumpf 1.7 <b><font color=#000000>CimServiceStop</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
1833 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1834 Uint32 destination<font color=#990000>,</font>
1835 Uint32 response<font color=#990000>,</font>
|
1836 mday 1.4 Boolean blocking<font color=#990000>)</font><font color=#990000>;</font>
|
1837 kumpf 1.7
1838 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>CimServiceStop</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
1839 mday 1.4 <font color=#FF0000>{</font>
|
1840 mday 1.1
|
1841 mday 1.4 <font color=#FF0000>}</font>
1842 <font color=#FF0000>}</font><font color=#990000>;</font>
|
1843 mday 1.1
|
1844 mday 1.4 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE CimServicePause <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1845 <font color=#FF0000>{</font>
1846 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1847 kumpf 1.7 <b><font color=#000000>CimServicePause</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
1848 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1849 Uint32 destination<font color=#990000>,</font>
1850 Uint32 response<font color=#990000>,</font>
|
1851 mday 1.4 Boolean blocking<font color=#990000>)</font><font color=#990000>;</font>
|
1852 kumpf 1.7
1853
|
1854 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>CimServicePause</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1855 <font color=#FF0000>{</font>
1856
1857 <font color=#FF0000>}</font>
1858 <font color=#FF0000>}</font><font color=#990000>;</font>
1859
1860 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE CimServiceResume <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1861 <font color=#FF0000>{</font>
1862 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1863 kumpf 1.7 <b><font color=#000000>CimServiceResume</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
1864 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1865 Uint32 destination<font color=#990000>,</font>
1866 Uint32 response<font color=#990000>,</font>
|
1867 mday 1.4 Boolean blocking<font color=#990000>)</font><font color=#990000>;</font>
|
1868 kumpf 1.7
1869
|
1870 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>CimServiceResume</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1871 <font color=#FF0000>{</font>
1872
1873 <font color=#FF0000>}</font>
1874 <font color=#FF0000>}</font><font color=#990000>;</font>
1875
1876 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncOperationStart <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1877 <font color=#FF0000>{</font>
1878 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1879 kumpf 1.7 <b><font color=#000000>AsyncOperationStart</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
1880 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1881 Uint32 destination<font color=#990000>,</font>
1882 Uint32 response<font color=#990000>,</font>
1883 Boolean blocking<font color=#990000>,</font>
|
1884 mday 1.4 Message <font color=#990000>*</font>action<font color=#990000>)</font><font color=#990000>;</font>
|
1885 kumpf 1.7
|
1886 mday 1.4
1887 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>AsyncOperationStart</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1888 <font color=#FF0000>{</font>
1889 <b><font color=#0000FF>delete</font></b> _act<font color=#990000>;</font>
1890 <font color=#FF0000>}</font>
|
1891 kumpf 1.7
|
1892 mday 1.4
1893 Message <font color=#990000>*</font><b><font color=#000000>get_action</font></b><font color=#990000>(</font><font color=#009900>void</font> <font color=#990000>)</font> <font color=#990000>;</font>
|
1894 kumpf 1.7
1895
|
1896 mday 1.4 <b><font color=#0000FF>private</font></b><font color=#990000>:</font>
1897 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> MessageQueueService<font color=#990000>;</font>
1898 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> cimom<font color=#990000>;</font>
1899 Message <font color=#990000>*</font>_act<font color=#990000>;</font>
1900 <font color=#FF0000>}</font><font color=#990000>;</font>
1901
1902 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncOperationResult <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncReply
1903 <font color=#FF0000>{</font>
1904 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1905 kumpf 1.7 <b><font color=#000000>AsyncOperationResult</font></b><font color=#990000>(</font>Uint32 key<font color=#990000>,</font>
1906 Uint32 routing<font color=#990000>,</font>
|
1907 mday 1.4 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
|
1908 kumpf 1.7 Uint32 result_code<font color=#990000>,</font>
|
1909 mday 1.4 Uint32 destination<font color=#990000>,</font>
1910 Uint32 blocking<font color=#990000>)</font><font color=#990000>;</font>
|
1911 kumpf 1.7
|
1912 mday 1.4
1913 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>AsyncOperationResult</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1914 <font color=#FF0000>{</font>
1915
1916 <font color=#FF0000>}</font>
1917 <font color=#FF0000>}</font><font color=#990000>;</font>
1918
1919
1920 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncLegacyOperationStart <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1921 <font color=#FF0000>{</font>
1922 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1923 kumpf 1.7 <b><font color=#000000>AsyncLegacyOperationStart</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
1924 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1925 Uint32 destination<font color=#990000>,</font>
1926 Message <font color=#990000>*</font>action<font color=#990000>,</font>
|
1927 mday 1.4 Uint32 action_destination<font color=#990000>)</font><font color=#990000>;</font>
|
1928 kumpf 1.7
1929
|
1930 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>AsyncLegacyOperationStart</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1931 <font color=#FF0000>{</font>
1932 <b><font color=#0000FF>delete</font></b> _act<font color=#990000>;</font>
1933 <font color=#FF0000>}</font>
1934
1935 Message <font color=#990000>*</font><b><font color=#000000>get_action</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
1936
1937 <b><font color=#0000FF>private</font></b><font color=#990000>:</font>
1938 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> MessageQueueService<font color=#990000>;</font>
1939 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> cimom<font color=#990000>;</font>
1940 Message <font color=#990000>*</font>_act<font color=#990000>;</font>
1941 Uint32 _legacy_destination<font color=#990000>;</font>
|
1942 kumpf 1.7
|
1943 mday 1.4 <font color=#FF0000>}</font><font color=#990000>;</font>
1944
1945 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncLegacyOperationResult <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncReply
1946 <font color=#FF0000>{</font>
1947 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1948 kumpf 1.7 <b><font color=#000000>AsyncLegacyOperationResult</font></b><font color=#990000>(</font>Uint32 key<font color=#990000>,</font>
1949 Uint32 routing<font color=#990000>,</font>
|
1950 mday 1.4 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1951 Message <font color=#990000>*</font>result<font color=#990000>)</font><font color=#990000>;</font>
|
1952 kumpf 1.7
|
1953 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>AsyncLegacyOperationResult</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1954 <font color=#FF0000>{</font>
1955 <b><font color=#0000FF>delete</font></b> _res<font color=#990000>;</font>
1956 <font color=#FF0000>}</font>
1957
1958 Message <font color=#990000>*</font><b><font color=#000000>get_result</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
|
1959 kumpf 1.7
|
1960 mday 1.4
1961 <b><font color=#0000FF>private</font></b><font color=#990000>:</font>
1962 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> MessageQueueService<font color=#990000>;</font>
1963 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> cimom<font color=#990000>;</font>
1964 Message <font color=#990000>*</font>_res<font color=#990000>;</font>
1965 <font color=#FF0000>}</font><font color=#990000>;</font>
1966
1967
1968 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE FindServiceQueue <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
1969 <font color=#FF0000>{</font>
1970 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1971 kumpf 1.7 <b><font color=#000000>FindServiceQueue</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
1972 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
|
1973 mday 1.4 Uint32 response<font color=#990000>,</font>
|
1974 kumpf 1.7 Boolean blocking<font color=#990000>,</font>
1975 String service_name<font color=#990000>,</font>
1976 Uint32 service_capabilities<font color=#990000>,</font>
|
1977 mday 1.4 Uint32 service_mask<font color=#990000>)</font><font color=#990000>;</font>
|
1978 kumpf 1.7
|
1979 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>FindServiceQueue</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
1980 <font color=#FF0000>{</font>
1981
1982 <font color=#FF0000>}</font>
|
1983 kumpf 1.7
|
1984 mday 1.4 String name<font color=#990000>;</font>
1985 Uint32 capabilities<font color=#990000>;</font>
1986 Uint32 mask<font color=#990000>;</font>
1987 <font color=#FF0000>}</font> <font color=#990000>;</font>
1988
1989 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE FindServiceQueueResult <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncReply
1990 <font color=#FF0000>{</font>
1991 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
1992 kumpf 1.7 <b><font color=#000000>FindServiceQueueResult</font></b><font color=#990000>(</font>Uint32 key<font color=#990000>,</font>
1993 Uint32 routing<font color=#990000>,</font>
1994 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
1995 Uint32 result_code<font color=#990000>,</font>
1996 Uint32 destination<font color=#990000>,</font>
1997 Boolean blocking<font color=#990000>,</font>
|
1998 mday 1.4 Array<font color=#FF0000><Uint32></font> queue_ids<font color=#990000>)</font><font color=#990000>;</font>
|
1999 kumpf 1.7
2000
|
2001 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>FindServiceQueueResult</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2002 <font color=#FF0000>{</font>
2003
2004 <font color=#FF0000>}</font>
|
2005 kumpf 1.7
|
2006 mday 1.4 Array<font color=#FF0000><Uint32></font> qids<font color=#990000>;</font>
2007 <font color=#FF0000>}</font> <font color=#990000>;</font>
2008
2009 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE EnumerateService <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncRequest
2010 <font color=#FF0000>{</font>
2011 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
2012 kumpf 1.7 <b><font color=#000000>EnumerateService</font></b><font color=#990000>(</font>Uint32 routing<font color=#990000>,</font>
2013 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
2014 Uint32 response<font color=#990000>,</font>
2015 Boolean blocking<font color=#990000>,</font>
|
2016 mday 1.4 Uint32 queue_id<font color=#990000>)</font><font color=#990000>;</font>
|
2017 kumpf 1.7
2018
|
2019 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>EnumerateService</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2020 <font color=#FF0000>{</font>
2021
2022 <font color=#FF0000>}</font>
|
2023 kumpf 1.7
|
2024 mday 1.4 Uint32 qid<font color=#990000>;</font>
2025 <font color=#FF0000>}</font><font color=#990000>;</font>
2026
2027 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE EnumerateServiceResponse <font color=#990000>:</font> <b><font color=#0000FF>public</font></b> AsyncReply
2028 <font color=#FF0000>{</font>
2029 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
2030 kumpf 1.7 <b><font color=#000000>EnumerateServiceResponse</font></b><font color=#990000>(</font>Uint32 key<font color=#990000>,</font>
2031 Uint32 routing<font color=#990000>,</font>
2032 AsyncOpNode <font color=#990000>*</font>operation<font color=#990000>,</font>
2033 Uint32 result_code<font color=#990000>,</font>
2034 Uint32 response<font color=#990000>,</font>
|
2035 mday 1.4 Boolean blocking<font color=#990000>,</font>
|
2036 kumpf 1.7 String service_name<font color=#990000>,</font>
2037 Uint32 service_capabilities<font color=#990000>,</font>
2038 Uint32 service_mask<font color=#990000>,</font>
|
2039 mday 1.4 Uint32 service_qid<font color=#990000>)</font><font color=#990000>;</font>
|
2040 kumpf 1.7
2041
|
2042 mday 1.4 <b><font color=#0000FF>virtual</font></b> <font color=#990000>~</font><b><font color=#000000>EnumerateServiceResponse</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2043 <font color=#FF0000>{</font>
2044
2045 <font color=#FF0000>}</font>
|
2046 kumpf 1.7
|
2047 mday 1.4 String name<font color=#990000>;</font>
2048 Uint32 capabilities<font color=#990000>;</font>
2049 Uint32 mask<font color=#990000>;</font>
2050 Uint32 qid<font color=#990000>;</font>
2051 <font color=#FF0000>}</font><font color=#990000>;</font>
2052
2053
2054 PEGASUS_NAMESPACE_END
2055
2056 <b><font color=#000080>#endif</font></b> <i><font color=#9A1900>// CIMOM_MESSAGE_include</font></i>
2057 </tt>
2058 </pre>
2059
2060
2061 <h3>AsyncOpNode</h3>
2062
|
2063 martin 1.5 <pre><tt>
|
2064 martin 1.6 <i><font color=#9A1900>//%LICENSE////////////////////////////////////////////////////////////////</font></i>
|
2065 mday 1.4 <i><font color=#9A1900>//</font></i>
|
2066 martin 1.6 <i><font color=#9A1900>// Licensed to The Open Group (TOG) under one or more contributor license</font></i>
2067 <i><font color=#9A1900>// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with</font></i>
2068 <i><font color=#9A1900>// this work for additional information regarding copyright ownership.</font></i>
2069 <i><font color=#9A1900>// Each contributor licenses this file to you under the OpenPegasus Open</font></i>
2070 <i><font color=#9A1900>// Source License; you may not use this file except in compliance with the</font></i>
2071 <i><font color=#9A1900>// License.</font></i>
2072 <i><font color=#9A1900>//</font></i>
2073 <i><font color=#9A1900>// Permission is hereby granted, free of charge, to any person obtaining a</font></i>
2074 <i><font color=#9A1900>// copy of this software and associated documentation files (the "Software"),</font></i>
2075 <i><font color=#9A1900>// to deal in the Software without restriction, including without limitation</font></i>
2076 <i><font color=#9A1900>// the rights to use, copy, modify, merge, publish, distribute, sublicense,</font></i>
2077 <i><font color=#9A1900>// and/or sell copies of the Software, and to permit persons to whom the</font></i>
2078 <i><font color=#9A1900>// Software is furnished to do so, subject to the following conditions:</font></i>
2079 <i><font color=#9A1900>//</font></i>
2080 <i><font color=#9A1900>// The above copyright notice and this permission notice shall be included</font></i>
2081 <i><font color=#9A1900>// in all copies or substantial portions of the Software.</font></i>
2082 <i><font color=#9A1900>//</font></i>
2083 <i><font color=#9A1900>// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS</font></i>
2084 <i><font color=#9A1900>// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</font></i>
2085 <i><font color=#9A1900>// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</font></i>
2086 <i><font color=#9A1900>// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY</font></i>
2087 martin 1.6 <i><font color=#9A1900>// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,</font></i>
2088 <i><font color=#9A1900>// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE</font></i>
2089 <i><font color=#9A1900>// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</font></i>
|
2090 mday 1.4 <i><font color=#9A1900>//</font></i>
|
2091 martin 1.6 <i><font color=#9A1900>//////////////////////////////////////////////////////////////////////////</font></i>
|
2092 mday 1.4 <i><font color=#9A1900>//</font></i>
|
2093 martin 1.6 <i><font color=#9A1900>// Author: Mike Day (mdday@us.ibm.com</font></i>
|
2094 mday 1.4 <i><font color=#9A1900>//</font></i>
2095 <i><font color=#9A1900>// Modified By: </font></i>
2096 <i><font color=#9A1900>//</font></i>
|
2097 martin 1.6 <i><font color=#9A1900>//////////////////////////////////////////////////////////////////////////</font></i>
|
2098 mday 1.4
2099
2100 <b><font color=#000080>#ifndef</font></b> Pegasus_AsyncOpNode_h
2101 <b><font color=#000080>#define</font></b> Pegasus_AsyncOpNode_h
2102
2103 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Config.h></font>
2104 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/Message.h></font>
2105 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/OperationContext.h></font>
2106 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/internal_dq.h></font>
2107 <b><font color=#000080>#include</font></b> <font color=#FF0000><Pegasus/Common/IPC.h></font>
2108
2109 PEGASUS_NAMESPACE_BEGIN
2110
2111 <i><font color=#9A1900>// ATTN usage of flags and state is inconsistent</font></i>
2112 <i><font color=#9A1900>// << Wed Jan 16 17:41:57 2002 mdd >></font></i>
2113 <i><font color=#9A1900>// resolved mdd </font></i>
2114
2115
2116 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_UNKNOWN <font color=#993399>0x00000000</font>
2117 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_INTERVAL_REPEAT <font color=#993399>0x00000010</font>
2118 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_INDICATION <font color=#993399>0x00000020</font>
2119 mday 1.4 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_REMOTE <font color=#993399>0x00000040</font>
2120 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_LOCAL_OUT_OF_PROC <font color=#993399>0x00000080</font>
2121 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_PHASED <font color=#993399>0x00000001</font>
2122 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_PARTIAL <font color=#993399>0x00000002</font>
2123 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_NORMAL <font color=#993399>0x00000000</font>
2124 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_SINGLE <font color=#993399>0x00000008</font>
2125 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_MULTIPLE <font color=#993399>0x00000010</font>
2126 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_TOTAL <font color=#993399>0x00000020</font>
2127 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_META_DISPATCHER <font color=#993399>0x00000040</font>
2128 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_FIRE_AND_FORGET <font color=#993399>0x00000080</font>
2129 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_SIMPLE_STATUS <font color=#993399>0x00000100</font>
2130 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_CALLBACK <font color=#993399>0x00000200</font>
2131 <b><font color=#000080>#define</font></b> ASYNC_OPFLAGS_FORWARD <font color=#993399>0x00000400</font>
2132
2133 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_UNKNOWN <font color=#993399>0x00000000</font>
2134 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_OFFERED <font color=#993399>0x00000001</font>
2135 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_DECLINED <font color=#993399>0x00000002</font>
2136 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_STARTED <font color=#993399>0x00000004</font>
2137 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_PROCESSING <font color=#993399>0x00000008</font>
|
2138 kumpf 1.7 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_DELIVER <font color=#993399>0x00000010</font>
|
2139 mday 1.4 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_RESERVE <font color=#993399>0x00000020</font>
2140 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_COMPLETE <font color=#993399>0x00000040</font>
2141 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_TIMEOUT <font color=#993399>0x00000080</font>
2142 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_CANCELLED <font color=#993399>0x00000100</font>
2143 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_PAUSED <font color=#993399>0x00000200</font>
2144 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_SUSPENDED <font color=#993399>0x00000400</font>
2145 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_RESUMED <font color=#993399>0x00000800</font>
2146 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_ORPHANED <font color=#993399>0x00001000</font>
2147 <b><font color=#000080>#define</font></b> ASYNC_OPSTATE_RELEASED <font color=#993399>0x00002000</font>
2148
2149 <b><font color=#0000FF>class</font></b> Cimom<font color=#990000>;</font>
2150 <b><font color=#0000FF>class</font></b> Thread<font color=#990000>;</font>
2151
2152 <b><font color=#0000FF>class</font></b> PEGASUS_COMMON_LINKAGE AsyncOpNode
2153 <font color=#FF0000>{</font>
2154 <b><font color=#0000FF>public</font></b><font color=#990000>:</font>
|
2155 mday 1.1
|
2156 mday 1.4 <b><font color=#000000>AsyncOpNode</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
2157 <font color=#990000>~</font><b><font color=#000000>AsyncOpNode</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
|
2158 kumpf 1.7
|
2159 mday 1.4 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><b><font color=#0000FF>const</font></b> <font color=#009900>void</font> <font color=#990000>*</font>key<font color=#990000>)</font> <b><font color=#0000FF>const</font></b><font color=#990000>;</font>
2160 Boolean <b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><b><font color=#0000FF>const</font></b> AsyncOpNode <font color=#990000>&</font> node<font color=#990000>)</font> <b><font color=#0000FF>const</font></b><font color=#990000>;</font>
|
2161 mday 1.1
|
2162 mday 1.4 <font color=#009900>void</font> <b><font color=#000000>get_timeout_interval</font></b><font color=#990000>(</font><b><font color=#0000FF>struct</font></b> timeval <font color=#990000>*</font>buffer<font color=#990000>)</font> <font color=#990000>;</font>
2163 <font color=#009900>void</font> <b><font color=#000000>set_timeout_interval</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> <b><font color=#0000FF>struct</font></b> timeval <font color=#990000>*</font>interval<font color=#990000>)</font><font color=#990000>;</font>
|
2164 kumpf 1.7
|
2165 mday 1.4 Boolean <b><font color=#000000>timeout</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
|
2166 mday 1.1
|
2167 mday 1.4 OperationContext <font color=#990000>&</font> <b><font color=#000000>get_context</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
2168
2169 <font color=#009900>void</font> <b><font color=#000000>put_request</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Message <font color=#990000>*</font>request<font color=#990000>)</font> <font color=#990000>;</font>
2170 Message <font color=#990000>*</font><b><font color=#000000>get_request</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
|
2171 kumpf 1.7
|
2172 mday 1.4 <font color=#009900>void</font> <b><font color=#000000>put_response</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Message <font color=#990000>*</font>response<font color=#990000>)</font> <font color=#990000>;</font>
2173 Message <font color=#990000>*</font><b><font color=#000000>get_response</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
|
2174 kumpf 1.7
|
2175 mday 1.4 Uint32 <b><font color=#000000>read_state</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
2176 <font color=#009900>void</font> <b><font color=#000000>write_state</font></b><font color=#990000>(</font>Uint32<font color=#990000>)</font> <font color=#990000>;</font>
|
2177 kumpf 1.7
|
2178 mday 1.4 Uint32 <b><font color=#000000>read_flags</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
2179 <font color=#009900>void</font> <b><font color=#000000>write_flags</font></b><font color=#990000>(</font>Uint32<font color=#990000>)</font><font color=#990000>;</font>
|
2180 kumpf 1.7
|
2181 mday 1.4 <font color=#009900>void</font> <b><font color=#000000>lock</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
2182 <font color=#009900>void</font> <b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
2183 <font color=#009900>void</font> <b><font color=#000000>udpate</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
2184 <font color=#009900>void</font> <b><font color=#000000>deliver</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Uint32 count<font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
2185 <font color=#009900>void</font> <b><font color=#000000>reserve</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Uint32 size<font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
2186 <font color=#009900>void</font> <b><font color=#000000>processing</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font> <font color=#990000>;</font>
2187 <font color=#009900>void</font> <b><font color=#000000>processing</font></b><font color=#990000>(</font>OperationContext <font color=#990000>*</font>context<font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
2188 <font color=#009900>void</font> <b><font color=#000000>complete</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font> <font color=#990000>;</font>
2189 <font color=#009900>void</font> <b><font color=#000000>complete</font></b><font color=#990000>(</font>OperationContext <font color=#990000>*</font>context<font color=#990000>)</font> <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font><font color=#990000>;</font>
2190 <font color=#009900>void</font> <b><font color=#000000>release</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
2191 <font color=#009900>void</font> <b><font color=#000000>wait</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font><font color=#990000>;</font>
|
2192 kumpf 1.7
2193
|
2194 mday 1.4 <b><font color=#0000FF>private</font></b><font color=#990000>:</font>
2195 Semaphore _client_sem<font color=#990000>;</font>
2196 Mutex _mut<font color=#990000>;</font>
2197 unlocked_dq<font color=#FF0000><Message></font> _request<font color=#990000>;</font>
|
2198 kumpf 1.7 unlocked_dq<font color=#FF0000><Message></font> _response<font color=#990000>;</font>
2199
|
2200 mday 1.4 OperationContext _operation_list<font color=#990000>;</font>
2201 Uint32 _state<font color=#990000>;</font>
2202 Uint32 _flags<font color=#990000>;</font>
2203 Uint32 _offered_count<font color=#990000>;</font>
2204 Uint32 _total_ops<font color=#990000>;</font>
2205 Uint32 _completed_ops<font color=#990000>;</font>
2206 Uint32 _user_data<font color=#990000>;</font>
2207 Uint32 _completion_code<font color=#990000>;</font>
2208 MessageQueue <font color=#990000>*</font>_op_dest<font color=#990000>;</font>
|
2209 kumpf 1.7
|
2210 mday 1.4 <b><font color=#0000FF>struct</font></b> timeval _start<font color=#990000>;</font>
2211 <b><font color=#0000FF>struct</font></b> timeval _lifetime<font color=#990000>;</font>
2212 <b><font color=#0000FF>struct</font></b> timeval _updated<font color=#990000>;</font>
2213 <b><font color=#0000FF>struct</font></b> timeval _timeout_interval<font color=#990000>;</font>
2214
2215 AsyncOpNode <font color=#990000>*</font>_parent<font color=#990000>;</font>
2216 unlocked_dq<font color=#FF0000><AsyncOpNode></font> _children<font color=#990000>;</font>
2217
2218 <font color=#009900>void</font> <b><font color=#000000>_reset</font></b><font color=#990000>(</font>unlocked_dq<font color=#FF0000><AsyncOpNode></font> <font color=#990000>*</font>dst_q<font color=#990000>)</font><font color=#990000>;</font>
2219
2220 <i><font color=#9A1900>// the lifetime member is for cache management by the cimom</font></i>
2221 <font color=#009900>void</font> <b><font color=#000000>_set_lifetime</font></b><font color=#990000>(</font><b><font color=#0000FF>struct</font></b> timeval <font color=#990000>*</font>lifetime<font color=#990000>)</font> <font color=#990000>;</font>
2222 Boolean <b><font color=#000000>_check_lifetime</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
2223
2224 Boolean <b><font color=#000000>_is_child</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
2225 Uint32 <b><font color=#000000>_is_parent</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font> <font color=#990000>;</font>
2226 Boolean <b><font color=#000000>_is_my_child</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> AsyncOpNode <font color=#990000>&</font> caller<font color=#990000>)</font> <b><font color=#0000FF>const</font></b><font color=#990000>;</font>
2227 <font color=#009900>void</font> <b><font color=#000000>_make_orphan</font></b><font color=#990000>(</font> AsyncOpNode <font color=#990000>&</font> parent<font color=#990000>)</font> <font color=#990000>;</font>
2228 <font color=#009900>void</font> <b><font color=#000000>_adopt_child</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>child<font color=#990000>)</font> <font color=#990000>;</font>
2229 <font color=#009900>void</font> <b><font color=#000000>_disown_child</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>child<font color=#990000>)</font> <font color=#990000>;</font>
|
2230 kumpf 1.7 <font color=#009900>void</font> <font color=#990000>(</font><font color=#990000>*</font>_async_callback<font color=#990000>)</font><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font><font color=#990000>,</font>
2231 MessageQueue <font color=#990000>*</font><font color=#990000>,</font>
|
2232 mday 1.4 <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>;</font>
2233 <i><font color=#9A1900>// << Tue Mar 12 14:44:51 2002 mdd >></font></i>
2234 <i><font color=#9A1900>// pointers for async callbacks - don't use </font></i>
2235 AsyncOpNode <font color=#990000>*</font>_callback_node<font color=#990000>;</font>
2236 MessageQueue <font color=#990000>*</font>_callback_response_q<font color=#990000>;</font>
2237 <font color=#009900>void</font> <font color=#990000>*</font>_callback_ptr<font color=#990000>;</font>
2238 MessageQueue <font color=#990000>*</font>_callback_request_q<font color=#990000>;</font>
2239 <i><font color=#9A1900>// << Tue Mar 12 14:44:53 2002 mdd >></font></i>
2240 <i><font color=#9A1900>// pointers to help static class message handlers - don't use </font></i>
2241 MessageQueue <font color=#990000>*</font>_service_ptr<font color=#990000>;</font>
2242 Thread <font color=#990000>*</font>_thread_ptr<font color=#990000>;</font>
|
2243 kumpf 1.7
|
2244 mday 1.4 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> cimom<font color=#990000>;</font>
2245 <b><font color=#0000FF>friend</font></b> <b><font color=#0000FF>class</font></b> MessageQueueService<font color=#990000>;</font>
|
2246 kumpf 1.7
|
2247 mday 1.4 <font color=#FF0000>}</font><font color=#990000>;</font>
|
2248 mday 1.1
2249
|
2250 mday 1.4 <b><font color=#0000FF>inline</font></b> Boolean AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><b><font color=#0000FF>const</font></b> <font color=#009900>void</font> <font color=#990000>*</font>key<font color=#990000>)</font> <b><font color=#0000FF>const</font></b>
2251 <font color=#FF0000>{</font>
2252 <b><font color=#0000FF>if</font></b> <font color=#990000>(</font>key <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><b><font color=#0000FF>this</font></b><font color=#990000>)</font>
2253 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>true</font></b><font color=#990000>;</font>
2254 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>false</font></b><font color=#990000>;</font>
2255 <font color=#FF0000>}</font>
2256
2257 <b><font color=#0000FF>inline</font></b> Boolean AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#0000FF>operator</font></b> <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>(</font><b><font color=#0000FF>const</font></b> AsyncOpNode <font color=#990000>&</font> node<font color=#990000>)</font> <b><font color=#0000FF>const</font></b>
2258 <font color=#FF0000>{</font>
2259 <b><font color=#0000FF>return</font></b> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#0000FF>operator</font></b><font color=#990000>=</font><font color=#990000>=</font><font color=#990000>(</font><font color=#990000>(</font><b><font color=#0000FF>const</font></b> <font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>)</font><font color=#990000>&</font>node<font color=#990000>)</font><font color=#990000>;</font>
2260 <font color=#FF0000>}</font>
2261
2262
|
2263 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>get_timeout_interval</font></b><font color=#990000>(</font><b><font color=#0000FF>struct</font></b> timeval <font color=#990000>*</font>buffer<font color=#990000>)</font>
|
2264 mday 1.4 <font color=#FF0000>{</font>
2265 <b><font color=#0000FF>if</font></b><font color=#990000>(</font>buffer <font color=#990000>!</font><font color=#990000>=</font> <font color=#993399>0</font><font color=#990000>)</font>
2266 <font color=#FF0000>{</font>
2267 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font> <b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font> <font color=#990000>)</font><font color=#990000>;</font>
2268 buffer<font color=#990000>-</font><font color=#990000>></font>tv_sec <font color=#990000>=</font> _timeout_interval<font color=#990000>.</font>tv_sec<font color=#990000>;</font>
2269 buffer<font color=#990000>-</font><font color=#990000>></font>tv_usec <font color=#990000>=</font> _timeout_interval<font color=#990000>.</font>tv_usec<font color=#990000>;</font>
2270 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2271 <font color=#FF0000>}</font>
2272 <b><font color=#0000FF>return</font></b><font color=#990000>;</font>
2273 <font color=#FF0000>}</font>
2274
2275 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>set_timeout_interval</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> <b><font color=#0000FF>struct</font></b> timeval <font color=#990000>*</font>interval<font color=#990000>)</font>
2276 <font color=#FF0000>{</font>
2277 <b><font color=#0000FF>if</font></b><font color=#990000>(</font>interval <font color=#990000>!</font><font color=#990000>=</font> <font color=#993399>0</font><font color=#990000>)</font>
2278 <font color=#FF0000>{</font>
2279 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2280 _timeout_interval<font color=#990000>.</font>tv_sec <font color=#990000>=</font> interval<font color=#990000>-</font><font color=#990000>></font>tv_sec<font color=#990000>;</font>
2281 _timeout_interval<font color=#990000>.</font>tv_usec <font color=#990000>=</font> interval<font color=#990000>-</font><font color=#990000>></font>tv_usec<font color=#990000>;</font>
2282 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2283 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2284 <font color=#FF0000>}</font>
2285 mday 1.4 <font color=#FF0000>}</font>
2286
2287
|
2288 kumpf 1.7 <b><font color=#0000FF>inline</font></b> Boolean AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>timeout</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
2289 mday 1.4 <font color=#FF0000>{</font>
2290 <b><font color=#0000FF>struct</font></b> timeval now<font color=#990000>;</font>
2291 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>now<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2292 Boolean ret <font color=#990000>=</font> <b><font color=#0000FF>false</font></b><font color=#990000>;</font>
2293 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2294 <b><font color=#0000FF>if</font></b><font color=#990000>(</font><font color=#990000>(</font>_updated<font color=#990000>.</font>tv_sec <font color=#990000>+</font> _timeout_interval<font color=#990000>.</font>tv_sec <font color=#990000>)</font> <font color=#990000><</font> now<font color=#990000>.</font>tv_sec<font color=#990000>)</font>
2295 <b><font color=#0000FF>if</font></b><font color=#990000>(</font><font color=#990000>(</font>_updated<font color=#990000>.</font>tv_usec <font color=#990000>+</font> _timeout_interval<font color=#990000>.</font>tv_usec <font color=#990000>)</font> <font color=#990000><</font> now<font color=#990000>.</font>tv_usec<font color=#990000>)</font>
2296 ret <font color=#990000>=</font> <b><font color=#0000FF>true</font></b><font color=#990000>;</font>
2297 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2298 <b><font color=#0000FF>return</font></b> ret<font color=#990000>;</font>
2299 <font color=#FF0000>}</font>
2300
2301 <i><font color=#9A1900>// context is now a locked list</font></i>
2302 <b><font color=#0000FF>inline</font></b> OperationContext <font color=#990000>&</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>get_context</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2303 <font color=#FF0000>{</font>
2304 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2305 <b><font color=#0000FF>return</font></b> _operation_list<font color=#990000>;</font>
2306 <font color=#FF0000>}</font>
2307
2308
|
2309 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>put_request</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Message <font color=#990000>*</font>request<font color=#990000>)</font>
|
2310 mday 1.4 <font color=#FF0000>{</font>
2311 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2312 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2313 <b><font color=#0000FF>if</font></b><font color=#990000>(</font> <b><font color=#0000FF>false</font></b> <font color=#990000>=</font><font color=#990000>=</font> _request<font color=#990000>.</font><b><font color=#000000>exists</font></b><font color=#990000>(</font><b><font color=#0000FF>reinterpret_cast</font></b><font color=#990000><</font><font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font><b><font color=#0000FF>const_cast</font></b><font color=#990000><</font>Message <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font>request<font color=#990000>)</font><font color=#990000>)</font><font color=#990000>)</font> <font color=#990000>)</font>
2314 _request<font color=#990000>.</font><b><font color=#000000>insert_last</font></b><font color=#990000>(</font> <b><font color=#0000FF>const_cast</font></b><font color=#990000><</font>Message <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font>request<font color=#990000>)</font> <font color=#990000>)</font> <font color=#990000>;</font>
|
2315 mday 1.1
|
2316 mday 1.4 <i><font color=#9A1900>// _request = const_cast<Message *>(request);</font></i>
|
2317 kumpf 1.7
|
2318 mday 1.4 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2319 <font color=#FF0000>}</font>
|
2320 mday 1.1
|
2321 kumpf 1.7 <b><font color=#0000FF>inline</font></b> Message <font color=#990000>*</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>get_request</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
2322 mday 1.4 <font color=#FF0000>{</font>
2323 Message <font color=#990000>*</font>ret<font color=#990000>;</font>
2324 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2325 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2326 ret <font color=#990000>=</font> _request<font color=#990000>.</font><b><font color=#000000>remove_first</font></b><font color=#990000>(</font><font color=#990000>)</font> <font color=#990000>;</font>
2327 <i><font color=#9A1900>// ret = _request;</font></i>
|
2328 kumpf 1.7
|
2329 mday 1.4 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2330 <b><font color=#0000FF>return</font></b> ret<font color=#990000>;</font>
2331 <font color=#FF0000>}</font>
2332
|
2333 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>put_response</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Message <font color=#990000>*</font>response<font color=#990000>)</font>
|
2334 mday 1.4 <font color=#FF0000>{</font>
2335 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2336 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2337 <b><font color=#0000FF>if</font></b> <font color=#990000>(</font><b><font color=#0000FF>false</font></b> <font color=#990000>=</font><font color=#990000>=</font> _response<font color=#990000>.</font><b><font color=#000000>exists</font></b><font color=#990000>(</font><b><font color=#0000FF>reinterpret_cast</font></b><font color=#990000><</font><font color=#009900>void</font> <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font><b><font color=#0000FF>const_cast</font></b><font color=#990000><</font>Message <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font>response<font color=#990000>)</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>)</font>
2338 _response<font color=#990000>.</font><b><font color=#000000>insert_last</font></b><font color=#990000>(</font> <b><font color=#0000FF>const_cast</font></b><font color=#990000><</font>Message <font color=#990000>*</font><font color=#990000>></font><font color=#990000>(</font>response<font color=#990000>)</font> <font color=#990000>)</font><font color=#990000>;</font>
|
2339 mday 1.1
|
2340 mday 1.4 <i><font color=#9A1900>// _response = const_cast<Message *>(response);</font></i>
|
2341 kumpf 1.7
|
2342 mday 1.4 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2343 <font color=#FF0000>}</font>
|
2344 mday 1.1
|
2345 kumpf 1.7 <b><font color=#0000FF>inline</font></b> Message <font color=#990000>*</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>get_response</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
2346 mday 1.4 <font color=#FF0000>{</font>
2347 Message <font color=#990000>*</font>ret<font color=#990000>;</font>
2348
2349 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2350 <i><font color=#9A1900>// gettimeofday(&_updated, NULL);</font></i>
2351 ret <font color=#990000>=</font> _response<font color=#990000>.</font><b><font color=#000000>remove_first</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2352 <i><font color=#9A1900>// ret = _response;</font></i>
|
2353 kumpf 1.7
|
2354 mday 1.4 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2355 <b><font color=#0000FF>return</font></b> ret<font color=#990000>;</font>
2356 <font color=#FF0000>}</font>
2357
2358 <b><font color=#0000FF>inline</font></b> Uint32 AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>read_state</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2359 <font color=#FF0000>{</font>
2360 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2361 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2362 Uint32 ret <font color=#990000>=</font> _state<font color=#990000>;</font>
2363 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2364 <b><font color=#0000FF>return</font></b> ret<font color=#990000>;</font>
|
2365 kumpf 1.7
|
2366 mday 1.4 <font color=#FF0000>}</font>
|
2367 mday 1.1
|
2368 mday 1.4 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>write_state</font></b><font color=#990000>(</font>Uint32 state<font color=#990000>)</font>
2369 <font color=#FF0000>{</font>
2370 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2371 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2372 _state <font color=#990000>=</font> state<font color=#990000>;</font>
2373 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2374 <font color=#FF0000>}</font>
2375
2376 <b><font color=#0000FF>inline</font></b> Uint32 AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>read_flags</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2377 <font color=#FF0000>{</font>
2378 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2379 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2380 Uint32 ret <font color=#990000>=</font> _flags<font color=#990000>;</font>
2381 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2382 <b><font color=#0000FF>return</font></b> ret<font color=#990000>;</font>
2383 <font color=#FF0000>}</font>
2384
2385 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>write_flags</font></b><font color=#990000>(</font>Uint32 flags<font color=#990000>)</font>
|
2386 kumpf 1.7 <font color=#FF0000>{</font>
|
2387 mday 1.4 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2388 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2389 _flags <font color=#990000>=</font> flags<font color=#990000>;</font>
2390 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2391 <font color=#FF0000>}</font>
2392
2393
|
2394 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2395 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
|
2396 mday 1.4 <font color=#FF0000>{</font>
2397 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2398 <font color=#FF0000>}</font>
2399
|
2400 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2401 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
|
2402 mday 1.4 <font color=#FF0000>{</font>
2403 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2404 <font color=#FF0000>}</font>
2405
2406 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>udpate</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2407 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
2408 <font color=#FF0000>{</font>
2409 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2410 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2411 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2412 <b><font color=#0000FF>return</font></b><font color=#990000>;</font>
2413 <font color=#FF0000>}</font>
2414
|
2415 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>deliver</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Uint32 count<font color=#990000>)</font>
|
2416 mday 1.4 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
2417 <font color=#FF0000>{</font>
2418 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2419 _completed_ops <font color=#990000>=</font> count<font color=#990000>;</font>
2420 _state <font color=#990000>|</font><font color=#990000>=</font> ASYNC_OPSTATE_DELIVER<font color=#990000>;</font>
2421 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2422 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2423 <b><font color=#0000FF>return</font></b><font color=#990000>;</font>
2424 <font color=#FF0000>}</font>
2425
2426 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>reserve</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> Uint32 size<font color=#990000>)</font>
2427 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
2428 <font color=#FF0000>{</font>
2429 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2430 _total_ops <font color=#990000>=</font> size<font color=#990000>;</font>
2431 _state <font color=#990000>|</font><font color=#990000>=</font> ASYNC_OPSTATE_RESERVE<font color=#990000>;</font>
2432 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2433 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2434 <b><font color=#0000FF>return</font></b><font color=#990000>;</font>
2435 <font color=#FF0000>}</font>
2436
|
2437 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>processing</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
2438 mday 1.4 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
2439 <font color=#FF0000>{</font>
2440 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2441 _state <font color=#990000>|</font><font color=#990000>=</font> ASYNC_OPSTATE_PROCESSING<font color=#990000>;</font>
2442 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2443 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2444 <b><font color=#0000FF>return</font></b><font color=#990000>;</font>
2445 <font color=#FF0000>}</font>
2446
2447 <i><font color=#9A1900>// con will be empty upon return of this member function</font></i>
|
2448 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>processing</font></b><font color=#990000>(</font>OperationContext <font color=#990000>*</font>con<font color=#990000>)</font>
|
2449 mday 1.4 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
2450 <font color=#FF0000>{</font>
2451 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2452 _state <font color=#990000>|</font><font color=#990000>=</font> ASYNC_OPSTATE_PROCESSING<font color=#990000>;</font>
2453 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
|
2454 kumpf 1.7
|
2455 mday 1.4 context <font color=#990000>*</font>c <font color=#990000>=</font> con<font color=#990000>-</font><font color=#990000>></font><b><font color=#000000>remove_context</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2456 <b><font color=#0000FF>while</font></b><font color=#990000>(</font>c <font color=#990000>!</font><font color=#990000>=</font> <font color=#993399>0</font><font color=#990000>)</font>
2457 <font color=#FF0000>{</font>
2458 _operation_list<font color=#990000>.</font><b><font color=#000000>add_context</font></b><font color=#990000>(</font>c<font color=#990000>)</font><font color=#990000>;</font>
2459 c <font color=#990000>=</font> con<font color=#990000>-</font><font color=#990000>></font><b><font color=#000000>remove_context</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2460 <font color=#FF0000>}</font>
2461 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2462 <b><font color=#0000FF>return</font></b><font color=#990000>;</font>
2463 <font color=#FF0000>}</font>
2464
|
2465 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>complete</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
2466 mday 1.4 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
2467 <font color=#FF0000>{</font>
2468 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2469 _state <font color=#990000>|</font><font color=#990000>=</font> ASYNC_OPSTATE_COMPLETE<font color=#990000>;</font>
2470 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2471 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2472
2473 <b><font color=#0000FF>return</font></b><font color=#990000>;</font>
2474 <font color=#FF0000>}</font>
2475
2476 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>complete</font></b><font color=#990000>(</font>OperationContext <font color=#990000>*</font>con<font color=#990000>)</font>
2477 <b><font color=#0000FF>throw</font></b><font color=#990000>(</font>IPCException<font color=#990000>)</font>
2478 <font color=#FF0000>{</font>
2479 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2480 _state <font color=#990000>|</font><font color=#990000>=</font> ASYNC_OPSTATE_COMPLETE<font color=#990000>;</font>
2481 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>_updated<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2482 context <font color=#990000>*</font>c <font color=#990000>=</font> con<font color=#990000>-</font><font color=#990000>></font><b><font color=#000000>remove_context</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2483 <b><font color=#0000FF>while</font></b><font color=#990000>(</font>c <font color=#990000>!</font><font color=#990000>=</font> <font color=#993399>0</font><font color=#990000>)</font>
2484 <font color=#FF0000>{</font>
2485 _operation_list<font color=#990000>.</font><b><font color=#000000>add_context</font></b><font color=#990000>(</font>c<font color=#990000>)</font><font color=#990000>;</font>
2486 c <font color=#990000>=</font> con<font color=#990000>-</font><font color=#990000>></font><b><font color=#000000>remove_context</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2487 mday 1.4 <font color=#FF0000>}</font>
2488 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2489 <font color=#FF0000>}</font>
2490
2491 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>wait</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2492 <font color=#FF0000>{</font>
2493 _client_sem<font color=#990000>.</font><b><font color=#000000>wait</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2494 <font color=#FF0000>}</font>
2495
2496 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>release</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2497 <font color=#FF0000>{</font>
2498 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2499 _state <font color=#990000>|</font><font color=#990000>=</font> ASYNC_OPSTATE_RELEASED<font color=#990000>;</font>
2500 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2501 <font color=#FF0000>}</font>
2502
|
2503 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>_set_lifetime</font></b><font color=#990000>(</font><b><font color=#0000FF>struct</font></b> timeval <font color=#990000>*</font>lifetime<font color=#990000>)</font>
|
2504 mday 1.4 <font color=#FF0000>{</font>
2505 _mut<font color=#990000>.</font><b><font color=#000000>lock</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2506 _lifetime<font color=#990000>.</font>tv_sec <font color=#990000>=</font> lifetime<font color=#990000>-</font><font color=#990000>></font>tv_sec<font color=#990000>;</font>
2507 _lifetime<font color=#990000>.</font>tv_usec <font color=#990000>=</font> lifetime<font color=#990000>-</font><font color=#990000>></font>tv_usec<font color=#990000>;</font>
2508 _mut<font color=#990000>.</font><b><font color=#000000>unlock</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2509 <font color=#FF0000>}</font>
2510
|
2511 kumpf 1.7 <b><font color=#0000FF>inline</font></b> Boolean AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>_check_lifetime</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
|
2512 mday 1.4 <font color=#FF0000>{</font>
2513 <b><font color=#0000FF>struct</font></b> timeval now<font color=#990000>;</font>
|
2514 kumpf 1.7
|
2515 mday 1.4 <b><font color=#000000>gettimeofday</font></b><font color=#990000>(</font><font color=#990000>&</font>now<font color=#990000>,</font> NULL<font color=#990000>)</font><font color=#990000>;</font>
2516 <b><font color=#0000FF>if</font></b><font color=#990000>(</font><font color=#990000>(</font>_start<font color=#990000>.</font>tv_sec <font color=#990000>+</font> _lifetime<font color=#990000>.</font>tv_sec <font color=#990000>)</font> <font color=#990000>></font><font color=#990000>=</font> now<font color=#990000>.</font>tv_sec<font color=#990000>)</font>
2517 <b><font color=#0000FF>if</font></b><font color=#990000>(</font><font color=#990000>(</font>_start<font color=#990000>.</font>tv_usec <font color=#990000>+</font> _lifetime<font color=#990000>.</font>tv_usec <font color=#990000>)</font> <font color=#990000>></font><font color=#990000>=</font> now<font color=#990000>.</font>tv_usec<font color=#990000>)</font>
2518 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>true</font></b><font color=#990000>;</font>
2519 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>false</font></b><font color=#990000>;</font>
2520 <font color=#FF0000>}</font>
2521
2522 <b><font color=#0000FF>inline</font></b> Boolean AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>_is_child</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2523 <font color=#FF0000>{</font>
2524 <b><font color=#0000FF>if</font></b> <font color=#990000>(</font>_parent <font color=#990000>!</font><font color=#990000>=</font> <font color=#993399>0</font><font color=#990000>)</font>
2525 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>true</font></b><font color=#990000>;</font>
2526 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>false</font></b><font color=#990000>;</font>
2527 <font color=#FF0000>}</font>
2528
2529 <b><font color=#0000FF>inline</font></b> Uint32 AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>_is_parent</font></b><font color=#990000>(</font><font color=#009900>void</font><font color=#990000>)</font>
2530 <font color=#FF0000>{</font>
2531 <b><font color=#0000FF>return</font></b> _children<font color=#990000>.</font><b><font color=#000000>count</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2532 <font color=#FF0000>}</font>
2533
2534 <b><font color=#0000FF>inline</font></b> Boolean AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>_is_my_child</font></b><font color=#990000>(</font><b><font color=#0000FF>const</font></b> AsyncOpNode <font color=#990000>&</font> caller<font color=#990000>)</font> <b><font color=#0000FF>const</font></b>
|
2535 kumpf 1.7 <font color=#FF0000>{</font>
|
2536 mday 1.4 <b><font color=#0000FF>if</font></b> <font color=#990000>(</font> _parent <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>&</font>caller <font color=#990000>)</font>
2537 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>true</font></b><font color=#990000>;</font>
2538 <b><font color=#0000FF>return</font></b> <b><font color=#0000FF>false</font></b><font color=#990000>;</font>
2539 <font color=#FF0000>}</font>
2540
|
2541 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>_make_orphan</font></b><font color=#990000>(</font> AsyncOpNode <font color=#990000>&</font> parent<font color=#990000>)</font>
|
2542 mday 1.4 <font color=#FF0000>{</font>
2543 <b><font color=#0000FF>if</font></b><font color=#990000>(</font> _parent <font color=#990000>=</font><font color=#990000>=</font> <font color=#990000>&</font>parent <font color=#990000>)</font>
2544 <font color=#FF0000>{</font>
2545 _parent <font color=#990000>=</font> NULL<font color=#990000>;</font>
2546 parent<font color=#990000>.</font>_children<font color=#990000>.</font><b><font color=#000000>remove</font></b><font color=#990000>(</font><b><font color=#0000FF>this</font></b><font color=#990000>)</font><font color=#990000>;</font>
2547 <font color=#FF0000>}</font>
2548 <b><font color=#0000FF>else</font></b>
2549 <b><font color=#0000FF>throw</font></b> <b><font color=#000000>Permission</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2550 <font color=#FF0000>}</font>
2551
|
2552 kumpf 1.7 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>_adopt_child</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>child<font color=#990000>)</font>
|
2553 mday 1.4 <font color=#FF0000>{</font>
2554 <b><font color=#0000FF>if</font></b><font color=#990000>(</font>child <font color=#990000>=</font><font color=#990000>=</font> NULL<font color=#990000>)</font>
2555 <b><font color=#0000FF>throw</font></b> <b><font color=#000000>NullPointer</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2556 <b><font color=#0000FF>if</font></b><font color=#990000>(</font><b><font color=#0000FF>true</font></b> <font color=#990000>=</font><font color=#990000>=</font> child<font color=#990000>-</font><font color=#990000>></font><b><font color=#000000>_is_child</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font>
2557 <b><font color=#0000FF>throw</font></b> <b><font color=#000000>Permission</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2558 child<font color=#990000>-</font><font color=#990000>></font>_parent <font color=#990000>=</font> <b><font color=#0000FF>this</font></b><font color=#990000>;</font>
2559 _children<font color=#990000>.</font><b><font color=#000000>insert_last</font></b><font color=#990000>(</font>child<font color=#990000>)</font><font color=#990000>;</font>
2560 <font color=#FF0000>}</font>
|
2561 kumpf 1.7
|
2562 mday 1.4 <b><font color=#0000FF>inline</font></b> <font color=#009900>void</font> AsyncOpNode<font color=#990000>:</font><font color=#990000>:</font><b><font color=#000000>_disown_child</font></b><font color=#990000>(</font>AsyncOpNode <font color=#990000>*</font>child<font color=#990000>)</font>
2563 <font color=#FF0000>{</font>
2564 <b><font color=#0000FF>if</font></b><font color=#990000>(</font>child <font color=#990000>=</font><font color=#990000>=</font> NULL<font color=#990000>)</font>
2565 <b><font color=#0000FF>throw</font></b> <b><font color=#000000>NullPointer</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>;</font>
2566 <b><font color=#0000FF>if</font></b><font color=#990000>(</font> <b><font color=#0000FF>false</font></b> <font color=#990000>=</font><font color=#990000>=</font> child<font color=#990000>-</font><font color=#990000>></font><b><font color=#000000>_is_child</font></b><font color=#990000>(</font><font color=#990000>)</font> <font color=#990000>|</font><font color=#990000>|</font> <b><font color=#0000FF>false</font></b> <font color=#990000>=</font><font color=#990000>=</font> child<font color=#990000>-</font><font color=#990000>></font><b><font color=#000000>_is_my_child</font></b><font color=#990000>(</font> <font color=#990000>*</font><b><font color=#0000FF>this</font></b> <font color=#990000>)</font><font color=#990000>)</font>
2567 <b><font color=#0000FF>throw</font></b> <b><font color=#000000>Permission</font></b><font color=#990000>(</font><b><font color=#000000>pegasus_thread_self</font></b><font color=#990000>(</font><font color=#990000>)</font><font color=#990000>)</font><font color=#990000>;</font>
2568 child<font color=#990000>-</font><font color=#990000>></font><b><font color=#000000>_make_orphan</font></b><font color=#990000>(</font> <font color=#990000>*</font><b><font color=#0000FF>this</font></b> <font color=#990000>)</font><font color=#990000>;</font>
2569 _children<font color=#990000>.</font><b><font color=#000000>remove</font></b><font color=#990000>(</font>child<font color=#990000>)</font><font color=#990000>;</font>
|
2570 kumpf 1.7 <font color=#FF0000>}</font>
|
2571 mday 1.1
|
2572 mday 1.4 PEGASUS_NAMESPACE_END
|
2573 mday 1.1
|
2574 mday 1.4 <b><font color=#000080>#endif</font></b> <i><font color=#9A1900>//Pegasus_AsyncOpNode_h</font></i>
2575 </tt>
|
2576 mday 1.1 </pre>
2577
|
2578 mday 1.4
|
2579 mday 1.1 <hr>
2580 <address><a href="mailto:mdday@us.ibm.com">Michael Day</a></address>
2581 <!-- Created: Tue Feb 5 13:21:55 EST 2002 -->
2582 <!-- hhmts start -->
|
2583 mday 1.4 Last modified: Wed Mar 13 12:26:56 EST 2002
|
2584 mday 1.1 <!-- hhmts end -->
|
2585 martin 1.6 </body></html>
|