fd131e02de9da0b346658f69b4d45f6065a41aff
[openafs.git] / src / butc / butc_xbsa.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef TRANSARC_BUTC_XBSA_H
11 #define TRANSARC_BUTC_XBSA_H
12
13 /* The following serverTypes are currently supported by this interface */
14 #define XBSA_SERVER_TYPE_NONE       0x00    /* no server, use tape drive         */
15 #define XBSA_SERVER_TYPE_UNKNOWN    0x01    /* server, don't know which type yet */
16 #define XBSA_SERVER_TYPE_ADSM       0x02    /* server type is ADSM               */
17 #define XBSA_SERVER_TYPE_MASK       0xFF    /* for (butx_transactionInfo *)->serverType (byte 1) */
18
19 #ifdef xbsa
20 #define CONF_XBSA (xbsaType != XBSA_SERVER_TYPE_NONE) /*test if butc is XBSA */
21 #else
22 #define CONF_XBSA 0
23 #endif
24
25 #ifdef xbsa
26 #define XBSA_SET_SERVER_TYPE(server, type) ((server) = ((type) & XBSA_SERVER_TYPE_MASK))
27 #define XBSA_GET_SERVER_TYPE(server)       ((server) & XBSA_SERVER_TYPE_MASK)
28
29 /* The following serverType flags are currently supported by this interface */
30 #define XBSA_SERVER_FLAG_NONE      0x0000 /* don't allow multiple server connections */
31 #define XBSA_SERVER_FLAG_MULTIPLE  0x0100 /* allow multiple server connections */
32 #define XBSA_SERVER_FLAG_MASK      0xFF00 /* for (butx_transactionInfo *)->serverType (byte 2) */
33 #define XBSA_SET_SERVER_FLAG(server, flag)    ((server) |= ((flag) & XBSA_SERVER_FLAG_MASK))
34 #define XBSA_GET_SERVER_FLAG(server)          ((server) & XBSA_SERVER_FLAG_MASK)
35 #define XBSA_IS_SERVER_FLAG_SET(server, flag) (XBSA_GET_SERVER_FLAG(server) & flag)
36
37 #define XBSAMINBUFFER  1024        /* minimum size is 1KB */
38 #define XBSADFLTBUFFER 16384       /* default size is 16KB */
39 #define XBSAMAXBUFFER  65535       /* maximum size in 64KB-1; has to fit in 16bit integer */
40
41 #include <xbsa.h>
42
43 #define XBSA_NUM_ENV_STRS ADSM_ENV_STRS
44 #define XBSA_MAX_OSNAME   BSA_MAX_OSNAME
45 #define XBSA_MAX_PATHNAME BSA_MAX_PATHNAME
46
47 #define XBSA_SUCCESS 0
48
49 /* The following defines the ADSM version level prior to the addition
50  * of support for multiple servers.
51  */
52 #define XBSA_ADSM_NO_MULT_SERVER_VERSION 3
53 #define XBSA_ADSM_NO_MULT_SERVER_RELEASE 7
54 #define XBSA_ADSM_NO_MULT_SERVER_LEVEL   1
55
56 /* The following defines the XBSA Technical Standard Level */
57 #define XBSA_TS_VERSION 1
58 #define XBSA_TS_RELEASE 1
59
60 /*
61  * The butx_transactionInfo structure defines the connection to an
62  * XBSA server.  The fields in this structure should only be modified
63  * by the routines in file_xbsa.c.
64  *
65  * The values in here are specific to the transaction.
66  * Values specific to the objects should be passed separately.
67  * The spec says bsaHandle should be a long but ADSM has it as a ulong!
68  */
69 struct butx_transactionInfo {
70     ApiVersion        apiVersion;
71     u_long             bsaHandle;
72     afs_int32             serverType;               /* Type and flags           */
73     afs_int32             maxObjects;               /* max objects/transaction  */
74     afs_int32             numObjects;               /* objects in current trans */
75     char              serverName[BSA_MAX_DESC];
76     SecurityToken     secToken;
77     ObjectOwner       objOwner;
78     ObjectDescriptor  curObject;
79 };
80
81 extern afs_int32 xbsa_MountLibrary(struct butx_transactionInfo *info, afs_int32 serverType);
82
83 extern afs_int32 xbsa_Initialize(struct butx_transactionInfo *info,
84                            char *bsaObjectOwner, char *appObjectOwner,
85                            char *secToken, char *serverName);
86
87 extern afs_int32 xbsa_Finalize(struct butx_transactionInfo *info);
88
89 extern afs_int32 xbsa_BeginTrans(struct butx_transactionInfo *info);
90
91 extern afs_int32 xbsa_EndTrans(struct butx_transactionInfo *info);
92
93 extern afs_int32 xbsa_QueryObject(struct butx_transactionInfo *info,
94                             char *objectSpaceName, char *pathName);
95
96 extern afs_int32 xbsa_ReadObjectBegin(struct butx_transactionInfo *info,
97                                 char *dataBuffer,
98                                 afs_int32 bufferSize,
99                                 afs_int32 *count,
100                                 afs_int32 *endOfData);
101
102 extern afs_int32 xbsa_ReadObjectEnd(struct butx_transactionInfo *info);
103
104 extern afs_int32 xbsa_WriteObjectBegin(struct butx_transactionInfo *info,
105                                  char *objectSpaceName,
106                                  char *pathName,
107                                  char *lGName,
108                                  afs_hyper_t estimatedSize,
109                                  char *objectDescription,
110                                  char *objectInfo);
111
112 extern afs_int32 xbsa_WriteObjectEnd(struct butx_transactionInfo *info);
113
114 extern afs_int32 xbsa_WriteObjectData(struct butx_transactionInfo *info,
115                                 char *dataBuffer,
116                                 afs_int32 bufferSize, afs_int32 *count);
117
118 extern afs_int32 xbsa_ReadObjectData(struct butx_transactionInfo *info,
119                                char *dataBuffer,
120                                afs_int32 bufferSize,
121                                afs_int32 *count,
122                                afs_int32 *endOfData);
123
124 extern afs_int32 xbsa_DeleteObject(struct butx_transactionInfo *info,
125                              char *objectSpaceName, char *pathName);
126
127 #endif /*xbsa*/
128 #endif /* TRANSARC_BUTC_XBSA_H */