afpfs-ng-mac/include/afpfs-ng/afp_protocol.h

362 lines
8.9 KiB
C
Raw Normal View History

2013-03-12 07:08:07 +00:00
#ifndef _AFP_PROTOCOL_H_
#define _AFP_PROTOCOL_H_
#include <sys/types.h>
#include <stddef.h>
#include <unistd.h>
#include <stdint.h>
/* This file defines constants for the Apple File Protocol.
All page references are from "Apple Filing Protocol Programming" version 3.2.
except where noted.
*/
#define AFP_SERVER_NAME_LEN 33
#define AFP_SERVER_NAME_UTF8_LEN 255
#define AFP_VOLUME_NAME_LEN 33
#define AFP_VOLUME_NAME_UTF8_LEN 33
#define AFP_SIGNATURE_LEN 16
#define AFP_MACHINETYPE_LEN 33
#define AFP_LOGINMESG_LEN 200
#define AFP_VOLPASS_LEN 8
#define AFP_HOSTNAME_LEN 255
/* This is actually just a guess, and only used for appletalk */
#define AFP_ZONE_LEN 255
#define AFP_SERVER_ICON_LEN 256
#define AFP_MAX_USERNAME_LEN 127
#define AFP_MAX_PASSWORD_LEN 127
/* This is the maximum length of any UAM string */
#define AFP_UAM_LENGTH 24
/* This is the maximum length of any path description */
#define AFP_MAX_PATH 768
#define AFP_VOL_FLAT 1
#define AFP_VOL_FIXED 2
#define AFP_VOL_VARIABLE 3
/* The root directory ID, p.26 */
#define AFP_ROOT_DID 2
/* Path type constants, p.249 */
enum {
kFPShortName = 1,
kFPLongName = 2,
kFPUTF8Name = 3
};
/* fork types */
#define AFP_FORKTYPE_DATA 0x0
#define AFP_FORKTYPE_RESOURCE 0x80
/* openfork access modes, from p.196 */
#define AFP_OPENFORK_ALLOWREAD 1
#define AFP_OPENFORK_ALLOWWRITE 2
#define AFP_OPENFORK_DENYREAD 0x10
#define AFP_OPENFORK_DENYWRITE 0x20
/* Message type for getsrvmesg, p. 169*/
typedef enum {
AFPMESG_LOGIN = 0,
AFPMESG_SERVER = 1
} afpmessage_t;
/* Message bitmap for getsrvrmsg */
#define AFP_GETSRVRMSG_UTF8 0x2
#define AFP_GETSRVRMSG_GETMSG 0x1
/* Maximum Version length, p.17 */
#define AFP_MAX_VERSION_LENGTH 16
/* Maximum length of a token, this is undocumented */
#define AFP_TOKEN_MAX_LEN 256
/* The maximum size of a file for AFP 2 */
#define AFP_MAX_AFP2_FILESIZE (4294967296)
/* Unix privs, p.240 */
struct afp_unixprivs {
uint32_t uid __attribute__((__packed__));
uint32_t gid __attribute__((__packed__));
uint32_t permissions __attribute__((__packed__));
uint32_t ua_permissions __attribute__((__packed__));
};
/* AFP Volume attributes bitmap, p.241 */
enum {
kReadOnly = 0x01,
kHasVolumePassword = 0x02,
kSupportsFileIDs = 0x04,
kSupportsCatSearch = 0x08,
kSupportsBlankAccessPrivs = 0x10,
kSupportsUnixPrivs = 0x20,
kSupportsUTF8Names = 0x40,
kNoNetworkUserIDs = 0x80,
kDefaultPrivsFromParent = 0x100,
kNoExchangeFiles = 0x200,
kSupportsExtAttrs = 0x400,
kSupportsACLs=0x800
};
/* AFP file creation constantes, p.250 */
enum {
kFPSoftCreate = 0,
kFPHardCreate = 0x80
};
/* AFP Directory attributes, taken from the protocol guide p.236 */
enum {
kFPAttributeBit = 0x1,
kFPParentDirIDBit = 0x2,
kFPCreateDateBit = 0x4,
kFPModDateBit = 0x8,
kFPBackupDateBit = 0x10,
kFPFinderInfoBit = 0x20,
kFPLongNameBit = 0x40,
kFPShortNameBit = 0x80,
kFPNodeIDBit = 0x100,
kFPOffspringCountBit = 0x0200,
kFPOwnerIDBit = 0x0400,
kFPGroupIDBit = 0x0800,
kFPAccessRightsBit = 0x1000,
kFPProDOSInfoBit = 0x2000, // AFP version 2.2 and earlier
kFPUTF8NameBit = 0x2000, // AFP version 3.0 and later
kFPUnixPrivsBit = 0x8000 // AFP version 3.0 and later
};
/* AFP File bitmap, p.238. These are the ones not in the AFP Directory
attributes map. */
enum {
kFPDataForkLenBit = 0x0200,
kFPRsrcForkLenBit = 0x0400,
kFPExtDataForkLenBit = 0x0800, // AFP version 3.0 and later
kFPLaunchLimitBit = 0x1000,
kFPExtRsrcForkLenBit = 0x4000, // AFP version 3.0 and later
};
/* AFP Extended Attributes Bitmap, p.238 */
enum {
kXAttrNoFollow = 0x1,
kXAttrCreate = 0x2,
kXAttrREplace=0x4
};
/* AFP function codes */
enum AFPFunction
{
afpByteRangeLock = 1, afpCloseVol, afpCloseDir, afpCloseFork,
afpCopyFile, afpCreateDir, afpCreateFile,
afpDelete, afpEnumerate, afpFlush, afpFlushFork,
afpGetForkParms = 14, afpGetSrvrInfo, afpGetSrvrParms,
afpGetVolParms, afpLogin, afpLoginCont, afpLogout, afpMapID,
afpMapName, afpMoveAndRename, afpOpenVol, afpOpenDir, afpOpenFork,
afpRead, afpRename, afpSetDirParms, afpSetFileParms,
afpSetForkParms, afpSetVolParms, afpWrite, afpGetFileDirParms,
afpSetFileDirParms, afpChangePassword,
afpGetUserInfo=37,afpGetSrvrMsg = 38,
afpOpenDT=48,
afpCloseDT=49,
afpGetIcon=51, afpGetIconInfo=52,
afpAddComment=56, afpRemoveComment=57, afpGetComment=58,
afpByteRangeLockExt=59, afpReadExt, afpWriteExt,
afpGetAuthMethods=62,
afp_LoginExt=63,
afpGetSessionToken=64,
afpDisconnectOldSession=65,
afpEnumerateExt=66,
afpCatSearchExt = 67,
afpEnumerateExt2 = 68, afpGetExtAttr, afpSetExtAttr,
afpRemoveExtAttr , afpListExtAttrs,
afpZzzzz = 122,
afpAddIcon=192,
};
/* AFP Volume bitmap. Take from 242 of the protocol guide. */
enum {
kFPBadVolPre222Bitmap = 0xFe00,
kFPBadVolBitmap = 0xF000,
kFPVolAttributeBit = 0x1,
kFPVolSignatureBit = 0x2,
kFPVolCreateDateBit = 0x4,
kFPVolModDateBit = 0x8,
kFPVolBackupDateBit = 0x10,
kFPVolIDBit = 0x20,
kFPVolBytesFreeBit = 0x40,
kFPVolBytesTotalBit = 0x80,
kFPVolNameBit = 0x100,
kFPVolExtBytesFreeBit = 0x200,
kFPVolExtBytesTotalBit = 0x400,
kFPVolBlockSizeBit = 0x800
};
/* AFP Attention Codes -- 4 bits */
#define AFPATTN_SHUTDOWN (1 << 15) /* shutdown/disconnect */
#define AFPATTN_CRASH (1 << 14) /* server crashed */
#define AFPATTN_MESG (1 << 13) /* server has message */
#define AFPATTN_NORECONNECT (1 << 12) /* don't reconnect */
/* server notification */
#define AFPATTN_NOTIFY (AFPATTN_MESG | AFPATTN_NORECONNECT)
/* extended bitmap -- 12 bits. volchanged is only useful w/ a server
* notification, and time is only useful for shutdown. */
#define AFPATTN_VOLCHANGED (1 << 0) /* volume has changed */
#define AFPATTN_TIME(x) ((x) & 0xfff) /* time in minutes */
#define kFPNoErr 0
/* AFP result codes, p252 */
#define kASPSessClosed -1072
#define kFPAccessDenied -5000
#define kFPAuthContinue -5001
#define kFPBadUAM -5002
#define kFPBadVersNum -5003
#define kFPBitmapErr -5004
#define kFPCantMove -5005
#define kFPDenyConflict -5006
#define kFPDirNotEmpty -5007
#define kFPDiskFull -5008
#define kFPEOFErr -5009
#define kFPFileBusy -5010
#define kFPFlatVol -5011
#define kFPItemNotFound -5012
#define kFPLockErr -5013
#define kFPMiscErr -5014
#define kFPNoMoreLocks -5015
#define kFPNoServer -5016
#define kFPObjectExists -5017
#define kFPObjectNotFound -5018
#define kFPParamErr -5019
#define kFPRangeNotLocked -5020
#define kFPRangeOverlap -5021
#define kFPSessClosed -5022
#define kFPUserNotAuth -5023
#define kFPCallNotSupported -5024
#define kFPObjectTypeErr -5025
#define kFPTooManyFilesOpen -5026
#define kFPServerGoingDown -5027
#define kFPCantRename -5028
#define kFPDirNotFound -5029
#define kFPIconTypeError -5030
#define kFPVolLocked -5031
#define kFPObjectLocked -5032
#define kFPContainsSharedErr -5033
#define kFPIDNotFound -5034
#define kFPIDExists -5035
#define kFPDiffVolErr -5036
#define kFPCatalogChanged -5037
#define kFPSameObjectErr -5038
#define kFPBadIDErr -5039
#define kFPPwdSameErr -5040
#define kFPPwdTooShortErr -5041
#define kFPPwdExpiredErr -5042
#define kFPInsideSharedErr -5043
#define kFPInsideTrashErr -5044
#define kFPPwdNeedsChangeErr -5045
#define kFPPwdPolicyErr -5046
#define kFPDiskQuotaExceeded 5047
/* These flags determine to lock or unlock in ByteRangeLock(Ext) */
enum {
ByteRangeLock_Lock = 0,
ByteRangeLock_Unlock = 1
};
/* These flags are used in volopen and getsrvrparm replies, p.171 */
#define HasConfigInfo 0x1
#define HasPassword 0x80
/* These are the subfunction for kFPMapID, as per p.248 */
enum {
kUserIDToName = 1,
kGroupIDToName = 2,
kUserIDToUTF8Name = 3,
kGroupIDToUTF8Name = 4,
kUserUUIDToUTF8Name = 5,
kGroupUUIDToUTF8Name = 6
};
/* These are the subfunction flags described in the FPMapName command, p.286.
Note that this is different than what's described on p. 186. */
enum {
kNameToUserID = 1,
kNameToGroupID = 2,
kUTF8NameToUserID = 3,
kUTF8NameToGroupID = 4,
kUTF8NameToUserUUID = 5,
kUTF8NameToGroupUUID = 6
};
/* These are bits for FPGetUserInfo, p.173. */
#define kFPGetUserInfo_USER_ID 1
#define kFPGetUserInfo_PRI_GROUPID 2
/* Flags for the replies of GetSrvrInfo and DSI GetStatus, p.240 */
enum {
kSupportsCopyfile = 0x01,
kSupportsChgPwd = 0x02,
kDontAllowSavePwd = 0x04,
kSupportsSrvrMsg = 0x08,
kSrvrSig = 0x10,
kSupportsTCP = 0x20,
kSupportsSrvrNotify = 0x40,
kSupportsReconnect = 0x80,
kSupportsDirServices = 0x100,
kSupportsUTF8SrvrName = 0x200,
kSupportsUUIDs = 0x400,
kSupportsSuperClient = 0x8000
};
/* p.247 */
enum {
kLoginWithoutID = 0,
kLoginWithID = 1,
kReconnWithID = 2,
kLoginWithTimeAndID = 3,
kReconnWithTimeAndID = 4,
kRecon1Login = 5,
kRecon1ReconnectLogin = 6,
kRecon1Refresh = 7, kGetKerberosSessionKey = 8
};
#define AFP_CHMOD_ALLOWED_BITS_22 \
(S_IRUSR |S_IWUSR | S_IRGRP | S_IWGRP |S_IROTH | S_IWOTH | S_IFREG )
#endif