Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
remplace -> replace
[simgrid.git] / cruft / doc / tmpl / gras-unused.sgml
1 <!-- ##### SECTION ./tmpl/DataDesc.sgml:Long_Description ##### -->
2 <para>In order to allow GRAS to send data over the network (or simply to
3 dupplicate it in SG), you have to describe the structure of data attached
4 with each message. This mecanism is stolen from NWS message passing
5 interface.</para>
6
7 <para>For each message, you have to declare a structure representing the
8 data to send as payload with the message.</para>
9
10 <refsect2>
11   <title>Sending (or receiving) simple structures</title>
12   <para>Let's imagin you want to declare a <command>STORE_STATE</command>
13   message, which will send some data to the memory server for inclusion in
14   the database. Here is the structure we want to send:</para>
15
16 <literallayout>
17  struct state {
18   char id[STATE_NAME_SIZE];
19   int rec_size;
20   int rec_count;
21   double seq_no;
22   double time_out;
23  };
24 </literallayout>
25
26   <para>And here is the structure description GRAS needs to be able to send
27   this over the network:</para>
28
29 <literallayout>
30  const static DataDescriptor stateDescriptor[] =
31   {SIMPLE_MEMBER(CHAR_TYPE, STATE_NAME_SIZE, offsetof(struct state, id)),
32    SIMPLE_MEMBER(INT_TYPE, 1, offsetof(struct state, rec_size)),
33    SIMPLE_MEMBER(INT_TYPE, 1, offsetof(struct state, rec_count)),
34    SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(struct state, seq_no)),
35    SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(struct state, time_out))};
36 </literallayout>
37
38   <para>Contrary to what one could think when you first see it, it's pretty
39   easy. A structure descriptor is a list of descriptions, describing each
40   field of the structure. For example, for the first field, you say that
41   the base type is <command>CHAR_TYPE</command>, that there is
42   <command>STATE_NAME_SIZE</command> element of this type and that it's
43   position in the structure is computed by <command>offsetof(struct state,
44   id)</command>. This leads to two remarks:</para> 
45
46   <itemizedlist>
47     <listitem>
48       <para>it's impossible to send dynamic sized strings that way. It's a
49       known limitation, but I think we can live with it.</para>
50     </listitem>
51     <listitem>
52       <para>Yes, the <command>offsetof(struct state, id)</command>
53       construction is C ANSI and is portable.</para>
54     </listitem>
55   </itemizedlist>
56 </refsect2>
57
58 <refsect2>
59   <title>Sending (or receiving) complex structure</title>
60   <para>How to send non-flat structures, do you ask? It's not harder. Let's
61   imagin you want to send the following structure:</para>
62
63 <literallayout>
64  typedef struct {
65    unsigned long address;
66    unsigned long port;
67  } CliqueMember;
68
69  typedef struct {
70    char name[MAX_CLIQUE_NAME_SIZE];
71    double whenGenerated;
72    double instance;
73    char skill[MAX_SKILL_SIZE];
74    char options[MAX_OPTIONS_SIZE];
75    double period;
76    double timeOut;
77    CliqueMember members[MAX_MEMBERS];
78    unsigned int count;
79    unsigned int leader;
80  } Clique;
81 </literallayout>
82
83   <para>As you can see, this structure contains an array of another user
84   defined structure. To be able to send <command>struct Clique</command>,
85   you have to describe each structures that way:</para>
86
87 <literallayout>
88  static const DataDescriptor cliqueMemberDescriptor[] =
89    {SIMPLE_MEMBER(UNSIGNED_LONG_TYPE, 1, offsetof(CliqueMember, address)),
90     SIMPLE_MEMBER(UNSIGNED_LONG_TYPE, 1, offsetof(CliqueMember, port))};
91
92  static const DataDescriptor cliqueDescriptor[] =
93    {SIMPLE_MEMBER(CHAR_TYPE, MAX_CLIQUE_NAME_SIZE, offsetof(Clique, name)),
94     SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(Clique, whenGenerated)),
95     SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(Clique, instance)),
96     SIMPLE_MEMBER(CHAR_TYPE, MAX_SKILL_SIZE, offsetof(Clique, skill)),
97     SIMPLE_MEMBER(CHAR_TYPE, MAX_OPTIONS_SIZE, offsetof(Clique, options)),
98     SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(Clique, period)),
99     SIMPLE_MEMBER(DOUBLE_TYPE, 1, offsetof(Clique, timeOut)),
100     {STRUCT_TYPE, MAX_MEMBERS, offsetof(Clique, members),
101      (DataDescriptor *)&amp;cliqueMemberDescriptor, cliqueMemberDescriptorLength,
102      PAD_BYTES(CliqueMember, port, unsigned long, 1)},
103     SIMPLE_MEMBER(UNSIGNED_INT_TYPE, 1, offsetof(Clique, count)),
104     SIMPLE_MEMBER(UNSIGNED_INT_TYPE, 1, offsetof(Clique, leader))};
105 </literallayout>
106
107   <para>So, even if less natural, it is possible to send structures 
108   containing structures with these tools.</para>
109
110   <para>You can see that it's not only impossible to send dynamic-sized
111   strings, it impossible to send dynamic-sized arrays. Here,
112   <command>MAX_MEMBERS</command> is the maximum of members a clique can
113   contain. In NWS, this value is defined to 100.  <warning><para>I'm not
114   sure, but I think that all the 100 values are sent each time, even if
115   there is only 3 non-null members. Yes, that's
116   bad.</para></warning></para>
117
118   <warning><para>The DataDescriptor_t MUST be const. Malloc'ing them and
119   then casting them on argument passing IS NOT OK. This is because we get
120   the number of elements in the array with the sizeof(dd)/sizeof(dd[0]).
121   </para></warning>
122 </refsect2>
123
124
125 <!-- ##### SECTION ./tmpl/DataDesc.sgml:See_Also ##### -->
126 <para>
127
128 </para>
129
130
131 <!-- ##### SECTION ./tmpl/DataDesc.sgml:Short_Description ##### -->
132 Describing the data
133
134
135 <!-- ##### SECTION ./tmpl/DataDesc.sgml:Title ##### -->
136 DataDescriptor API
137
138
139 <!-- ##### SECTION ./tmpl/ErrLog.sgml:Long_Description ##### -->
140 <para>
141
142 </para>
143
144
145 <!-- ##### SECTION ./tmpl/ErrLog.sgml:See_Also ##### -->
146 <para>
147
148 </para>
149
150
151 <!-- ##### SECTION ./tmpl/ErrLog.sgml:Short_Description ##### -->
152
153
154
155 <!-- ##### SECTION ./tmpl/ErrLog.sgml:Title ##### -->
156 ErrLog
157
158
159 <!-- ##### SECTION ./tmpl/Socks.sgml:Long_Description ##### -->
160 <para>
161
162 </para>
163
164
165 <!-- ##### SECTION ./tmpl/Socks.sgml:See_Also ##### -->
166 <para>
167
168 </para>
169
170
171 <!-- ##### SECTION ./tmpl/Socks.sgml:Short_Description ##### -->
172 Handling sockets
173
174
175 <!-- ##### SECTION ./tmpl/Socks.sgml:Title ##### -->
176 Sockets API
177
178
179 <!-- ##### SECTION ./tmpl/comm_callbacks.sgml:Long_Description ##### -->
180 <para>
181
182 </para>
183
184
185 <!-- ##### SECTION ./tmpl/comm_callbacks.sgml:See_Also ##### -->
186 <para>
187
188 </para>
189
190
191 <!-- ##### SECTION ./tmpl/comm_callbacks.sgml:Short_Description ##### -->
192
193
194
195 <!-- ##### SECTION ./tmpl/comm_callbacks.sgml:Title ##### -->
196 comm_callbacks
197
198
199 <!-- ##### SECTION ./tmpl/comm_cb.sgml:Long_Description ##### -->
200 <para>
201
202 </para>
203
204
205 <!-- ##### SECTION ./tmpl/comm_cb.sgml:See_Also ##### -->
206 <para>
207
208 </para>
209
210
211 <!-- ##### SECTION ./tmpl/comm_cb.sgml:Short_Description ##### -->
212
213
214
215 <!-- ##### SECTION ./tmpl/comm_cb.sgml:Title ##### -->
216 comm_cb
217
218
219 <!-- ##### SECTION ./tmpl/comm_datadesc_expert.sgml:Long_Description ##### -->
220 <para>
221
222 </para>
223
224
225 <!-- ##### SECTION ./tmpl/comm_datadesc_expert.sgml:See_Also ##### -->
226 <para>
227
228 </para>
229
230
231 <!-- ##### SECTION ./tmpl/comm_datadesc_expert.sgml:Short_Description ##### -->
232 Advanced ways to describe data (for experts)
233
234
235 <!-- ##### SECTION ./tmpl/comm_datadesc_expert.sgml:Title ##### -->
236 Advanced Data description
237
238
239 <!-- ##### SECTION ./tmpl/comm_dd_cbps.sgml:Long_Description ##### -->
240 <para>
241
242 </para>
243
244
245 <!-- ##### SECTION ./tmpl/comm_dd_cbps.sgml:See_Also ##### -->
246 <para>
247
248 </para>
249
250
251 <!-- ##### SECTION ./tmpl/comm_dd_cbps.sgml:Short_Description ##### -->
252
253
254
255 <!-- ##### SECTION ./tmpl/comm_dd_cbps.sgml:Title ##### -->
256 Data description callbacks persistant state
257
258
259 <!-- ##### SECTION ./tmpl/config.sgml:Long_Description ##### -->
260 <para>
261
262 </para>
263
264
265 <!-- ##### SECTION ./tmpl/config.sgml:See_Also ##### -->
266 <para>
267
268 </para>
269
270
271 <!-- ##### SECTION ./tmpl/config.sgml:Short_Description ##### -->
272
273
274
275 <!-- ##### SECTION ./tmpl/config.sgml:Title ##### -->
276 config
277
278
279 <!-- ##### SECTION ./tmpl/dd_cbps.sgml:Long_Description ##### -->
280 <para>
281
282 </para>
283
284
285 <!-- ##### SECTION ./tmpl/dd_cbps.sgml:See_Also ##### -->
286 <para>
287
288 </para>
289
290
291 <!-- ##### SECTION ./tmpl/dd_cbps.sgml:Short_Description ##### -->
292
293
294
295 <!-- ##### SECTION ./tmpl/dd_cbps.sgml:Title ##### -->
296 Data description callbacks persistant state
297
298
299 <!-- ##### SECTION ./tmpl/dd_internal.sgml:Long_Description ##### -->
300 <para>
301
302 </para>
303
304
305 <!-- ##### SECTION ./tmpl/dd_internal.sgml:See_Also ##### -->
306 <para>
307
308 </para>
309
310
311 <!-- ##### SECTION ./tmpl/dd_internal.sgml:Short_Description ##### -->
312
313
314
315 <!-- ##### SECTION ./tmpl/dd_internal.sgml:Title ##### -->
316 Implementation of data description
317
318
319 <!-- ##### SECTION ./tmpl/dico.sgml:Long_Description ##### -->
320 <para>
321
322 </para>
323
324
325 <!-- ##### SECTION ./tmpl/dico.sgml:See_Also ##### -->
326 <para>
327
328 </para>
329
330
331 <!-- ##### SECTION ./tmpl/dico.sgml:Short_Description ##### -->
332
333
334
335 <!-- ##### SECTION ./tmpl/dico.sgml:Title ##### -->
336 dico
337
338
339 <!-- ##### SECTION ./tmpl/dynar.sgml:Long_Description ##### -->
340 <para>
341 This module provide the quite usual dynamic array facility.
342 </para>
343
344
345 <!-- ##### SECTION ./tmpl/dynar.sgml:See_Also ##### -->
346 <para>
347
348 </para>
349
350
351 <!-- ##### SECTION ./tmpl/dynar.sgml:Short_Description ##### -->
352 Dynamic array
353
354
355 <!-- ##### SECTION ./tmpl/dynar.sgml:Title ##### -->
356 dynar
357
358
359 <!-- ##### SECTION ./tmpl/gras-overview.sgml:Long_Description ##### -->
360     <para>This document introduce the GRAS library (<emphasis>Grid Reality
361     And Simulation</emphasis>, or according to my english dictionary,
362     <emphasis>Generally Recognized As Safe</emphasis> ;).</para>
363     
364     <refsect2>
365       <title>Overview</title>
366       <para>The purpose of the GRAS is to allow the developpement of
367       distributed programs which will work with as few as possible
368       modification both on the SimGrid simulator (SG), and in the Real Life
369       (RL).</para>
370
371       <para>Here are the problems when you want to do so:
372         <itemizedlist>
373           <listitem>
374             <para>Communication in SG is done by passing tasks, while in
375             RL, you have to deal with sockets (or any wrapper to it).</para>
376           </listitem>
377           <listitem><para>In RL, each process should provide a main()
378             function, and it's obviously not the case in SG.</para>
379           </listitem>
380         </itemizedlist>
381       </para>
382     </refsect2>
383     <refsect2>
384       <title>Application class target</title>
385       <para>If you want to run your code both in RL and in SG, you won't be
386       able to use the full set of features offered by any of those two
387       worlds. GRAS tries to provide a suffisent set of features to develop
388       your application, and implement them in both worlds.</para>
389
390       <para>GRAS uses the paradigm of <emphasis>event-driven 
391       programming</emphasis>, which is an extension to the message-passing
392       one. Any process of a typical event-driven application declares
393       callback to incoming events, which can be messages from other
394       processes, timers or others.</para>
395
396       <para>All messages have an header, specifying its type, and attached
397       data, represented as one or several C structures. In order to send
398       the data over the network in RL, a type-description mecanism is
399       provided, and the RL version of GRAS implements CDR
400       functionnalities. That is to say that the data are sent in the native
401       format of the sender host, and converted on the destination host only
402       if needed.</para>
403
404       <para>In order to not reimplement the wheel, GRAS use existing code,
405       and adapt them to make them work together. The SG version naturally
406       use the SimGrid toolkit, while the RL version is based over the
407       communication library used in NWS (note that this library was somehow
408       modified, since the previous version use XDR, ie both the sender and
409       the receiver convert the data from/to a so called network
410       format). That's why some basic knowledge about how NWS work is
411       supposed in this document. But don't worry, you only have to know the
412       basics about NWS, the internals needed to understand the document
413       will be presented when needed.</para>
414     </refsect2>
415
416
417 <!-- ##### SECTION ./tmpl/gras-overview.sgml:See_Also ##### -->
418 <para>
419
420 </para>
421
422
423 <!-- ##### SECTION ./tmpl/gras-overview.sgml:Short_Description ##### -->
424 Overview of the GRAS library
425
426
427 <!-- ##### SECTION ./tmpl/gras-overview.sgml:Title ##### -->
428 Overview
429
430
431 <!-- ##### SECTION ./tmpl/gras.sgml:Long_Description ##### -->
432 <para>
433
434 </para>
435
436
437 <!-- ##### SECTION ./tmpl/gras.sgml:See_Also ##### -->
438 <para>
439
440 </para>
441
442
443 <!-- ##### SECTION ./tmpl/gras.sgml:Short_Description ##### -->
444
445
446
447 <!-- ##### SECTION ./tmpl/gras.sgml:Title ##### -->
448 gras
449
450
451 <!-- ##### SECTION ./tmpl/gras_private.sgml:Long_Description ##### -->
452 <para>
453
454 </para>
455
456
457 <!-- ##### SECTION ./tmpl/gras_private.sgml:See_Also ##### -->
458 <para>
459
460 </para>
461
462
463 <!-- ##### SECTION ./tmpl/gras_private.sgml:Short_Description ##### -->
464
465
466
467 <!-- ##### SECTION ./tmpl/gras_private.sgml:Title ##### -->
468 gras_private
469
470
471 <!-- ##### SECTION ./tmpl/gras_rl.sgml:Long_Description ##### -->
472 <para>
473
474 </para>
475
476
477 <!-- ##### SECTION ./tmpl/gras_rl.sgml:See_Also ##### -->
478 <para>
479
480 </para>
481
482
483 <!-- ##### SECTION ./tmpl/gras_rl.sgml:Short_Description ##### -->
484 Implementation of GRAS suited for real life.
485
486
487 <!-- ##### SECTION ./tmpl/gras_rl.sgml:Title ##### -->
488 RL
489
490
491 <!-- ##### SECTION ./tmpl/gras_sg.sgml:Long_Description ##### -->
492 <para>
493   SimGrid was designed to ease the comparison of algorithms and
494   heuristics. That way, a lot of complicated notion from the system layer
495   were volontary left off. For example, migrating a process from an host to
496   another is as easy as: MSG_process_change_host(process, new_host).
497 </para>
498
499 <para>
500   No need to tell that performing this operation on real platform is really
501   harder. This simplification is a very good thing when you want to rapidly
502   prototype code, but makes things somehow more complicated in GRAS since
503   we want to have a realistic API, since it have to be implemented in
504   reality also.
505 </para>
506
507 <para>
508   The best example of complexity in GRAS_SG induced by simplicity in
509   SimGrid is the sockets handling. There is no "socket" in SG, but only
510   m_channel_t. In contrary to sockets from RL, no special treatment is
511   needed for a process before writing or reading on/from a channel. So, a
512   given channel can be pooled by more than one process. Likewise, you can
513   send data to a channel that nobody is actually listening to.
514 </para>
515
516 <para>
517   The SG implementation of GRAS repport as an error the fact that nobody is
518   listening to the socket when trying to open a socket, or send stuff using
519   a previously openned socket. That way, the SG version can be used to
520   debug all syncronization issues. For that, we store mainly the PID of
521   both the sender and the receiver in the socket structure, and then
522   resolve PID->process at the lastest moment. This search is a bit
523   expensive, but as long as there is no real garbage collection in SG, with
524   the information "dead process" within the structure, it's the only
525   solution to make sure that we won't dereference pointers to an old freed
526   structure when the process on the other side of the structure did finish
527   since the creation of the socket.
528 </para>
529
530 <para>
531   As said in the overview, the processes can declare to hear on several
532   sockets, but all incoming messages are handled by the same loop. So, we
533   can use only one channel per process, and use a table on each host to
534   determine to which process a message should be delivered depending on the
535   socket number provided by the sender.
536 </para>
537
538
539 <!-- ##### SECTION ./tmpl/gras_sg.sgml:See_Also ##### -->
540 <para>
541 RL, the implementation suited for real life.
542 </para>
543
544 <!--
545 Local variables:
546 sgml-parent-document:\.\./gras-docs\.sgml
547 sgml-omittag:t
548 sgml-shorttag:t
549 sgml-namecase-general:t
550 sgml-general-insert-case:lower
551 sgml-minimize-attributes:nil
552 sgml-always-quote-attributes:t
553 sgml-indent-step:2
554 sgml-indent-data:nil
555 sgml-exposed-tags:nil
556 sgml-local-catalogs:nil
557 sgml-local-ecat-files:nil
558 End:
559 -->
560
561
562 <!-- ##### SECTION ./tmpl/gras_sg.sgml:Short_Description ##### -->
563 Implementation of GRAS on top of the simulator.
564
565
566 <!-- ##### SECTION ./tmpl/gras_sg.sgml:Title ##### -->
567 SG
568
569
570 <!-- ##### SECTION ./tmpl/nws_comm.sgml:Long_Description ##### -->
571 <para>
572
573 </para>
574
575
576 <!-- ##### SECTION ./tmpl/nws_comm.sgml:See_Also ##### -->
577 <para>
578
579 </para>
580
581
582 <!-- ##### SECTION ./tmpl/nws_comm.sgml:Short_Description ##### -->
583
584
585
586 <!-- ##### SECTION ./tmpl/nws_comm.sgml:Title ##### -->
587 nws_comm
588
589
590 <!-- ##### SECTION ./tmpl/trp_socks.sgml:Long_Description ##### -->
591 <para>
592
593 </para>
594
595
596 <!-- ##### SECTION ./tmpl/trp_socks.sgml:See_Also ##### -->
597 <para>
598
599 </para>
600
601
602 <!-- ##### SECTION ./tmpl/trp_socks.sgml:Short_Description ##### -->
603
604
605
606 <!-- ##### SECTION ./tmpl/trp_socks.sgml:Title ##### -->
607 Sockets
608
609
610 <!-- ##### MACRO BEGIN_DECL ##### -->
611 <para>
612
613 </para>
614
615
616 <!-- ##### MACRO CCRITICAL0 ##### -->
617 <para>
618
619 </para>
620
621 @c: 
622 @f: 
623
624 <!-- ##### MACRO CCRITICAL1 ##### -->
625 <para>
626
627 </para>
628
629 @c: 
630 @f: 
631 @a1: 
632
633 <!-- ##### MACRO CCRITICAL2 ##### -->
634 <para>
635
636 </para>
637
638 @c: 
639 @f: 
640 @a1: 
641 @a2: 
642
643 <!-- ##### MACRO CCRITICAL3 ##### -->
644 <para>
645
646 </para>
647
648 @c: 
649 @f: 
650 @a1: 
651 @a2: 
652 @a3: 
653
654 <!-- ##### MACRO CCRITICAL4 ##### -->
655 <para>
656
657 </para>
658
659 @c: 
660 @f: 
661 @a1: 
662 @a2: 
663 @a3: 
664 @a4: 
665
666 <!-- ##### MACRO CCRITICAL5 ##### -->
667 <para>
668
669 </para>
670
671 @c: 
672 @f: 
673 @a1: 
674 @a2: 
675 @a3: 
676 @a4: 
677 @a5: 
678
679 <!-- ##### MACRO CCRITICAL6 ##### -->
680 <para>
681
682 </para>
683
684 @c: 
685 @f: 
686 @a1: 
687 @a2: 
688 @a3: 
689 @a4: 
690 @a5: 
691 @a6: 
692
693 <!-- ##### MACRO CDEBUG0 ##### -->
694 <para>
695
696 </para>
697
698 @c: 
699 @f: 
700
701 <!-- ##### MACRO CDEBUG1 ##### -->
702 <para>
703
704 </para>
705
706 @c: 
707 @f: 
708 @a1: 
709
710 <!-- ##### MACRO CDEBUG2 ##### -->
711 <para>
712
713 </para>
714
715 @c: 
716 @f: 
717 @a1: 
718 @a2: 
719
720 <!-- ##### MACRO CDEBUG3 ##### -->
721 <para>
722
723 </para>
724
725 @c: 
726 @f: 
727 @a1: 
728 @a2: 
729 @a3: 
730
731 <!-- ##### MACRO CDEBUG4 ##### -->
732 <para>
733
734 </para>
735
736 @c: 
737 @f: 
738 @a1: 
739 @a2: 
740 @a3: 
741 @a4: 
742
743 <!-- ##### MACRO CDEBUG5 ##### -->
744 <para>
745
746 </para>
747
748 @c: 
749 @f: 
750 @a1: 
751 @a2: 
752 @a3: 
753 @a4: 
754 @a5: 
755
756 <!-- ##### MACRO CDEBUG6 ##### -->
757 <para>
758
759 </para>
760
761 @c: 
762 @f: 
763 @a1: 
764 @a2: 
765 @a3: 
766 @a4: 
767 @a5: 
768 @a6: 
769
770 <!-- ##### MACRO CERROR0 ##### -->
771 <para>
772
773 </para>
774
775 @c: 
776 @f: 
777
778 <!-- ##### MACRO CERROR1 ##### -->
779 <para>
780
781 </para>
782
783 @c: 
784 @f: 
785 @a1: 
786
787 <!-- ##### MACRO CERROR2 ##### -->
788 <para>
789
790 </para>
791
792 @c: 
793 @f: 
794 @a1: 
795 @a2: 
796
797 <!-- ##### MACRO CERROR3 ##### -->
798 <para>
799
800 </para>
801
802 @c: 
803 @f: 
804 @a1: 
805 @a2: 
806 @a3: 
807
808 <!-- ##### MACRO CERROR4 ##### -->
809 <para>
810
811 </para>
812
813 @c: 
814 @f: 
815 @a1: 
816 @a2: 
817 @a3: 
818 @a4: 
819
820 <!-- ##### MACRO CERROR5 ##### -->
821 <para>
822
823 </para>
824
825 @c: 
826 @f: 
827 @a1: 
828 @a2: 
829 @a3: 
830 @a4: 
831 @a5: 
832
833 <!-- ##### MACRO CERROR6 ##### -->
834 <para>
835
836 </para>
837
838 @c: 
839 @f: 
840 @a1: 
841 @a2: 
842 @a3: 
843 @a4: 
844 @a5: 
845 @a6: 
846
847 <!-- ##### MACRO CINFO0 ##### -->
848 <para>
849
850 </para>
851
852 @c: 
853 @f: 
854
855 <!-- ##### MACRO CINFO1 ##### -->
856 <para>
857
858 </para>
859
860 @c: 
861 @f: 
862 @a1: 
863
864 <!-- ##### MACRO CINFO2 ##### -->
865 <para>
866
867 </para>
868
869 @c: 
870 @f: 
871 @a1: 
872 @a2: 
873
874 <!-- ##### MACRO CINFO3 ##### -->
875 <para>
876
877 </para>
878
879 @c: 
880 @f: 
881 @a1: 
882 @a2: 
883 @a3: 
884
885 <!-- ##### MACRO CINFO4 ##### -->
886 <para>
887
888 </para>
889
890 @c: 
891 @f: 
892 @a1: 
893 @a2: 
894 @a3: 
895 @a4: 
896
897 <!-- ##### MACRO CINFO5 ##### -->
898 <para>
899
900 </para>
901
902 @c: 
903 @f: 
904 @a1: 
905 @a2: 
906 @a3: 
907 @a4: 
908 @a5: 
909
910 <!-- ##### MACRO CINFO6 ##### -->
911 <para>
912
913 </para>
914
915 @c: 
916 @f: 
917 @a1: 
918 @a2: 
919 @a3: 
920 @a4: 
921 @a5: 
922 @a6: 
923
924 <!-- ##### MACRO CLOG0 ##### -->
925 <para>
926
927 </para>
928
929 @c: 
930 @p: 
931 @f: 
932
933 <!-- ##### MACRO CLOG1 ##### -->
934 <para>
935
936 </para>
937
938 @c: 
939 @p: 
940 @f: 
941 @a1: 
942
943 <!-- ##### MACRO CLOG2 ##### -->
944 <para>
945
946 </para>
947
948 @c: 
949 @p: 
950 @f: 
951 @a1: 
952 @a2: 
953
954 <!-- ##### MACRO CLOG3 ##### -->
955 <para>
956
957 </para>
958
959 @c: 
960 @p: 
961 @f: 
962 @a1: 
963 @a2: 
964 @a3: 
965
966 <!-- ##### MACRO CLOG4 ##### -->
967 <para>
968
969 </para>
970
971 @c: 
972 @p: 
973 @f: 
974 @a1: 
975 @a2: 
976 @a3: 
977 @a4: 
978
979 <!-- ##### MACRO CLOG5 ##### -->
980 <para>
981
982 </para>
983
984 @c: 
985 @p: 
986 @f: 
987 @a1: 
988 @a2: 
989 @a3: 
990 @a4: 
991 @a5: 
992
993 <!-- ##### MACRO CLOG6 ##### -->
994 <para>
995
996 </para>
997
998 @c: 
999 @p: 
1000 @f: 
1001 @a1: 
1002 @a2: 
1003 @a3: 
1004 @a4: 
1005 @a5: 
1006 @a6: 
1007
1008 <!-- ##### MACRO CRITICAL0 ##### -->
1009 <para>
1010
1011 </para>
1012
1013 @f: 
1014
1015 <!-- ##### MACRO CRITICAL1 ##### -->
1016 <para>
1017
1018 </para>
1019
1020 @f: 
1021 @a1: 
1022
1023 <!-- ##### MACRO CRITICAL2 ##### -->
1024 <para>
1025
1026 </para>
1027
1028 @f: 
1029 @a1: 
1030 @a2: 
1031
1032 <!-- ##### MACRO CRITICAL3 ##### -->
1033 <para>
1034
1035 </para>
1036
1037 @f: 
1038 @a1: 
1039 @a2: 
1040 @a3: 
1041
1042 <!-- ##### MACRO CRITICAL4 ##### -->
1043 <para>
1044
1045 </para>
1046
1047 @f: 
1048 @a1: 
1049 @a2: 
1050 @a3: 
1051 @a4: 
1052
1053 <!-- ##### MACRO CRITICAL5 ##### -->
1054 <para>
1055
1056 </para>
1057
1058 @f: 
1059 @a1: 
1060 @a2: 
1061 @a3: 
1062 @a4: 
1063 @a5: 
1064
1065 <!-- ##### MACRO CRITICAL6 ##### -->
1066 <para>
1067
1068 </para>
1069
1070 @f: 
1071 @a1: 
1072 @a2: 
1073 @a3: 
1074 @a4: 
1075 @a5: 
1076 @a6: 
1077
1078 <!-- ##### MACRO CVERB6 ##### -->
1079 <para>
1080
1081 </para>
1082
1083 @c: 
1084 @f: 
1085 @a1: 
1086 @a2: 
1087 @a3: 
1088 @a4: 
1089 @a5: 
1090 @a6: 
1091
1092 <!-- ##### MACRO CWARN6 ##### -->
1093 <para>
1094
1095 </para>
1096
1097 @c: 
1098 @f: 
1099 @a1: 
1100 @a2: 
1101 @a3: 
1102 @a4: 
1103 @a5: 
1104 @a6: 
1105
1106 <!-- ##### MACRO CWARNING6 ##### -->
1107 <para>
1108
1109 </para>
1110
1111 @c: 
1112 @f: 
1113 @a1: 
1114 @a2: 
1115 @a3: 
1116 @a4: 
1117 @a5: 
1118 @a6: 
1119
1120 <!-- ##### FUNCTION CallAddr ##### -->
1121 <para>
1122
1123 </para>
1124
1125 @addr: 
1126 @Param2: 
1127 @sock: 
1128 @timeOut: 
1129 @Returns: 
1130
1131 <!-- ##### FUNCTION CloseSocket ##### -->
1132 <para>
1133
1134 </para>
1135
1136 @sock: 
1137 @waitForPeer: 
1138 @Returns: 
1139
1140 <!-- ##### FUNCTION ConvertData ##### -->
1141 <para>
1142
1143 </para>
1144
1145 @destination: 
1146 @source: 
1147 @description: 
1148 @length: 
1149 @sourceFormat: 
1150
1151 <!-- ##### FUNCTION CreateLocalChild ##### -->
1152 <para>
1153
1154 </para>
1155
1156 @pid: 
1157 @parentToChild: 
1158 @childToParent: 
1159 @Returns: 
1160
1161 <!-- ##### MACRO DEBUG6 ##### -->
1162 <para>
1163
1164 </para>
1165
1166 @f: 
1167 @a1: 
1168 @a2: 
1169 @a3: 
1170 @a4: 
1171 @a5: 
1172 @a6: 
1173
1174 <!-- ##### FUNCTION DROP_SOCKET ##### -->
1175 <para>
1176
1177 </para>
1178
1179 @sock: 
1180 @Returns: 
1181
1182 <!-- ##### FUNCTION DataSize ##### -->
1183 <para>
1184
1185 </para>
1186
1187 @description: 
1188 @length: 
1189 @format: 
1190 @Returns: 
1191
1192 <!-- ##### ENUM DataTypes ##### -->
1193 <para>
1194
1195 </para>
1196
1197 @CHAR_TYPE: 
1198 @DOUBLE_TYPE: 
1199 @FLOAT_TYPE: 
1200 @INT_TYPE: 
1201 @LONG_TYPE: 
1202 @SHORT_TYPE: 
1203 @UNSIGNED_INT_TYPE: 
1204 @UNSIGNED_LONG_TYPE: 
1205 @UNSIGNED_SHORT_TYPE: 
1206 @STRUCT_TYPE: 
1207 @LAST_TYPE: 
1208
1209 <!-- ##### FUNCTION DifferentFormat ##### -->
1210 <para>
1211
1212 </para>
1213
1214 @whatType: 
1215 @Returns: 
1216
1217 <!-- ##### FUNCTION DifferentOrder ##### -->
1218 <para>
1219
1220 </para>
1221
1222 @Returns: 
1223
1224 <!-- ##### FUNCTION DifferentSize ##### -->
1225 <para>
1226
1227 </para>
1228
1229 @whatType: 
1230 @Returns: 
1231
1232 <!-- ##### MACRO END_DECL ##### -->
1233 <para>
1234
1235 </para>
1236
1237
1238 <!-- ##### MACRO EODD ##### -->
1239 <para>
1240
1241 </para>
1242
1243
1244 <!-- ##### MACRO ERROR6 ##### -->
1245 <para>
1246
1247 </para>
1248
1249 @f: 
1250 @a1: 
1251 @a2: 
1252 @a3: 
1253 @a4: 
1254 @a5: 
1255 @a6: 
1256
1257 <!-- ##### FUNCTION EstablishAnEar ##### -->
1258 <para>
1259
1260 </para>
1261
1262 @Param1: 
1263 @Param2: 
1264 @ear: 
1265 @earPort: 
1266 @Returns: 
1267
1268 <!-- ##### ENUM FormatTypes ##### -->
1269 <para>
1270
1271 </para>
1272
1273 @HOST_FORMAT: 
1274 @NETWORK_FORMAT: 
1275
1276 <!-- ##### MACRO GRAS_DEFINE_TYPE ##### -->
1277 <para>
1278
1279 </para>
1280
1281 @name: 
1282 @def: 
1283
1284 <!-- ##### MACRO GRAS_LOG_DEFAULT_CATEGORY ##### -->
1285 <para>
1286
1287 </para>
1288
1289 @cname: 
1290
1291 <!-- ##### MACRO GRAS_LOG_EXTERNAL_CATEGORY ##### -->
1292 <para>
1293
1294 </para>
1295
1296 @cname: 
1297
1298 <!-- ##### MACRO GRAS_LOG_ISENABLED ##### -->
1299 <para>
1300
1301 </para>
1302
1303 @catName: 
1304 @priority: 
1305
1306 <!-- ##### MACRO GRAS_LOG_MAYDAY ##### -->
1307 <para>
1308
1309 </para>
1310
1311
1312 <!-- ##### MACRO GRAS_LOG_NEW_CATEGORY ##### -->
1313 <para>
1314
1315 </para>
1316
1317 @catName: 
1318
1319 <!-- ##### MACRO GRAS_LOG_NEW_DEFAULT_CATEGORY ##### -->
1320 <para>
1321
1322 </para>
1323
1324 @cname: 
1325
1326 <!-- ##### MACRO GRAS_LOG_NEW_DEFAULT_SUBCATEGORY ##### -->
1327 <para>
1328
1329 </para>
1330
1331 @cname: 
1332 @parent: 
1333
1334 <!-- ##### MACRO GRAS_LOG_NEW_SUBCATEGORY ##### -->
1335 <para>
1336
1337 </para>
1338
1339 @catName: 
1340 @parent: 
1341
1342 <!-- ##### MACRO GRAS_LOG_ROOT_CAT ##### -->
1343 <para>
1344
1345 </para>
1346
1347
1348 <!-- ##### MACRO GRAS_LOG_STATIC_THRESHOLD ##### -->
1349 <para>
1350
1351 </para>
1352
1353
1354 <!-- ##### MACRO HAVE_DLFCN_H ##### -->
1355 <para>
1356
1357 </para>
1358
1359
1360 <!-- ##### MACRO HAVE_INTTYPES_H ##### -->
1361 <para>
1362
1363 </para>
1364
1365
1366 <!-- ##### MACRO HAVE_LIBPTHREAD ##### -->
1367 <para>
1368
1369 </para>
1370
1371
1372 <!-- ##### MACRO HAVE_MEMORY_H ##### -->
1373 <para>
1374
1375 </para>
1376
1377
1378 <!-- ##### MACRO HAVE_STDINT_H ##### -->
1379 <para>
1380
1381 </para>
1382
1383
1384 <!-- ##### MACRO HAVE_STDLIB_H ##### -->
1385 <para>
1386
1387 </para>
1388
1389
1390 <!-- ##### MACRO HAVE_STRINGS_H ##### -->
1391 <para>
1392
1393 </para>
1394
1395
1396 <!-- ##### MACRO HAVE_STRING_H ##### -->
1397 <para>
1398
1399 </para>
1400
1401
1402 <!-- ##### MACRO HAVE_SYS_STAT_H ##### -->
1403 <para>
1404
1405 </para>
1406
1407
1408 <!-- ##### MACRO HAVE_SYS_TYPES_H ##### -->
1409 <para>
1410
1411 </para>
1412
1413
1414 <!-- ##### MACRO HAVE_UNISTD_H ##### -->
1415 <para>
1416
1417 </para>
1418
1419
1420 <!-- ##### FUNCTION HomogenousConvertData ##### -->
1421 <para>
1422
1423 </para>
1424
1425 @destination: 
1426 @source: 
1427 @whatType: 
1428 @repetitions: 
1429 @sourceFormat: 
1430
1431 <!-- ##### FUNCTION HomogenousDataSize ##### -->
1432 <para>
1433
1434 </para>
1435
1436 @whatType: 
1437 @repetitions: 
1438 @format: 
1439 @Returns: 
1440
1441 <!-- ##### MACRO INFO6 ##### -->
1442 <para>
1443
1444 </para>
1445
1446 @f: 
1447 @a1: 
1448 @a2: 
1449 @a3: 
1450 @a4: 
1451 @a5: 
1452 @a6: 
1453
1454 <!-- ##### TYPEDEF IPAddress ##### -->
1455 <para>
1456
1457 </para>
1458
1459
1460 <!-- ##### FUNCTION IPAddressImage ##### -->
1461 <para>
1462
1463 </para>
1464
1465 @addr: 
1466 @Returns: 
1467
1468 <!-- ##### FUNCTION IPAddressImage_r ##### -->
1469 <para>
1470
1471 </para>
1472
1473 @addr: 
1474 @Returns: 
1475
1476 <!-- ##### FUNCTION IPAddressMachine ##### -->
1477 <para>
1478
1479 </para>
1480
1481 @addr: 
1482 @Returns: 
1483
1484 <!-- ##### FUNCTION IPAddressMachine_r ##### -->
1485 <para>
1486
1487 </para>
1488
1489 @addr: 
1490 @Returns: 
1491
1492 <!-- ##### MACRO IPAddressValue ##### -->
1493 <para>
1494
1495 </para>
1496
1497 @machineOrAddress: 
1498 @address: 
1499
1500 <!-- ##### FUNCTION IPAddressValues ##### -->
1501 <para>
1502
1503 </para>
1504
1505 @machineOrAddress: 
1506 @addressList: 
1507 @atMost: 
1508 @Returns: 
1509
1510 <!-- ##### FUNCTION IncomingRequest ##### -->
1511 <para>
1512
1513 </para>
1514
1515 @timeOut: 
1516 @sd: 
1517 @ldap: 
1518 @Returns: 
1519
1520 <!-- ##### FUNCTION IsOkay ##### -->
1521 <para>
1522
1523 </para>
1524
1525 @sd: 
1526 @Returns: 
1527
1528 <!-- ##### FUNCTION IsPipe ##### -->
1529 <para>
1530
1531 </para>
1532
1533 @sd: 
1534 @Returns: 
1535
1536 <!-- ##### MACRO IsValidIP ##### -->
1537 <para>
1538
1539 </para>
1540
1541 @machineOrAddress: 
1542
1543 <!-- ##### MACRO LOG6 ##### -->
1544 <para>
1545
1546 </para>
1547
1548 @p: 
1549 @f: 
1550 @a1: 
1551 @a2: 
1552 @a3: 
1553 @a4: 
1554 @a5: 
1555 @a6: 
1556
1557 <!-- ##### FUNCTION MyMachineName ##### -->
1558 <para>
1559
1560 </para>
1561
1562 @Returns: 
1563
1564 <!-- ##### MACRO NO_SOCKET ##### -->
1565 <para>
1566
1567 </para>
1568
1569
1570 <!-- ##### FUNCTION NotifyOnDisconnection ##### -->
1571 <para>
1572
1573 </para>
1574
1575 @notifyFn: 
1576
1577 <!-- ##### FUNCTION OpenClientSocket ##### -->
1578 <para>
1579
1580 </para>
1581
1582 @addr: 
1583 @Param2: 
1584 @sock: 
1585 @Returns: 
1586
1587 <!-- ##### FUNCTION OpenServerSocket ##### -->
1588 <para>
1589
1590 </para>
1591
1592 @Param1: 
1593 @Param2: 
1594 @ear: 
1595 @earPort: 
1596 @Returns: 
1597
1598 <!-- ##### MACRO PACKAGE ##### -->
1599 <para>
1600
1601 </para>
1602
1603
1604 <!-- ##### MACRO PACKAGE_BUGREPORT ##### -->
1605 <para>
1606
1607 </para>
1608
1609
1610 <!-- ##### MACRO PACKAGE_NAME ##### -->
1611 <para>
1612
1613 </para>
1614
1615
1616 <!-- ##### MACRO PACKAGE_STRING ##### -->
1617 <para>
1618
1619 </para>
1620
1621
1622 <!-- ##### MACRO PACKAGE_TARNAME ##### -->
1623 <para>
1624
1625 </para>
1626
1627
1628 <!-- ##### MACRO PACKAGE_VERSION ##### -->
1629 <para>
1630
1631 </para>
1632
1633
1634 <!-- ##### MACRO PAD_BYTES ##### -->
1635 <para>
1636
1637 </para>
1638
1639 @structType: 
1640 @lastMember: 
1641 @memberType: 
1642 @repetitions: 
1643
1644 <!-- ##### FUNCTION PassSocket ##### -->
1645 <para>
1646
1647 </para>
1648
1649 @sock: 
1650 @child: 
1651 @Returns: 
1652
1653 <!-- ##### FUNCTION Peer ##### -->
1654 <para>
1655
1656 </para>
1657
1658 @sd: 
1659 @Returns: 
1660
1661 <!-- ##### FUNCTION PeerName ##### -->
1662 <para>
1663
1664 </para>
1665
1666 @sd: 
1667 @Returns: 
1668
1669 <!-- ##### FUNCTION PeerName_r ##### -->
1670 <para>
1671
1672 </para>
1673
1674 @sd: 
1675 @Returns: 
1676
1677 <!-- ##### FUNCTION ReverseData ##### -->
1678 <para>
1679
1680 </para>
1681
1682 @destination: 
1683 @source: 
1684 @whatType: 
1685 @repetitions: 
1686 @format: 
1687
1688 <!-- ##### MACRO SIMPLE_DATA ##### -->
1689 <para>
1690
1691 </para>
1692
1693 @type: 
1694 @repetitions: 
1695
1696 <!-- ##### MACRO SIMPLE_MEMBER ##### -->
1697 <para>
1698
1699 </para>
1700
1701 @type: 
1702 @repetitions: 
1703 @offset: 
1704
1705 <!-- ##### MACRO SIMPLE_TYPE_COUNT ##### -->
1706 <para>
1707
1708 </para>
1709
1710
1711 <!-- ##### MACRO STDC_HEADERS ##### -->
1712 <para>
1713
1714 </para>
1715
1716
1717 <!-- ##### TYPEDEF Socket ##### -->
1718 <para>
1719
1720 </para>
1721
1722
1723 <!-- ##### FUNCTION SocketFailure ##### -->
1724 <para>
1725
1726 </para>
1727
1728 @sig: 
1729
1730 <!-- ##### USER_FUNCTION SocketFunction ##### -->
1731 <para>
1732
1733 </para>
1734
1735 @Param1: 
1736
1737 <!-- ##### FUNCTION SocketInUse ##### -->
1738 <para>
1739
1740 </para>
1741
1742 @sd: 
1743 @Returns: 
1744
1745 <!-- ##### FUNCTION SocketIsAvailable ##### -->
1746 <para>
1747
1748 </para>
1749
1750 @sd: 
1751 @Returns: 
1752
1753 <!-- ##### MACRO VERB6 ##### -->
1754 <para>
1755
1756 </para>
1757
1758 @f: 
1759 @a1: 
1760 @a2: 
1761 @a3: 
1762 @a4: 
1763 @a5: 
1764 @a6: 
1765
1766 <!-- ##### MACRO VERSION ##### -->
1767 <para>
1768
1769 </para>
1770
1771
1772 <!-- ##### MACRO WARN6 ##### -->
1773 <para>
1774
1775 </para>
1776
1777 @f: 
1778 @a1: 
1779 @a2: 
1780 @a3: 
1781 @a4: 
1782 @a5: 
1783 @a6: 
1784
1785 <!-- ##### MACRO WARNING6 ##### -->
1786 <para>
1787
1788 </para>
1789
1790 @f: 
1791 @a1: 
1792 @a2: 
1793 @a3: 
1794 @a4: 
1795 @a5: 
1796 @a6: 
1797
1798 <!-- ##### USER_FUNCTION grasCallbackFunction ##### -->
1799 <para>
1800
1801 </para>
1802
1803 @sd: 
1804 @msgType: 
1805 @vdata: 
1806
1807 <!-- ##### FUNCTION grasCloseSocket ##### -->
1808 <para>
1809
1810 </para>
1811
1812 @sock: 
1813 @Returns: 
1814
1815 <!-- ##### FUNCTION grasDataDescCmp ##### -->
1816 <para>
1817
1818 </para>
1819
1820 @dd1: 
1821 @c1: 
1822 @dd2: 
1823 @c2: 
1824 @Returns: 
1825 @description: 
1826
1827 <!-- ##### FUNCTION grasDataDescCount ##### -->
1828 <para>
1829
1830 </para>
1831
1832 @description: 
1833 @Returns: 
1834
1835 <!-- ##### FUNCTION grasDataRecv ##### -->
1836 <para>
1837
1838 </para>
1839
1840 @sd: 
1841 @data: 
1842 @description: 
1843 @description_length: 
1844 @repetition: 
1845 @Returns: 
1846
1847 <!-- ##### FUNCTION grasDataSend ##### -->
1848 <para>
1849
1850 </para>
1851
1852 @sd: 
1853 @data: 
1854 @description: 
1855 @description_length: 
1856 @repetition: 
1857 @Returns: 
1858
1859 <!-- ##### FUNCTION grasDataSize ##### -->
1860 <para>
1861
1862 </para>
1863
1864 @description: 
1865 @ft: 
1866 @Returns: 
1867
1868 <!-- ##### ENUM grasError_t ##### -->
1869 <para>
1870
1871 </para>
1872
1873 @no_error: 
1874 @malloc_error: 
1875 @mismatch_error: 
1876 @sanity_error: 
1877 @system_error: 
1878 @network_error: 
1879 @timeout_error: 
1880 @thread_error: 
1881 @unknown_error: 
1882
1883 <!-- ##### FUNCTION grasLock ##### -->
1884 <para>
1885
1886 </para>
1887
1888 @Returns: 
1889
1890 <!-- ##### TYPEDEF grasMessageType_t ##### -->
1891 <para>
1892
1893 </para>
1894
1895
1896 <!-- ##### FUNCTION grasMsgDiscard ##### -->
1897 <para>
1898
1899 </para>
1900
1901 @sd: 
1902 @size: 
1903
1904 <!-- ##### FUNCTION grasMsgEntryGet ##### -->
1905 <para>
1906
1907 </para>
1908
1909 @id: 
1910 @Returns: 
1911
1912 <!-- ##### TYPEDEF grasMsgEntry_t ##### -->
1913 <para>
1914
1915 </para>
1916
1917
1918 <!-- ##### FUNCTION grasMsgFree ##### -->
1919 <para>
1920
1921 </para>
1922
1923 @msg: 
1924
1925 <!-- ##### FUNCTION grasMsgHandle ##### -->
1926 <para>
1927
1928 </para>
1929
1930 @timeOut: 
1931
1932 <!-- ##### FUNCTION grasMsgHeaderNew ##### -->
1933 <para>
1934
1935 </para>
1936
1937 @msgId: 
1938 @dataSize: 
1939 @seqCount: 
1940 @Returns: 
1941
1942 <!-- ##### FUNCTION grasMsgNew ##### -->
1943 <para>
1944
1945 </para>
1946
1947 @msgId: 
1948 @free_data_on_free: 
1949 @seqCount: 
1950 @Varargs: 
1951 @Returns: 
1952
1953 <!-- ##### FUNCTION grasMsgRecv ##### -->
1954 <para>
1955
1956 </para>
1957
1958 @msg: 
1959 @timeout: 
1960 @Returns: 
1961 @sd: 
1962
1963 <!-- ##### FUNCTION grasMsgRegister ##### -->
1964 <para>
1965
1966 </para>
1967
1968 @message: 
1969 @name: 
1970 @sequence_count: 
1971 @Varargs: 
1972 @Returns: 
1973
1974 <!-- ##### FUNCTION grasMsgSend ##### -->
1975 <para>
1976
1977 </para>
1978
1979 @sd: 
1980 @message: 
1981 @sequence_count: 
1982 @Varargs: 
1983 @Returns: 
1984
1985 <!-- ##### FUNCTION grasMsgWait ##### -->
1986 <para>
1987
1988 </para>
1989
1990 @sd: 
1991 @timeout: 
1992 @message: 
1993 @sequence_count: 
1994 @Varargs: 
1995 @Returns: 
1996
1997 <!-- ##### FUNCTION grasMyMachineName ##### -->
1998 <para>
1999
2000 </para>
2001
2002 @Returns: 
2003
2004 <!-- ##### FUNCTION grasOpenClientSocket ##### -->
2005 <para>
2006
2007 </para>
2008
2009 @host: 
2010 @Param2: 
2011 @sock: 
2012 @Returns: 
2013
2014 <!-- ##### FUNCTION grasOpenServerSocket ##### -->
2015 <para>
2016
2017 </para>
2018
2019 @Param1: 
2020 @Param2: 
2021 @sock: 
2022 @Returns: 
2023
2024 <!-- ##### MACRO grasPROTOCOL ##### -->
2025 <para>
2026
2027 </para>
2028
2029
2030 <!-- ##### FUNCTION grasPeerGetAddress ##### -->
2031 <para>
2032
2033 </para>
2034
2035 @sd: 
2036 @Returns: 
2037
2038 <!-- ##### FUNCTION grasPeerGetName ##### -->
2039 <para>
2040
2041 </para>
2042
2043 @sd: 
2044 @Returns: 
2045
2046 <!-- ##### FUNCTION grasRecvData ##### -->
2047 <para>
2048
2049 </para>
2050
2051 @sd: 
2052 @data: 
2053 @description: 
2054 @Returns: 
2055
2056 <!-- ##### FUNCTION grasRegisterCallback ##### -->
2057 <para>
2058
2059 </para>
2060
2061 @message: 
2062 @TTL: 
2063 @cb: 
2064
2065 <!-- ##### FUNCTION grasSendData ##### -->
2066 <para>
2067
2068 </para>
2069
2070 @sd: 
2071 @data: 
2072 @description: 
2073 @Returns: 
2074
2075 <!-- ##### FUNCTION grasUnlock ##### -->
2076 <para>
2077
2078 </para>
2079
2080 @Returns: 
2081
2082 <!-- ##### FUNCTION grasUserdataGet ##### -->
2083 <para>
2084
2085 </para>
2086
2087
2088 <!-- ##### MACRO grasUserdataNew ##### -->
2089 <para>
2090
2091 </para>
2092
2093 @type: 
2094
2095 <!-- ##### FUNCTION grasUserdataSet ##### -->
2096 <para>
2097
2098 </para>
2099
2100 @ud: 
2101
2102 <!-- ##### FUNCTION gras_arch_selfid ##### -->
2103 <para>
2104
2105 </para>
2106
2107 @Returns: 
2108
2109 <!-- ##### FUNCTION gras_cb_register ##### -->
2110 <para>
2111
2112 </para>
2113
2114 @msgtype: 
2115 @cb: 
2116 @Returns: 
2117 @message: 
2118 @TTL: 
2119
2120 <!-- ##### USER_FUNCTION gras_cb_t ##### -->
2121 <para>
2122
2123 </para>
2124
2125 @expeditor: 
2126 @payload: 
2127 @Returns: 
2128 @payload_type: 
2129 @payload_data: 
2130 @msg: 
2131
2132 <!-- ##### FUNCTION gras_cb_unregister ##### -->
2133 <para>
2134
2135 </para>
2136
2137 @msgtype: 
2138 @cb: 
2139
2140 <!-- ##### FUNCTION gras_cbps_block_begin ##### -->
2141 <para>
2142
2143 </para>
2144
2145 @ps: 
2146
2147 <!-- ##### FUNCTION gras_cbps_block_end ##### -->
2148 <para>
2149
2150 </para>
2151
2152 @ps: 
2153
2154 <!-- ##### FUNCTION gras_cbps_i_pop ##### -->
2155 <para>
2156
2157 </para>
2158
2159 @ps: 
2160 @Returns: 
2161
2162 <!-- ##### FUNCTION gras_cbps_i_push ##### -->
2163 <para>
2164
2165 </para>
2166
2167 @ps: 
2168 @val: 
2169
2170 <!-- ##### FUNCTION gras_cbps_v_get ##### -->
2171 <para>
2172
2173 </para>
2174
2175 @ps: 
2176 @name: 
2177 @ddt: 
2178
2179 <!-- ##### FUNCTION gras_cbps_v_pop ##### -->
2180 <para>
2181
2182 </para>
2183
2184 @ps: 
2185 @name: 
2186 @ddt: 
2187 @res: 
2188 @Returns: 
2189
2190 <!-- ##### FUNCTION gras_cbps_v_push ##### -->
2191 <para>
2192
2193 </para>
2194
2195 @ps: 
2196 @name: 
2197 @data: 
2198 @ddt: 
2199 @Returns: 
2200
2201 <!-- ##### FUNCTION gras_cbps_v_set ##### -->
2202 <para>
2203
2204 </para>
2205
2206 @ps: 
2207 @name: 
2208 @data: 
2209 @ddt: 
2210
2211 <!-- ##### FUNCTION gras_cfg_check ##### -->
2212 <para>
2213
2214 </para>
2215
2216 @cfg: 
2217 @Returns: 
2218
2219 <!-- ##### FUNCTION gras_cfg_cpy ##### -->
2220 <para>
2221
2222 </para>
2223
2224 @whereto: 
2225 @tocopy: 
2226 @Returns: 
2227
2228 <!-- ##### FUNCTION gras_cfg_dump ##### -->
2229 <para>
2230
2231 </para>
2232
2233 @name: 
2234 @indent: 
2235 @cfg: 
2236
2237 <!-- ##### FUNCTION gras_cfg_empty ##### -->
2238 <para>
2239
2240 </para>
2241
2242 @cfg: 
2243 @name: 
2244 @Returns: 
2245
2246 <!-- ##### FUNCTION gras_cfg_free ##### -->
2247 <para>
2248
2249 </para>
2250
2251 @cfg: 
2252
2253 <!-- ##### FUNCTION gras_cfg_get_double ##### -->
2254 <para>
2255
2256 </para>
2257
2258 @cfg: 
2259 @name: 
2260 @val: 
2261 @Returns: 
2262
2263 <!-- ##### FUNCTION gras_cfg_get_dynar ##### -->
2264 <para>
2265
2266 </para>
2267
2268 @cfg: 
2269 @name: 
2270 @dynar: 
2271 @Returns: 
2272
2273 <!-- ##### FUNCTION gras_cfg_get_host ##### -->
2274 <para>
2275
2276 </para>
2277
2278 @cfg: 
2279 @name: 
2280 @host: 
2281 @port: 
2282 @Returns: 
2283
2284 <!-- ##### FUNCTION gras_cfg_get_int ##### -->
2285 <para>
2286
2287 </para>
2288
2289 @cfg: 
2290 @name: 
2291 @val: 
2292 @Returns: 
2293
2294 <!-- ##### FUNCTION gras_cfg_get_string ##### -->
2295 <para>
2296
2297 </para>
2298
2299 @cfg: 
2300 @name: 
2301 @val: 
2302 @Returns: 
2303
2304 <!-- ##### FUNCTION gras_cfg_new ##### -->
2305 <para>
2306
2307 </para>
2308
2309 @whereto: 
2310 @Returns: 
2311
2312 <!-- ##### FUNCTION gras_cfg_register ##### -->
2313 <para>
2314
2315 </para>
2316
2317 @cfg: 
2318 @name: 
2319 @type: 
2320 @min: 
2321 @max: 
2322 @Returns: 
2323
2324 <!-- ##### FUNCTION gras_cfg_register_str ##### -->
2325 <para>
2326
2327 </para>
2328
2329 @cfg: 
2330 @entry: 
2331 @Returns: 
2332
2333 <!-- ##### FUNCTION gras_cfg_rm_double ##### -->
2334 <para>
2335
2336 </para>
2337
2338 @cfg: 
2339 @name: 
2340 @val: 
2341 @Returns: 
2342
2343 <!-- ##### FUNCTION gras_cfg_rm_host ##### -->
2344 <para>
2345
2346 </para>
2347
2348 @cfg: 
2349 @name: 
2350 @host: 
2351 @port: 
2352 @Returns: 
2353
2354 <!-- ##### FUNCTION gras_cfg_rm_int ##### -->
2355 <para>
2356
2357 </para>
2358
2359 @cfg: 
2360 @name: 
2361 @val: 
2362 @Returns: 
2363
2364 <!-- ##### FUNCTION gras_cfg_rm_string ##### -->
2365 <para>
2366
2367 </para>
2368
2369 @cfg: 
2370 @name: 
2371 @val: 
2372 @Returns: 
2373
2374 <!-- ##### FUNCTION gras_cfg_set ##### -->
2375 <para>
2376
2377 </para>
2378
2379 @cfg: 
2380 @Varargs: 
2381 @Returns: 
2382
2383 <!-- ##### FUNCTION gras_cfg_set_double ##### -->
2384 <para>
2385
2386 </para>
2387
2388 @cfg: 
2389 @name: 
2390 @val: 
2391 @Returns: 
2392
2393 <!-- ##### FUNCTION gras_cfg_set_host ##### -->
2394 <para>
2395
2396 </para>
2397
2398 @cfg: 
2399 @name: 
2400 @host: 
2401 @port: 
2402 @Returns: 
2403
2404 <!-- ##### FUNCTION gras_cfg_set_int ##### -->
2405 <para>
2406
2407 </para>
2408
2409 @cfg: 
2410 @name: 
2411 @val: 
2412 @Returns: 
2413
2414 <!-- ##### FUNCTION gras_cfg_set_parse ##### -->
2415 <para>
2416
2417 </para>
2418
2419 @cfg: 
2420 @options: 
2421 @Returns: 
2422
2423 <!-- ##### FUNCTION gras_cfg_set_string ##### -->
2424 <para>
2425
2426 </para>
2427
2428 @cfg: 
2429 @name: 
2430 @val: 
2431 @Returns: 
2432
2433 <!-- ##### FUNCTION gras_cfg_set_vargs ##### -->
2434 <para>
2435
2436 </para>
2437
2438 @cfg: 
2439 @pa: 
2440 @Returns: 
2441
2442 <!-- ##### FUNCTION gras_datadesc_array_dyn ##### -->
2443 <para>
2444
2445 </para>
2446
2447 @name: 
2448 @element_type: 
2449 @dynamic_size: 
2450 @dst: 
2451 @Returns: 
2452
2453 <!-- ##### FUNCTION gras_datadesc_array_fixed ##### -->
2454 <para>
2455
2456 </para>
2457
2458 @name: 
2459 @element_type: 
2460 @fixed_size: 
2461 @dst: 
2462 @Returns: 
2463
2464 <!-- ##### FUNCTION gras_datadesc_by_name ##### -->
2465 <para>
2466
2467 </para>
2468
2469 @name: 
2470 @Returns: 
2471 @type: 
2472
2473 <!-- ##### MACRO gras_datadesc_by_symbol ##### -->
2474 <para>
2475
2476 </para>
2477
2478 @name: 
2479
2480 <!-- ##### FUNCTION gras_datadesc_cb_recv ##### -->
2481 <para>
2482
2483 </para>
2484
2485 @type: 
2486 @post: 
2487
2488 <!-- ##### FUNCTION gras_datadesc_cb_send ##### -->
2489 <para>
2490
2491 </para>
2492
2493 @type: 
2494 @pre: 
2495
2496 <!-- ##### FUNCTION gras_datadesc_cb_set_post ##### -->
2497 <para>
2498
2499 </para>
2500
2501 @type: 
2502 @post: 
2503
2504 <!-- ##### FUNCTION gras_datadesc_cb_set_pre ##### -->
2505 <para>
2506
2507 </para>
2508
2509 @type: 
2510 @pre: 
2511
2512 <!-- ##### FUNCTION gras_datadesc_cmp ##### -->
2513 <para>
2514
2515 </para>
2516
2517 @d1: 
2518 @d2: 
2519 @Returns: 
2520 @dd1: 
2521 @c1: 
2522 @dd2: 
2523 @c2: 
2524
2525 <!-- ##### FUNCTION gras_datadesc_copy_data ##### -->
2526 <para>
2527
2528 </para>
2529
2530 @dd: 
2531 @c: 
2532 @data: 
2533
2534 <!-- ##### MACRO gras_datadesc_declare_array ##### -->
2535 <para>
2536
2537 </para>
2538
2539 @name: 
2540 @elm_type: 
2541 @size: 
2542 @code: 
2543
2544 <!-- ##### FUNCTION gras_datadesc_declare_array_cb ##### -->
2545 <para>
2546
2547 </para>
2548
2549 @name: 
2550 @element_type: 
2551 @fixed_size: 
2552 @dynamic_size: 
2553 @post: 
2554 @code: 
2555 @Returns: 
2556
2557 <!-- ##### FUNCTION gras_datadesc_declare_array_dyn ##### -->
2558 <para>
2559
2560 </para>
2561
2562 @name: 
2563 @element_type: 
2564 @dynamic_size: 
2565 @dst: 
2566 @Returns: 
2567 @elm_type: 
2568 @code: 
2569
2570 <!-- ##### FUNCTION gras_datadesc_declare_array_fixed ##### -->
2571 <para>
2572
2573 </para>
2574
2575 @name: 
2576 @element_type: 
2577 @fixed_size: 
2578 @dst: 
2579 @Returns: 
2580
2581 <!-- ##### FUNCTION gras_datadesc_declare_ref ##### -->
2582 <para>
2583
2584 </para>
2585
2586 @name: 
2587 @referenced_type: 
2588 @dst: 
2589 @Returns: 
2590 @ref_type: 
2591 @code: 
2592
2593 <!-- ##### FUNCTION gras_datadesc_declare_ref_cb ##### -->
2594 <para>
2595
2596 </para>
2597
2598 @name: 
2599 @referenced_type: 
2600 @discriminant: 
2601 @post: 
2602 @code: 
2603 @Returns: 
2604
2605 <!-- ##### MACRO gras_datadesc_declare_ref_disc ##### -->
2606 <para>
2607
2608 </para>
2609
2610 @name: 
2611 @discriminant: 
2612 @code: 
2613
2614 <!-- ##### FUNCTION gras_datadesc_declare_ref_generic ##### -->
2615 <para>
2616
2617 </para>
2618
2619 @name: 
2620 @discriminant: 
2621 @dst: 
2622 @Returns: 
2623
2624 <!-- ##### FUNCTION gras_datadesc_declare_struct ##### -->
2625 <para>
2626
2627 </para>
2628
2629 @name: 
2630 @dst: 
2631 @Returns: 
2632 @code: 
2633
2634 <!-- ##### MACRO gras_datadesc_declare_struct_add_code ##### -->
2635 <para>
2636
2637 </para>
2638
2639 @struct_code: 
2640 @field_name: 
2641 @field_type_code: 
2642
2643 <!-- ##### FUNCTION gras_datadesc_declare_struct_add_code_cb ##### -->
2644 <para>
2645
2646 </para>
2647
2648 @struct_code: 
2649 @field_name: 
2650 @field_code: 
2651 @pre_cb: 
2652 @post_cb: 
2653 @Returns: 
2654
2655 <!-- ##### MACRO gras_datadesc_declare_struct_add_name ##### -->
2656 <para>
2657
2658 </para>
2659
2660 @struct_code: 
2661 @field_name: 
2662 @field_type_name: 
2663
2664 <!-- ##### FUNCTION gras_datadesc_declare_struct_add_name_cb ##### -->
2665 <para>
2666
2667 </para>
2668
2669 @struct_code: 
2670 @field_name: 
2671 @field_type_name: 
2672 @pre_cb: 
2673 @post_cb: 
2674 @Returns: 
2675
2676 <!-- ##### FUNCTION gras_datadesc_declare_struct_append ##### -->
2677 <para>
2678
2679 </para>
2680
2681 @struct_type: 
2682 @name: 
2683 @field_type: 
2684 @Returns: 
2685
2686 <!-- ##### FUNCTION gras_datadesc_declare_struct_append_name ##### -->
2687 <para>
2688
2689 </para>
2690
2691 @struct_type: 
2692 @name: 
2693 @field_type_name: 
2694 @Returns: 
2695
2696 <!-- ##### FUNCTION gras_datadesc_declare_struct_cb ##### -->
2697 <para>
2698
2699 </para>
2700
2701 @name: 
2702 @pre_cb: 
2703 @post_cb: 
2704 @code: 
2705 @Returns: 
2706
2707 <!-- ##### FUNCTION gras_datadesc_declare_struct_close ##### -->
2708 <para>
2709
2710 </para>
2711
2712 @struct_type: 
2713
2714 <!-- ##### FUNCTION gras_datadesc_declare_union ##### -->
2715 <para>
2716
2717 </para>
2718
2719 @name: 
2720 @selector: 
2721 @dst: 
2722 @Returns: 
2723 @code: 
2724
2725 <!-- ##### MACRO gras_datadesc_declare_union_add_code ##### -->
2726 <para>
2727
2728 </para>
2729
2730 @union_code: 
2731 @field_name: 
2732 @field_type_code: 
2733
2734 <!-- ##### FUNCTION gras_datadesc_declare_union_add_code_cb ##### -->
2735 <para>
2736
2737 </para>
2738
2739 @union_code: 
2740 @field_name: 
2741 @field_code: 
2742 @pre_cb: 
2743 @post_cb: 
2744 @Returns: 
2745
2746 <!-- ##### MACRO gras_datadesc_declare_union_add_name ##### -->
2747 <para>
2748
2749 </para>
2750
2751 @union_code: 
2752 @field_name: 
2753 @field_type_name: 
2754
2755 <!-- ##### FUNCTION gras_datadesc_declare_union_add_name_cb ##### -->
2756 <para>
2757
2758 </para>
2759
2760 @union_code: 
2761 @field_name: 
2762 @field_type_name: 
2763 @pre_cb: 
2764 @post_cb: 
2765 @Returns: 
2766
2767 <!-- ##### FUNCTION gras_datadesc_declare_union_append ##### -->
2768 <para>
2769
2770 </para>
2771
2772 @union_type: 
2773 @name: 
2774 @field_type: 
2775 @Returns: 
2776
2777 <!-- ##### FUNCTION gras_datadesc_declare_union_append_name ##### -->
2778 <para>
2779
2780 </para>
2781
2782 @union_type: 
2783 @name: 
2784 @field_type_name: 
2785 @Returns: 
2786
2787 <!-- ##### FUNCTION gras_datadesc_declare_union_cb ##### -->
2788 <para>
2789
2790 </para>
2791
2792 @name: 
2793 @field_count: 
2794 @post: 
2795 @code: 
2796 @Returns: 
2797
2798 <!-- ##### FUNCTION gras_datadesc_declare_union_close ##### -->
2799 <para>
2800
2801 </para>
2802
2803 @union_type: 
2804
2805 <!-- ##### FUNCTION gras_datadesc_from_nws ##### -->
2806 <para>
2807
2808 </para>
2809
2810 @name: 
2811 @desc: 
2812 @howmany: 
2813 @code: 
2814 @Returns: 
2815 @dst: 
2816
2817 <!-- ##### FUNCTION gras_datadesc_import_nws ##### -->
2818 <para>
2819
2820 </para>
2821
2822 @name: 
2823 @desc: 
2824 @howmany: 
2825 @dst: 
2826 @Returns: 
2827
2828 <!-- ##### FUNCTION gras_datadesc_parse ##### -->
2829 <para>
2830
2831 </para>
2832
2833 @name: 
2834 @Cdefinition: 
2835 @dst: 
2836 @Returns: 
2837 @code: 
2838 @def: 
2839
2840 <!-- ##### FUNCTION gras_datadesc_ref ##### -->
2841 <para>
2842
2843 </para>
2844
2845 @name: 
2846 @referenced_type: 
2847 @dst: 
2848 @Returns: 
2849
2850 <!-- ##### FUNCTION gras_datadesc_ref_generic ##### -->
2851 <para>
2852
2853 </para>
2854
2855 @name: 
2856 @selector: 
2857 @dst: 
2858 @Returns: 
2859 @discriminant: 
2860
2861 <!-- ##### FUNCTION gras_datadesc_ref_pop_arr ##### -->
2862 <para>
2863
2864 </para>
2865
2866 @element_type: 
2867 @dst: 
2868 @Returns: 
2869
2870 <!-- ##### FUNCTION gras_datadesc_struct ##### -->
2871 <para>
2872
2873 </para>
2874
2875 @name: 
2876 @dst: 
2877 @Returns: 
2878
2879 <!-- ##### FUNCTION gras_datadesc_struct_append ##### -->
2880 <para>
2881
2882 </para>
2883
2884 @struct_type: 
2885 @name: 
2886 @field_type: 
2887 @Returns: 
2888
2889 <!-- ##### FUNCTION gras_datadesc_struct_close ##### -->
2890 <para>
2891
2892 </para>
2893
2894 @struct_type: 
2895
2896 <!-- ##### USER_FUNCTION gras_datadesc_type_cb_int_t ##### -->
2897 <para>
2898
2899 </para>
2900
2901 @vars: 
2902 @data: 
2903 @Returns: 
2904 @p_type: 
2905
2906 <!-- ##### USER_FUNCTION gras_datadesc_type_cb_void_t ##### -->
2907 <para>
2908
2909 </para>
2910
2911 @vars: 
2912 @data: 
2913 @p_type: 
2914
2915 <!-- ##### FUNCTION gras_datadesc_union ##### -->
2916 <para>
2917
2918 </para>
2919
2920 @name: 
2921 @selector: 
2922 @dst: 
2923 @Returns: 
2924
2925 <!-- ##### FUNCTION gras_datadesc_union_append ##### -->
2926 <para>
2927
2928 </para>
2929
2930 @union_type: 
2931 @name: 
2932 @field_type: 
2933 @Returns: 
2934
2935 <!-- ##### FUNCTION gras_datadesc_union_close ##### -->
2936 <para>
2937
2938 </para>
2939
2940 @union_type: 
2941
2942 <!-- ##### FUNCTION gras_dd_cbps_block_begin ##### -->
2943 <para>
2944
2945 </para>
2946
2947 @ps: 
2948
2949 <!-- ##### FUNCTION gras_dd_cbps_block_end ##### -->
2950 <para>
2951
2952 </para>
2953
2954 @ps: 
2955
2956 <!-- ##### FUNCTION gras_dd_cbps_get ##### -->
2957 <para>
2958
2959 </para>
2960
2961 @ps: 
2962 @name: 
2963 @ddt: 
2964
2965 <!-- ##### FUNCTION gras_dd_cbps_pop ##### -->
2966 <para>
2967
2968 </para>
2969
2970 @ps: 
2971 @name: 
2972 @ddt: 
2973
2974 <!-- ##### FUNCTION gras_dd_cbps_push ##### -->
2975 <para>
2976
2977 </para>
2978
2979 @ps: 
2980 @name: 
2981 @data: 
2982 @ddt: 
2983
2984 <!-- ##### FUNCTION gras_dd_cbps_set ##### -->
2985 <para>
2986
2987 </para>
2988
2989 @ps: 
2990 @name: 
2991 @data: 
2992 @ddt: 
2993
2994 <!-- ##### FUNCTION gras_ddt_free ##### -->
2995 <para>
2996
2997 </para>
2998
2999 @type: 
3000
3001 <!-- ##### FUNCTION gras_ddt_get_by_code ##### -->
3002 <para>
3003
3004 </para>
3005
3006 @code: 
3007 @type: 
3008 @Returns: 
3009
3010 <!-- ##### FUNCTION gras_ddt_get_by_name ##### -->
3011 <para>
3012
3013 </para>
3014
3015 @name: 
3016 @type: 
3017 @Returns: 
3018
3019 <!-- ##### FUNCTION gras_ddt_new_array ##### -->
3020 <para>
3021
3022 </para>
3023
3024 @name: 
3025 @element_type: 
3026 @fixed_size: 
3027 @dynamic_size: 
3028 @post: 
3029 @dst: 
3030 @Returns: 
3031
3032 <!-- ##### FUNCTION gras_ddt_new_from_nws ##### -->
3033 <para>
3034
3035 </para>
3036
3037 @name: 
3038 @desc: 
3039 @howmany: 
3040 @dst: 
3041 @Returns: 
3042
3043 <!-- ##### FUNCTION gras_ddt_new_ignored ##### -->
3044 <para>
3045
3046 </para>
3047
3048 @name: 
3049 @default_value: 
3050 @free_func: 
3051 @size: 
3052 @alignment: 
3053 @post: 
3054 @dst: 
3055 @Returns: 
3056
3057 <!-- ##### FUNCTION gras_ddt_new_parse ##### -->
3058 <para>
3059
3060 </para>
3061
3062 @name: 
3063 @C_definition: 
3064 @dst: 
3065 @Returns: 
3066
3067 <!-- ##### FUNCTION gras_ddt_new_ref ##### -->
3068 <para>
3069
3070 </para>
3071
3072 @name: 
3073 @referenced_type: 
3074 @discriminant: 
3075 @post: 
3076 @dst: 
3077 @Returns: 
3078
3079 <!-- ##### FUNCTION gras_ddt_new_scalar ##### -->
3080 <para>
3081
3082 </para>
3083
3084 @name: 
3085 @type: 
3086 @Returns: 
3087
3088 <!-- ##### FUNCTION gras_ddt_new_struct ##### -->
3089 <para>
3090
3091 </para>
3092
3093 @name: 
3094 @pre: 
3095 @post: 
3096 @dst: 
3097 @Returns: 
3098
3099 <!-- ##### FUNCTION gras_ddt_new_struct_append ##### -->
3100 <para>
3101
3102 </para>
3103
3104 @struct_type: 
3105 @name: 
3106 @field_type: 
3107 @pre: 
3108 @post: 
3109 @Returns: 
3110
3111 <!-- ##### FUNCTION gras_ddt_new_union ##### -->
3112 <para>
3113
3114 </para>
3115
3116 @name: 
3117 @field_count: 
3118 @post: 
3119 @dst: 
3120 @Returns: 
3121
3122 <!-- ##### FUNCTION gras_ddt_new_union_append ##### -->
3123 <para>
3124
3125 </para>
3126
3127 @union_type: 
3128 @name: 
3129 @field_type: 
3130 @pre: 
3131 @post: 
3132 @Returns: 
3133
3134 <!-- ##### FUNCTION gras_ddt_register ##### -->
3135 <para>
3136
3137 </para>
3138
3139 @type: 
3140 @Returns: 
3141
3142 <!-- ##### FUNCTION gras_dict_cursor_free ##### -->
3143 <para>
3144
3145 </para>
3146
3147 @cursor: 
3148 @Returns: 
3149
3150 <!-- ##### FUNCTION gras_dict_cursor_get_data ##### -->
3151 <para>
3152
3153 </para>
3154
3155 @cursor: 
3156 @data: 
3157 @Returns: 
3158
3159 <!-- ##### FUNCTION gras_dict_cursor_get_key ##### -->
3160 <para>
3161
3162 </para>
3163
3164 @cursor: 
3165 @key: 
3166 @Returns: 
3167
3168 <!-- ##### FUNCTION gras_dict_cursor_new ##### -->
3169 <para>
3170
3171 </para>
3172
3173 @head: 
3174 @cursor: 
3175 @Returns: 
3176
3177 <!-- ##### FUNCTION gras_dict_cursor_next ##### -->
3178 <para>
3179
3180 </para>
3181
3182 @cursor: 
3183 @Returns: 
3184
3185 <!-- ##### FUNCTION gras_dict_cursor_rewind ##### -->
3186 <para>
3187
3188 </para>
3189
3190 @cursor: 
3191 @Returns: 
3192
3193 <!-- ##### FUNCTION gras_dict_dump ##### -->
3194 <para>
3195
3196 </para>
3197
3198 @head: 
3199 @output: 
3200 @Returns: 
3201
3202 <!-- ##### MACRO gras_dict_foreach ##### -->
3203 <para>
3204
3205 </para>
3206
3207 @dict: 
3208 @cursor: 
3209 @key: 
3210 @data: 
3211
3212 <!-- ##### FUNCTION gras_dict_free ##### -->
3213 <para>
3214
3215 </para>
3216
3217 @dict: 
3218 @Returns: 
3219
3220 <!-- ##### FUNCTION gras_dict_get ##### -->
3221 <para>
3222
3223 </para>
3224
3225 @head: 
3226 @key: 
3227 @data: 
3228 @Returns: 
3229
3230 <!-- ##### FUNCTION gras_dict_get_ext ##### -->
3231 <para>
3232
3233 </para>
3234
3235 @head: 
3236 @key: 
3237 @key_len: 
3238 @data: 
3239 @Returns: 
3240
3241 <!-- ##### FUNCTION gras_dict_insert ##### -->
3242 <para>
3243
3244 </para>
3245
3246 @head: 
3247 @key: 
3248 @data: 
3249 @free_ctn: 
3250 @Returns: 
3251
3252 <!-- ##### FUNCTION gras_dict_insert_ext ##### -->
3253 <para>
3254
3255 </para>
3256
3257 @head: 
3258 @key: 
3259 @key_len: 
3260 @data: 
3261 @free_ctn: 
3262 @Returns: 
3263
3264 <!-- ##### FUNCTION gras_dict_new ##### -->
3265 <para>
3266
3267 </para>
3268
3269 @dict: 
3270 @Returns: 
3271
3272 <!-- ##### FUNCTION gras_dict_print ##### -->
3273 <para>
3274
3275 </para>
3276
3277 @data: 
3278
3279 <!-- ##### FUNCTION gras_dict_prints ##### -->
3280 <para>
3281
3282 </para>
3283
3284 @data: 
3285
3286 <!-- ##### FUNCTION gras_dict_remove ##### -->
3287 <para>
3288
3289 </para>
3290
3291 @head: 
3292 @key: 
3293 @Returns: 
3294
3295 <!-- ##### FUNCTION gras_dict_remove_ext ##### -->
3296 <para>
3297
3298 </para>
3299
3300 @head: 
3301 @key: 
3302 @key_len: 
3303 @Returns: 
3304
3305 <!-- ##### FUNCTION gras_dict_retrieve ##### -->
3306 <para>
3307
3308 </para>
3309
3310 @head: 
3311 @key: 
3312 @data: 
3313 @Returns: 
3314
3315 <!-- ##### FUNCTION gras_dict_retrieve_ext ##### -->
3316 <para>
3317
3318 </para>
3319
3320 @head: 
3321 @key: 
3322 @key_len: 
3323 @data: 
3324 @Returns: 
3325
3326 <!-- ##### FUNCTION gras_dict_set ##### -->
3327 <para>
3328
3329 </para>
3330
3331 @head: 
3332 @key: 
3333 @data: 
3334 @free_ctn: 
3335 @Returns: 
3336
3337 <!-- ##### FUNCTION gras_dict_set_ext ##### -->
3338 <para>
3339
3340 </para>
3341
3342 @head: 
3343 @key: 
3344 @key_len: 
3345 @data: 
3346 @free_ctn: 
3347 @Returns: 
3348
3349 <!-- ##### FUNCTION gras_dynar_cursor_first ##### -->
3350 <para>
3351
3352 </para>
3353
3354 @dynar: 
3355 @cursor: 
3356
3357 <!-- ##### FUNCTION gras_dynar_cursor_get ##### -->
3358 <para>
3359
3360 </para>
3361
3362 @dynar: 
3363 @cursor: 
3364 @whereto: 
3365 @Returns: 
3366
3367 <!-- ##### FUNCTION gras_dynar_cursor_rm ##### -->
3368 <para>
3369
3370 </para>
3371
3372 @dynar: 
3373 @cursor: 
3374
3375 <!-- ##### FUNCTION gras_dynar_cursor_step ##### -->
3376 <para>
3377
3378 </para>
3379
3380 @dynar: 
3381 @cursor: 
3382
3383 <!-- ##### FUNCTION gras_dynar_first ##### -->
3384 <para>
3385
3386 </para>
3387
3388 @dynar: 
3389 @cursor: 
3390 @Returns: 
3391
3392 <!-- ##### MACRO gras_dynar_foreach ##### -->
3393 <para>
3394
3395 </para>
3396
3397 @_dynar: 
3398 @_cursor: 
3399 @_data: 
3400 @_whereto: 
3401
3402 <!-- ##### FUNCTION gras_dynar_free ##### -->
3403 <para>
3404
3405 </para>
3406
3407 @dynar: 
3408 @Returns: 
3409
3410 <!-- ##### FUNCTION gras_dynar_free_container ##### -->
3411 <para>
3412
3413 </para>
3414
3415 @dynar: 
3416 @Returns: 
3417
3418 <!-- ##### FUNCTION gras_dynar_get ##### -->
3419 <para>
3420
3421 </para>
3422
3423 @dynar: 
3424 @idx: 
3425 @dst: 
3426 @whereto: 
3427 @Returns: 
3428
3429 <!-- ##### FUNCTION gras_dynar_insert_at ##### -->
3430 <para>
3431
3432 </para>
3433
3434 @dynar: 
3435 @idx: 
3436 @src: 
3437 @Returns: 
3438 @object: 
3439
3440 <!-- ##### FUNCTION gras_dynar_length ##### -->
3441 <para>
3442
3443 </para>
3444
3445 @dynar: 
3446 @Returns: 
3447
3448 <!-- ##### FUNCTION gras_dynar_map ##### -->
3449 <para>
3450
3451 </para>
3452
3453 @dynar: 
3454 @operator: 
3455 @Returns: 
3456
3457 <!-- ##### FUNCTION gras_dynar_new ##### -->
3458 <para>
3459
3460 </para>
3461
3462 @whereto: 
3463 @elm_size: 
3464 @free_func: 
3465 @Returns: 
3466
3467 <!-- ##### FUNCTION gras_dynar_next ##### -->
3468 <para>
3469
3470 </para>
3471
3472 @dynar: 
3473 @cursor: 
3474 @whereto: 
3475 @Returns: 
3476
3477 <!-- ##### FUNCTION gras_dynar_pop ##### -->
3478 <para>
3479
3480 </para>
3481
3482 @dynar: 
3483 @dst: 
3484 @whereto: 
3485
3486 <!-- ##### FUNCTION gras_dynar_push ##### -->
3487 <para>
3488
3489 </para>
3490
3491 @dynar: 
3492 @src: 
3493 @Returns: 
3494 @object: 
3495
3496 <!-- ##### FUNCTION gras_dynar_remove_at ##### -->
3497 <para>
3498
3499 </para>
3500
3501 @dynar: 
3502 @idx: 
3503 @object: 
3504 @Returns: 
3505
3506 <!-- ##### FUNCTION gras_dynar_replace ##### -->
3507 <para>
3508
3509 </para>
3510
3511 @dynar: 
3512 @idx: 
3513 @object: 
3514 @Returns: 
3515
3516 <!-- ##### FUNCTION gras_dynar_reset ##### -->
3517 <para>
3518
3519 </para>
3520
3521 @dynar: 
3522 @Returns: 
3523
3524 <!-- ##### FUNCTION gras_dynar_set ##### -->
3525 <para>
3526
3527 </para>
3528
3529 @dynar: 
3530 @idx: 
3531 @src: 
3532 @Returns: 
3533 @object: 
3534
3535 <!-- ##### FUNCTION gras_dynar_shift ##### -->
3536 <para>
3537
3538 </para>
3539
3540 @dynar: 
3541 @dst: 
3542 @whereto: 
3543 @Returns: 
3544
3545 <!-- ##### FUNCTION gras_dynar_unshift ##### -->
3546 <para>
3547
3548 </para>
3549
3550 @dynar: 
3551 @src: 
3552 @Returns: 
3553 @object: 
3554
3555 <!-- ##### ENUM gras_error_t ##### -->
3556 <para>
3557
3558 </para>
3559
3560 @no_error: no error
3561 @malloc_error: Well known error
3562 @mismatch_error: Not found
3563 @system_error: a syscall did fail
3564 @network_error: error while sending/receiving data
3565 @timeout_error: not quick enough, dude
3566 @thread_error: error while [un]locking
3567 @unknown_error: no idea
3568
3569 <!-- ##### FUNCTION gras_lock ##### -->
3570 <para>
3571
3572 </para>
3573
3574 @Returns: 
3575
3576 <!-- ##### FUNCTION gras_log_appender_set ##### -->
3577 <para>
3578
3579 </para>
3580
3581 @cat: 
3582 @app: 
3583
3584 <!-- ##### FUNCTION gras_log_control_set ##### -->
3585 <para>
3586
3587 </para>
3588
3589 @cs: 
3590 @Returns: 
3591
3592 <!-- ##### VARIABLE gras_log_default_appender ##### -->
3593 <para>
3594
3595 </para>
3596
3597
3598 <!-- ##### FUNCTION gras_log_parent_set ##### -->
3599 <para>
3600
3601 </para>
3602
3603 @cat: 
3604 @parent: 
3605
3606 <!-- ##### ENUM gras_log_priority_t ##### -->
3607 <para>
3608
3609 </para>
3610
3611 @gras_log_priority_none: 
3612 @gras_log_priority_trace: 
3613 @gras_log_priority_debug: 
3614 @gras_log_priority_verbose: 
3615 @gras_log_priority_info: 
3616 @gras_log_priority_warning: 
3617 @gras_log_priority_error: 
3618 @gras_log_priority_critical: 
3619 @gras_log_priority_infinite: 
3620 @gras_log_priority_uninitialized: 
3621
3622 <!-- ##### FUNCTION gras_log_threshold_set ##### -->
3623 <para>
3624
3625 </para>
3626
3627 @cat: 
3628 @thresholdPriority: 
3629
3630 <!-- ##### FUNCTION gras_msg_discard ##### -->
3631 <para>
3632
3633 </para>
3634
3635 @sd: 
3636 @size: 
3637
3638 <!-- ##### FUNCTION gras_msg_free ##### -->
3639 <para>
3640
3641 </para>
3642
3643 @msg: 
3644
3645 <!-- ##### FUNCTION gras_msg_handle ##### -->
3646 <para>
3647
3648 </para>
3649
3650 @timeOut: 
3651 @Returns: 
3652
3653 <!-- ##### FUNCTION gras_msg_new ##### -->
3654 <para>
3655
3656 </para>
3657
3658 @msgId: 
3659 @free_data_on_free: 
3660 @seqCount: 
3661 @Varargs: 
3662 @Returns: 
3663
3664 <!-- ##### FUNCTION gras_msg_send ##### -->
3665 <para>
3666
3667 </para>
3668
3669 @sock: 
3670 @msgtype: 
3671 @payload: 
3672 @Returns: 
3673 @sd: 
3674 @msg: 
3675 @freeDirective: 
3676
3677 <!-- ##### FUNCTION gras_msg_wait ##### -->
3678 <para>
3679
3680 </para>
3681
3682 @timeout: 
3683 @msgt_want: 
3684 @expeditor: 
3685 @payload: 
3686 @Returns: 
3687 @id: 
3688 @message: 
3689
3690 <!-- ##### FUNCTION gras_msgtype_by_name ##### -->
3691 <para>
3692
3693 </para>
3694
3695 @name: 
3696 @Returns: 
3697 @dst: 
3698
3699 <!-- ##### FUNCTION gras_msgtype_by_namev ##### -->
3700 <para>
3701
3702 </para>
3703
3704 @name: 
3705 @version: 
3706 @Returns: 
3707 @dst: 
3708
3709 <!-- ##### FUNCTION gras_msgtype_declare ##### -->
3710 <para>
3711
3712 </para>
3713
3714 @name: 
3715 @payload: 
3716 @Returns: 
3717 @dst: 
3718
3719 <!-- ##### FUNCTION gras_msgtype_declare_v ##### -->
3720 <para>
3721
3722 </para>
3723
3724 @name: 
3725 @version: 
3726 @payload: 
3727 @Returns: 
3728 @dst: 
3729
3730 <!-- ##### FUNCTION gras_msgtype_register ##### -->
3731 <para>
3732
3733 </para>
3734
3735 @msgId: 
3736 @name: 
3737 @sequence_count: 
3738 @Varargs: 
3739 @Returns: 
3740
3741 <!-- ##### FUNCTION gras_os_sleep ##### -->
3742 <para>
3743
3744 </para>
3745
3746 @Param1: 
3747 @Param2: 
3748
3749 <!-- ##### FUNCTION gras_os_time ##### -->
3750 <para>
3751
3752 </para>
3753
3754 @Returns: 
3755
3756 <!-- ##### FUNCTION gras_set_add ##### -->
3757 <para>
3758
3759 </para>
3760
3761 @set: 
3762 @elm: 
3763 @free_func: 
3764 @Returns: 
3765
3766 <!-- ##### MACRO gras_set_foreach ##### -->
3767 <para>
3768
3769 </para>
3770
3771 @set: 
3772 @cursor: 
3773 @elm: 
3774
3775 <!-- ##### FUNCTION gras_set_free ##### -->
3776 <para>
3777
3778 </para>
3779
3780 @set: 
3781
3782 <!-- ##### FUNCTION gras_set_get_by_id ##### -->
3783 <para>
3784
3785 </para>
3786
3787 @set: 
3788 @id: 
3789 @dst: 
3790 @Returns: 
3791
3792 <!-- ##### FUNCTION gras_set_get_by_name ##### -->
3793 <para>
3794
3795 </para>
3796
3797 @set: 
3798 @key: 
3799 @dst: 
3800 @Returns: 
3801
3802 <!-- ##### FUNCTION gras_set_get_by_name_ext ##### -->
3803 <para>
3804
3805 </para>
3806
3807 @set: 
3808 @name: 
3809 @name_len: 
3810 @dst: 
3811 @Returns: 
3812
3813 <!-- ##### FUNCTION gras_set_new ##### -->
3814 <para>
3815
3816 </para>
3817
3818 @dst: 
3819 @Returns: 
3820
3821 <!-- ##### FUNCTION gras_sleep ##### -->
3822 <para>
3823
3824 </para>
3825
3826 @Param1: 
3827 @Param2: 
3828
3829 <!-- ##### FUNCTION gras_sock_client_open ##### -->
3830 <para>
3831
3832 </para>
3833
3834 @host: 
3835 @Param2: 
3836 @sock: 
3837 @Returns: 
3838
3839 <!-- ##### FUNCTION gras_sock_close ##### -->
3840 <para>
3841
3842 </para>
3843
3844 @sock: 
3845 @Returns: 
3846
3847 <!-- ##### FUNCTION gras_sock_get_peer_addr ##### -->
3848 <para>
3849
3850 </para>
3851
3852 @sd: 
3853 @Returns: 
3854
3855 <!-- ##### FUNCTION gras_sock_get_peer_name ##### -->
3856 <para>
3857
3858 </para>
3859
3860 @sd: 
3861 @Returns: 
3862
3863 <!-- ##### FUNCTION gras_sock_server_open ##### -->
3864 <para>
3865
3866 </para>
3867
3868 @Param1: 
3869 @Param2: 
3870 @sock: 
3871 @Returns: 
3872
3873 <!-- ##### FUNCTION gras_socket_client ##### -->
3874 <para>
3875
3876 </para>
3877
3878 @host: 
3879 @Param2: 
3880 @dst: 
3881 @Returns: 
3882 @bufSize: 
3883 @sock: 
3884
3885 <!-- ##### FUNCTION gras_socket_close ##### -->
3886 <para>
3887
3888 </para>
3889
3890 @sd: 
3891 @sock: 
3892 @Returns: 
3893
3894 <!-- ##### FUNCTION gras_socket_my_port ##### -->
3895 <para>
3896
3897 </para>
3898
3899 @sock: 
3900 @Returns: 
3901
3902 <!-- ##### FUNCTION gras_socket_peer_name ##### -->
3903 <para>
3904
3905 </para>
3906
3907 @sock: 
3908 @Returns: 
3909 @sd: 
3910
3911 <!-- ##### FUNCTION gras_socket_peer_port ##### -->
3912 <para>
3913
3914 </para>
3915
3916 @sock: 
3917 @Returns: 
3918
3919 <!-- ##### FUNCTION gras_socket_server ##### -->
3920 <para>
3921
3922 </para>
3923
3924 @Param1: 
3925 @dst: 
3926 @Returns: 
3927 @bufSize: 
3928
3929 <!-- ##### FUNCTION gras_time ##### -->
3930 <para>
3931
3932 </para>
3933
3934 @Returns: 
3935
3936 <!-- ##### FUNCTION gras_unlock ##### -->
3937 <para>
3938
3939 </para>
3940
3941 @Returns: 
3942
3943 <!-- ##### FUNCTION gras_userdata_get ##### -->
3944 <para>
3945
3946 </para>
3947
3948
3949 <!-- ##### MACRO gras_userdata_new ##### -->
3950 <para>
3951
3952 </para>
3953
3954 @type: 
3955
3956 <!-- ##### FUNCTION gras_userdata_set ##### -->
3957 <para>
3958
3959 </para>
3960
3961 @ud: 
3962