|
|
1.1 root 1: % run this through LaTeX with the appropriate wrapper
2:
3: \chapter {User Library}\label{libftam}
4: The \man libftam(3n) library implements the filestore-independent parts of
5: the International Standard of the OSI file service, FTAM
6: (which stands for File Transfer, Access and Management).
7: Currently supported are:
8: the no-recovery FTAM Quality-of-Service;
9: the transfer, access, management, and transfer and management service classes;
10: the kernel, read, write, access, limited file management,
11: enhanced file management, grouping, and fadu-locking functional units;
12: and, the kernel, storage, security, and private attribute groups.
13:
14: Unlike most OSI services,
15: FTAM distinguishes between the {\em initiator\/} of an FTAM association and
16: the {\em responder}.
17: However,
18: as with most models of OSI services,
19: an asynchronous environment is assumed.
20: That is,
21: the service provider may generate events for the service user without the
22: latter triggering the actions which led to the event.
23: For example,
24: in a synchronous environment,
25: an indication that data has arrived usually occurs only when the service user
26: asks the service provider to read data;
27: in an asynchronous environment,
28: the service provider may interrupt the service user at any time to announce
29: the arrival of data.
30:
31: The \verb"ftam" module in this release initially uses a synchronous interface;
32: however once the connection is established,
33: an asynchronous interface may be selected.
34:
35: All of the routines in the \man libftam(3n) library are integer-valued.
36: They return the manifest constant \verb"OK" on success,
37: or \verb"NOTOK" otherwise.
38:
39: \section {Warning}\label{ftam:note}
40: Please read the following important message.
41: \[\fbox{\begin{tabular}{lp{0.8\textwidth}}
42: \bf NOTE:& Readers of this chapter should have an intimate understanding
43: of FTAM.
44: It is not the intent of this
45: chapter to present a tutorial on these services, so novice
46: users will suffer greatly if they choose to read further.
47:
48: As previous versions of this software included an
49: implementation of DIS FTAM, and the release contains an IS
50: implementation, users of the \man libftam(3n) library
51: are urged to re-read this chapter.
52: \end{tabular}}\]
53:
54: \section {Constants}
55: There are several important constants, described below:
56:
57: \subsection {FTAM Quality-of-Service}
58: \[\begin{tabular}{|l|l|}
59: \hline
60: \multicolumn{1}{|c|}{\bf Value}&
61: \multicolumn{1}{c|}{\bf FTAM-QoS}\\
62: \hline
63: \tt FQOS\_NORECOVERY& no recovery\\
64: \tt FQOS\_CLASS1& class 1 recovery\\
65: \tt FQOS\_CLASS2& class 2 recovery\\
66: \tt FQOS\_CLASS3& class 3 recovery\\
67: \hline
68: \end{tabular}\]
69: Currently, only the no-recovery FTAM-QoS is supported.
70:
71: \subsection {Service Classes}
72: \[\begin{tabular}{|l|l|}
73: \hline
74: \multicolumn{1}{|c|}{\bf Value}&
75: \multicolumn{1}{c|}{\bf Service Class}\\
76: \hline
77: \tt FCLASS\_TRANSFER& transfer\\
78: \tt FCLASS\_ACCESS& access\\
79: \tt FCLASS\_MANAGE& management\\
80: \tt FCLASS\_TM& transfer and management\\
81: \tt FCLASS\_UNCONS& unconstrained\\
82: \hline
83: \end{tabular}\]
84: Currently, all service classes other than the unconstrained class are
85: supported.
86:
87: \subsection {Functional Units}
88: \[\begin{tabular}{|l|l|}
89: \hline
90: \multicolumn{1}{|c|}{\bf Value}&
91: \multicolumn{1}{c|}{\bf Functional Unit}\\
92: \hline
93: \tt FUNIT\_READ& read\\
94: \tt FUNIT\_WRITE& write\\
95: \tt FUNIT\_ACCESS& file access\\
96: \tt FUNIT\_LIMITED& limited file management\\
97: \tt FUNIT\_ENHANCED& enhanced file management\\
98: \tt FUNIT\_GROUPING& grouping\\
99: \tt FUNIT\_FADULOCK& fadu locking\\
100: \tt FUNIT\_RECOVERY& recovery\\
101: \tt FUNIT\_RESTART& restart data transfer\\
102: \hline
103: \end{tabular}\]
104: Currently, all functional units other than the
105: recovery and restart units are supported.
106: Further, the grouping unit {\em must\/} be specified.
107:
108: \subsection {Attribute Groups}
109: \[\begin{tabular}{|l|l|}
110: \hline
111: \multicolumn{1}{|c|}{\bf Value}&
112: \multicolumn{1}{c|}{\bf Attribute Group}\\
113: \hline
114: \tt FATTR\_STORAGE& storage\\
115: \tt FATTR\_SECURITY& security\\
116: \tt FATTR\_PRIVATE& private\\
117: \hline
118: \end{tabular}\]
119: Currently, all attribute groups other than the
120: private group are supported.
121:
122: \subsection {State Results}
123: \[\begin{tabular}{|l|l|}
124: \hline
125: \multicolumn{1}{|c|}{\bf Value}&
126: \multicolumn{1}{c|}{\bf State Result}\\
127: \hline
128: \tt FSTATE\_SUCCESS& success\\
129: \tt FSTATE\_FAILURE& failure\\
130: \hline
131: \end{tabular}\]
132:
133: \subsection {Action Results}
134: \[\begin{tabular}{|l|l|}
135: \hline
136: \multicolumn{1}{|c|}{\bf Value}&
137: \multicolumn{1}{c|}{\bf Action Result}\\
138: \hline
139: \tt FACTION\_SUCCESS& success\\
140: \tt FACTION\_TRANS& transient error\\
141: \tt FACTION\_PERM& permanent error\\
142: \hline
143: \end{tabular}\]
144:
145: \section {Data-Structures}
146: There are several important data structures, described below:
147:
148: \subsection {Contents Type}
149: An FTAM document type is represented by the \verb"FTAMcontent" structure.
150: \begin{quote}\index{FTAMcontent}\small\begin{verbatim}
151: struct FTAMcontent {
152: OID fc_dtn;
153:
154: int fc_id;
155: int fc_result;
156: };
157: \end{verbatim}\end{quote}
158: This elements of this structure are:
159: \begin{describe}
160: \item[\verb"fc\_dtn":] the document type name,
161: represented as an object identifier
162: (consult Section~\ref{psap:oid} of \volone/);
163:
164: \item[\verb"fc\_id":] the presentation context identifier
165: (consult Section~\ref{psap:context} of \voltwo/)
166: associated with the document type;
167: and,
168:
169: \item[\verb"fc\_result":] the status indicator for the presentation context
170: (codes are listed in Table~\ref{PSAPreasons} of \voltwo/).
171: \end{describe}
172:
173: A list of FTAM documents types is represented by the \verb"FTAMcontentlist"
174: structure.
175: \begin{quote}\index{FTAMcontentlist}\small\begin{verbatim}
176: struct FTAMcontentlist {
177: int fc_ncontent;
178:
179: #define NFCONT (NPCTX - 2)
180: struct FTAMcontent fc_contents[NFCONT];
181: };
182: \end{verbatim}\end{quote}
183: This elements of this structure are:
184: \begin{describe}
185: \item[\verb"fc\_contents"/\verb"fc\_ncontent":] the contents list
186: (and the number of contents in the list).
187: \end{describe}
188: A limitation of this implementation is that a fixed number of document types
189: may be supported,
190: as denoted by the manifest constant \verb"NFCONT".
191:
192: \subsection {Diagnostics}
193: An FTAM diagnostic is represented by the \verb"FTAMdiagnostic" structure.
194: \begin{quote}\index{FTAMcontent}\small\begin{verbatim}
195: struct FTAMdiagnostic {
196: int ftd_type;
197:
198: int ftd_identifier;
199:
200: int ftd_observer;
201: int ftd_source;
202:
203: int ftd_delay;
204:
205: #define FTD_SIZE 512
206: int ftd_cc;
207: char ftd_data[FTD_SIZE];
208: };
209: \end{verbatim}\end{quote}
210: This elements of this structure are:
211: \begin{describe}
212: \item[\verb"ftd\_type":] the diagnostic type, one of:
213: \[\begin{tabular}{|l|l|}
214: \hline
215: \multicolumn{1}{|c|}{\bf Value}&
216: \multicolumn{1}{c|}{\bf Meaning}\\
217: \hline
218: \tt DIAG\_INFORM& informative\\
219: \tt DIAG\_TRANS& transient\\
220: \tt DIAG\_PERM& permanent\\
221: \hline
222: \end{tabular}\]
223:
224: \item[\verb"ftd\_identifier":] the error-identifier
225: (consult \verb"<isode/ftam.h>" for the list,
226: there are far too many to list here);
227:
228: \item[\verb"ftd\_observer"/\verb"ftd\_source":] the observer and source of
229: the error, one of:
230: \[\begin{tabular}{|l|l|}
231: \hline
232: \multicolumn{1}{|c|}{\bf Value}&
233: \multicolumn{1}{c|}{\bf Meaning}\\
234: \hline
235: \tt EREF\_NONE& no categorization possible\\
236: \tt EREF\_IFSU& initiating file service user\\
237: \tt EREF\_IFPM& initiating file service machine\\
238: \tt EREF\_SERV& service support the file protocol machine\\
239: \tt EREF\_RFPM& responding file protocol machine\\
240: \tt EREF\_RFSU& responding file service user\\
241: \hline
242: \end{tabular}\]
243:
244: \item[\verb"ftd\_delay":] the suggested delay that might be honored prior to
245: retrying the operation (use \verb"DIAG_NODELAY" if a delay is not
246: appropriate);
247: and,
248:
249: \item[\verb"ftd\_data"/\verb"ftd\_cc":] a diagnostic string
250: (and the length of that string).
251: \end{describe}
252: A limitation of this implementation
253: is that the routines and data structures which support diagnostics have a
254: fixed limit as to the number of diagnostics permitted.
255: This is currently denoted by the manifest constant \verb"NFDIAG".
256:
257: \subsection {Charging}
258: A list of FTAM charges is represented by the \verb"FTAMcharging" structure.
259: \begin{quote}\index{FTAMcharging}\small\begin{verbatim}
260: struct FTAMcharging {
261: int fc_ncharge;
262:
263: #define NFCHRG 5
264: struct fc_charge {
265: char *fc_resource;
266: char *fc_unit;
267: int fc_value;
268: } fc_charges[NFCHRG];
269: };
270: \end{verbatim}\end{quote}
271: This elements of this structure are:
272: \begin{describe}
273: \item[\verb"fc\_charges"/\verb"fc\_ncharge":] the charging list
274: (and the number of charges in the list, which may not exceed
275: the manifest constant \verb"NFCHRG").
276: Each charge consists of:
277: \begin{describe}
278: \item[\verb"fc\_resource":] the resource identifier;
279:
280: \item[\verb"fc\_unit":] the charging unit;
281: and,
282:
283: \item[\verb"fc\_value":] the charging value.
284: \end{describe}
285: \end{describe}
286: A limitation of this implementation
287: is that a fixed number of charges may be supported,
288: as denoted by the manifest constant \verb"NFCHRG".
289:
290: \subsection {Passwords}
291: A list of FTAM passwords is represented by the \verb"FTAMpasswords" structure.
292: \begin{quote}\index{FTAMpasswords}\small\begin{verbatim}
293: struct FTAMpasswords {
294: char *fp_read;
295: int fp_readlen;
296:
297: char *fp_insert;
298: int fp_insertlen;
299:
300: char *fp_replace;
301: int fp_replacelen;
302:
303: char *fp_extend;
304: int fp_extendlen;
305:
306: char *fp_erase;
307: int fp_eraselen;
308:
309: char *fp_readattr;
310: int fp_readattrlen;
311:
312: char *fp_chngattr;
313: int fp_chngattrlen;
314:
315: char *fp_delete;
316: int fp_deletelen;
317: };
318: \end{verbatim}\end{quote}
319: This elements of this structure are:
320: \begin{describe}
321: \item[\verb"fp\_read"/\verb"fp\_readlen":] the read password
322: (and the length of the password);
323:
324: \item[\verb"fp\_insert"/\verb"fp\_insertlen":] the insert password
325: (and the length of the password);
326:
327: \item[\verb"fp\_replace"/\verb"fp\_replacelen":] the replace password
328: (and the length of the password);
329:
330: \item[\verb"fp\_extend"/\verb"fp\_extendlen":] the extend password
331: (and the length of the password);
332:
333: \item[\verb"fp\_erase"/\verb"fp\_eraselen":] the erase password
334: (and the length of the password);
335:
336: \item[\verb"fp\_readattr"/\verb"fp\_readattrlen":] the read attribute password
337: (and the length of the password);
338:
339: \item[\verb"fp\_chngattr"/\verb"fp\_chngattrlen":] the change attribute
340: password (and the length of the password);
341: and,
342:
343: \item[\verb"fp\_delete"/\verb"fp\_deletelen":] the delete password
344: (and the length of the password).
345: \end{describe}
346: The \verb"FPFREE" macro can be used to free the storage associated with an
347: \verb"FTAMpasswords" structure (without freeing the structure itself).
348: It behaves as if it was defined as:
349: \begin{quote}\index{FPFREE}\small\begin{verbatim}
350: void FPFREE (fp)
351: struct FTAMpasswords *fp;
352: \end{verbatim}\end{quote}
353:
354: \subsection {Access Control}
355: An FTAM access control element is represented by the \verb"FTAMacelement"
356: structure.
357: \begin{quote}\index{FTAMacelement}\small\begin{verbatim}
358: struct FTAMacelement {
359: int fe_actions;
360:
361: struct FTAMconcurrency fe_concurrency;
362:
363: char *fe_aet;
364:
365: struct FTAMpasswords fe_passwords;
366:
367: AEI fe_aet;
368:
369: struct FTAMacelement *fe_next;
370: };
371: \end{verbatim}\end{quote}
372: The elements of this structure are:
373: \begin{describe}
374: \item[\verb"fe\_actions":] the action list,
375: containing the inclusive-or of any of the values shown in
376: Table~\ref{FTAMaccess};
377:
378: \item[\verb"fe\_concurrency":] any concurrency-control constraints;
379:
380: \item[\verb"fe\_aet":] the user identity;
381:
382: \item[\verb"fe\_passwords"] the passwords;
383:
384: \item[\verb"fe\_aet":] the application-entity title
385: (defined in Section~\ref{acs:aei} on page~\pageref{acs:aei} in \volone/);
386: and,
387:
388: \item[\verb"fe\_next":] the next access element in the linked list.
389: \end{describe}
390: The \verb"FEFREE" macro can be used to free the storage associated with a
391: list of FTAM access elements,
392: including the head element on the list.
393: It behaves as if it was defined as:
394: \begin{quote}\index{FEFREE}\small\begin{verbatim}
395: void FEFREE (fe)
396: struct FTAMacelement *fe;
397: \end{verbatim}\end{quote}
398: \tagtable[tp]{ftam-1}{FTAM Requested Access Values}{FTAMaccess}
399:
400: \subsection {Attributes}
401: An FTAM attribute list is represented by the \verb"FTAMattributes" structure.
402: \begin{quote}\index{FTAMattributes}\small\begin{verbatim}
403: struct FTAMattributes {
404: long fa_present;
405: long fa_novalue;
406:
407: #define NFFILE 5
408: int fa_nfile;
409: char *fa_files[NFFILE];
410:
411: int fa_permitted;
412:
413: OID fa_contents;
414: PE fa_parameter;
415:
416: char *fa_account;
417:
418: struct UTCtime fa_date_create;
419: struct UTCtime fa_date_modify;
420: struct UTCtime fa_date_read;
421: struct UTCtime fa_date_attribute;
422:
423: char *fa_id_create;
424: char *fa_id_modify;
425: char *fa_id_read;
426: char *fa_id_attribute;
427:
428: int fa_availability;
429:
430: int fa_filesize;
431: int fa_futuresize;
432:
433: struct FTAMacelement fa_control;
434: char *fa_legal;
435: };
436: \end{verbatim}\end{quote}
437:
438: \newpage %%% hack
439:
440: The elements of this structure are:
441: \begin{describe}
442: \item[\verb"fa\_present":] the values present,
443: containing the inclusive-or of any of the values shown in
444: Table~\ref{FTAMattributes};
445:
446: \item[\verb"fa\_novalue":] the values which are not available are not available
447: (using the same values listed in Table~\ref{FTAMattributes},
448: the value of this element is a subset of the value of the \verb"fa_present"
449: element);
450:
451: \item[\verb"fa\_files"/\verb"fa\_nfile":] the list of filename components
452: (and the number of components, which may not exceed
453: the manifest constant \verb"NFFILE");
454:
455: \item[\verb"fa\_permitted":] permitted actions,
456: containing the inclusive-or of any of the values shown in
457: Table~\ref{FTAMaccess} on page~\pageref{FTAMaccess},
458: in addition to any of:
459: \[\begin{tabular}{|l|l|}
460: \hline
461: \multicolumn{1}{|c|}{\bf Value}&
462: \multicolumn{1}{c|}{\bf Meaning}\\
463: \hline
464: \tt FA\_PERM\_TRAV& traversal\\
465: \tt FA\_PERM\_RVTRAV& reverse-traversal\\
466: \tt FA\_PERM\_RANDOM& random-order\\
467: \hline
468: \end{tabular}\]
469:
470: \item[\verb"fa\_contents"/\verb"fa\_parameter":] the contents type;
471:
472: \item[\verb"fa\_account":] the account;
473:
474: \item[\verb"fa\_date\_create":] the date and time of creation;
475:
476: \item[\verb"fa\_date\_modify":] the date and time of last modification;
477:
478: \item[\verb"fa\_date\_read":] the date and time of last read access;
479:
480: \item[\verb"fa\_date\_attribute":] the date and time of last attribute
481: modification;
482:
483: \item[\verb"fa\_id\_create":] the identity of creator;
484:
485: \item[\verb"fa\_id\_modify":] the identity of last modifier;
486:
487: \item[\verb"fa\_id\_read":] the identity of last reader;
488:
489: \item[\verb"fa\_id\_attribute":] the identity of last attribute modifier;
490:
491: \item[\verb"fa\_availability":] file availability,
492: one of:
493: \[\begin{tabular}{|l|l|}
494: \hline
495: \multicolumn{1}{|c|}{\bf Value}&
496: \multicolumn{1}{c|}{\bf Meaning}\\
497: \hline
498: \tt FA\_AVAIL\_IMMED& immediate\\
499: \tt FA\_AVAIL\_DEFER& deferred\\
500: \hline
501: \end{tabular}\]
502:
503: \item[\verb"fa\_filesize":] filesize;
504:
505: \item[\verb"fa\_futuresize":] future filesize;
506:
507: \item[\verb"fa\_control":] access control;
508:
509: \item[\verb"fa\_encrypt":] encryption name;
510: and,
511:
512: \item[\verb"fa\_legal":] legal qualification.
513: \end{describe}
514: A limitation of this implementation
515: is that a fixed number of filename components may be supported,
516: as denoted by the manifest constant \verb"NFFILE".
517:
518: The routine \verb"FAFREE" can be used to free the storage associated with an
519: \verb"FTAMattributes" structure (without freeing the structure itself).
520: It is defined as:
521: \begin{quote}\index{FAFREE}\small\begin{verbatim}
522: void FAFREE (fa)
523: struct FTAMattributes *fa;
524: \end{verbatim}\end{quote}
525: \tagtable[tp]{ftam-2}{FTAM Attribute Values}{FTAMattributes}
526:
527: \subsection {Concurrency}
528: An FTAM concurrency list is represented by the \verb"FTAMconcurrency"
529: structure.
530: \begin{quote}\index{FTAMconcurrency}\small\begin{verbatim}
531: struct FTAMconcurrency {
532: #define FLOCK_SHARED 00 /* shared */
533: #define FLOCK_EXCLUSIVE 01 /* exclusive */
534: #define FLOCK_NOTREQD 02 /* not-required */
535: #define FLOCK_NOACCESS 03 /* no-access */
536:
537: char fc_readlock;
538: char fc_insertlock;
539: char fc_replacelock;
540: char fc_extendlock;
541: char fc_eraselock;
542: char fc_readattrlock;
543: char fc_chngattrlock;
544: char fc_deletelock;
545: };
546: \end{verbatim}\end{quote}
547: This elements of this structure are:
548: \begin{describe}
549: \item[\verb"fc\_readlock":] the concurrency constraints for the read operation;
550:
551: \item[\verb"fc\_insertlock":] the concurrency constraints for the insert
552: operation;
553:
554: \item[\verb"fc\_replacelock":] the concurrency constraints for the replace
555: operation;
556:
557: \item[\verb"fc\_extendlock":] the concurrency constraints for the extend
558: operation;
559:
560: \item[\verb"fc\_eraselock":] the concurrency constraints for the erase
561: operation;
562:
563: \item[\verb"fc\_readattrlock":] the concurrency constraints for the read
564: attribute operation;
565:
566: \item[\verb"fc\_chngattrlock":] the concurrency constraints for the change
567: attribute operation;
568: and,
569:
570: \item[\verb"fc\_deletelock":] the concurrency constraints for the delete
571: operation.
572: \end{describe}
573: The \verb"FCINIT" macro can be used to initialize an
574: \verb"FTAMconcurrency" structure.
575: It behaves as if it was defined as:
576: \begin{quote}\index{FCINIT}\small\begin{verbatim}
577: void FCINIT (fc)
578: struct FTAMconcurrency *fc;
579: \end{verbatim}\end{quote}
580:
581: \subsection {FADU Identity}
582: An FADU identity is represented by the \verb"FADUidentity" structure.%
583: \footnote{FADU stands for File Access Data Unit;
584: if you didn't already know this, you shouldn't be reading this chapter.
585: Read Section~\ref{ftam:note} right now.}
586: \begin{quote}\index{FADUidentity}\small\begin{verbatim}
587: struct FADUidentity {
588: int fa_type;
589: #define FA_FIRSTLAST 0 /* first-last */
590: #define FA_RELATIVE 1 /* relative */
591: #define FA_BEGINEND 2 /* begin-end */
592: #define FA_SINGLE 3 /* single-name */
593: #define FA_NAMELIST 4 /* name-list */
594: #define FA_FADUNUMBER 5 /* fadu-number */
595:
596: union {
597: int fa_un_firstlast;
598: #define FA_FIRST 0
599: #define FA_LAST 1
600:
601: int fa_un_relative;
602: #define FA_PREVIOUS 0
603: #define FA_CURRENT 1
604: #define FA_NEXT 2
605:
606: int fa_un_beginend;
607: #define FA_BEGIN 0
608: #define FA_END 1
609:
610: char *fa_un_singlename;
611:
612: #define NANAME 5
613: struct {
614: char *fa_un_names[NANAME];
615: int fa_un_nname;
616: } fa_un_list;
617:
618: int fa_un_fadunumber;
619: } fa_un;
620: #define fa_firstlast fa_un.fa_un_firstlast
621: #define fa_relative fa_un.fa_un_relative
622: #define fa_beginend fa_un.fa_un_beginend
623: #define fa_singlename fa_un.fa_un_singlename
624: #define fa_names fa_un.fa_un_list.fa_un_names
625: #define fa_nname fa_un.fa_un_list.fa_un_nname
626: #define fa_fadunumber fa_un.fa_un_fadunumber
627: };
628: \end{verbatim}\end{quote}
629: As shown, this structure is really a discriminated union
630: (a structure with a tag element followed by a union).
631: The elements are:
632: \begin{describe}
633: \item[\verb"fa\_type":] indicates what type of FADU identity is represented;
634: Depending on this type, one of the following elements is valid:
635: \begin{describe}
636: \item[\verb"fa\_firstlast":] the location, identified as first or last;
637:
638: \item[\verb"fa\_relative":] the location, identified as previous,
639: current, or next;
640:
641: \item[\verb"fa\_beginend":] the location, identified as begin or end;
642:
643: \item[\verb"fa\_singlename":] the location, as identified by name;
644:
645: \item[\verb"fa\_names"/\verb"fa\_nname":] the location,
646: as identified by a list of names (and the length of that list,
647: which may not exceed the manifest constant \verb"NANAME");
648: or,
649:
650: \item[\verb"fa\_fadunumber":] the location, as identified by number.
651: \end{describe}
652: \end{describe}
653: A limitation of this implementation
654: is that a fixed number of FADU names may be supported,
655: as denoted by the manifest constant \verb"NANAME".
656:
657: The \verb"FUFREE" macro can be used to free the storage associated with an
658: \verb"FADUidentity" structure (without freeing the structure itself).
659: It behaves as if it was defined as:
660: \begin{quote}\index{FUFREE}\small\begin{verbatim}
661: void FUFREE (fu)
662: struct FADUidentity *fu;
663: \end{verbatim}\end{quote}
664:
665: \section {Association Establishment}
666: The \man libftam(3n) library distinguishes between the entity which started an
667: association,
668: the {\em initiator},
669: and the entity which was subsequently bound to the association,
670: the {\em responder}.
671: We sometimes term these two entities the {\em client\/} and the {\em server},
672: respectively.
673:
674: Section~\ref{acs:addresses} of \volone/ describes the use of addressing
675: for the application layer.
676: In particular,
677: Figure~\ref{getFTAMentity} on page~\pageref{getFTAMentity} of \volone/
678: presents
679: an example of how one constructs the address for the File Transfer, Access
680: and Management (FTAM) service on host \verb"RemoteHost".
681:
682: \subsection {Responder}
683: The \man tsapd(8c) daemon,
684: upon accepting a connection from an initiating host,
685: consults the ISO services database to determine which program
686: on the local system implements the desired application context.
687:
688: Once the program has been ascertained,
689: the daemon runs the program with any arguments listed in the database.
690: In addition,
691: it appends some {\em magic arguments\/} to the argument vector.
692: Hence,
693: the very first action performed by the responder is to re-capture the FTAM
694: state contained in the magic arguments.
695: This is done by calling the routine \verb"FInit",
696: which on a successful return,
697: is equivalent to an {\sf F-INITIALIZE.INDICATION\/} event.
698: \begin{quote}\index{FInit}\small\begin{verbatim}
699: int FInit (vecp, vec, fts, tracing, fti)
700: int vecp;
701: char **vec;
702: struct FTAMstart *fts;
703: int (*tracing) ();
704: struct FTAMindication *fti;
705: \end{verbatim}\end{quote}
706: The parameters to this procedure are:
707: \begin{describe}
708: \item[\verb"vecp":] the length of the argument vector;
709:
710: \item[\verb"vec":] the argument vector;
711:
712: \item[\verb"fts":] a pointer to an \verb"FTAMstart" structure,
713: which is updated only if the call succeeds;
714:
715: \item[\verb"tracing":] the address of a tracing routine to be invoked when an
716: FTAM event occurs (consult Section~\ref{ftam:tracing});
717: and,
718:
719: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure,
720: which is updated only if the call fails.
721: \end{describe}
722: If \verb"FInit" is successful,
723: it returns information in the \verb"fts" parameter,
724: which is a pointer to an \verb"FTAMstart" structure.
725: \begin{quote}\index{FTAMstart}\small\begin{verbatim}
726: struct FTAMstart {
727: int fts_sd;
728:
729: AEInfo fts_calledtitle;
730: AEInfo fts_callingtitle;
731:
732: struct PSAPaddr fts_calledaddr;
733: struct PSAPaddr fts_callingaddr;
734:
735: OID fts_context;
736:
737: int fts_manage;
738:
739: int fts_class;
740:
741: int fts_units;
742: int fts_attrs;
743:
744: PE fts_sharedASE;
745:
746: int fts_fqos;
747:
748: struct FTAMcontentlist fts_contents;
749:
750: char *fts_initiator;
751: char *fts_account;
752: char *fts_password;
753: int fts_passlen;
754:
755: int fts_ssdusize;
756:
757: struct QOStype fts_qos;
758: };
759: \end{verbatim}\end{quote}
760: The elements of this structure are:
761: \begin{describe}
762: \item[\verb"fts\_sd":] the association-descriptor to be used to reference
763: this association;
764:
765: \item[\verb"fts\_calledtitle":] information on the called application-entity,
766: if any (consult Section~\ref{acs:aei} of \volone/);
767:
768: \item[\verb"fts\_callingtitle":] information on the the calling
769: application-entity, if any;
770:
771: \item[\verb"fts\_calledaddr":] the called presentation address
772: (consult Section~\ref{psap:addresses} of \voltwo/);
773:
774: \item[\verb"fts\_callingaddr":] the calling presentation address;
775:
776: \item[\verb"fts\_context":] the application context name;
777:
778: \item[\verb"fts\_manage":] a flag indicating if presentation context
779: management is available for use (zero if unavailable);
780:
781: \item[\verb"fts\_class":] the inclusive-or of the service classes offered;
782:
783: \item[\verb"fts\_units":] the functional units;
784:
785: \item[\verb"fts\_attrs":] the attribute groups;
786:
787: \item[\verb"fts\_sharedASE":] shared ASE information;
788:
789: \item[\verb"fts\_fqos":] the FTAM Quality-of-Service;
790:
791: \item[\verb"fts\_contents":] the contents type list;
792:
793: \item[\verb"fts\_initiator":] the user-identity of the initiator, if any;
794:
795: \item[\verb"fts\_account":] the account, if any;
796:
797: \item[\verb"fts\_password"/\verb"fts\_passlen":] the password (and its
798: length), if any;
799:
800: \item[\verb"fts\_ssdusize":] the largest atomic SSDU size that can be used
801: on the underlying connection;
802: and,
803:
804: \item[\verb"qos":] the quality of service on the connection
805: (see Section~\ref{tsap:qos} in \voltwo/).
806: \end{describe}
807: Note that the data contained in the structure was allocated via \man malloc(3),
808: and should be released by using the \verb"FTSFREE" macro when no longer
809: referenced.
810: The \verb"FTSFREE" macro,
811: behaves as if it was defined as:
812: \begin{quote}\index{FTSFREE}\small\begin{verbatim}
813: void FTSFREE (fts)
814: struct FTAMstart *fts;
815: \end{verbatim}\end{quote}
816: The macro frees only the data allocated by \verb"FInit",
817: and not the \verb"FTAMstart" structure itself.
818: Further,
819: \verb"FTSFREE" should be called only if the call to the \verb"FInit"
820: routine returned \verb"OK".
821:
822: If the call to \verb"FInit" is not successful,
823: then an {\sf F-P-ABORT.INDICATION\/} event is simulated,
824: and the relevant information is returned in an encoded \verb"FTAMindication"
825: structure.\label{FTAMindication}
826: \begin{quote}\index{FTAMindication}\small\begin{verbatim}
827: struct FTAMindication {
828: int fti_type;
829: #define FTI_FINISH 0x00
830: #define FTI_ABORT 0x01
831: #define FTI_MANAGEMENT 0x02
832: #define FTI_BULKBEGIN 0x03
833: #define FTI_BULKEND 0x04
834: #define FTI_ACCESS 0x05
835: #define FTI_READWRITE 0x06
836: #define FTI_DATA 0x07
837: #define FTI_DATAEND 0x08
838: #define FTI_CANCEL 0x09
839: #define FTI_TRANSEND 0x10
840:
841: union {
842: struct FTAMfinish fti_un_finish;
843: struct FTAMabort fti_un_abort;
844: struct FTAMgroup fti_un_group;
845: struct FTAMaccess fti_un_access;
846: struct FTAMreadwrite fti_un_readwrite;
847: struct PSAPdata fti_un_data;
848: struct FTAMdataend fti_un_dataend;
849: struct FTAMcancel fti_un_cancel;
850: struct FTAMtransend fti_un_transend;
851: } fti_un;
852: #define fti_finish fti_un.fti_un_finish
853: #define fti_abort fti_un.fti_un_abort
854: #define fti_group fti_un.fti_un_group
855: #define fti_access fti_un.fti_un_access
856: #define fti_readwrite fti_un.fti_un_readwrite
857: #define fti_data fti_un.fti_un_data
858: #define fti_dataend fti_un.fti_un_dataend
859: #define fti_cancel fti_un.fti_un_cancel
860: #define fti_transend fti_un.fti_un_transend
861: };
862: \end{verbatim}\end{quote}
863: As shown, this structure is really a discriminated union
864: (a structure with a tag element followed by a union).
865: Hence, on a failure return,
866: one first coerces a pointer to the \verb"FTAMabort" structure contained
867: therein,
868: and then consults the elements of that structure.
869: \begin{quote}\index{FTAMabort}\small\begin{verbatim}
870: struct FTAMabort {
871: int fta_peer;
872:
873: int fta_action;
874:
875: #define NFDIAG 5
876: int fta_ndiag;
877: struct FTAMdiagnostic fta_diags[NFDIAG];
878: };
879: \end{verbatim}\end{quote}
880: The elements of an \verb"FTAMabort" structure are:
881: \begin{describe}
882: \item[\verb"fta\_peer":] if set, indicates that a user-initiated abort occurred
883: (an {\sf F-U-ABORT.INDICATION\/} event);
884: if not set, indicates that a provider-initiated abort occurred
885: (an {\sf F-P-ABORT.INDICATION\/} event);
886:
887: \item[\verb"fta\_action":] an action result;
888: and,
889:
890: \item[\verb"fta\_diags"/\verb"fta\_ndiag":] any diagnostic information
891: (and the number of diagnostics present).
892: \end{describe}
893: For each diagnostic present (typically only one) in the \verb"FTAMabort"
894: structure,
895: information regarding the failure is present.
896: In particular,
897: the error code can be found in the
898: the \verb"ftd_identifier" element of each diagnostic.
899:
900: After examining the information returned by \verb"FInit" on a successful call
901: (and possibly after examining the argument vector),
902: the responder should either accept or reject the association.
903: For either response,
904: the responder should use the \verb"FInitializeResponse" routine
905: (which corresponds to the {\sf F-INITIALIZE.RESPONSE\/} action).
906: \begin{quote}\index{FInitializeResonse}\small\begin{verbatim}
907: int FInitializeResponse (sd, state, action, context,
908: respondtitle, respondaddr, manage, class, units,
909: attrs, sharedASE, fqos, contents, diag, ndiag, fti)
910: int sd;
911: int state,
912: action,
913: manage,
914: class,
915: units,
916: attrs,
917: fqos;
918: OID context;
919: AEI respondtitle;
920: struct PSAPaddr *respondaddr;
921: PE sharedASE;
922: struct FTAMcontentlist *contents;
923: struct FTAMdiagnostic diag[];
924: int ndiag;
925: struct FTAMindication *fti;
926: \end{verbatim}\end{quote}
927: The parameters to this procedure are:
928: \begin{describe}
929: \item[\verb"sd":] the association-descriptor;
930:
931: \item[\verb"state":] a state result;
932:
933: \item[\verb"action":] an action result;
934:
935: \item[\verb"context":] the application context name
936: (use the manifest constant \verb"NULLOID" if the proposed name should be used);
937:
938: \item[\verb"manage":] the negotiated use of presentation context management;
939:
940: \item[\verb"respondtitle":] information on the responding application-entity,
941: if any;
942:
943: \item[\verb"respondaddr":] the responding presentation address, if any;
944:
945: \item[\verb"manage":] the negotiated service class;
946:
947: \item[\verb"units":] the negotiated functional units
948: (specify both mandatory and optional functional units for the service class);
949:
950: \item[\verb"attrs":] the negotiated attribute groups;
951:
952: \item[\verb"sharedASE":] shared ASE information;
953:
954: \item[\verb"fqos":] the negotiated FTAM Quality-of-Service;
955:
956: \item[\verb"contents":] the negotiated contents type list;
957:
958: \item[\verb"diag"/\verb"ndiag":] a list of diagnostics
959: (and the number of diagnostics in the list);
960: and,
961:
962: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure,
963: which is updated only if the call fails.
964: \end{describe}
965: If the call to \verb"FInitializeResponse" is successful,
966: then association establishment has now been completed.
967: Otherwise,
968: if the call failed and the reason is ``fatal'',
969: then the association is lost.
970:
971: \subsection {Initiator}
972: A program wishing to associate itself with a filestore
973: calls the routine \verb"FInitializeRequest",
974: which corresponds to the user taking the {\sf F-INIT\-IAL\-IZE.REQUEST\/}
975: action.
976: \begin{quote}\index{FInitializeRequest}\small\begin{verbatim}
977: int FInitializeRequest (context, callingtitle, calledtitle,
978: callingaddr, calledaddr, manage, class, units, attrs,
979: sharedASE, fqos, contents, initiator, account,
980: password, passlen, qos, tracing, ftc, fti)
981: OID context;
982: AEI calledtitle,
983: callingtitle;
984: struct PSAPaddr *calledaddr,
985: *callingaddr;
986: int manage,
987: class,
988: units,
989: attrs,
990: fqos,
991: passlen;
992: PE sharedASE;
993: struct FTAMcontentlist *contents;
994: char *initiator,
995: *account,
996: *password;
997: struct QOStype *qos;
998: IFP tracing;
999: struct FTAMconnect *ftc;
1000: struct FTAMindication *fti;
1001: \end{verbatim}\end{quote}
1002: The parameters to this procedure are:
1003: \begin{describe}
1004: \item[\verb"context":] the application context name
1005: (use the manifest constant \verb"NULLOID" to invoke the default
1006: file transfer context);
1007:
1008: \item[\verb"callingtitle":] information on the the calling application-entity,
1009: if any (consult Section~\ref{acs:aei} of \volone/);
1010:
1011: \item[\verb"calledtitle":] information on the called application-entity,
1012: if any;
1013:
1014: \item[\verb"callingaddr":] the calling presentation address
1015: (consult Section~\ref{psap:addresses} of \voltwo/);
1016:
1017: \item[\verb"calledaddr":] the called presentation address;
1018:
1019: \item[\verb"manage":] a flag indicating if presentation context management is
1020: available for use (zero if unavailable);
1021:
1022: \item[\verb"class":] the proposed service classes;
1023:
1024: \item[\verb"units":] the proposed functional units
1025: (specify both mandatory and optional functional units for the indicated
1026: service class);
1027:
1028: \item[\verb"attrs":] the proposed attribute groups;
1029:
1030: \item[\verb"sharedASE":] shared ASE information;
1031:
1032: \item[\verb"fqos":] the proposed FTAM Quality-of-Service;
1033:
1034: \item[\verb"contents":] the contents type list;
1035:
1036: \item[\verb"initiator":] the user-identity of the initiator, if any;
1037:
1038: \item[\verb"account":] the account, if any
1039:
1040: \item[\verb"password"/\verb"passlen":] the password (and its length), if any;
1041:
1042: \item[\verb"qos":] the quality of service on the connection
1043: (see Section~\ref{tsap:qos} in \voltwo/);
1044:
1045: \item[\verb"tracing":] the address of a tracing routine to be invoked when an
1046: FTAM event occurs (consult Section~\ref{ftam:tracing});
1047:
1048: \item[\verb"ftc":] a pointer to an \verb"FTAMconnect" structure,
1049: which is updated only if the call succeeds;
1050: and,
1051:
1052: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure,
1053: which is updated only if the call fails.
1054: \end{describe}
1055: If the call to \verb"FInitializeRequest" is successful
1056: (the {\sf F-INITIALIZE.CON\-FIR\-MA\-TION\/} event occurs),
1057: it returns information in the \verb"ftc" parameter
1058: which is a pointer to an \verb"FTAMconnect" structure.
1059: \begin{quote}\index{FTAMconnect}\small\begin{verbatim}
1060: struct FTAMconnect {
1061: int ftc_sd;
1062:
1063: int ftc_state;
1064: int ftc_action;
1065:
1066: AEInfo ftc_respondtitle;
1067:
1068: struct PSAPaddr ftc_respondaddr;
1069:
1070: int ftc_manage;
1071:
1072: int ftc_units;
1073: int ftc_attrs;
1074:
1075: int ftc_rollback;
1076:
1077: struct FTAMcontentlist ftc_contents;
1078:
1079: int ftc_ndiag;
1080: struct FTAMdiagnostic ftc_diags[NFDIAG];
1081:
1082: int ftc_ssdusize;
1083:
1084: struct QOStype ftc_qos;
1085: };
1086: \end{verbatim}\end{quote}
1087: The elements of an \verb"FTAMconnect" structure are:
1088: \begin{describe}
1089: \item[\verb"ftc\_sd":] the association-descriptor to be used to reference
1090: this association;
1091:
1092: \item[\verb"ftc\_state":] a state result
1093:
1094: \item[\verb"ftc\_action":] an action result
1095:
1096: \item[\verb"ftc\_respondtitle":] the responding application-entity title, if
1097: any;
1098:
1099: \item[\verb"ftc\_respondaddr":] the responding presentation address, if any;
1100:
1101: \item[\verb"ftc\_manage":] the negotiated use of presentation context
1102: management;
1103:
1104: \item[\verb"ftc\_units":] the negotiated functional units;
1105:
1106: \item[\verb"ftc\_attrs":] the negotiated attribute groups;
1107:
1108: \item[\verb"ftc\_rollback":] the negotiated rollback availability;
1109:
1110: \item[\verb"ftc\_contents":] the negotiated contents type list;
1111:
1112: \item[\verb"ftc\_diags"/\verb"ftc\_ndiag":] any diagnostic information
1113: (and the number of diagnostics present)
1114:
1115: \item[\verb"ftc\_ssdusize":] the largest atomic SSDU size that can be used
1116: on the underlying connection;
1117: and,
1118:
1119: \item[\verb"ftc\_qos":] the quality of service on the connection
1120: (see Section~\ref{tsap:qos} in \voltwo/).
1121: \end{describe}
1122: If the call to \verb"FInitializeRequest" is successful,
1123: and the \verb"ftc_state" element is set to \verb"FSTATE_SUCCESS",
1124: then association establishment has completed.
1125: If the call is successful,
1126: but the \verb"acc_result" element is not \verb"FSTATE_SUCCESS",
1127: the the association attempt has been rejected
1128: and the diagnostics present indicate the reason for the rejection.
1129: Otherwise, if the call fails then the association is not established and
1130: the \verb"FTAMabort" structure contained in the \verb"FTAMindication"
1131: discriminated union has been updated.
1132:
1133: Note that the data contained in the structure was allocated via \man malloc(3),
1134: and should be released by using the \verb"FTCFREE" macro when no longer
1135: referenced.
1136: The \verb"FTCFREE" macro,
1137: behaves as if it was defined as:
1138: \begin{quote}\index{FTCFREE}\small\begin{verbatim}
1139: void FTCFREE (ftc)
1140: struct FTAMconnect *ftc;
1141: \end{verbatim}\end{quote}
1142: The macro frees only the data allocated by \verb"FInitializeRequest",
1143: and not the \verb"FTAMconnect" structure itself.
1144: Further,
1145: \verb"FTCFREE" should be called only if the call to the
1146: \verb"FInitializeRequest" routine returned \verb"OK".
1147:
1148: \section {Event Handling}
1149: Once the association has been established,
1150: an association-descriptor is used to reference the connection.
1151: This is usually the first parameter given to any of the remaining routines in
1152: the \man libftam(3n) library.
1153: Further,
1154: the last parameter is usually a pointer to an \verb"FTAMindication" structure
1155: (as described on page~\pageref{FTAMindication}).
1156: If a call to one of these routines fails,
1157: then the structure is updated.
1158: Consult the \verb"FTAMabort" element of the \verb"FTAMindication" structure
1159: and look at the diagnostics (typically only one) present.
1160: When a diagnostic is reported by the provider,
1161: the \verb"ftd_type" element indicates if the error is ``fatal'' by having the
1162: value \verb"DIAG_PERM".
1163: Other values, such as \verb"DIAG_TRANS" indicate non-fatal errors
1164: (the association still exists).
1165: The most common non-fatal error to occur is \verb"FS_GEN_WAITING" which
1166: indicates that an indication is waiting to be read.
1167:
1168: The \verb"FWaitRequest" routine is used to wait for an event to occur.
1169: \begin{quote}\index{FWaitRequest}\small\begin{verbatim}
1170: int FWaitRequest (sd, secs, fti)
1171: int sd;
1172: int secs;
1173: struct FTAMindication *fti;
1174: \end{verbatim}\end{quote}
1175: The parameters to this procedure are:
1176: \begin{describe}
1177: \item[\verb"sd":] the association-descriptor;
1178:
1179: \item[\verb"secs":] the maximum number of seconds to wait for the event
1180: (a value of \verb"NOTOK" indicates that the call should block indefinitely,
1181: whereas a value of \verb"OK" indicates that the call should not block at all,
1182: e.g., a polling action);
1183: and,
1184:
1185: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure,
1186: which is always updated.
1187: \end{describe}
1188: If the call to \verb"FWaitRequest" returns the manifest constant \verb"NOTOK",
1189: then the \verb"FTAMabort" structure contained in the \verb"FTAMindication"
1190: parameter \verb"fti" contains the reason for the failure.
1191: Similarly,
1192: if the manifest constant \verb"OK" is returned,
1193: an event is encoded in the \verb"fti" parameter,
1194: depending on the value of the \verb"fti_type" element:
1195: \[\begin{tabular}{|l|l|}
1196: \hline
1197: \multicolumn{1}{|c|}{\bf Value}&
1198: \multicolumn{1}{c|}{\bf Event}\\
1199: \hline
1200: \tt FTI\_FINISH& \sf F-TERMINATE.INDICATION\\
1201: \hline
1202: \tt FTI\_MANAGEMENT& grouped management operation\\
1203: \hline
1204: \tt FTI\_BULKBEGIN& begin of grouped file transfer operation\\
1205: \hline
1206: \tt FTI\_BULKEND& end of grouped file transfer operation\\
1207: \hline
1208: \tt FTI\_ACCESS& \sf F-LOCATE.INDICATION\\
1209: & \sf F-LOCATE.CONFIRMATION\\
1210: & \sf F-ERASE.INDICATION\\
1211: & \sf F-ERASE.CONFIRMATION\\
1212: \hline
1213: \tt FTI\_READWRITE& \sf F-READ.INDICATION\\
1214: & \sf F-WRITE.INDICATION\\
1215: \hline
1216: \tt FTI\_DATA& \sf F-DATA.INDICATION\\
1217: \hline
1218: \tt FTI\_DATAEND& \sf F-DATA-END.INDICATION\\
1219: \hline
1220: \tt FTI\_CANCEL& \sf F-CANCEL.INDICATION\\
1221: & \sf F-CANCEL.CONFIRMATION\\
1222: \hline
1223: \tt FTI\_TRANSEND& \sf F-TRANSFER-END.INDICATION\\
1224: & \sf F-TRANSFER-END.CONFIRMATION\\
1225: \hline
1226: \end{tabular}\]
1227: These are now discussed in turn.
1228:
1229: \subsubsection {Termination Indication}
1230: When an event associated with association release occurs,
1231: the \verb"fti_type" field of the \verb"fti" parameter contains the value
1232: \verb"FTI_FINISH".
1233: Further,
1234: an \verb"FTAMfinish" structure is contained inside the \verb"fti" parameter,
1235: indicating an {\sf F-TERMINATE.INDICATION\/} event.
1236: \begin{quote}\index{FTAMfinish}\small\begin{verbatim}
1237: struct FTAMfinish {
1238: int ftf_sharedASE;
1239: };
1240: \end{verbatim}\end{quote}
1241: The elements of this structure are:
1242: \begin{describe}
1243: \item[\verb"ftf\_sharedASE":] shared ASE information.
1244: \end{describe}
1245: The \verb"FTFFREE" macro can be used to free the storage associated with an
1246: \verb"FTAMdfinish" structure (without freeing the structure itself).
1247: It behaves as if it was defined as:
1248: \begin{quote}\index{FTFFREE}\small\begin{verbatim}
1249: void FTFFREE (ftf)
1250: struct FTAMfinish *ftf;
1251: \end{verbatim}\end{quote}
1252:
1253: \subsubsection {Group Indications}
1254: Use of the grouping function unit is required in the current implementation,
1255: hence
1256: when a transfer or management indication occurs,
1257: the \verb"fti_type" field of the \verb"fti" parameter contains one of three
1258: values:
1259: \[\begin{tabular}{|l|l|}
1260: \hline
1261: \multicolumn{1}{|c|}{\bf Value}&
1262: \multicolumn{1}{c|}{\bf Event}\\
1263: \hline
1264: \tt FTI\_MANAGEMENT& grouped management operation\\
1265: \tt FTI\_BULKBEGIN& begin of grouped file transfer operation\\
1266: \tt FTI\_BULKEND& end of grouped file transfer operation\\
1267: \hline
1268: \end{tabular}\]
1269: and an \verb"FTAMgroup" structure is contained inside the \verb"fti" parameter.
1270: \begin{quote}\index{FTAMgroup}\small\begin{verbatim}
1271: struct FTAMgroup {
1272: int ftg_threshold;
1273:
1274: int ftg_flags;
1275:
1276: union {
1277: struct FTAMselect ftg_un1_select;
1278: struct FTAMcreate ftg_un1_create;
1279: struct FTAMclose ftg_un1_close;
1280: } ftg_un1;
1281: #define ftg_select ftg_un1.ftg_un1_select
1282: #define ftg_create ftg_un1.ftg_un1_create
1283: #define ftg_close ftg_un1.ftg_un1_close
1284:
1285: struct FTAMreadattr ftg_readattr;
1286:
1287: struct FTAMchngattr ftg_chngattr;
1288:
1289: union {
1290: struct FTAMdeselect ftg_un2_deselect;
1291: struct FTAMdelete ftg_un2_delete;
1292: struct FTAMopen ftg_un2_open;
1293: } ftg_un2;
1294: #define ftg_deselect ftg_un2.ftg_un2_deselect
1295: #define ftg_delete ftg_un2.ftg_un2_delete
1296: #define ftg_open ftg_un2.ftg_un2_open
1297: };
1298: \end{verbatim}\end{quote}
1299: The elements of this structure are:\label{FTAMgroup}
1300: \begin{describe}
1301: \item[\verb"ftg\_threshold":] the grouping threshold;
1302:
1303: \item[\verb"ftg\_flags":] the indications which are present,
1304: containing the inclusive-or of any of the values:
1305: \[\begin{tabular}{|l|l|}
1306: \hline
1307: \multicolumn{1}{|c|}{\bf Value}&
1308: \multicolumn{1}{c|}{\bf Meaning}\\
1309: \hline
1310: \tt FTG\_BEGIN& F-BEGIN-GROUP\\
1311: \tt FTG\_SELECT& F-SELECT\\
1312: \tt FTG\_CREATE& F-CREATE\\
1313: \tt FTG\_RDATTR& F-READ-ATTRIB\\
1314: \tt FTG\_CHATTR& F-CHANGE-ATTRIB\\
1315: \tt FTG\_OPEN& F-OPEN\\
1316: \tt FTG\_CLOSE& F-CLOSE\\
1317: \tt FTG\_DESELECT& F-DESELECT\\
1318: \tt FTG\_DELETE& F-DELETE\\
1319: \tt FTG\_END& F-END-GROUP\\
1320: \hline
1321: \end{tabular}\]
1322:
1323: \item[\verb"ftg\_select":] an \verb"FTAMselect" structure;
1324:
1325: \item[\verb"ftg\_create":] an \verb"FTAMcreate" structure;
1326:
1327: \item[\verb"ftg\_close":] an \verb"FTAMclose" structure;
1328:
1329: \item[\verb"ftg\_readattr":] an \verb"FTAMreadattr" structure;
1330:
1331: \item[\verb"ftg\_chngattr":] an \verb"FTAMchngattr" structure;
1332:
1333: \item[\verb"ftg\_deselect":] an \verb"FTAMdeselect" structure;
1334:
1335: \item[\verb"ftg\_delete":] an \verb"FTAMdelete" structure;
1336: and,
1337:
1338: \item[\verb"ftg\_open":] an \verb"FTAMopen" structure.
1339: \end{describe}
1340: The \verb"FTGFREE" macro can be used to free the storage associated with an
1341: \verb"FTAMgroup" structure (without freeing the structure itself).
1342: It behaves as if it was defined as:
1343: \begin{quote}\index{FTGFREE}\small\begin{verbatim}
1344: void FTGFREE (ftg)
1345: struct FTAMgroup *ftg;
1346: \end{verbatim}\end{quote}
1347:
1348: If the flag \verb"FTG_SELECT" is present,
1349: then \verb"ftg_select" element contains an {\sf F-SELECT\/} event encoded in an
1350: \verb"FTAMselect" structure:
1351: \begin{quote}\index{FTAMselect}\small\begin{verbatim}
1352: struct FTAMselect {
1353: int ftse_state;
1354: int ftse_action;
1355:
1356: struct FTAMattributes ftse_attrs;
1357:
1358: int ftse_access;
1359: struct FTAMpasswords ftse_pwds;
1360: struct FTAMconcurrency ftse_conctl;
1361:
1362: PE ftse_sharedASE;
1363:
1364: char *ftse_account;
1365:
1366: int ftse_ndiag;
1367: struct FTAMdiagnostic ftse_diags[NFDIAG];
1368: };
1369: \end{verbatim}\end{quote}
1370: The elements of this structure are:
1371: \begin{describe}
1372: \item[\verb"ftse\_state":] the state result ({\sf .RESPONSE\/} only);
1373:
1374: \item[\verb"ftse\_action":] the action result ({\sf .RESPONSE\/} only);
1375:
1376: \item[\verb"ftse\_attrs":] file attributes;
1377:
1378: \item[\verb"ftse\_access":] requested access,
1379: containing the inclusive-or of any of the values
1380: found in Table~\ref{FTAMaccess} ({\sf .REQUEST\/} only);
1381:
1382: \item[\verb"ftse\_pwds":] access passwords ({\sf .REQUEST\/} only);
1383:
1384: \item[\verb"ftse\_conctl":] concurrency control ({\sf .REQUEST\/} only);
1385:
1386: \item[\verb"ftse\_sharedASE":] shared ASE information ({\sf .REQUEST\/} only);
1387:
1388: \item[\verb"ftse\_account":] account ({\sf .REQUEST\/} only);
1389: and,
1390:
1391: \item[\verb"ftse\_diags"/\verb"ftse\_ndiag":] any diagnostic information
1392: (and the number of diagnostics present, {\sf .RESPONSE\/} only).
1393: \end{describe}
1394: Note that the data contained in the structure was allocated via \man malloc(3),
1395: and should be released with the \verb"FTSEFREE" macro when no longer needed.
1396: The \verb"FTSEFREE" macro
1397: behaves as if it was defined as:
1398: \begin{quote}\index{FTSEFREE}\small\begin{verbatim}
1399: void FTSEFREE (ftse)
1400: struct FTAMselect *ftse;
1401: \end{verbatim}\end{quote}
1402: The macro frees only the data allocated by \verb"FWaitRequest",
1403: and not the \verb"FTAMselect" structure itself.
1404: Note that the macro \verb"FTGFREE" when applied to the group,
1405: will call \verb"FTSEFREE" as appropriate.
1406:
1407: If the flag \verb"FTG_CREATE" is present,
1408: then \verb"ftg_create" element contains an {\sf F-CREATE\/} event encoded in an
1409: \verb"FTAMcreate" structure:
1410: \begin{quote}\index{FTAMcreate}\small\begin{verbatim}
1411: struct FTAMcreate {
1412: int ftce_state;
1413: int ftce_action;
1414:
1415: int ftce_override;
1416: char *ftce_create;
1417: int ftce_crelen;
1418:
1419: struct FTAMattributes ftce_attrs;
1420:
1421: int ftce_access;
1422: struct FTAMpasswords ftce_pwds;
1423: struct FTAMconcurrency ftce_conctl;
1424:
1425: PE ftce_sharedASE;
1426:
1427: char *ftce_account;
1428:
1429: int ftce_ndiag;
1430: struct FTAMdiagnostic ftce_diags[NFDIAG];
1431: };
1432: \end{verbatim}\end{quote}
1433: The elements of this structure are:
1434: \begin{describe}
1435: \item[\verb"ftce\_state":] the state result ({\sf .RESPONSE\/} only);
1436:
1437: \item[\verb"ftce\_action":] the action result ({\sf .RESPONSE\/} only);
1438:
1439: \item[\verb"ftce\_override":] the override setting, one of:
1440: \[\begin{tabular}{|l|l|}
1441: \hline
1442: \multicolumn{1}{|c|}{\bf Value}&
1443: \multicolumn{1}{c|}{\bf Meaning}\\
1444: \hline
1445: \tt FOVER\_FAIL& fail, if already exists\\
1446: \tt FOVER\_SELECT& select, if already exists\\
1447: \tt FOVER\_WRITE& zero-truncate, if already exists\\
1448: \tt FOVER\_DELETE& delete, if already exists\\
1449: \hline
1450: \end{tabular}\]
1451: ({\sf .REQUEST\/} only);
1452:
1453: \item[\verb"ftce\_attrs":] file attributes;
1454:
1455: \item[\verb"ftce\_create"/\verb"ftce\_crelen":] the
1456: create password and its length, if any ({\sf .REQUEST\/} only);
1457:
1458: \item[\verb"ftce\_access":] requested access,
1459: containing the inclusive-or of any of the values
1460: found in Table~\ref{FTAMaccess} ({\sf .REQUEST\/} only);
1461:
1462: \item[\verb"ftce\_pwds":] access passwords ({\sf .REQUEST\/} only);
1463:
1464: \item[\verb"ftce\_conctl":] concurrency control ({\sf .REQUEST\/} only);
1465:
1466: \item[\verb"ftce\_sharedASE":] shared ASE information ({\sf .REQUEST\/} only);
1467:
1468: \item[\verb"ftce\_account":] account ({\sf .REQUEST\/} only);
1469: and,
1470:
1471: \item[\verb"ftce\_diags"/\verb"ftce\_ndiag":] any diagnostic information
1472: (and the number of diagnostics present, {\sf .RESPONSE\/} only).
1473: \end{describe}
1474: Note that the data contained in the structure was allocated via \man malloc(3),
1475: and should be released with the \verb"FTCEFREE" macro when no longer needed.
1476: The \verb"FTCEFREE" macro
1477: behaves as if it was defined as:
1478: \begin{quote}\index{FTCEFREE}\small\begin{verbatim}
1479: void FTCEFREE (ftce)
1480: struct FTAMcreate *ftce;
1481: \end{verbatim}\end{quote}
1482: The macro frees only the data allocated by \verb"FWaitRequest",
1483: and not the \verb"FTAMcreate" structure itself.
1484: Note that the macro \verb"FTGFREE" when applied to the group,
1485: will call \verb"FTCEFREE" as appropriate.
1486:
1487: If the flag \verb"FTG_RDATTR" is present,
1488: then \verb"ftg_readattr" element contains an {\sf F-READ-ATTRIB\/} event encoded in an
1489: \verb"FTAMreadattr" structure:
1490: \begin{quote}\index{FTAMreadattr}\small\begin{verbatim}
1491: struct FTAMreadattr {
1492: int ftra_action;
1493:
1494: int ftra_attrnames;
1495:
1496: struct FTAMattributes ftra_attrs;
1497: int ftra_ndiag;
1498: struct FTAMdiagnostic ftra_diags[NFDIAG];
1499: };
1500: \end{verbatim}\end{quote}
1501: The elements of this structure are:
1502: \begin{describe}
1503: \item[\verb"ftra\_action":] the action result ({\sf .RESPONSE\/} only);
1504:
1505: \item[\verb"ftra\_attrnames":] the attributes to read,
1506: containing the inclusive-or of any of the values shown in
1507: Table~\ref{FTAMattributes} on page~\pageref{FTAMattributes}
1508: ({\sf .REQUEST\/} only);
1509:
1510: \item[\verb"ftra\_attrs":] the attribute values
1511: ({\sf .RESPONSE\/} only);
1512: and,
1513:
1514: \item[\verb"ftra\_diags"/\verb"ftra\_ndiag":] any diagnostic information
1515: (and the number of diagnostics present, {\sf .RESPONSE\/} only).
1516: \end{describe}
1517: Note that the data contained in the structure was allocated via \man malloc(3),
1518: and should be released with the \verb"FTRAFREE" macro when no longer needed.
1519: The \verb"FTRAFREE" macro
1520: behaves as if it was defined as:
1521: \begin{quote}\index{FTRAFREE}\small\begin{verbatim}
1522: void FTRAFREE (ftra)
1523: struct FTAMreadattr *ftra;
1524: \end{verbatim}\end{quote}
1525: The macro frees only the data allocated by \verb"FWaitRequest",
1526: and not the \verb"FTAMreadattr" structure itself.
1527: Note that the macro \verb"FTGFREE" when applied to the group,
1528: will call \verb"FTRAFREE" as appropriate.
1529:
1530: If the flag \verb"FTG_CHNGATTR" is present,
1531: then \verb"ftg_chngattr" element contains an {\sf F-CHANGE-ATTRIB\/} event encoded in
1532: an \verb"FTAMchngattr" structure:
1533: \begin{quote}\index{FTAMchngattr}\small\begin{verbatim}
1534: struct FTAMchngattr {
1535: int ftca_action;
1536:
1537: struct FTAMattributes ftca_attrs;
1538:
1539: int ftca_ndiag;
1540: struct FTAMdiagnostic ftca_diags[NFDIAG];
1541: };
1542: \end{verbatim}\end{quote}
1543: The elements of this structure are:
1544: \begin{describe}
1545: \item[\verb"ftca\_action":] the action result ({\sf .RESPONSE\/} only);
1546:
1547: \item[\verb"ftca\_attrs":] the attribute values to change
1548: (in a {\sf .REQUEST\/}),
1549: and possibly the new values (in a {\sf .RESPONSE\/});
1550: and,
1551:
1552: \item[\verb"ftca\_diags"/\verb"ftca\_ndiag":] any diagnostic information
1553: (and the number of diagnostics present, {\sf .RESPONSE\/} only).
1554: \end{describe}
1555: Note that the data contained in the structure was allocated via \man malloc(3),
1556: and should be released with the \verb"FTCAFREE" macro when no longer needed.
1557: The \verb"FTCAFREE" macro
1558: behaves as if it was defined as:
1559: \begin{quote}\index{FTCAFREE}\small\begin{verbatim}
1560: void FTCAFREE (ftca)
1561: struct FTAMchngattr *ftca;
1562: \end{verbatim}\end{quote}
1563: The macro frees only the data allocated by \verb"FWaitRequest",
1564: and not the \verb"FTAMchngattr" structure itself.
1565: Note that the macro \verb"FTGFREE" when applied to the group,
1566: will call \verb"FTCAFREE" as appropriate.
1567:
1568: If the flag \verb"FTG_OPEN" is present,
1569: then \verb"ftg_open" element contains an {\sf F-OPEN\/} event encoded in an
1570: \verb"FTAMopen" structure:
1571: \begin{quote}\index{FTAMopen}\small\begin{verbatim}
1572: struct FTAMopen {
1573: int ftop_state;
1574: int ftop_action;
1575:
1576: int ftop_mode;
1577:
1578: OID ftop_contents;
1579: PE ftop_parameter;
1580: struct FTAMconcurrency ftop_conctl;
1581: PE ftop_sharedASE;
1582:
1583: int ftop_locking;
1584:
1585: int ftop_ndiag;
1586: struct FTAMdiagnostic ftop_diags[NFDIAG];
1587: };
1588: \end{verbatim}\end{quote}
1589: The elements of this structure are:
1590: \begin{describe}
1591: \item[\verb"ftop\_state":] the state result ({\sf .RESPONSE\/} only);
1592:
1593: \item[\verb"ftop\_action":] the action result ({\sf .RESPONSE\/} only);
1594:
1595: \item[\verb"ftop\_mode":] the processing mode,
1596: containing the inclusive-or of any of the values shown in
1597: Table~\ref{FTAMaccess} on page~\pageref{FTAMaccess}
1598: ({\sf .REQUEST\/} only);
1599:
1600: \item[\verb"ftop\_contents"/\verb"ftop\_parameter":] the contents type;
1601:
1602: \item[\verb"ftop\_conctl":] concurrency control;
1603:
1604: \item[\verb"ftop\_sharedASE":] shared ASE information;
1605:
1606: \item[\verb"ftop\_locking":] enable FADU locking ({\sf .REQUEST\/} only);
1607: and,
1608:
1609: \item[\verb"ftop\_diags"/\verb"ftop\_ndiag":] any diagnostic information
1610: (and the number of diagnostics present, {\sf .RESPONSE\/} only).
1611: \end{describe}
1612: Note that the data contained in the structure was allocated via \man malloc(3),
1613: and should be released with the \verb"FTOPFREE" macro when no longer needed.
1614: The \verb"FTOPFREE" macro
1615: behaves as if it was defined as:
1616: \begin{quote}\index{FTOPFREE}\small\begin{verbatim}
1617: void FTOPFREE (ftop)
1618: struct FTAMopen *ftop;
1619: \end{verbatim}\end{quote}
1620: The macro frees only the data allocated by \verb"FWaitRequest",
1621: and not the \verb"FTAMopen" structure itself.
1622: Note that the macro \verb"FTGFREE" when applied to the group,
1623: will call \verb"FTOPFREE" as appropriate.
1624:
1625: If the flag \verb"FTG_CLOSE" is present,
1626: then \verb"ftg_close" element contains an {\sf F-CLOSE\/} event encoded in an
1627: \verb"FTAMclose" structure:
1628: \begin{quote}\index{FTAMclose}\small\begin{verbatim}
1629: struct FTAMclose {
1630: int ftcl_action;
1631:
1632: PE ftcl_sharedASE;
1633:
1634: int ftcl_ndiag;
1635: struct FTAMdiagnostic ftcl_diags[NFDIAG];
1636: };
1637: \end{verbatim}\end{quote}
1638: The elements of this structure are:
1639: \begin{describe}
1640: \item[\verb"ftcl\_action":] the action result;
1641:
1642: \item[\verb"ftcl\_sharedASE":] shared ASE information;
1643: and,
1644:
1645: \item[\verb"ftcl\_diags"/\verb"ftcl\_ndiag":] any diagnostic information
1646: (and the number of diagnostics present).
1647: \end{describe}
1648: Note that the data contained in the structure was allocated via \man malloc(3),
1649: and should be released with the \verb"FTCLFREE" macro when no longer needed.
1650: The \verb"FTCLFREE" macro
1651: behaves as if it was defined as:
1652: \begin{quote}\index{FTCLFREE}\small\begin{verbatim}
1653: void FTCLFREE (ftcl)
1654: struct FTAMclose *ftcl;
1655: \end{verbatim}\end{quote}
1656: The macro frees only the data allocated by \verb"FWaitRequest",
1657: and not the \verb"FTAMclose" structure itself.
1658: Note that the macro \verb"FTGFREE" when applied to the group,
1659: will call \verb"FTCLFREE" as appropriate.
1660:
1661: If the flag \verb"FTG_DESELECT" is present,
1662: then \verb"ftg_deselect" element contains an {\sf F-DESELECT\/} event encoded in an
1663: \verb"FTAMdeselect" structure:
1664: \begin{quote}\index{FTAMdeselect}\small\begin{verbatim}
1665: struct FTAMdeselect {
1666: int ftde_action;
1667:
1668: PE ftde_sharedASE;
1669:
1670: struct FTAMcharging ftde_charges;
1671: int ftde_ndiag;
1672: struct FTAMdiagnostic ftde_diags[NFDIAG];
1673: };
1674: \end{verbatim}\end{quote}
1675: The elements of this structure are:
1676: \begin{describe}
1677: \item[\verb"ftde\_action":] the action result ({\sf .RESPONSE\/} only);
1678:
1679: \item[\verb"ftde\_sharedASE":] shared ASE information;
1680:
1681: \item[\verb"ftde\_charges":] any charges ({\sf .RESPONSE\/} only);
1682: and,
1683:
1684: \item[\verb"ftde\_diags"/\verb"ftde\_ndiag":] any diagnostic information
1685: (and the number of diagnostics present, {\sf .RESPONSE\/} only).
1686: \end{describe}
1687: Note that the data contained in the structure was allocated via \man malloc(3),
1688: and should be released with the \verb"FTDEFREE" macro when no longer needed.
1689: The \verb"FTDEFREE" macro
1690: behaves as if it was defined as:
1691: \begin{quote}\index{FTDEFREE}\small\begin{verbatim}
1692: void FTDEFREE (ftde)
1693: struct FTAMdeselect *ftde;
1694: \end{verbatim}\end{quote}
1695: The macro frees only the data allocated by \verb"FWaitRequest",
1696: and not the \verb"FTAMdeselect" structure itself.
1697: Note that the macro \verb"FTGFREE" when applied to the group,
1698: will call \verb"FTDEFREE" as appropriate.
1699:
1700: If the flag \verb"FTG_DELETE" is present,
1701: then \verb"ftg_delete" element contains an {\sf F-DELETE\/} event encoded in an
1702: \verb"FTAMdelete" structure:
1703: \begin{quote}\index{FTAMdelete}\small\begin{verbatim}
1704: struct FTAMdelete {
1705: int ftxe_action;
1706:
1707: PE ftxe_sharedASE;
1708:
1709: struct FTAMcharging ftxe_charges;
1710: int ftxe_ndiag;
1711: struct FTAMdiagnostic ftxe_diags[NFDIAG];
1712: };
1713: \end{verbatim}\end{quote}
1714: The elements of this structure are:
1715: \begin{describe}
1716: \item[\verb"ftxe\_action":] the action result ({\sf .RESPONSE\/} only);
1717:
1718: \item[\verb"ftxe\_sharedASE":] shared ASE information;
1719:
1720: \item[\verb"ftxe\_charges":] any charges ({\sf .RESPONSE\/} only);
1721: and,
1722:
1723: \item[\verb"ftxe\_diags"/\verb"ftxe\_ndiag":] any diagnostic information
1724: (and the number of diagnostics present, {\sf .RESPONSE\/} only).
1725: \end{describe}
1726: Note that the data contained in the structure was allocated via \man malloc(3),
1727: and should be released with the \verb"FTXEFREE" macro when no longer needed.
1728: The \verb"FTXEFREE" macro
1729: behaves as if it was defined as:
1730: \begin{quote}\index{FTXEFREE}\small\begin{verbatim}
1731: void FTXEFREE (ftxe)
1732: struct FTAMdeltee *ftxe;
1733: \end{verbatim}\end{quote}
1734: The macro frees only the data allocated by \verb"FWaitRequest",
1735: and not the \verb"FTAMdelete" structure itself.
1736: Note that the macro \verb"FTGFREE" when applied to the group,
1737: will call \verb"FTXEFREE" as appropriate.
1738:
1739: \subsubsection {Access Indications}
1740: When an event associated with file access occurs,
1741: the \verb"fti_type" field of the \verb"fti" parameter contains the value
1742: \verb"FTI_ACCESS".
1743: Further,
1744: an \verb"FTAMaccess" structure is contained inside the \verb"fti" parameter,
1745: indicating an {\sf F-LOCATE\/} or {\sf F-ERASE\/} event.
1746: \begin{quote}\index{FTAMaccess}\small\begin{verbatim}
1747: struct FTAMaccess {
1748: int ftac_operation;
1749:
1750: int ftac_action;
1751:
1752: struct FADUidentity ftac_identity;
1753:
1754: int ftac_locking;
1755:
1756: int ftac_ndiag;
1757: struct FTAMdiagnostic ftac_diags[NFDIAG];
1758: };
1759: \end{verbatim}\end{quote}
1760: The elements of this structure are:
1761: \begin{describe}
1762: \item[\verb"ftac\_operation":] the operation,
1763: one of the values shown in Table~\ref{FTAMaccessops};
1764:
1765: \item[\verb"ftac\_action":] the action result ({\sf .CONFIRMATION\/} only);
1766:
1767: \item[\verb"ftac\_identity":] the FADU identity
1768: (either {\sf .INDICATION\/} and optionally on {\sf F-LOCATE.CONFIRMATION\/});
1769:
1770: \item[\verb"ftac\_locking":] FADU locked ({\sf F-LOCATE.INDICATION\/} only);
1771: and,
1772:
1773: \item[\verb"ftac\_diags"/\verb"ftac\_ndiag":] any diagnostic information
1774: (and the number of diagnostics present, {\sf .CONFIRMATION\/} only).
1775: \end{describe}
1776: Note that the data contained in the structure was allocated via \man malloc(3),
1777: and should be released with the \verb"FTACFREE" macro when no longer needed.
1778: The \verb"FTACFREE" macro
1779: behaves as if it was defined as:
1780: \begin{quote}\index{FTACFREE}\small\begin{verbatim}
1781: void FTACFREE (ftac)
1782: struct FTAMaccess *ftac;
1783: \end{verbatim}\end{quote}
1784: The macro frees only the data allocated by \verb"FWaitRequest",
1785: and not the \verb"FTAMaccess" structure itself.
1786: \tagtable[tp]{ftam-5}{FTAM Access Operations}{FTAMaccessops}
1787:
1788: \subsubsection {Read/Write Indications}
1789: When an event associated with the beginning of bulk data transfer occurs,
1790: the \verb"fti_type" field of the \verb"fti" parameter contains the value
1791: \verb"FTI_READWRITE".
1792: Further,
1793: an \verb"FTAMreadwrite" structure is contained inside the \verb"fti" parameter,
1794: indicating an {\sf F-READ.INDICATION\/} or {\sf F-WRITE.INDICATION\/} event.
1795: \begin{quote}\index{FTAMreadwrite}\small\begin{verbatim}
1796: struct FTAMreadwrite {
1797: int ftrw_operation;
1798:
1799: struct FADUidentity ftrw_identity;
1800:
1801: int ftrw_context;
1802: int ftrw_level;
1803:
1804: int ftrw_locking;
1805: };
1806: \end{verbatim}\end{quote}
1807: The elements of this structure are:
1808: \begin{describe}
1809: \item[\verb"ftrw\_operation":] the operation,
1810: one of the values shown in Table~\ref{FTAMdataops};
1811:
1812: \item[\verb"ftrw\_identity":] the FADU identity;
1813:
1814: \item[\verb"ftrw\_context"/\verb"ftrw\_level":] the access context,
1815: one of the values shown in Table~\ref{FTAMcontexts}
1816: ({\sf F-READ.INDICATION\/} only);
1817: and,
1818:
1819: \item[\verb"ftrw\_locking":] FADU locked.
1820: \end{describe}
1821: Note that the data contained in the structure was allocated via \man malloc(3),
1822: and should be released with the \verb"FTRWFREE" macro when no longer needed.
1823: The \verb"FTRWFREE" macro
1824: behaves as if it was defined as:
1825: \begin{quote}\index{FTRWFREE}\small\begin{verbatim}
1826: void FTRWFREE (ftrw)
1827: struct FTAMreadwrite *ftrw;
1828: \end{verbatim}\end{quote}
1829: The macro frees only the data allocated by \verb"FWaitRequest",
1830: and not the \verb"FTAMreadwrite" structure itself.
1831: \tagtable[tp]{ftam-4}{FTAM Data Operations}{FTAMdataops}
1832: \tagtable[tp]{ftam-3}{FTAM Access Contexts}{FTAMcontexts}
1833:
1834: \subsubsection {Data Indications}\label{ftam:data}
1835: When an event associated with user data occurs,
1836: the \verb"fti_type" field of the \verb"fti" parameter contains the value
1837: \verb"FTI_DATA",
1838: and an \verb"PSAPdata" structure
1839: (described in Chapter~\ref{libpsap2} of \voltwo/)
1840: is contained inside the \verb"fti" parameter,
1841: indicating an {\sf F-DATA.INDICATION\/} event.
1842: To distinguish between structure and contents,
1843: FTAM uses different presentation context identifiers.
1844: If the \verb"pe_context" field of any presentation element contains the value
1845: \verb"PE_DFLT_CONTEXT",
1846: then the element contains structuring information in the FTAM PCI,
1847: and the \verb"pe_id" element should be consulted to determine the particular
1848: structuring information being conveyed:
1849: \[\begin{tabular}{|l|l|}
1850: \hline
1851: \multicolumn{1}{|c|}{\bf Value}&
1852: \multicolumn{1}{c|}{\bf Meaning}\\
1853: \hline
1854: \tt FADU\_NODESCR& node descriptor data element\\
1855: \tt FADU\_ENTERTREE& enter subtree data element\\
1856: \tt FADU\_EXITREE& exit subtree data element\\
1857: \hline
1858: \end{tabular}\]
1859: Otherwise,
1860: the element contains file contents as defined in the PCI for the
1861: document type being transferred.
1862:
1863: \subsubsection {Data End Indication}
1864: When an event associated with the end of bulk data transfer occurs,
1865: the \verb"fti_type" field of the \verb"fti" parameter contains the value
1866: \verb"FTI_DATAEND".
1867: Further,
1868: an \verb"FTAMdataend" structure is contained inside the \verb"fti" parameter,
1869: indicating an {\sf F-DATA-END.INDICATION\/} event.
1870: \begin{quote}\index{FTAMdataend}\small\begin{verbatim}
1871: struct FTAMdataend {
1872: int ftda_action;
1873:
1874: int ftda_ndiag;
1875: struct FTAMdiagnostic ftda_diags[NFDIAG];
1876: };
1877: \end{verbatim}\end{quote}
1878: The elements of this structure are:
1879: \begin{describe}
1880: \item[\verb"ftda\_action":] the action result;
1881: and,
1882:
1883: \item[\verb"ftda\_diags"/\verb"ftda\_ndiag":] any diagnostic information
1884: (and the number of diagnostics present).
1885: \end{describe}
1886:
1887: \subsubsection {Cancel Indications}
1888: When an event associated with the cancellation of bulk data transfer occurs,
1889: the \verb"fti_type" field of the \verb"fti" parameter contains the value
1890: \verb"FTI_CANCEL".
1891: Further,
1892: an \verb"FTAMcancel" structure is contained inside the \verb"fti" parameter,
1893: indicating an {\sf F-CANCEL\/} event.
1894: \begin{quote}\index{FTAMcancel}\small\begin{verbatim}
1895: struct FTAMcancel {
1896: int ftcn_action;
1897:
1898: PE ftcn_sharedASE;
1899:
1900: int ftcn_ndiag;
1901: struct FTAMdiagnostic ftcn_diags[NFDIAG];
1902: };
1903: \end{verbatim}\end{quote}
1904: The elements of this structure are:
1905: \begin{describe}
1906: \item[\verb"ftcn\_action":] the action result;
1907:
1908: \item[\verb"ftcn\_sharedASE":] shared ASE information;
1909: and,
1910:
1911: \item[\verb"ftcn\_diags"/\verb"ftcn\_ndiag":] any diagnostic information
1912: (and the number of diagnostics present).
1913: \end{describe}
1914: Note that the data contained in the structure was allocated via \man malloc(3),
1915: and should be released with the \verb"FTCNFREE" macro when no longer needed.
1916: The \verb"FTCNFREE" macro
1917: behaves as if it was defined as:
1918: \begin{quote}\index{FTCNFREE}\small\begin{verbatim}
1919: void FTCNFREE (ftcn)
1920: struct FTAMcancel *ftcn;
1921: \end{verbatim}\end{quote}
1922: The macro frees only the data allocated by \verb"FWaitRequest",
1923: and not the \verb"FTAMcancel" structure itself.
1924:
1925: \subsubsection {Transfer End Indications}
1926: When an event associated with the termination of bulk data transfer occurs,
1927: the \verb"fti_type" field of the \verb"fti" parameter contains the value
1928: \verb"FTI_TRANSEND".
1929: Further,
1930: an \verb"FTAMtransend" structure is contained inside the \verb"fti" parameter,
1931: indicating an {\sf F-TRANSFER-END\/} event.
1932: \begin{quote}\index{FTAMtransend}\small\begin{verbatim}
1933: struct FTAMtransend {
1934: int ftre_action;
1935:
1936: PE ftre_sharedASE;
1937:
1938: int ftre_ndiag;
1939: struct FTAMdiagnostic ftre_diags[NFDIAG];
1940: };
1941: \end{verbatim}\end{quote}
1942: The elements of this structure are:
1943: \begin{describe}
1944: \item[\verb"ftre\_action":] the action result ({\sf .RESPONSE\/} only);
1945:
1946: \item[\verb"ftre\_sharedASE":] shared ASE information;
1947: and,
1948:
1949: \item[\verb"ftre\_diags"/\verb"ftre\_ndiag":] any diagnostic information
1950: (and the number of diagnostics present, {\sf .RESPONSE\/} only).
1951: \end{describe}
1952: Note that the data contained in the structure was allocated via \man malloc(3),
1953: and should be released with the \verb"FTREFREE" macro when no longer needed.
1954: The \verb"FTREFREE" macro
1955: behaves as if it was defined as:
1956: \begin{quote}\index{FTREFREE}\small\begin{verbatim}
1957: void FTREFREE (ftre)
1958: struct FTAMtransend *ftre;
1959: \end{verbatim}\end{quote}
1960: The macro frees only the data allocated by \verb"FWaitRequest",
1961: and not the \verb"FTAMtransend" structure itself.
1962:
1963: \subsection {Asynchronous Event Handling}
1964: Thus far the discussion on event handling has been synchronous in nature.
1965: Some users of FTAM may wish an asynchronous interface.
1966: The \verb"FSetIndications" routine is used to change the service associated
1967: with an association-descriptor to or from an asynchronous interface.
1968: \begin{quote}\index{FSetIndications}\small\begin{verbatim}
1969: int FSetIndications (sd, indication, fti)
1970: int sd;
1971: int (*indication) ();
1972: struct FTAMindication *fti;
1973: \end{verbatim}\end{quote}
1974: The parameters to this procedure are:
1975: \begin{describe}
1976: \item[\verb"sd":] the association-descriptor;
1977:
1978: \item[\verb"indication":] the address of an event-handler routine to be
1979: invoked when an indication occurs;
1980: and,
1981:
1982: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
1983: updated only if the call fails.
1984: \end{describe}
1985: If the service is to be made asynchronous,
1986: then the event handler is specified,
1987: otherwise,
1988: if the service is to be made synchronous,
1989: then the handler should not be specified
1990: (use the manifest constant \verb"NULLIFP").
1991: The most likely reason for the call failing is \verb"FS_GEN_WAITING",
1992: which indicates that an event is waiting for the user.
1993:
1994: When an event-handler is invoked,
1995: future invocations of the event-hander are blocked until it returns.
1996: The return value of the event-handler is ignored.
1997: Further,
1998: during the execution of a synchronous call to the library,
1999: the event-handler will be blocked from being invoked.
2000:
2001: When an event occurs,
2002: the event-handler routine is invoked with two parameters:
2003: \begin{quote}\small\begin{verbatim}
2004: (*indication) (sd, fti);
2005: int sd;
2006: struct FTAMindication *fti;
2007: \end{verbatim}\end{quote}
2008: The parameters are:
2009: \begin{describe}
2010: \item[\verb"sd":] the association-descriptor;
2011: and,
2012:
2013: \item[\verb"fti":] a pointer to the \verb"FTAMindication" structure containing
2014: the indication.
2015: \end{describe}
2016:
2017: \[\fbox{\begin{tabular}{lp{0.8\textwidth}}
2018: \bf NOTE:& The \man libftam(3n) library uses the SIGEMT signal to provide
2019: these services.
2020: Programs using asynchronous association-descriptors should NOT
2021: use SIGEMT for other purposes.
2022: \end{tabular}}\]
2023:
2024: \subsection {Synchronous Event Multiplexing}
2025: A user of FTAM may wish to manage multiple
2026: association-descriptors simultaneously;
2027: the routine \verb"FSelectMask" is provided for this purpose.
2028: This routine updates a file-descriptor mask and associated counter for use
2029: with \verb"xselect".
2030: \begin{quote}\index{FSelectMask}\small\begin{verbatim}
2031: int FSelectMask (sd, mask, nfds, fti)
2032: int sd;
2033: fd_set *mask;
2034: int *nfds;
2035: struct FTAMindication *fti;
2036: \end{verbatim}\end{quote}
2037: The parameters to this procedure are:
2038: \begin{describe}
2039: \item[\verb"sd":] the association-descriptor;
2040:
2041: \item[\verb"mask":] a pointer to a file-descriptor mask meaningful to
2042: \verb"xselect";
2043:
2044: \item[\verb"nfds":] a pointer to an integer-valued location meaningful to
2045: \verb"xselect";
2046: and,
2047:
2048: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is updated
2049: only if the call fails.
2050: \end{describe}
2051: If the call is successful, then the \verb"mask" and \verb"nfds" parameters can
2052: be used as arguments to \verb"xselect".
2053: The most likely reason for the call failing is \verb"FS_GEN_WAITING",
2054: which indicates that an event is waiting for the user.
2055:
2056: If \verb"xselect" indicates that the association-descriptor is ready for
2057: reading,
2058: \verb"FWaitRequest" should be called with the \verb"secs" parameter equal to
2059: \verb"OK".
2060: If the network activity does not constitute an entire event for the user,
2061: then \verb"FWaitRequest" will return \verb"NOTOK" with error code
2062: \verb"FS_PRO_TIMEOUT".
2063:
2064: \subsection {Tracing}\label{ftam:tracing}
2065: Users may wish to trace FTAM events as they are processed.
2066: The routine \verb"FHookRequest" is used to set (or unset) the user-defined
2067: tracing routine.
2068: \begin{quote}\index{FHookRequest}\small\begin{verbatim}
2069: int FHookRequest (sd, tracing, fti)
2070: int sd;
2071: int (*tracing) ();
2072: \end{verbatim}\end{quote}
2073: The parameters to this procedure are:
2074: \begin{describe}
2075: \item[\verb"sd":] the association-descriptor;
2076:
2077: \item[\verb"tracing":] the address of a tracing routine to be invoked when an
2078: FTAM event occurs;
2079: and,
2080:
2081: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is updated
2082: only if the call fails.
2083: \end{describe}
2084: If tracing is to be enabled,
2085: then the tracing routine is specified,
2086: otherwise,
2087: if tracing is to be turned off, the manifest constant \verb"NULLIFP" should
2088: be used.
2089:
2090: When an event occurs,
2091: the tracing routine is invoked with five parameters:
2092: \begin{quote}\small\begin{verbatim}
2093: (*tracing) (sd, event, fpdu, pe, rw)
2094: \end{verbatim}\end{quote}
2095: The parameters are:
2096: \begin{describe}
2097: \item[\verb"sd":] the association-descriptor;
2098:
2099: \item[\verb"event":] the name of the underlying service primitive
2100: (association control or presentation) associated with the FTAM event;
2101:
2102: \item[\verb"fpdu":] the name of the FTAM PDU, if any;
2103:
2104: \item[\verb"pe":] a presentation element containing the FTAM PDU
2105: associated with the FTAM event
2106: (described in Chapter~\ref{libpsap} of \volone/), if any;
2107: and,
2108:
2109: \item[\verb"rw":] a flag saying whether the event is being initiated (zero)
2110: or being received (non-zero).
2111: \end{describe}
2112: The return value of the tracing routine is ignored.
2113:
2114: One pre-defined tracing routine is available, \verb"FTraceHook"
2115: \index{FHookRequest},
2116: which simply appends tracing information to the log determined by
2117: \begin{quote}\index{ftamfile}\small\begin{verbatim}
2118: LLog *ftam_log;
2119: \end{verbatim}\end{quote}
2120: See Chapter~\ref{logging} in \voltwo/ for all the details.
2121:
2122: \section {Grouped Operations: File Transfer}
2123: The \verb"FBulkBeginRequest" routine is used to issue a grouped file transfer
2124: request consisting of:
2125: \begin{itemize}
2126: \item {\sf F-BEGIN-GROUP.REQUEST\/};
2127:
2128: \item {\sf F-SELECT.REQUEST\/} or {\sf F-CREATE.REQUEST\/};
2129:
2130: \item optionally, {\sf F-READ-ATTRIB.REQUEST\/};
2131:
2132: \item optionally, {\sf F-CHANGE-ATTRIB.REQUEST\/};
2133:
2134: \item {\sf F-OPEN.REQUEST\/};
2135: and,
2136:
2137: \item {\sf F-END-GROUP.REQUEST}.
2138: \end{itemize}
2139: The user initializes an \verb"FTAMgroup" structure
2140: (described in tedious detail on page~\pageref{FTAMgroup})
2141: and then invokes \verb"FBulkRequest".
2142: \begin{quote}\index{FBulkRequest}\small\begin{verbatim}
2143: int FBulkRequest (sd, ftg, fti)
2144: int sd;
2145: struct FTAMgroup *ftg;
2146: struct FTAMindication *fti;
2147: \end{verbatim}\end{quote}
2148: The parameters to this procedure are:
2149: \begin{describe}
2150: \item[\verb"sd":] the association-descriptor;
2151:
2152: \item[\verb"ftg":] a pointer to an \verb"FTAMgroup" structure;
2153: and,
2154:
2155: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2156: always updated.
2157: \end{describe}
2158: If the call to \verb"FBulkBeginRequest" is successful,
2159: then this corresponds to the appropriate {\sf .CONFIRMATION\/} events,
2160: the \verb"fti_type" element of the \verb"fti" parameter is set to
2161: \verb"FTI_BULKBEGIN",
2162: and the \verb"fti_group" element contains the results.
2163: Note that the data contained in the structure was allocated via \man malloc(3),
2164: and should be released with the \verb"FTGFREE" macro when no longer needed.
2165:
2166: Otherwise if the call fails,
2167: the \verb"FTAMabort" structure contained in the
2168: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2169:
2170: Upon receiving an \verb"FTI_BULKBEGIN" indication,
2171: containing the appropriate {\sf .INDICATION\/} events,
2172: the responder is required to generate the appropriate {\sf .RESPONSE\/}
2173: events using the \verb"FBulkBeginResponse" routine.
2174: \begin{quote}\index{FBulkResponse}\small\begin{verbatim}
2175: int FBulkBeginResponse (sd, ftg, fti)
2176: int sd;
2177: struct FTAMgroup *ftg;
2178: struct FTAMindication *fti;
2179: \end{verbatim}\end{quote}
2180: The parameters to this procedure are:
2181: \begin{describe}
2182: \item[\verb"sd":] the association-descriptor;
2183:
2184: \item[\verb"ftg":] a pointer to an \verb"FTAMgroup" structure;
2185: and,
2186:
2187: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2188: updated only if the call fails.
2189: \end{describe}
2190: If the call fails,
2191: the \verb"FTAMabort" structure contained in the
2192: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2193:
2194: The \verb"FBulkEndRequest" routine is used to issue a grouped file transfer
2195: request consisting of:
2196: \begin{itemize}
2197: \item {\sf F-BEGIN-GROUP.REQUEST\/};
2198:
2199: \item {\sf F-CLOSE.REQUEST\/};
2200:
2201: \item {\sf F-DESELECT.REQUEST\/} or {\sf F-DELETE.REQUEST\/};
2202: and,
2203:
2204: \item {\sf F-END-GROUP.REQUEST}.
2205: \end{itemize}
2206: The user initializes an \verb"FTAMgroup" structure
2207: (described in tedious detail on page~\pageref{FTAMgroup})
2208: and then invokes \verb"FBulkEndRequest".
2209: \begin{quote}\index{FBulkEndRequest}\small\begin{verbatim}
2210: int FBulkEndRequest (sd, ftg, fti)
2211: int sd;
2212: struct FTAMgroup *ftg;
2213: struct FTAMindication *fti;
2214: \end{verbatim}\end{quote}
2215: The parameters to this procedure are:
2216: \begin{describe}
2217: \item[\verb"sd":] the association-descriptor;
2218:
2219: \item[\verb"ftg":] a pointer to an \verb"FTAMgroup" structure;
2220: and,
2221:
2222: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2223: always updated.
2224: \end{describe}
2225: If the call to \verb"FBulkEndRequest" is successful,
2226: then this corresponds to the appropriate {\sf .CONFIRMATION\/} events,
2227: the \verb"fti_type" element of the \verb"fti" parameter is set to
2228: \verb"FTI_BULKEND",
2229: and the \verb"fti_group" element contains the results.
2230: Note that the data contained in the structure was allocated via \man malloc(3),
2231: and should be released with the \verb"FTGFREE" macro when no longer needed.
2232:
2233: Otherwise if the call fails,
2234: the \verb"FTAMabort" structure contained in the
2235: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2236:
2237: Upon receiving an \verb"FTI_BULKEND" indication,
2238: containing the appropriate {\sf .INDICATION\/} events,
2239: the responder is required to generate the appropriate {\sf .RESPONSE\/}
2240: events using the \verb"FBulkEndResponse" routine.
2241: \begin{quote}\index{FBulkEndResponse}\small\begin{verbatim}
2242: int FBulkEndResponse (sd, ftg, fti)
2243: int sd;
2244: struct FTAMgroup *ftg;
2245: struct FTAMindication *fti;
2246: \end{verbatim}\end{quote}
2247: The parameters to this procedure are:
2248: \begin{describe}
2249: \item[\verb"sd":] the association-descriptor;
2250:
2251: \item[\verb"ftg":] a pointer to an \verb"FTAMgroup" structure;
2252: and,
2253:
2254: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2255: updated only if the call fails.
2256: \end{describe}
2257: If the call fails,
2258: the \verb"FTAMabort" structure contained in the
2259: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2260:
2261: \section {File Access}
2262: The \verb"FAccessRequest" routine is equivalent to an {\sf F-LOCATE.REQUEST\/}
2263: or {\sf F-ERASE.REQUEST\/} action on the part of the user.
2264: \begin{quote}\index{FAccessRequest}\small\begin{verbatim}
2265: int FAccessRequest (sd, operation, identity, fti)
2266: int sd;
2267: int operation;
2268: struct FADUidentity *identity;
2269: struct FTAMindication *fti;
2270: \end{verbatim}\end{quote}
2271: The parameters to this procedure are:
2272: \begin{describe}
2273: \item[\verb"sd":] the association-descriptor;
2274:
2275: \item[\verb"operation":] the operation to be performed,
2276: one of the values shown in Table~\ref{FTAMaccessops};
2277:
2278: \item[\verb"identity":] the identity of the FADU to locate or erase;
2279: and,
2280:
2281: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2282: always updated.
2283: \end{describe}
2284: If the call to \verb"FAccessRequest" is successful,
2285: then this corresponds to the appropriate {\sf .CONFIRMATION\/} event,
2286: the \verb"fti_type" element of the \verb"fti" parameter is set to
2287: \verb"FTI_ACCESS",
2288: and the \verb"fti_access" element contains the results.
2289: Note that the data contained in the structure was allocated via \man malloc(3),
2290: and should be released with the \verb"FTACFREE" macro when no longer needed.
2291:
2292: Otherwise if the call fails,
2293: the \verb"FTAMabort" structure contained in the
2294: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2295:
2296: Upon receiving an {\sf F-LOCATE.INDICATION\/}
2297: or an {\sf F-ERASE.IN\-DI\-CA\-TION\/}
2298: event,
2299: the user is required to generate the appropriate {\sf .RESPONSE\/} action
2300: using the \verb"FAccessResponse" routine.
2301: \begin{quote}\index{FAccessResponse}\small\begin{verbatim}
2302: int FAccessResponse (sd, action, identity, diag, ndiag,
2303: fti)
2304: int sd;
2305: int action;
2306: struct FADUidentity *identity;
2307: struct FTAMdiagnostic diag[];
2308: int ndiag;
2309: struct FTAMindication *fti;
2310: \end{verbatim}\end{quote}
2311: The parameters to this procedure are:
2312: \begin{describe}
2313: \item[\verb"sd":] the association-descriptor;
2314:
2315: \item[\verb"action":] the action result;
2316:
2317: \item[\verb"identity":] the identity of the FADU located
2318: (not present for the {\sf F-ERASE.RESPONSE\/} action);
2319:
2320: \item[\verb"diag"/\verb"ndiag":] a list of diagnostics
2321: (and the number of diagnostics in the list);
2322: and,
2323:
2324: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2325: updated only if the call fails.
2326: \end{describe}
2327: If the call to \verb"AccessResponse" is successful,
2328: then the {\sf .RESPONSE\/} event has been queued for sending to the
2329: initiator.
2330: Otherwise the \verb"FTAMabort" structure contained in the
2331: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2332:
2333: \section {Data Transfer}
2334: Once group file transfer request has been made,
2335: and after any file access requests,
2336: data transfer may occur.
2337: This occurs in three steps:
2338: the initiator requests reading or writing of an FADU,
2339: the source sends the data,
2340: the transfer is then either cancelled (by either side) or terminated by the
2341: initiator.
2342:
2343: \subsection {Read/Write}
2344: The \verb"FReadWriteRequest" routine is equivalent to a {\sf
2345: F-READ.REQUEST\/} or {\sf F-WRITE.REQUEST\/} action on the part of the user.
2346: \begin{quote}\index{FReadWriteRequest}\small\begin{verbatim}
2347: int FReadWriteRequest (sd, operation, identity, context,
2348: level, lock, fti)
2349: int sd;
2350: int operation;
2351: struct FADUidentity *identity;
2352: int context,
2353: level,
2354: lock;
2355: struct FTAMindication *fti;
2356: \end{verbatim}\end{quote}
2357: The parameters to this procedure are:
2358: \begin{describe}
2359: \item[\verb"sd":] the association-descriptor;
2360:
2361: \item[\verb"operation":] the operation to be performed,
2362: one of the values shown in Table~\ref{FTAMdataops} on
2363: page~\pageref{FTAMdataops};
2364:
2365: \item[\verb"identity":] the identity of the FADU to be transferred;
2366:
2367: \item[\verb"context"/\verb"level":] the access context,
2368: one of the values shown in Table~\ref{FTAMcontexts};
2369:
2370: \item[\verb"lock":] lock FADU;
2371: and,
2372:
2373: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2374: updated only if the call fails.
2375: \end{describe}
2376: If the call fails,
2377: the \verb"FTAMabort" structure contained in the
2378: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2379:
2380: \subsection {Sending Data}
2381: The FADU is transmitted as a series of presentation elements.
2382: A group of presentation elements may be sent using the \verb"FDataRequest"
2383: routine,
2384: which corresponds to the {\sf F-DATA.REQUEST\/} action.
2385: \begin{quote}\index{FDataRequest}\small\begin{verbatim}
2386: int FDataRequest (sd, fadus, nfadu, fti)
2387: int sd;
2388: PE fadus[];
2389: int nfadu;
2390: struct FTAMindication *fti;
2391: \end{verbatim}\end{quote}
2392: The parameters to this procedure are:
2393: \begin{describe}
2394: \item[\verb"sd":] the association-descriptor;
2395:
2396: \item[\verb"fadus"/\verb"nfadu":] the list of data elements
2397: (and the number of data elements which may not exceed the manifest constant
2398: \verb"NPDATA" described in Chapter~\ref{libpsap2}),
2399: consult Section~\ref{ftam:data} on page~\pageref{ftam:data} for important
2400: information on the use of presentation context identifiers;
2401: and,
2402:
2403: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2404: updated only if the call fails.
2405: \end{describe}
2406: If the call fails,
2407: the \verb"FTAMabort" structure contained in the
2408: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2409:
2410: When the last data element in the FADU has been sent,
2411: the {\sf F-DATA-END.REQUEST\/} action should be performed
2412: using the \verb"FDataEndRequest" routine.
2413: \begin{quote}\index{FDataEndRequest}\small\begin{verbatim}
2414: int FDataEndRequest (sd, action, diag, ndiag, fti)
2415: int sd;
2416: int action;
2417: struct FTAMdiagnostic diag[];
2418: int ndiag;
2419: struct FTAMindication *fti;
2420: \end{verbatim}\end{quote}
2421: The parameters to this procedure are:
2422: \begin{describe}
2423: \item[\verb"sd":] the association-descriptor;
2424:
2425: \item[\verb"action":] the action result;
2426:
2427: \item[\verb"diag"/\verb"ndiag":] a list of diagnostics
2428: (and the number of diagnostics in the list);
2429: and,
2430:
2431: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2432: updated only if the call fails.
2433: \end{describe}
2434: If the call fails,
2435: the \verb"FTAMabort" structure contained in the
2436: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2437:
2438: \subsection {Canceling Transfer}
2439: Either the initiator or the responder may cancel the transfer prior to
2440: orderly termination of the data transfer.
2441: The \verb"FCancelRequest",
2442: which corresponds to the {\sf F-CANCEL.REQUEST\/} action,
2443: is used to initiate cancellation.
2444: \begin{quote}\index{FCancelRequest}\small\begin{verbatim}
2445: int FCancelRequest (sd, action, sharedASE, diag, ndiag,
2446: fti)
2447: int sd;
2448: int action;
2449: PE sharedASE;
2450: struct FTAMdiagnostic diag[];
2451: int ndiag;
2452: struct FTAMindication *fti;
2453: \end{verbatim}\end{quote}
2454: The parameters to this procedure are:
2455: \begin{describe}
2456: \item[\verb"sd":] the association-descriptor;
2457:
2458: \item[\verb"action":] the action result;
2459:
2460: \item[\verb"sharedASE":] shared ASE information;
2461:
2462: \item[\verb"diag"/\verb"ndiag":] a list of diagnostics
2463: (and the number of diagnostics in the list);
2464: and,
2465:
2466: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2467: always updated.
2468: \end{describe}
2469: If the call to \verb"FCancelRequest" is successful,
2470: then this corresponds to the {\sf F-CANCEL.CONFIRMATION\/} event,
2471: the \verb"fti_type" element of the \verb"fti" parameter is set to
2472: \verb"FTI_CANCEL",
2473: and the \verb"fti_cancel" element contains the results.
2474:
2475: Otherwise if the call fails,
2476: the \verb"FTAMabort" structure contained in the
2477: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2478:
2479: Upon receiving an {\sf F-CANCEL.INDICATION\/} event,
2480: the user is required to generate the {\sf F-CANCEL.RESPONSE\/}
2481: events using the \verb"FCancelResponse" routine.
2482: \begin{quote}\index{FCancelResponse}\small\begin{verbatim}
2483: int FCancelResponse (sd, action, sharedASE, diag, ndiag,
2484: fti)
2485: int sd;
2486: int action;
2487: PE sharedASE;
2488: struct FTAMdiagnostic diag[];
2489: int ndiag;
2490: struct FTAMindication *fti;
2491: \end{verbatim}\end{quote}
2492: The parameters to this procedure are:
2493: \begin{describe}
2494: \item[\verb"sd":] the association-descriptor;
2495:
2496: \item[\verb"action":] the action result;
2497:
2498: \item[\verb"sharedASE":] shared ASE information;
2499:
2500: \item[\verb"diag"/\verb"ndiag":] a list of diagnostics
2501: (and the number of diagnostics in the list);
2502: and,
2503:
2504: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2505: updated only if the call fails.
2506: \end{describe}
2507: If the call fails,
2508: the \verb"FTAMabort" structure contained in the
2509: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2510:
2511: \subsection {Terminating Transfer}
2512: After generating the {\sf F-DATA-END.REQUEST\/}
2513: (or after receiving the {\sf F-DATA-END.RESPONSE\/}) action,
2514: the initiator is required to perform the {\sf F-TRANSFER-END.REQUEST\/}
2515: action using the \verb"FTransEndRequest" routine.
2516: \begin{quote}\index{FTransEndRequest}\small\begin{verbatim}
2517: int FTransEndRequest (sd, sharedASE, fti)
2518: int sd;
2519: PE sharedASE;
2520: struct FTAMindication *fti;
2521: \end{verbatim}\end{quote}
2522: The parameters to this procedure are:
2523: \begin{describe}
2524: \item[\verb"sd":] the association-descriptor;
2525:
2526: \item[\verb"sharedASE":] shared ASE information;
2527: and,
2528:
2529: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2530: always updated.
2531: \end{describe}
2532: If the call to \verb"FTransEndRequest" is successful,
2533: then this corresponds to the {\sf F-TRANSFER-END.CONFIRMATION\/} event,
2534: the \verb"fti_type" element of the \verb"fti" parameter is set to
2535: \verb"FTI_TRANSEND",
2536: and the \verb"fti_transend" element contains the results.
2537:
2538: Otherwise, if the call fails,
2539: the \verb"FTAMabort" structure contained in the
2540: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2541:
2542: Upon receiving an {\sf F-TRANSFER-END.INDICATION\/} event,
2543: the responder is required to generate the {\sf F-TRANSFER-END.RESPONSE\/}
2544: events using the \verb"FTransEndResponse" routine.
2545: \begin{quote}\index{FTransEndResponse}\small\begin{verbatim}
2546: int FTransEndResponse (sd, action, sharedASE, diag, ndiag,
2547: fti)
2548: int sd;
2549: int action;
2550: PE sharedASE;
2551: struct FTAMdiagnostic diag[];
2552: int ndiag;
2553: struct FTAMindication *fti;
2554: \end{verbatim}\end{quote}
2555: The parameters to this procedure are:
2556: \begin{describe}
2557: \item[\verb"sd":] the association-descriptor;
2558:
2559: \item[\verb"action":] the action result;
2560:
2561: \item[\verb"sharedASE":] shared ASE information;
2562:
2563: \item[\verb"diag"/\verb"ndiag":] a list of diagnostics
2564: (and the number of diagnostics in the list);
2565: and,
2566:
2567: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2568: updated only if the call fails.
2569: \end{describe}
2570: If the call fails,
2571: the \verb"FTAMabort" structure contained in the
2572: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2573:
2574: \section {Grouped Operations: File Management}
2575: The \verb"FManageRequest" routine is used to issue a grouped management
2576: request consisting of:
2577: \begin{itemize}
2578: \item {\sf F-BEGIN-GROUP.REQUEST\/};
2579:
2580: \item {\sf F-SELECT.REQUEST\/} or {\sf F-CREATE.REQUEST\/};
2581:
2582: \item optionally, {\sf F-READ-ATTRIB.REQUEST\/};
2583:
2584: \item optionally, {\sf F-CHANGE-ATTRIB.REQUEST\/};
2585:
2586: \item {\sf F-DESELECT.REQUEST\/} or {\sf F-DELETE.REQUEST\/};
2587: and,
2588:
2589: \item {\sf F-END-GROUP.REQUEST}.
2590: \end{itemize}
2591: The user initializes an \verb"FTAMgroup" structure
2592: (described in tedious detail on page~\pageref{FTAMgroup})
2593: and then invokes \verb"FManageRequest".
2594: \begin{quote}\index{FManageRequest}\small\begin{verbatim}
2595: int FManageRequest (sd, ftg, fti)
2596: int sd;
2597: struct FTAMgroup *ftg;
2598: struct FTAMindication *fti;
2599: \end{verbatim}\end{quote}
2600: The parameters to this procedure are:
2601: \begin{describe}
2602: \item[\verb"sd":] the association-descriptor;
2603:
2604: \item[\verb"ftg":] a pointer to an \verb"FTAMgroup" structure;
2605: and,
2606:
2607: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2608: always updated.
2609: \end{describe}
2610: If the call to \verb"FManageRequest" is successful,
2611: then this corresponds to the appropriate {\sf .CONFIRMATION\/} events,
2612: the \verb"fti_type" element of the \verb"fti" parameter is set to
2613: \verb"FTI_MANAGEMENT",
2614: and the \verb"fti_group" element contains the results.
2615: Note that the data contained in the structure was allocated via \man malloc(3),
2616: and should be released with the \verb"FTGFREE" macro when no longer needed.
2617:
2618: Otherwise if the call fails,
2619: the \verb"FTAMabort" structure contained in the
2620: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2621:
2622: Upon receiving an \verb"FTI_MANAGEMENT" indication,
2623: containing the appropriate {\sf .INDICATION\/} events,
2624: the responder is required to generate the appropriate {\sf .RESPONSE\/}
2625: events using the \verb"FManageResponse" routine.
2626: \begin{quote}\index{FManageResponse}\small\begin{verbatim}
2627: int FManageResponse (sd, ftg, fti)
2628: int sd;
2629: struct FTAMgroup *ftg;
2630: struct FTAMindication *fti;
2631: \end{verbatim}\end{quote}
2632: The parameters to this procedure are:
2633: \begin{describe}
2634: \item[\verb"sd":] the association-descriptor;
2635:
2636: \item[\verb"ftg":] a pointer to an \verb"FTAMgroup" structure;
2637: and,
2638:
2639: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2640: updated only if the call fails.
2641: \end{describe}
2642: If the call fails,
2643: the \verb"FTAMabort" structure contained in the
2644: \verb"FTAMindication" parameter \verb"fti" contains the reason for the failure.
2645:
2646: \section {Association Release}
2647: The \verb"FTerminateRequest" routine is used to request the release of an
2648: association,
2649: and corresponds to an {\sf F-TERMINATE.REQUEST\/} action.
2650: \begin{quote}\index{FTerminateRequest}\small\begin{verbatim}
2651: int FTerminateRequest (sd, sharedASE, ftr, fti)
2652: int sd;
2653: PE sharedASE;
2654: struct FTAMrelease *ftr;
2655: struct FTAMindication *fti;
2656: \end{verbatim}\end{quote}
2657: \newpage %%% yikes!
2658: The parameters to this procedure are:
2659: \begin{describe}
2660: \item[\verb"sd":] the association-descriptor;
2661:
2662: \item[\verb"sharedASE":] shared ASE information;
2663:
2664: \item[\verb"ftr":] a pointer to an \verb"FTAMrelease" structure, which is
2665: updated only if the call succeeds;
2666: and,
2667:
2668: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2669: updated only if the call fails.
2670: \end{describe}
2671: If the call to \verb"FTerminateRequest" is successful,
2672: then this corresponds to an {\sf F-TERMINATE.CONFIRMATION\/} event,
2673: and it returns information in the \verb"ftr" parameter,
2674: which is a pointer to an \verb"FTAMrelease" structure.
2675: \begin{quote}\index{FTAMrelease}\small\begin{verbatim}
2676: struct FTAMrelease {
2677: PE ftr_sharedASE;
2678:
2679: struct FTAMcharging ftr_charges;
2680: };
2681: \end{verbatim}\end{quote}
2682: The elements of this structure are:
2683: \begin{describe}
2684: \item[\verb"ftr\_sharedASE":] shared ASE information;
2685: and,
2686:
2687: \item[\verb"ftr\_charges":] any charges.
2688: \end{describe}
2689: Note that the data contained in the structure was allocated via \man malloc(3),
2690: and should be released with the \verb"FTRFREE" macro when no longer needed.
2691: The \verb"FTRFREE" macro
2692: behaves as if it was defined as:
2693: \begin{quote}\index{FTRFREE}\small\begin{verbatim}
2694: void FTRFREE (ftr)
2695: struct FTAMrelease *ftr;
2696: \end{verbatim}\end{quote}
2697: The macro frees only the data allocated by \verb"FTerminateRequest",
2698: and not the \verb"FTAMrelease" structure itself.
2699: Further,
2700: \verb"FTRFREE" should be called only if the call to the
2701: \verb"FTerminateRequest" routine returned \verb"OK".
2702:
2703: If the call to \verb"FTerminateRequest" is successful,
2704: then the association has been released.
2705: Otherwise the \verb"FTAMabort" structure contained in
2706: the \verb"FTAMindication" parameter
2707: \verb"fti" contains the reason for failure.
2708:
2709: Upon receiving an {\sf F-TERMINATE.INDICATION\/} event,
2710: the user is required to generate an {\sf F-TERMINATE.RESPONSE\/} action
2711: using the\\ %%% hack
2712: \verb"FTerminateResponse" routine.
2713: \begin{quote}\index{FTerminateResponse}\small\begin{verbatim}
2714: int FTerminateResponse (sd, sharedASE, charging, fti)
2715: int sd;
2716: PE sharedASE;
2717: struct FTAMcharging *charging;
2718: struct FTAMindication *fti;
2719: \end{verbatim}\end{quote}
2720: The parameters to this procedure are:
2721: \begin{describe}
2722: \item[\verb"sd":] the association-descriptor;
2723:
2724: \item[\verb"sharedASE":] shared ASE information;
2725:
2726: \item[\verb"charging":] charging information (if any);
2727: and,
2728:
2729: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2730: updated only if the call fails.
2731: \end{describe}
2732: If the call to \verb"FTerminateResponse" is successful,
2733: then the association has been released.
2734:
2735: \section {Association Abort}
2736: The \verb"FUAbortRequest" routine is used to request the ungraceful release
2737: of an association,
2738: and corresponds to an {\sf F-U-ABORT.REQUEST\/} action.
2739: \begin{quote}\index{FUAbortRequest}\small\begin{verbatim}
2740: int FUAbortRequest (sd, action, diag, ndiag, fti)
2741: int sd;
2742: int action;
2743: struct FTAMdiagnostic diag[];
2744: int ndiag;
2745: struct FTAMindication *fti;
2746: \end{verbatim}\end{quote}
2747: The parameters to this procedure are:
2748: \begin{describe}
2749: \item[\verb"sd":] the association-descriptor;
2750:
2751: \item[\verb"action":] an action result;
2752:
2753: \item[\verb"diag"/\verb"ndiag":] a list of diagnostics
2754: (and the number of diagnostics in the list);
2755: and,
2756:
2757: \item[\verb"fti":] a pointer to an \verb"FTAMindication" structure, which is
2758: updated only if the call fails.
2759: \end{describe}
2760: If the call to \verb"FUAbortRequest" is successful,
2761: then the connection is immediately closed,
2762: and any data queued for the connection may be lost.
2763:
2764: \section {Error Conventions}
2765: All of the routines in this library return the manifest constant \verb"NOTOK"
2766: on error,
2767: and also update the \verb"fti" parameter given to the routine.
2768: The \verb"fti_abort" element of the \verb"FTAMindication" structure contains a
2769: \verb"FTAMabort" structure detailing the reason for the failure.
2770: For each diagnostic present (typically only one) in the \verb"FTAMabort"
2771: structure,
2772: the \verb"ftd_identifier" element of each diagnostic can be given as a
2773: parameter to the procedure \verb"FErrString" which returns a null-terminated
2774: diagnostic string.
2775: \begin{quote}\index{FErrString}\small\begin{verbatim}
2776: char *FErrString (c)
2777: int c;
2778: \end{verbatim}\end{quote}
2779:
2780: \section {Compiling and Loading}
2781: Programs using the \man libftam(3n) library should include
2782: \verb"<isode/ftam.h>".
2783: These programs should also be loaded with \verb"-lftam" and \verb"-lisode".
2784:
2785: \section {An Example}
2786: Read Section~\ref{unixftam:code} on page~\pageref{unixftam:code}.
2787:
2788: \section {For Further Reading}
2789: The ISO specification for the International Standard on
2790: File Transfer, Access, and Management is found in \cite{ISO.FTAM},
2791: which is a four-part document.
2792:
2793: %%% \section {Changes Since the Last Release}\label{ftam:changes}
2794: %%% A brief summary of the major changes between v~\ftamprevrsn/ and
2795: %%% v~\ftamvrsn/ are now presented.
2796: %%% These are the user-visible changes only;
2797: %%% changes of a strictly internal nature are not discussed.
2798:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.