1/*
2 * Copyright (c) 1990,1991 Regents of The University of Michigan.
3 * All Rights Reserved.
4 *
5 * Permission to use, copy, modify, and distribute this software and
6 * its documentation for any purpose and without fee is hereby granted,
7 * provided that the above copyright notice appears in all copies and
8 * that both that copyright notice and this permission notice appear
9 * in supporting documentation, and that the name of The University
10 * of Michigan not be used in advertising or publicity pertaining to
11 * distribution of the software without specific, written prior
12 * permission. This software is supplied as is without expressed or
13 * implied warranties of any kind.
14 *
15 *	Research Systems Unix Group
16 *	The University of Michigan
17 *	c/o Mike Clark
18 *	535 W. William Street
19 *	Ann Arbor, Michigan
20 *	+1-313-763-0525
21 *	netatalk@itd.umich.edu
22 */
23
24#ifndef _ATALK_AFP_H
25#define _ATALK_AFP_H 1
26
27#include <sys/types.h>
28#include <netatalk/endian.h>
29
30typedef u_int16_t AFPUserBytes;
31
32/* protocols */
33#define AFPPROTO_ASP           1
34#define AFPPROTO_DSI           2
35
36/* actual transports. the DSI ones (tcp right now) need to be
37 * kept in sync w/ <atalk/dsi.h>.
38 * convention: AFPTRANS_* = (1 << DSI_*)
39 */
40#define AFPTRANS_NONE          0
41#define AFPTRANS_DDP          (1 << 0)
42#define AFPTRANS_TCP          (1 << 1)
43#define AFPTRANS_ALL          (AFPTRANS_DDP | AFPTRANS_TCP)
44
45/* server flags */
46#define AFPSRVRINFO_COPY         (1<<0)  /* supports copyfile */
47#define AFPSRVRINFO_PASSWD       (1<<1)  /* supports change password */
48#define AFPSRVRINFO_NOSAVEPASSWD (1<<2)  /* don't allow save password */
49#define AFPSRVRINFO_SRVMSGS      (1<<3)  /* supports server messages */
50#define AFPSRVRINFO_SRVSIGNATURE (1<<4)  /* supports server signature */
51#define AFPSRVRINFO_TCPIP        (1<<5)  /* supports tcpip */
52#define AFPSRVRINFO_SRVNOTIFY    (1<<6)  /* supports server notifications */
53#define AFPSRVRINFO_SRVRECONNECT (1<<7)  /* supports server reconnect */
54#define AFPSRVRINFO_SRVRDIR      (1<<8)  /* supports directories service */
55#define AFPSRVRINFO_SRVUTF8      (1<<9)  /* supports UTF8 names AFP 3.1 */
56#define AFPSRVRINFO_UUID         (1<<10) /* supports UUIDs */
57#define AFPSRVRINFO_EXTSLEEP     (1<<11) /* supports extended sleep */
58#define AFPSRVRINFO_FASTBOZO     (1<<15) /* fast copying */
59
60#define AFP_OK		0
61#define AFPERR_DID1     -4000   /* not an afp error DID is 1*/
62#define AFPERR_ACCESS	-5000   /* permission denied */
63#define AFPERR_AUTHCONT	-5001   /* logincont */
64#define AFPERR_BADUAM	-5002   /* uam doesn't exist */
65#define AFPERR_BADVERS	-5003   /* bad afp version number */
66#define AFPERR_BITMAP	-5004   /* invalid bitmap */
67#define AFPERR_CANTMOVE -5005   /* can't move file */
68#define AFPERR_DENYCONF	-5006   /* file synchronization locks conflict */
69#define AFPERR_DIRNEMPT	-5007   /* directory not empty */
70#define AFPERR_DFULL	-5008   /* disk full */
71#define AFPERR_EOF	-5009   /* end of file -- catsearch and afp_read */
72#define AFPERR_BUSY	-5010   /* FileBusy */
73#define AFPERR_FLATVOL  -5011   /* volume doesn't support directories */
74#define AFPERR_NOITEM	-5012   /* ItemNotFound */
75#define AFPERR_LOCK     -5013   /* LockErr */
76#define AFPERR_MISC     -5014   /* misc. err */
77#define AFPERR_NLOCK    -5015   /* no more locks */
78#define AFPERR_NOSRVR	-5016   /* no response by server at that address */
79#define AFPERR_EXIST	-5017   /* object already exists */
80#define AFPERR_NOOBJ	-5018   /* object not found */
81#define AFPERR_PARAM	-5019   /* parameter error */
82#define AFPERR_NORANGE  -5020   /* no range lock */
83#define AFPERR_RANGEOVR -5021   /* range overlap */
84#define AFPERR_SESSCLOS -5022   /* session closed */
85#define AFPERR_NOTAUTH	-5023   /* user not authenticated */
86#define AFPERR_NOOP	-5024   /* command not supported */
87#define AFPERR_BADTYPE	-5025   /* object is the wrong type */
88#define AFPERR_NFILE	-5026   /* too many files open */
89#define AFPERR_SHUTDOWN	-5027   /* server is going down */
90#define AFPERR_NORENAME -5028   /* can't rename */
91#define AFPERR_NODIR	-5029   /* couldn't find directory */
92#define AFPERR_ITYPE	-5030   /* wrong icon type */
93#define AFPERR_VLOCK	-5031   /* volume locked */
94#define AFPERR_OLOCK    -5032   /* object locked */
95#define AFPERR_CTNSHRD  -5033   /* share point contains a share point */
96#define AFPERR_NOID     -5034   /* file thread not found */
97#define AFPERR_EXISTID  -5035   /* file already has an id */
98#define AFPERR_DIFFVOL  -5036   /* different volume */
99#define AFPERR_CATCHNG  -5037   /* catalog has changed */
100#define AFPERR_SAMEOBJ  -5038   /* source file == destination file */
101#define AFPERR_BADID    -5039   /* non-existent file id */
102#define AFPERR_PWDSAME  -5040   /* same password/can't change password */
103#define AFPERR_PWDSHORT -5041   /* password too short */
104#define AFPERR_PWDEXPR  -5042   /* password expired */
105#define AFPERR_INSHRD   -5043   /* folder being shared is inside a
106				   shared folder. may be returned by
107				   afpMoveAndRename. */
108#define AFPERR_INTRASH  -5044   /* shared folder in trash. */
109#define AFPERR_PWDCHNG  -5045   /* password needs to be changed */
110#define AFPERR_PWDPOLCY -5046   /* password fails policy check */
111#define AFPERR_USRLOGIN -5047   /* user already logged on */
112
113/* AFP Attention Codes -- 4 bits */
114#define AFPATTN_SHUTDOWN     (1 << 15)            /* shutdown/disconnect */
115#define AFPATTN_CRASH        (1 << 14)            /* server crashed */
116#define AFPATTN_MESG         (1 << 13)            /* server has message */
117#define AFPATTN_NORECONNECT  (1 << 12)            /* don't reconnect */
118/* server notification */
119#define AFPATTN_NOTIFY       (AFPATTN_MESG | AFPATTN_NORECONNECT)
120
121/* extended bitmap -- 12 bits. volchanged is only useful w/ a server
122 * notification, and time is only useful for shutdown. */
123#define AFPATTN_VOLCHANGED   (1 << 0)             /* volume has changed */
124#define AFPATTN_TIME(x)      ((x) & 0xfff)        /* time in minutes */
125
126typedef enum {
127  AFPMESG_LOGIN = 0,
128  AFPMESG_SERVER = 1
129} afpmessage_t;
130
131/* extended sleep flag */
132#define AFPZZZ_EXT_SLEEP  1
133#define AFPZZZ_EXT_WAKEUP 2
134
135
136/* AFP functions */
137#define AFP_BYTELOCK	     1
138#define AFP_CLOSEVOL     	 2
139#define AFP_CLOSEDIR     	 3
140#define AFP_CLOSEFORK	 	 4
141#define AFP_COPYFILE 	 	 5
142#define AFP_CREATEDIR		 6
143#define AFP_CREATEFILE		 7
144#define AFP_DELETE	 	     8
145#define AFP_ENUMERATE	 	 9
146#define AFP_FLUSH		    10
147#define AFP_FLUSHFORK		11
148
149#define AFP_GETFORKPARAM	14
150#define AFP_GETSRVINFO  	15
151#define AFP_GETSRVPARAM 	16
152#define AFP_GETVOLPARAM		17
153#define AFP_LOGIN       	18
154#define AFP_LOGINCONT		19
155#define AFP_LOGOUT      	20
156#define AFP_MAPID		    21
157#define AFP_MAPNAME		    22
158#define AFP_MOVE		    23
159#define AFP_OPENVOL     	24
160#define AFP_OPENDIR		    25
161#define AFP_OPENFORK		26
162#define AFP_READ		    27
163#define AFP_RENAME		    28
164#define AFP_SETDIRPARAM		29
165#define AFP_SETFILEPARAM	30
166#define AFP_SETFORKPARAM	31
167#define AFP_SETVOLPARAM		32
168#define AFP_WRITE		    33
169#define AFP_GETFLDRPARAM	34
170#define AFP_SETFLDRPARAM	35
171#define AFP_CHANGEPW    	36
172#define AFP_GETUSERINFO     37
173#define AFP_GETSRVRMSG		38
174#define AFP_CREATEID		39
175#define AFP_DELETEID		40
176#define AFP_RESOLVEID		41
177#define AFP_EXCHANGEFILE	42
178#define AFP_CATSEARCH		43
179
180#define AFP_OPENDT		    48
181#define AFP_CLOSEDT		    49
182
183#define AFP_GETICON         51
184#define AFP_GTICNINFO       52
185#define AFP_ADDAPPL         53
186#define AFP_RMVAPPL         54
187
188#define AFP_GETAPPL         55
189#define AFP_ADDCMT          56
190#define AFP_RMVCMT          57
191#define AFP_GETCMT          58
192#define AFP_ADDICON        192
193
194/* version 3.0 */
195#define AFP_BYTELOCK_EXT        59
196#define AFP_CATSEARCH_EXT       67
197#define AFP_ENUMERATE_EXT       66
198#define AFP_READ_EXT            60
199#define AFP_WRITE_EXT           61
200#define AFP_LOGIN_EXT       	63
201#define AFP_GETSESSTOKEN        64
202#define AFP_DISCTOLDSESS        65
203
204/* version 3.1 */
205#define AFP_ENUMERATE_EXT2      68
206#define AFP_SPOTLIGHT_PRIVATE   76
207#define AFP_SYNCDIR             78
208#define AFP_SYNCFORK            79
209#define AFP_ZZZ                 122
210
211/* version 3.2 */
212#define AFP_GETEXTATTR          69
213#define AFP_SETEXTATTR          70
214#define AFP_REMOVEATTR          71
215#define AFP_LISTEXTATTR         72
216#define AFP_GETACL              73
217#define AFP_SETACL              74
218#define AFP_ACCESS              75
219
220/* more defines */
221#define REPLAYCACHE_SIZE 128
222
223#endif
224